MLflow를 사용하여 모델 개발 추적
MLflow 추적을 사용하면 기계 학습 또는 딥 러닝 모델 학습과 관련된 노트북 및 학습 데이터 세트, 매개 변수, 메트릭, 태그, 그리고 아티팩트를 기록할 수 있습니다. MLflow를 시작하는 예제 Notebook은 자습서: Azure Databricks엔드투엔드 ML 모델을 참조하세요.
실험 및 실행을 사용한 MLflow 추적
모델 개발 프로세스는 반복적이며 모델을 개발하고 최적화할 때 작업을 추적하기가 어려울 수 있습니다. Azure Databricks에서 MLflow 추적을 사용하여 모델 개발 프로세스를 체계적으로 관리하고, 시도한 매개 변수 설정 또는 조합이 모델 성능에 미치는 영향을 확인할 수 있습니다.
MLflow 추적은 실험과 실행을 사용하여 ML 및 딥 러닝 모델 개발을 기록하고 추적합니다. 실행은 모델 코드의 단일 실행입니다. MLflow를 실행하는 동안 모델 매개 변수 및 결과를 기록할 수 있습니다. 실험은 관련 실행의 컬렉션입니다. 실험에서 실행을 비교하고 필터링하여 모델의 성능이 매개 변수 설정, 입력 데이터 등에 따라 어떻게 달라지는지 이해할 수 있습니다.
참고 항목
2024년 3월 27일부로 MLflow는 모든 기존 및 신규 실행의 총 매개 변수, 태그 및 메트릭 단계 수와 모든 기존 및 신규 실험의 총 실행 횟수에 대해 쿼터 한도를 적용합니다(리소스 한도 참조). 실험당 실행 할당량에 도달한 경우, Databricks는 Python의 실행 삭제 API를 사용하여 더 이상 필요하지 않은 실행을 삭제할 것을 권장합니다. 다른 할당량 한도에 도달할 경우 Databricks는 제한을 초과하지 않도록 로깅 전략을 조정할 것을 권장합니다. 이 한도를 늘려야 하는 경우 사용 사례, 제안된 완화 방법이 작동하지 않는 이유, 요청하는 새로운 한도에 대한 간략한 설명으로 Databricks 계정 팀에 문의하세요.
MLflow 추적 API
MLflow 추적 API는 모델 실행의 매개 변수, 메트릭, 태그 및 아티팩트를 기록합니다. 추적 API는 MLflow 추적 서버와 통신합니다. Databricks를 사용하면 Databricks에서 호스팅하는 추적 서버에서 데이터를 기록합니다. 호스팅된 MLflow 추적 서버에는 Python, Java 및 R API가 있습니다.
MLflow는 Databricks Runtime ML 클러스터에 미리 설치됩니다. Databricks Runtime 클러스터에서 MLflow를 사용하려면 mlflow
라이브러리를 설치해야 합니다. 클러스터에 라이브러리를 설치하는 방법에 대한 지침은 클러스터에 라이브러리 설치를 참조하세요.
MLflow 실행이 로그되는 위치
모든 MLflow 실행은 다음 방법 중 하나를 사용하여 설정할 수 있는 활성 실험에 기록됩니다.
- mlflow.set_experiment() 명령을 사용합니다.
-
experiment_id
에서 매개 변수를 사용합니다. - MLflow 환경 변수 MLFLOW_EXPERIMENT_NAME 또는 MLFLOW_EXPERIMENT_ID 중 하나를 설정합니다.
활성 실험이 설정되지 않은 경우 실행은 Notebook 실험에 기록됩니다.
실험을 실행 중인 작업 영역이 아닌 다른 작업 영역에서 원격으로 호스트된 MLflow 추적 서버에 실험 결과를 기록하려면 mlflow.set_tracking_uri()
를 사용하여 원격 작업 공간을 참조하도록 추적 URI를 설정하고 mlflow.set_experiment()
를 사용하여 원격 작업 공간에서 실험 경로를 설정합니다.
mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")
로컬에서 실험을 실행 중이고 실험 결과를 Databricks MLflow 추적 서버에 기록하려면 Databricks 작업 영역 인스턴스(DATABRICKS_HOST
)와 Databricks 개인 액세스 토큰(DATABRICKS_TOKEN
)을 제공하세요. 다음으로 추적 URI를 설정하여 작업 영역을 참조하도록 mlflow.set_tracking_uri()
로 설정하고 mlflow.set_experiment()
를 사용하여 실험 경로를 설정할 수 있습니다.
및 DATABRICKS_HOST
환경 변수의 값을 찾을 수 있는 위치에 대한 자세한 내용은 DATABRICKS_TOKEN
을 참조하세요.
다음 코드 예제에서는 이러한 값을 설정하는 방법을 보여줍니다:
os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")
로그 실행을 실험에 기록
MLflow는 많은 기계 학습 및 딥 러닝 프레임워크로 작성된 학습 코드를 자동으로 기록할 수 있습니다. MLflow 추적을 시작하기에 가장 쉬운 방법입니다. 예제 노트북을 참조하세요.
기록되는 매개 변수 및 메트릭을 더 자세히 제어하거나 CSV 파일 또는 플롯과 같은 추가 아티팩트를 기록하려면 MLflow 로깅 API를 사용합니다. 예제 노트북을 참조하세요.
자동 로깅을 사용하여 모델 개발 추적
이 예제 Notebook에서는 scikit-learn자동 로깅을 사용하는 방법을 보여 줍니다. 다른 Python 라이브러리를 사용한 자동 로깅에 대한 자세한 내용은 MLflow 자동 로깅 설명서
MLflow 자동 로깅 Python Notebook
로깅 API를 사용하여 모델 개발 추적
이 예제 Notebook에서는 Python 로깅 API사용하는 방법을 보여 줍니다. MLflow에는 REST, R 및 Java API
MLflow 로깅 API 파이썬 노트북
작업 공간 실험에 로그 기록하기
기본적으로 Databricks 노트북에서 모델을 학습하면 실행이 노트북 실험에 기록됩니다. Notebook 내에서 시작된 MLflow 실행만 Notebook 실험에 기록할 수 있습니다.
모든 Notebook 또는 API에서 시작된 MLflow 실행은 작업 영역 실험에 기록될 수 있습니다. 노트북이나 API 호출에서 작업 영역 실험에 실행을 기록하려면 다음과 유사한 코드를 사용하세요.
experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)
작업 영역 실험을 만드는 방법에 대한 지침은 작업 영역 실험 만들기참조하세요. 기록된 실행 보기에 대한 자세한 내용은 Notebook 실험 보기 및 작업 영역 실험 보기를 참조하세요.
Azure Databricks 외부에서 MLflow 추적 서버에 액세스
예를 들어 MLflow CLI를 사용하여 Azure Databricks 외부에서 추적 서버에 쓰고 읽을 수도 있습니다. 외부에서 MLflow 추적 서버에 액세스하기 Databricks를 참조하세요.
프로그래매틱 방식으로 MLflow 실행 분석
다음 두 DataFrame API를 사용하여 프로그래밍 방식으로 MLflow 실행 데이터에 액세스할 수 있습니다.
- MLflow Python 클라이언트 search_runs API는 pandas DataFrame을 반환합니다.
- MLflow 실험 데이터 원본은 Apache Spark DataFrame을 반환합니다.
이 예에서는 MLflow Python 클라이언트를 사용하여 시간 경과에 따른 평가 메트릭의 변경 내용을 시각화하고, 특정 사용자가 시작한 실행 수를 추적하고, 모든 사용자의 총 실행 수를 측정하는 대시보드를 빌드하는 방법을 보여 줍니다.
모델 학습 메트릭과 출력이 달라질 수 있는 이유
ML에 사용되는 많은 알고리즘에는 알고리즘 자체에 샘플링이나 임의의 초기 조건과 같은 임의 요소가 포함됩니다. 이러한 알고리즘 중 하나를 사용하여 모델을 학습시킬 때 동일한 조건으로 학습을 시작하더라도 매번 실행할 때마다 결과가 같지 않을 수 있습니다. 많은 라이브러리에서 이러한 확률적 요소의 초기 조건을 수정하는 시딩 메커니즘을 제공합니다. 그러나 씨드 배정으로 제어되지 않는 다른 변이의 원인이 있을 수 있습니다. 일부 알고리즘은 데이터 순서에 민감하며, 분산형 ML 알고리즘은 데이터 분할 방식에 따라 영향을 받을 수도 있습니다. 일반적으로 이러한 변형은 중요하지 않으며 모델 개발 과정에서 큰 영향을 미치지 않습니다.
순서와 파티셔닝의 차이로 인한 변형을 제어하려면 PySpark 함수인 repartition과 sortWithinPartitions를 사용합니다.
MLflow 추적 예제
다음 노트북에서는 MLflow를 사용하여 모델의 개발을 추적하는 방법을 보여 줍니다.