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.0environmentPOSTGRES_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/minioports9000: MinIO의 API 포트9001: Console 포트
environmentMINIO_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 이미지로 설정
RUNgit: MLflow 서버 내부 동작wget: MinIO Client 설치
RUN- MLflow, PostgreSQL DB, AWS S3 관련 Python 패키지 설치
RUNwget을 통해 MinIO Client 설치
1 | ... |
depends_onmlflow-server의 서버 실행 전mlflow-backend-store,mlflow-artifact-store을 먼저 실행
ports5001:5000포트 설정
environmentAWS_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