MLflow는 모델의 lifecycle을 관리하는 데 도움을 주는 오픈 소스입니다.
추적, 모델 버전 관리, 배포 등 다양한 기능을 제공합니다.
MLflow는 머신 러닝 생명 주기를 관리하기 위한 여러 구성 요소를 제공합니다.
Tracking (추적)
실험에서 사용되는 매개 변수, 코드 버전, 메트릭, 아티팩트 등을 로깅하여 모델의 학습 과정을 시간에 따라 추적합니다.
Model Registry (모델 레지스트리)
모델의 버전 관리를 수행하며, 각 모델의 현재 상태를 파악하고 제품화 과정을 원활하게 지원합니다. 모델의 라인지 추적을 통해 모델의 변천사를 이해하고, 모델 버전 간의 비교와 관리를 용이하게 합니다.
MLflow Deployments for LLMs (MLflow LLMs 배포)
대형 언어 모델(LLM)을 위한 표준화된 API를 제공하여 모델의 배포를 간소화하고, 보안 인증 접근을 강화합니다. 다양한 학습 라이브러리와의 호환성을 제공하여 모델 배포 과정을 표준화하고 용이하게 합니다.
Evaluate (평가)
모델 분석을 위한 도구 세트로 전통적인 머신 러닝 알고리즘부터 대형 언어 모델까지 각종 모델들을 평가합니다.
Prompt Engineering UI (프롬프트 엔지니어링 UI)
프롬프트(prompt) 작성을 위한 전용 환경으로, 프롬프트의 실험, 정제, 평가, 테스트, 배포를 위한 공간을 제공합니다.
MLflow를 사용하는 이유는 여러 가지가 있습니다. 머신 러닝(ML) 프로세스는 데이터 전처리부터 모델 배포 및 모니터링까지 다양한 단계로 구성되어 있으며, 이러한 생명 주기 전체에서 생산성과 효율성을 유지하는 것은 여러 가지 도전 과제를 포함합니다.
Experiment Management (실험 관리)
파일이나 대화형 노트북과 같은 환경에서 수많은 실험을 추적하는 것은 매우 어려울 수 있습니다. MLflow의 추적 서버를 통해 매개 변수, 코드 버전 등을 로깅함으로써 모든 실험을 기록하고 비교할 수 있습니다.
Reproducibility (재현성)
여러 번의 실행에서 일관된 결과를 보장하는 것은 쉽지 않습니다. MLflow는 코드 버전과 매개 변수 뿐만 아니라 라이브러리 의존성을 포함한 전체 환경을 기록하여 실험을 정확하게 재현할 수 있도록 지원합니다.
Deployment Consistency(배포 일관성)
다양한 ML 라이브러리들이 존재하며, 이에 따라 모델을 패키지화하고 배포하는 표준화된 방법이 부족할 수 있습니다. MLflow는 모델 배포의 일관성을 유지하며, 모델과 해당 코드 및 매개 변수 간의 중요한 연결을 보장합니다.
Model Management(모델 관리)
데이터 과학 팀이 다양한 모델을 생성하고 테스트하며 지속적으로 배포하는 것은 중요한 과제입니다. MLflow는 모델 라이프사이클을 중앙 집중식으로 관리하여 팀 간 협업을 용이하게 합니다.
Library Agnosticism(라이브러리 무관성)
개별 ML 라이브러리들은 일부 도전 과제를 해결할 수 있지만, 최상의 결과를 얻기 위해서는 여러 라이브러리를 거쳐 실험하는 것이 필요합니다. MLflow는 다양한 라이브러리와 호환성을 제공하면서도 모델을 재현 가능한 블랙 박스로 사용할 수 있도록 합니다.
추적성, 일관성, 유연성을 제공하여 개발자와 데이터 과학자들이 모델 개발에 집중할 수 있도록 돕습니다.
# poetry 가상환경 activate 한 상태로 아래 명령어 실행
poetry add mlflow
$ mlflow --help
Usage: mlflow [OPTIONS] COMMAND [ARGS]...
Options:
--version Show the version and exit.
--help Show this message and exit.
| 명령어 | 설명 |
|---|---|
| --version | 버전 보기 및 종료 |
| --help | 이 메시지를 표시하고 종료 |
| artifacts | MLflow에서 아티팩트를 업로드, 목록 및 다운로드 |
| azureml | Azure ML에서 모델 제공 |
| db | MLflow 추적 데이터베이스 관리 명령어 |
| deployments | MLflow 모델을 커스텀 대상에 배포 |
| experiments | 실험 관리 |
| gc | deleted 라이프사이클 단계의 실행을 영구적으로 삭제 |
| models | 로컬에서 MLflow 모델 배포 |
| pipelines | MLflow 파이프라인 실행 및 파이프라인 결과 검사 |
| run | 주어진 URI에서 MLflow 프로젝트 실행 |
| runs | 실행 관리 |
| sagemaker | SageMaker에서 모델 제공 |
| server | MLflow 추적 서버 실행 |
| ui | 실행 결과의 로컬 보기 위한 MLflow 추적 UI 실행 |
mlflow server의 옵션
$ mlflow server --help
| 옵션 | 설명 |
|---|---|
| --backend-store-uri PATH | 실험 및 실행 데이터를 저장할 URI. SQLAlchemy 호환 데이터베이스 연결 문자열(e.g., 'sqlite:///path/to/file.db') 또는 로컬 파일 시스템 URI(e.g., 'file:///absolute/path/to/directory')를 허용. 기본적으로 ./mlruns 디렉토리에 데이터가 기록됨 |
| --registry-store-uri URI | 등록된 모델을 저장할 URI. SQLAlchemy 호환 데이터베이스 연결 문자열(e.g., 'sqlite:///path/to/file.db')를 허용. 지정하지 않으면 backend-store-uri가 사용됨 |
| --default-artifact-root URI | 새로 생성된 실험에 대한 아티팩트를 저장할 디렉토리. SQL을 사용하는 추적 서버 백엔드의 경우 아티팩트를 저장하기 위해 이 옵션이 필요. 기본적으로 --serve-artifacts 옵션이 활성화된 경우 mlflow-artifacts:/ uri 프록시에 데이터가 기록됨. 그렇지 않으면 기본 위치는 ./mlruns |
| --serve-artifacts | 지정된 경우, 아티팩트 업로드, 다운로드 및 목록 요청을 --artifact-destination에 의해 지정된 저장 위치로 직접 라우팅하는 프록시를 통해 제공. 기본 위치는 로컬 './mlartifacts' 디렉토리이며, --artifacts-destination 인수를 통해 재정의할 수 있음. 기본값: False |
| --artifacts-only | 지정된 경우, mlflow 서버를 프록시된 아티팩트 제공만을 위해 사용하도록 구성. 이 모드가 활성화되면 mlflow 추적 서비스의 기능(예: 실행 생성, 메트릭 기록, 매개변수 기록)은 비활성화됨. 서버는 아티팩트를 업로드, 다운로드 및 나열하는 엔드포인트만 노출. 기본값: False |
| --artifacts-destination URI | 아티팩트 업로드/다운로드/목록 요청을 해결할 기본 아티팩트 위치(e.g., 's3://my-bucket'). 기본값은 로컬 './mlartifacts' 디렉토리. 이 옵션은 추적 서버가 아티팩트를 스트리밍하도록 구성된 경우와 실험의 아티팩트 루트 위치가 http 또는 mlflow-artifacts URI인 경우에만 적용됨. |
| -h, --host HOST | 청취할 네트워크 주소 (기본값: 127.0.0.1). 다른 기기에서 추적 서버에 접근하려면 0.0.0.0을 사용하여 모든 주소에 바인딩. |
| -p, --port INTEGER | 청취할 포트 (기본값: 5000). |
| -w, --workers TEXT | 요청을 처리할 gunicorn 워커 프로세스 수 (기본값: 4). |
| --static-prefix TEXT | 모든 정적 경로의 앞에 추가될 접두사. |
| --gunicorn-opts TEXT | gunicorn 프로세스에 전달될 추가 명령줄 옵션. |
| --waitress-opts TEXT | waitress-serve에 대한 추가 명령줄 옵션. |
| --expose-prometheus TEXT | 메트릭이 저장될 디렉토리의 경로. 디렉토리가 존재하지 않으면 생성됨. /metrics 엔드포인트에서 메트릭을 노출하도록 Prometheus 익스포터 활성화. |
| --help | 이 메시지를 표시하고 종료. |
서버에서 mlflow를 tracking server로 실행시키고 외부에서 접속한다면 아래와 같이 명령합니다.
mlflow server --backend-store-uri sqlite:///backend.db --default-artifact-root ./mlruns --host 0.0.0.0 --port 5000
{server_ip}:{port}로 브라우저를 통해 접속할 수 있습니다.