로그 모델 종속성
이 문서에서는 환경에서 모델 제공과 같은 프로덕션 작업에 사용할 수 있도록 모델 및 해당 종속성을 모델 아티팩트로 로깅하는 방법을 알아봅니다.
Python 패키지 모델 종속성 로깅
MLflow는 일부 Python ML 라이브러리에 대한 기본 지원을 where MLflow는 이러한 라이브러리를 사용하는 모델에 대한 종속성을 안정적으로 기록할 수 있습니다. 기본 제공 모델 버전을 참조하세요.
예를 들어 MLflow는 mlflow.sklearn 모듈에서 scikit-learn을 지원하고, mlflow.sklearn.log_model 명령은 sklearn 버전을 로깅합니다. 이러한 ML 라이브러리를 사용하여 자동 로깅하는 경우에도 마찬가지입니다. 추가 예제는 MLflow github 리포지토리를 참조하세요.
참고 항목
생성형 AI 워크로드에 추적 로깅을 사용하도록 설정하기 위해 MLflow는 OpenAI 자동 로깅을 지원합니다.
pip install PACKAGE_NAME==VERSION
을 사용하여 설치할 수 있지만 기본 제공 MLflow 모델 버전이 없는 ML 라이브러리의 경우 mlflow.pyfunc.log_model 메서드를 사용하여 이러한 패키지를 로깅할 수 있습니다. 요구 사항을 정확한 라이브러리 버전(예 단순히 f"nltk=={nltk.__version__}"
대신 nltk
)과 함께 로깅해야 합니다.
mlflow.pyfunc.log_model
은 다음에 대한 로깅을 지원합니다.
- Python 에그 또는 Python 휠 파일로 패키징된 공용 및 사용자 지정 라이브러리.
- PyPI의 퍼블릭 패키지 및 사용자 고유의 PyPI 서버에 비공개로 호스트되는 패키지.
mlflow.pyfunc.log_model을 사용하면 MLflow가 종속성을 자동으로 유추하려고 시도합니다. MLflow는 mlflow.models.infer_pip_requirements를 사용하여 종속성을 유추하고 requirements.txt
파일에 모델 아티팩트로 로깅합니다.
이전 버전에서 MLflow는 특히 라이브러리가 기본 제공 모델 버전이 아닌 경우에 일부 Python 요구 사항을 자동으로 식별하지 못하는 때가 있었습니다. 이 경우 extra_pip_requirements
명령에서 log_model
매개 변수를 사용하여 추가 종속성을 지정할 수 있습니다.
extra_pip_requirements 매개 변수를 사용하는 예제를 참조하세요.
Important
set 및 conda_env
pip_requirements
사용하여 요구 사항의 전체 parameters 덮어쓸 수도 있지만 MLflow가 자동으로 선택하는 종속성을 재정의하므로 일반적으로 권장되지 않습니다.
pip_requirements
매개 변수를 사용하여 요구 사항을 덮어쓰는 방법 예제를 참조하세요.
사용자 지정된 모델 로깅
더 많은 사용자 지정 모델 로깅이 필요한 where 시나리오의 경우 다음 중 하나를 수행할 수 있습니다.
-
사용자 지정 Python 모델을 작성합니다. 이렇게 하면
mlflow.pyfunc.PythonModel
서브클래스를 사용하여 초기화 및 예측을 사용자 지정할 수 있습니다. 이 방법은 Python 전용 모델을 사용자 지정하는 데 적합합니다.- 간단한 예제는 N 모델 추가 예제를 참조하세요.
- 좀 더 복잡한 예제는 사용자 지정 XGBoost 모델 예제를 참조하세요.
-
사용자 지정 버전을 작성합니다. 이 시나리오에서는 일반
pyfunc
버전보다 더 많은 로깅을 사용자 지정할 수 있지만, 이렇게 하려면 더 많은 구현 작업이 필요합니다.
사용자 지정 Python 코드
하나 이상의 %pip install
파일처럼 .py
명령을 사용하여 설치할 수 없는 Python 코드 종속성이 있을 수 있습니다.
모델을 로깅할 때, code_path
에서 매개 변수를 사용하여 지정된 경로에서 해당 종속성을 찾을 수 있다고 MLflow에 알릴 수 있습니다. MLflow는 code_path
를 사용하여 전달된 모든 파일 또는 디렉터리를 모델과 함께 코드 디렉터리에 아티팩트로 저장합니다. 모델을 로드할 때 MLflow는 이러한 파일 또는 디렉터리를 Python 경로에 추가합니다. 이 경로는 code_path
파일과 마찬가지로 .py
를 사용하여 모델에 포함할 수 있는 사용자 지정 Python 휠 파일에서도 작동합니다.
mlflow.pyfunc.log_model( artifact_path=artifact_path,
code_path=[filename.py],
data_path=data_path,
conda_env=conda_env,
)
비 Python 패키지 모델 종속성 로깅
MLflow는 Java 패키지, R 패키지 및 네이티브 패키지(예: Linux 패키지)와 같은 비 Python 종속성을 자동으로 선택하지 않습니다. 이러한 패키지의 경우 추가 데이터를 로깅해야 합니다.
- 종속성 list: Databricks는 이러한 비 Python 종속성을 지정하는 모델로 아티팩트를 로깅하는 것이 좋습니다. 간단한
.txt
파일일 수도 있고.json
파일일 수도 있습니다. mlflow.pyfunc.log_model을 사용하면artifacts
인수를 사용하여 이 추가 아티팩트를 지정할 수 있습니다. - 사용자 지정 패키지: 위의 사용자 지정 Python 종속성과 마찬가지로, 배포 환경에서 패키지를 사용할 수 있어야 합니다. Maven Central 또는 사용자 고유의 리포지토리와 같은 중앙 위치에 있는 패키지의 경우 채점 또는 서비스 제공 시간에 해당 위치를 사용할 수 있어야 합니다. 다른 곳에 호스트되지 않는 프라이빗 패키지의 경우 모델과 함께 패키지를 아티팩트로 로깅할 수 있습니다.
종속성을 사용하여 모델 배포
MLflow 추적 서버 또는 모델 레지스트리에서 모델을 배포할 때 배포 환경에 올바른 종속성이 설치되어 있는지 확인해야 합니다. 가장 간단한 경로는 배포 모드(일괄 처리/스트리밍 또는 온라인 서비스) 및 종속성 유형에 따라 달라질 수 있습니다.
모델을 만든 Databricks Runtime에는 이미 다양한 라이브러리가 설치되어 있으므로, 모든 배포 모드에서는 학습 중에 사용한 것과 동일한 런타임 버전에서 유추를 실행하는 것이 좋습니다. Databricks의 MLflow는 MLmodel
와 같은 databricks_runtime
필드의 databricks_runtime: 10.2.x-cpu-ml-scala2.12
메타데이터 파일에 해당 런타임 버전을 자동으로 저장합니다.
온라인 서비스: Mosaic AI 모델 서비스
Databricks는 MLflow 기계 학습 모델이 확장 가능한 REST API 엔드포인트로 노출될
requirements.txt
파일의 Python 종속성의 경우 Databricks 및 MLflow는 공용 PyPI 종속성에 대한 모든 것을 처리합니다. 마찬가지로 .py
인수를 사용하여 모델을 로깅할 때 code_path
파일 또는 Python 휠 파일을 지정한 경우 MLflow가 해당 종속성을 자동으로 로드합니다.
이러한 모델 서비스 제공 시나리오는 다음을 참조하세요.
requirements.txt
파일의 Python 종속성의 경우 Databricks 및 MLflow는 공용 PyPI 종속성에 대한 모든 것을 처리합니다. 마찬가지로 .py
인수를 사용하여 모델을 로깅할 때 code_path
파일 또는 Python 휠 파일을 지정한 경우 MLflow가 해당 종속성을 자동으로 로드합니다.
온라인 서비스 제공: 타사 시스템 또는 Docker 컨테이너
타사 서비스 솔루션 또는 사용자 고유의 Docker 기반 솔루션에 서비스를 제공해야 하는 경우 모델을 Docker 컨테이너로 내보내면 됩니다.
Databricks는 Python 종속성을 자동으로 처리하는 타사 서비스에는 다음을 권장합니다. 그러나 비 Python 종속성인 경우 해당 종속성을 포함하도록 컨테이너를 수정해야 합니다.
Docker 기반 서비스 제공 솔루션의 MLflow Docker 통합: MLflow 모델 build-docker
Azure Machine Learning의 MLflow 통합:
일괄 처리 및 스트리밍 작업
일괄 처리 및 스트리밍 채점은 Databricks 작업으로 실행해야 합니다. Notebook 작업은 종종 충분하며 코드를 준비하는 가장 간단한 방법은 Databricks 모델 레지스트리을 사용하여 점수 매기기용 노트북을 generate 것입니다.
아래에서는 이에 따라 종속성을 설치하고 적용하도록 하려면 수행해야 하는 프로세스 및 단계에 대해 설명합니다.
학습 중에 사용된 것과 동일한 Databricks Runtime 버전으로 채점 클러스터를 시작합니다.
databricks_runtime
메타데이터 파일에서MLmodel
필드를 읽고, 해당 런타임 버전으로 클러스터를 시작합니다.다음으로, 비 Python 종속성을 설치합니다. 비 Python 종속성이 배포 환경에 액세스할 수 있도록 다음 중 하나를 수행합니다.
- 유추를 실행하기 전에 모델의 비 Python 종속성을 클러스터 구성의 일부로 Databricks 클러스터에 수동으로 설치합니다.
- 또는 채점 작업 배포에 사용자 지정 논리를 작성하여 클러스터에 종속성을 설치하는 과정을 자동화할 수 있습니다. 비 Python 패키지 모델 종속성 로깅에 설명된 대로 비 Python 종속성을 아티팩트로 저장했다면 이 자동화에서 라이브러리 API를 사용하여 라이브러리를 설치할 수 있습니다. 또는 generate 종속성을 설치하기 위해 클러스터 범위 초기화 스크립트 에 대한 특정 코드를 작성할 수 있습니다.
채점 작업은 작업 실행 환경에 Python 종속성을 설치합니다. Databricks에서 모델 레지스트리를 사용하면 이 작업을 자동으로 수행하는 추론용 노트북을 generate할 수 있습니다.
- Databricks 모델 레지스트리를 사용하여 평가 노트북
경우, 노트북에는 모델의 파일에 필요한 Python 종속성을 설치하는 코드가 포함됩니다. 일괄 처리 또는 스트리밍 채점을 위한 Notebook 작업의 경우 이 코드는 모델 종속성을 설치하고 모델에 사용할 수 있도록 Notebook 환경을 초기화합니다.
- Databricks 모델 레지스트리를 사용하여 평가 노트북
MLflow는
code_path
의log_model
매개 변수에 포함된 사용자 지정 Python 코드를 처리합니다. 이 코드는 모델의predict()
메서드가 호출될 때 Python 경로에 추가됩니다. 다음 방법 중 하나를 사용하여 이 작업을 수동으로 처리할 수도 있습니다.-
인수를 사용하여
env_manager=['virtualenv'/'conda']
를 호출합니다. - mlflow.pyfunc.get_model_dependencies를 사용하여 필요한 종속성을 추출하고 %pip install을 사용하여 필요한 종속성을 설치합니다.
참고 항목
.py
인수를 사용하여 모델을 로깅할 때code_path
파일 또는 Python 휠 파일을 지정한 경우 MLflow가 해당 종속성을 자동으로 로드합니다.-
인수를 사용하여