* 프로그래머스의 마키나락스 MLOPS 강의를 참고하여 작성함
오늘은 MinIO 기본 사용 방법을 알아보려고 한다.
앞서 데이터 관리의 중요성과 MinIO에 대해 소개한 바 있다. 관련 내용은 아래 포스팅 참고.
MinIO 시작하기
1. 터미널에 docker Run 명령
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
$ docker run -p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER = minio \
-e MINIO_ROOT_PASSWORD = miniostorage \
minio/minio \
server /data/minio --console-address : 9001
- [OPTION] docker run -p : -p 아규먼트는 포트와 관련, 두개의 포트를 뚫어야 함 (9000, 9001). 총 두개의 포트 (port) 를 연결해 포트 포워딩 해야 함. 하나는 API 통신용 포트 (9000), 다른 하나는 Web UI용 포트 (9001)
- [OPTION] -e : -e 아규먼트는 도커가 실행될 때, 환경 변수 (environment) 로 입력할 수 있는 아규먼트. Key : Value로 지정해서 사용 가능하며, User, Password를 입력함. 환경 변수를 사용하면 docker 사용시 minIO의 특정 계정에 접속해서 사용 가능
- [COMMAND] server /data/minio : 이미지 이후에 입력된 command 로 서버를 이용해 실행시킴
- [COMMAND] console-address:9001 : 9000 포트로 들어왔을 때 웹 UI로 전환될 수 있는 console address
2. 실행 후 https://0.0.0.0:9001 접속하여 로그인
터미널에서 지정한대로 id : minio / pw : miniostorage
3. (참고) Credential 파일 - Access Key 발급하여 사용 가능
MinIO 계정 접근시 로그인해서 사용하거나 or access key를 통해 사용 가능함. 'Access Keys' 항목에서 발급하면 된다.
key 정보는 credential.json 파일로 download 가능
MinIO 둘러보기
1. Bucket 만들기
- 폴더와 비슷한 개념. 웹 UI, API모두에서 만들 수 있음.
- Create bucket을 눌러서 버켓을 생성하는데, 데이터를 버전별로 관리하는 것이 목적이기에 versioning 버튼을 on으로 설정
아래처럼 생성된 버튼을 확인 가능하다.
왼쪽 목록의 'Object browser'에서 해당 버킷을 선택하면, 데이터를 Upload할 수 있는 버튼 확인 가능
MinIO에 데이터 업로드
이제 MinIO에 실제 데이터를 업로드해서 사용해보도록 하겠다.
우선 데이터를 저장하고 (csv파일) -> MinIO를 연결한 후 -> 버킷을 생성 및 준비 -> 업로드 순으로 진행하면 된다.
1. MinIO 설치
우선 minio를 설치한다
pip3 install minio
2. 업로드 파일 작성
아래와 같이 iris 데이터를 업로드하는 코드 작성한다. 파일에 업로드에 필요한 모든 동작의 내용을 포함한다.
1) minio와 관련 패키지를 import하고,
2) iris 파일을 csv로 저장, (dump data)
3) 클라이언트를 선언한 뒤 (url과 access 키 설정, secure=False로 두어 http로 통신 가능하게 한다),
4) client.fput_object(bucket_name, object_name, 'iris.csv') 를 통해 minio의 특정 bucket으로 데이터를 업로드 하면 된다.
<upload_data.py 파일 내용>
import pandas as pd
from sklearn.datasets import load_iris
from minio import Minio
from minio.versioningconfig import VersioningConfig, ENABLED
# dump data
iris = load_iris(as_frame=True)
X,y = iris['data'], iris['target']
data = pd.concat([X,y],axis='columns')
data.to_csv('iris.csv', index=None)
# client 선언하기
url = '0.0.0.0:9000'
access_key = 'minio'
secret_key = 'miniostorage'
client = Minio(url, access_key=access_key, secret_key=secret_key, secure=False )
# minio로 데이터 업로드
bucket_name = 'raw-data'
object_name = 'iris'
if not client.bucket_exists(bucket_name): # 버킷 생성
client.make_bucket(bucket_name)
config = client.set_bucket_versioning(bucket_name, VersioningConfig(ENABLED)) # 버킷 버저닝 활성화
client.fput_object(bucket_name, object_name, 'iris.csv')
3. Minio 에 업로드하기
위에서 작성한 업로드 파일을 실행해주면 된다.
$ python3 upload_data.py
4. 업로드 확인
이제 minio 웹 브라우저 링크 (0.0.0.0:9001)로 들어가면,
Object Browser에 'raw-data'라는 버킷 생성, 그 안에 iris.csv 데이터가 저장된 것을 볼 수 있다.
오른쪽 Action의 'Display Object Versions' 를 클릭하면, 아이리스의 버전을 확인할 수 있다. (현재 V1)
데이터 수정 및 파일 실행을 반복할 수록 버전이 올라가게 될 것
MinIO에서 데이터 다운로드
위에서 MinIO로 업로드했던 데이터를 다시 다운로드 해보자.
1. 다운로드 파일 작성하기
<download_data.py 파일 내용>
from minio import Minio
bucket_name = 'raw-data'
object_name = 'iris'
# minio 클라이언트
url = '0.0.0.0:9000'
access_key = 'minio'
secret_key = 'miniostorage'
client = Minio(url, access_key=access_key, secret_key=secret_key, secure=False )
# 데이터 다운로드
object_stat = client.stat_object(bucket_name, object_name)
print(object_stat.version_id)
client.fget_object(bucket_name, object_name, file_path='download_data.csv')
2. 파일 실행하기
위 파일을 터미널에서 실행해주면 실행 파일이 있던 경로에 다운로드 받을 수 있다.
$ python3 download_data.py
3. 확인하기
파일 경로에 csv가 다운로드 받아진 것을 확인 가능하다.
이때 터미널에서 임의의 난수로 표현되는 데이터가 저장되는데,
임의의 난수는 데이터의 고유값으로 minio사이트의 버전 아래에서 확인 가능하다.
(239bc99c-ec6c-4a1f-a56c-5f1694b88d35)
'MLOps' 카테고리의 다른 글
[MLOps] 17. MLflow에 모델 저장하기 실습 (0) | 2024.04.30 |
---|---|
[MLOps] 16. 모델 저장소 구축 방법 (feat. 도커 컴포즈) (0) | 2024.04.30 |
[MLOps] 14. 모델 파일에 MinIO 반영 및 실행 (0) | 2024.04.30 |
[MLOps] 15. 모델 저장 개념 및 구조 (0) | 2024.04.29 |
[MLOps] 12. 데이터 관리 (feat.MinIO 소개) (0) | 2024.04.22 |