Tensorboard
Model의 학습 결과 또는 pipeline의 결과를 시각화하는 도구
Tensorboard에서 사용할 로그를 Object Storage 또는 Persistant Volume을 저장하여 읽어올 수 있음
Tensorboard 사용 시, Tensorboard의 이름을 정해 주고, log가 저장된 storage를 선택한 다음, 저장된 mount path의 값을 입력해주면 데이터를 읽어와 시각화를 해준다.
! 파일 권한 문제 때문에 진행이 안 될 수 있으니, 기본 계정으로 진행하기를 권장
Tensorflow path 설정
진행 상황을 바탕으로 응용해도 된다.
먼저 위와 같이 temsorflow callback을 정하고, traning을 진행할 시 해당 경로에 history가 저장된다.
이후 Tensorboard 탭에서, Tensorboard 생성 시 다음과 같이 설정을 해주면, tensorboard에 대한 정보를 확인할 수 있다.
MinIO
MinIO는 kubeflow 설치 시 함께 deploy되는 object storage로, 사진이나 비디오, 음성파일, 로그파일 등을 저장할 수가 있음
또한 파이프라인 구동 시 데이터 저장이나 model serving 시 model을 저장하는 용도로 쓰임
S3 API와 호환되어 데이터 저장 시에 키를 생성한 후 object를 업로드할 수 있음
MinIO에 데이터를 저장하기 위해서는 Web console에 접속하는 방법과 client를 이용하는 방법, 그리고 python을 이용하는 방법이 있다.
1. Web console 접속 및 파일 업로드
# minIO 서비스를 장착하고 있는 것 확인
$ kubectl get svc -n kubeflow minio-service
# minIO 웹 콘솔로 실행
$ kubectl port-forward --address="0.0.0.0" svc/minio-service -n kubeflow 9000:9000
접속하면, 다음과 같은 화면을 볼 수 있다.
password는 오른쪽 줄 3개를 클릭 후, [Change Password] 를 통해 변경할 수 있다.
아래 +버튼을 누르고 [Create bucket] 을 눌러서 "test-webconsole" 이라는 이름의 버킷을 생성하면 다음 화면을 볼 수 있고,
이후 파일 업로드 시에는 우하의 upload file을 눌러서 업로드를 진행하면 된다. 업로드 성공시에는 다음 창을 볼 수 있다.
이후 오른쪽 점 3개를 눌러, 파일 공유 및 삭제를 진행할 수도 있다.
또한 좌측의 그림을 누르면, 다음 화면을 볼 수도 있다.
2. Client 설치 후 접속
minIO client는 minIO github에서 받을 수 있다.
GitHub - minio/mc: Simple | Fast tool to manage MinIO clusters :cloud:
Simple | Fast tool to manage MinIO clusters :cloud: - GitHub - minio/mc: Simple | Fast tool to manage MinIO clusters :cloud:
github.com
이 링크를 통해 아래를 보면, 다운로드 받는 코드가 나와있다.
Jupyter Notebook에서 진행해보자.
$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
$ chmod +x mc
# 각 명령어 확인 가능
$ ./mc --help
이제 minIO client를 이용해서 host에 접속해보자
$ mc config host ls
- gcs : google에서 제공하는 storage service
- local : local에 직접 설정한 minIO service를 의미
- play : minIO op에서 제공하는 minIO storage service를 의미
- s3 : AWS에서 제공하는 S3 service를 의미
각 서비스에 접속하기 위해서는, AccessKey와 SecrecKey를 입력해주어야 한다.
minIO config로 host 추가하기
호스트 추가를 위해서, minIO의 IP address를 알아야 한다
$ kubectl get svc -n kubeflow minio-service
k8s에서는 실행중인 서비스에 domain name을 할당해주기 때문에, IP 주소를 활용해 domain name을 확인해보자
$ sudo apt-get install dnsutils
$ nslookup {minio cluster-IP}
이제 mc config를 이용해 host를 추가하면 된다
# 작성 양식 : accessKey는 id, secretKey는 pw를 의미
$ mc config host add kubeflow {minIO domain name}:{port} {accessKey} {secretKey}
# 이후 다음 명령어를 통해 kubeflow가 추가된 걸 확인하면 됨
$ mc config host ls
# 이전에 생성한 bucket을 확인 가능
$ mc ls kubeflow
minIO bucket 생성
# 0. Bucket 생성
$ mc mb kubeflow/test-mc
# 1. Bucket 내로 파일 복사하기 - 새 파일 생성 후 minIO bucket 내로 복제
$ touch file-mc.txt
$ mc cp file-mc.txt kubeflow/test-mc/
# 복사가 잘 되었는 지 확인 - 웹 콘솔에서도 확인 가능
$ mc ls kubeflow/test-mc
#. 2. Bucket 내로 디렉토리 복사하기
$ mkdir dir1
$ touch dir1/file1.txt
# -r 옵션을 줘야 디렉토리 하위까지 복사가 된다.
$ mc cp -r dir1 /kubeflow/test-mc/
3. Python으로 접속
다음 과정을 진행하면 된다.
# minIO SDK 설치
!pip install minio
import minio
from minio import Minio
# minIO 객체 생성
minioClient = Minio('minio-service.kubeflow.svc.cluster.local:9000',
access_key='minio',
secret_key='minio123',
secure=False)
# mlpipeline이라는 bucket이 존재하는 지 확인
bucket_name = "mlpipeline"
if minioClient.bucket_exists(bucket_name):
print(f"{bucket_name} exists")
else:
print(f"{bucket_name} does not exist")
이번엔 Class 생성 후 Bucket을 만들고, 파일을 업로드하고, 디렉토리를 업로드하는 코드를 만들어본다
# MinIO 객체 생성 코드
class MinioClient():
def __init__(self):
self.client = Minio(
"minio-service.kubeflow:9000",
access_key="minio",
secret_key="minio123",
secure=False
)
# Bucket이 존재하는 지 확인 후, 존재하지 않으면 Bucket을 만듦
def create_bucket(self,bucket_name):
if self.client.bucket_exists(bucket_name):
print(f"{bucket_name} exists")
else:
self.client.make_bucket(bucket_name)
print(f"{bucket_name} created")
# fput_object 함수를 활용해 업로드
def upload_file(self, bucket, minio_path, local_path):
self.client.fput_object(bucket, minio_path, local_path)
# 디렉토리 업로드 방법
# Object를 반복적으로 Upload하는 방식을 취하고 있다.
# os.path로 디렉토리 내용 확인 후, 파일이면 업로드하고 디렉토리면 재귀함수 호출하는 방식
def upload_directory(self, bucket, minio_path, local_path):
if os.path.isdir(local_path):
items = os.listdir(local_path)
items.sort()
for item in items:
item_local_path = os.path.join(local_path, item)
item_minio_path = os.path.join(minio_path, item)
if os.path.isfile(item_local_path):
self.upload_file(bucket, item_minio_path, item_local_path)
elif os.path.isdir(item_local_path):
self.upload_directory(bucket, item_minio_path, item_local_path)
# 객체 생성
mc_sdk = MinioClient()
# Bucket 생성
mc_sdk.create_bucket("test-sdk")
# 파일 및 디렉토리 업로드
mc_sdk.upload_file("test-sdk", "file-mc.txt", "file-mc.txt")
'IT_Study > Ops' 카테고리의 다른 글
[MLOps] Kubeflow pipeline 오류 - kf-resource-quota : must specify cpu/memory (0) | 2023.11.13 |
---|---|
[MLOps] Kubeflow pipeline handling (1) : pipeline 개념 및 기본 진행 방법 (0) | 2023.11.09 |
[MLOps] Kubeflow Notebook 핸들링 방법, custom notebook 생성 (1) | 2023.11.02 |
[MLOps] Kubeflow 계정 관리, PV와 PVC 개념 (0) | 2023.11.01 |
[MLOps] AWS EC2 Ubuntu 환경에서 Kubeflow 세팅 방법 (1) | 2023.11.01 |