MLOps for MLE: Model Registry
MLflow Setup
- MLflow: A machine learning lifecycle platform
- MLflow Tracking: 학습 과정에서의 매개 변수, 코드, 결과를 기록하고 대화형 UI로 비교할 수 있는 API
- MLflow project: ML 코드 공유를 위한 Conda 및 Docker 기반 패키지 형식 지원
- MLflow Models: Docker, Apache Spark, Azure ML, AWS SageMaker 등의 플랫폼에 ML 코드를 배포할 수 있는 패키징 형식 및 도구
- MLflow Model Registry: MLflow 모델의 전체 수명 주기를 공동으로 관리하기 위한 중앙 집중식 모델 저장소, API, UI의 집합
- Backend Store: 수치 데이터와 MLflow 서버의 정보들을 체계적으로 관리하기 위한 DB
- 모델 데이터
- 학습 결과
- Accuracy
- F1-score
- 학습 과정의 loss
- 모델 자체 정보 (hyperparameters)
- 학습 결과
- MLflow의 메타 데이터
- run_id
- run_name
- experiment_name
- 모델 데이터
PostgreSQL DB Server
1 | ... |
image
:postgres:14.0
environment
POSTGRES_USER
: DB 접근을 위한 사용자 이름POSTGRES_PASSWORD
: DB 접근을 위한 비밀번호POSTGRES_DB
: DB 이름 설정
healthcheck
- DB 서버 상태 체크
MLflow Artifact Store
- Artifact Store: MLFlow에서 학습된 모델을 저장하는 Model Registry로 이용하기 위한 스토리지 서버
- 기본 파일 시스템에 비해 체계적 관리 가능
- 외부의 스토리지 서버 사용 가능
- MinIO: AWS S3를 대체할 수 있는 오픈 소스 고성는 개체 스토리지
- AWS S3의 API와 호환되어 SDK 동일 사용 가능
- MLflow에서는 AWS S3를 모델 저장 스토리지 사용 권장
1 | ... |
image
:minio/minio
ports
9000
: MinIO의 API 포트9001
: Console 포트
environment
MINIO_ROOT_USER
: MinIO 접근을 위한 사용자 이름MINIO_ROOT_PASSWORD
: MinIO 접근을 위한 비밀번호
command
- MinIO 서버 실행 명령어 추가
--console-address
:9001
포트로 MinIO에 접근
healthcheck
- MinIO 서버 상태 체크
MLflow Server
1 | FROM amd64/python:3.9-slim |
FROM
- Python 3.9가 포함된 이미지를 BASE 이미지로 설정
RUN
git
: MLflow 서버 내부 동작wget
: MinIO Client 설치
RUN
- MLflow, PostgreSQL DB, AWS S3 관련 Python 패키지 설치
RUN
wget
을 통해 MinIO Client 설치
1 | ... |
depends_on
mlflow-server
의 서버 실행 전mlflow-backend-store
,mlflow-artifact-store
을 먼저 실행
ports
5001:5000
포트 설정
environment
AWS_ACCESS_KEY_ID
: AWS S3의 credential 정보 (=MINIO_ROOT_USER
)AWS_SECRET_ACCESS_KEY
: AWS S3의 credentail 정보 (=MINIO_ROOT_PASSWORD
)MLFLOW_S3_ENDPOINT_URL
: AWS S3의 주소 설정 (= MinIO의 주소)https://
로 정의해주면 오류 발생,,,
command
: MinIO 초기 버켓 생성, MLflow 서버 실행mc config ~
: MinIO Client 기반 MinIO 서버에 호스트 등록mc mb ~
: 등록된 호스트를 통해 초기 버켓 생성mlflow server
: MLflow 서버 실행--backend-store-uri
: PostgreSQL DB와 연결- URI에 특수문자 기용 시 오류 발생 주의
--default-artifact-root
: 명시된 버켓을 통해 MinIO의 초기 버켓과 연결
Execution
Save Model to Registry
환경 변수 설정
1 | import os |
MLFLOW_S3_ENDPOINT_URL
: 모델을 저장할 스토리지의 주소 (MinIO API)MLFLOW_TRACKING_URI
: 정보를 저장하기 위해 연결할 MLflow 서버의 주소AWS_ACCESS_KEY_ID
: MinIO에 접근하기 위한 아이디AWS_SECRET_ACCESS_KEY
: MinIO에 접근하기 위한 비밀번호
모델 저장
1 | ... |
mlflow.set_experiment(experiment_name)
:experiment
가 존재하지 않은 경우 새로 생성, 존재하는 경우 해당experiment
사용mlflow.models.signature.infer_signature(model_input, model_output)
: 잘못된 데이터 입력 시 에러 발생을 위한 정보 입력mlflow.start_run(run_id, experiment_id, run_name, nested, tags, description)
: 새로운 MLflowrun
시작mlflow.log_metrics(metrics, step)
: 모델의 결과 metrics를dictionary
형태로 입력해 생성된run
에 저장mlflow.sklearn.log_model(sk_model, artifact_path, conda_env, code_paths, serialization_format, registered_model_name, signature, input_example, ...)
: 현재run
에 대해sklearn
모델 기록
Result
1 | $ python save_model_to_registry.py --model-name "sk_model" |
Load Model from Registry
환경 변수 설정
1 | import os |
모델 불러오기
1 | ... |
mlflow.sklearn.load_model(model_uri, dst_path)
: 로컬 파일 또는run
에서sklearn
모델 loadmlflow.pyfunc.load_model(model_uri, suppress_warnings, dst_path)
: Python 함수 형태로 저장된 모델 load
Result
1 | $ python load_model_from_registry.py --model-name "sk_model" --run-id 12abbfc176364e198849473c83783070 |
.env를 통한 환경 변수 정의
1 | POSTGRES_USER=zerohertz_postgres |
1 | ... |
1 | import os |
Reference
- MLOps for MLE: 03. Model Registry