다음을 통해 공유


MLflow 및 Azure Machine Learning을 사용하여 Azure Synapse Analytics ML 실험 추적

이 문서에서는 Azure Synapse Analytics 작업 영역에서 작업하는 동안 MLflow가 Azure Machine Learning에 연결할 수 있도록 설정하는 방법을 알아봅니다. 추적, 모델 관리 및 모델 배포에 이 구성을 활용할 수 있습니다.

MLflow는 기계 학습 실험의 수명 주기를 관리하기 위한 오픈 소스 라이브러리입니다. MLFlow 추적은 학습 실행 메트릭 및 모델 아티팩트를 로그하고 추적하는 MLflow의 구성 요소입니다. MLflow에 대해 자세히 알아봅니다.

Azure Machine Learning을 통해 학습할 MLflow 프로젝트가 있는 경우 MLflow 프로젝트 및 Azure Machine Learning을 사용하여 ML 모델 학습(미리 보기)을 참조하세요.

필수 조건

라이브러리 설치

Azure Synapse Analytics의 전용 클러스터에 라이브러리를 설치하려면 다음을 수행합니다.

  1. 실험에 필요한 패키지를 사용하여 requirements.txt 파일을 만들지만 다음 패키지도 포함해야 합니다.

    requirements.txt

    mlflow
    azureml-mlflow
    azure-ai-ml
    
  2. Azure Analytics 작업 영역 포털로 이동합니다.

  3. 관리 탭으로 이동하여 Apache Spark 풀을 선택합니다.

  4. 클러스터 이름 옆에 있는 세 개의 점을 클릭하고 패키지를 선택합니다.

    Azure Synapse Analytics에 mlflow 패키지 설치

  5. 요구 사항 파일 섹션에서 업로드를 클릭합니다.

  6. requirements.txt 파일을 업로드합니다.

  7. 클러스터가 다시 시작될 때까지 기다립니다.

MLflow로 실험 추적

Azure Synapse Analytics는 MLflow를 사용하여 Azure Machine Learning 작업 영역으로 실험을 추적하도록 구성할 수 있습니다. Azure Machine Learning은 실험, 모델 및 배포의 전체 수명 주기를 관리하는 중앙 집중식 리포지토리를 제공합니다. 또한 Azure Machine Learning 배포 옵션을 사용하여 더 쉬운 배포 경로를 사용하도록 설정할 수 있다는 장점이 있습니다.

Azure Machine Learning에 연결된 MLflow를 사용하도록 Notebook 구성

실험에 대한 중앙 집중식 리포지토리로 Azure Machine Learning을 사용하려면 MLflow를 활용하면 됩니다. 작업 중인 각 Notebook에서 사용할 작업 영역을 가리키도록 추적 URI를 구성해야 합니다. 다음 예제에서는 이 작업을 수행하는 방법을 보여줍니다.

추적 URI 구성

  1. 작업 영역의 추적 URI를 가져옵니다.

    적용 대상: Azure CLI ml 확장 v2(현재)

    1. 다음과 같이 작업 영역에 로그인하고 구성합니다.

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. az ml workspace 명령을 사용하여 추적 URI를 가져올 수 있습니다.

      az ml workspace show --query mlflow_tracking_uri
      
  2. 추적 URI 구성:

    그런 다음, 메서드 set_tracking_uri()는 MLflow 추적 URI로 해당 URI를 가리킵니다.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Azure Databricks 클러스터, Azure Synapse Analytics 클러스터 등과 같은 공유 환경에서 작업하는 경우 클러스터 수준에서 MLFLOW_TRACKING_URI 환경 변수를 설정하여 세션별로 수행하지 않고 클러스터에서 실행되는 모든 세션에 대해 Azure Machine Learning을 가리키도록 MLflow 추적 URI를 자동으로 구성하는 것이 유용합니다.

인증 구성

추적이 구성되면 연결된 작업 영역에서 인증을 수행하는 방법도 구성해야 합니다. 기본적으로 MLflow용 Azure Machine Learning 플러그 인은 기본 브라우저를 열고 자격 증명을 묻는 메시지를 표시하여 대화형 인증을 수행합니다. Azure Machine Learning 작업 영역에서 MLflow에 대한 인증을 구성하는 추가 방법은 Azure Machine Learning용 MLflow 구성: 인증 구성을 참조하세요.

세션에 연결된 사용자가 있는 대화형 작업의 경우 대화형 인증을 사용할 수 있으므로 추가 작업이 필요하지 않습니다.

Warning

대화형 브라우저 인증은 자격 증명을 묻는 메시지를 표시할 때 코드 실행을 차단합니다. 학습 작업과 같은 무인 환경에서의 인증에는 적합한 옵션이 아닙니다. 다른 인증 모드를 구성하는 것이 좋습니다.

무인 실행이 필요한 시나리오의 경우 Azure Machine Learning과 통신하도록 서비스 주체를 구성해야 합니다.

import os

os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"

공유 환경에서 작업할 때 컴퓨팅에서 이러한 환경 변수를 구성하는 것이 좋습니다. 가능한 경우 Azure Key Vault 인스턴스에서 비밀로 관리하는 것이 좋습니다. 예를 들어 Azure Databricks에서는 다음과 같이 클러스터 구성의 환경 변수에서 비밀을 사용할 수 있습니다. AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}} Azure Databricks에서 비밀을 수행하는 방법은 환경 변수에서 비밀 참조를 참조하거나 플랫폼에서 유사한 설명서를 참조하세요.

Azure Machine Learning에서 실험의 이름

기본적으로 Azure Machine Learning은 Default라는 기본 실험에서 실행을 추적합니다. 일반적으로 작업할 실험을 설정하는 것이 좋습니다. 다음 구문을 사용하여 실험 이름을 설정합니다.

mlflow.set_experiment(experiment_name="experiment-name")

추적 매개 변수, 메트릭 및 아티팩트

그러면 Azure Synapse Analytics에서 원래 사용했던 것과 동일한 방식으로 MLflow를 사용할 수 있습니다. 자세한 내용은 메트릭 및 로그 파일 로그 및 보기를 참조하세요.

MLflow를 사용하여 레지스트리에 모델 등록

모델은 수명 주기를 관리하는 중앙 집중식 리포지토리를 제공하는 Azure Machine Learning 작업 영역에 등록할 수 있습니다. 다음 예제에서는 Spark MLLib로 학습된 모델을 로그하고 레지스트리에도 등록합니다.

mlflow.spark.log_model(model, 
                       artifact_path = "model", 
                       registered_model_name = "model_name")  
  • 이름이 있는 등록 모델이 없는 경우 이 메서드는 새 모델을 등록하고, 버전 1을 만들고, ModelVersion MLflow 개체를 반환합니다.

  • 이름이 있는 등록 모델이 이미 있는 경우 이 메서드는 새 모델 버전을 만들고 버전 개체를 반환합니다.

MLflow를 사용하여 Azure Machine Learning에 등록된 모델을 관리할 수 있습니다. 자세한 내용은 MLflow를 사용하여 Azure Machine Learning에서 모델 레지스트리 관리를 참조하세요.

Azure Machine Learning에서 등록된 모델 배포 및 사용

MLflow를 통해 Azure Machine Learning Service에 등록된 모델을 다음과 같이 사용할 수 있습니다.

  • Azure Machine Learning 엔드포인트(실시간 및 일괄 처리): 이 배포를 사용하면 ACI(Azure Container Instances), AKS(Azure Kubernetes) 또는 관리형 엔드포인트에서 실시간 및 일괄 처리 유추 모두에 Azure Machine Learning 배포 기능을 활용할 수 있습니다.

  • 스트리밍 또는 일괄 처리 파이프라인의 Azure Synapse Analytics Notebooks에서 사용할 수 있는 MLFlow 모델 개체 또는 Pandas UDF.

Azure Machine Learning 엔드포인트에 모델 배포

azureml-mlflow 플러그 인을 활용하여 Azure Machine Learning 작업 영역에 모델을 배포할 수 있습니다. 다양한 대상에 모델을 배포하는 방법에 대한 자세한 내용은 MLflow 모델을 배포하는 방법 페이지를 참조하세요.

Important

모델을 배포하려면 Azure Machine Learning 레지스트리에 등록해야 합니다. 등록되지 않은 모델의 배포는 Azure Machine Learning에서 지원되지 않습니다.

UDF를 사용하여 일괄 처리 채점을 위한 모델 배포

일괄 처리 점수 매기기를 위해 Azure Synapse Analytics 클러스터를 선택할 수 있습니다. MLFlow 모델은 로드되어 새 데이터의 점수를 매기는 Spark Pandas UDF로 사용됩니다.

from pyspark.sql.types import ArrayType, FloatType 

model_uri = "runs:/"+last_run_id+ {model_path} 

#Create a Spark UDF for the MLFlow model 
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri) 

#Load Scoring Data into Spark Dataframe 
scoreDf = spark.table({table_name}).where({required_conditions}) 

#Make Prediction 
preds = (scoreDf 
           .withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …)) 
        ) 

display(preds) 

리소스 정리

Azure Synapse 작업 영역을 유지하지만 더 이상 Azure Machine Learning 작업 영역이 필요하지 않은 경우 Azure Machine Learning 작업 영역을 삭제할 수 있습니다. 작업 영역에서 기록된 메트릭과 아티팩트를 사용하지 않으려는 경우에는 개별적으로 삭제할 수 있는 기능을 현재 사용할 수 없습니다. 대신, 스토리지 계정 및 작업 영역을 포함하는 리소스 그룹을 삭제하여 요금이 발생하지 않도록 합니다.

  1. Azure Portal 맨 왼쪽에서 리소스 그룹을 선택합니다.

    Azure Portal에서 삭제

  2. 목록에서 만든 리소스 그룹을 선택합니다.

  3. 리소스 그룹 삭제를 선택합니다.

  4. 리소스 그룹 이름을 입력합니다. 그런 다음 삭제를 선택합니다.

다음 단계