MLflow と Azure Machine Learning を使用して実験の実行を追跡し、ML モデルをデプロイする (プレビュー)Track experiment runs and deploy ML models with MLflow and Azure Machine Learning (preview)

この記事では、MLflow の追跡 URI とログ API (まとめて MLflow Tracking と呼ばれる) を有効にして、MLflow 実験のバックエンドとして Azure Machine Learning に接続する方法について説明します。In this article, learn how to enable MLflow's tracking URI and logging API, collectively known as MLflow Tracking, to connect Azure Machine Learning as the backend of your MLflow experiments.

サポートされている機能は次のとおりです。Supported capabilities include:

  • Azure Machine Learning ワークスペースで、実験のメトリックと成果物を追跡してログに記録します。Track and log experiment metrics and artifacts in your Azure Machine Learning workspace. 実験に MLflow Tracking を既に使用している場合、トレーニングのメトリックとモデルを保存するための一元化された安全でスケーラブルな場所がワークスペースに用意されています。If you already use MLflow Tracking for your experiments, the workspace provides a centralized, secure, and scalable location to store training metrics and models.

  • Azure Machine Learning バックエンド サポートを備えた MLflow Projects を使用してトレーニング ジョブを送信します (プレビュー)。Submit training jobs with MLflow Projects with Azure Machine Learning backend support (preview). Azure Machine Learning 追跡を使用してローカルにジョブを送信することも、Azure Machine Learning コンピューティングを介するなどして実行をクラウドに移行することもできます。You can submit jobs locally with Azure Machine Learning tracking or migrate your runs to the cloud like via an Azure Machine Learning Compute.

  • MLflow および Azure Machine Learning モデル レジストリでモデルを追跡および管理します。Track and manage models in MLflow and Azure Machine Learning model registry.

  • MLflow の実験を Azure Machine Learning Web サービスとしてデプロイします。Deploy your MLflow experiments as an Azure Machine Learning web service. Web サービスとしてデプロイすることで、Azure Machine Learning の監視機能とデータ誤差検出機能を実稼働モデルに適用できます。By deploying as a web service, you can apply the Azure Machine Learning monitoring and data drift detection functionalities to your production models.

MLflow は、機械学習の実験のライフ サイクルを管理するためのオープンソース ライブラリです。MLflow is an open-source library for managing the life cycle of your machine learning experiments. MLFlow Tracking は MLflow のコンポーネントです。これは、実験の環境がローカル コンピューター、リモートのコンピューティング先、仮想マシン、Azure Databricks クラスターのいずれであるかにかかわらず、トレーニング実行のメトリックとモデル成果物をログに記録し、追跡します。MLFlow Tracking is a component of MLflow that logs and tracks your training run metrics and model artifacts, no matter your experiment's environment--locally on your computer, on a remote compute target, a virtual machine, or an Azure Databricks cluster.

注意

オープン ソース ライブラリである MLflow は頻繁に変更されます。As an open source library, MLflow changes frequently. そのため、Azure Machine Learning と MLflow の統合によって利用できるようになる機能はプレビューとして見なす必要があり、Microsoft は完全にサポートしていません。As such, the functionality made available via the Azure Machine Learning and MLflow integration should be considered as a preview, and not fully supported by Microsoft.

次の図は、MLflow Tracking を使用して、実験の実行メトリックを追跡し、Azure Machine Learning ワークスペース内にモデル成果物を保存する例を示しています。The following diagram illustrates that with MLflow Tracking, you track an experiment's run metrics and store model artifacts in your Azure Machine Learning workspace.

Azure Machine Learning での MLflow

ヒント

このドキュメントの情報は主に、モデルのトレーニング プロセスを監視したいデータ サイエンティストや開発者を対象としています。The information in this document is primarily for data scientists and developers who want to monitor the model training process. Azure Machine Learning からリソース使用状況やイベント (クォータ、トレーニング実行の完了、モデル デプロイの完了など) を監視することに関心がある管理者の方は、「Azure Machine Learning の監視」を参照してください。If you are an administrator interested in monitoring resource usage and events from Azure Machine Learning, such as quotas, completed training runs, or completed model deployments, see Monitoring Azure Machine Learning.

MLflow と Azure Machine Learning のクライアントの比較Compare MLflow and Azure Machine Learning clients

次の表に、Azure Machine Learning を使用できるさまざまなクライアントとそれぞれの機能を示します。The following table summarizes the different clients that can use Azure Machine Learning, and their respective function capabilities.

MLflow Tracking は、メトリックのログ機能と成果物の保存機能を提供します。他の方法では、Azure Machine Learning Python SDK を使用している場合にのみこれらの機能を利用できます。MLflow Tracking offers metric logging and artifact storage functionalities that are only otherwise available via the Azure Machine Learning Python SDK.

機能Capability MLflow Tracking & DeploymentMLflow Tracking & Deployment Azure Machine Learning Python SDKAzure Machine Learning Python SDK Azure Machine Learning CLIAzure Machine Learning CLI Azure Machine Learning StudioAzure Machine Learning studio
ワークスペースの管理Manage workspace
データ ストアの使用Use data stores
メトリックのログ記録Log metrics
成果物のアップロードUpload artifacts
メトリックを表示するView metrics
コンピューティングの管理Manage compute
モデルをデプロイするDeploy models
モデル パフォーマンスを監視するMonitor model performance
データの誤差を検出するDetect data drift

前提条件Prerequisites

ローカル実行の追跡Track local runs

Azure Machine Learning で MLflow Tracking を使用すると、ローカル実行からログに記録されたメトリックと成果物を Azure Machine Learning ワークスペースに格納できます。MLflow Tracking with Azure Machine Learning lets you store the logged metrics and artifacts from your local runs into your Azure Machine Learning workspace.

MLflow の追跡 URI にアクセスし、ワークスペースを構成するには、mlflow および Workspace クラスをインポートします。Import the mlflow and Workspace classes to access MLflow's tracking URI and configure your workspace.

次のコードでは、get_mlflow_tracking_uri() メソッドによって、ワークスペース ws に一意の追跡 URI アドレスを割り当て、set_tracking_uri() によって、MLflow の追跡 URI がそのアドレスを参照するよう設定します。In the following code, the get_mlflow_tracking_uri() method assigns a unique tracking URI address to the workspace, ws, and set_tracking_uri() points the MLflow tracking URI to that address.

import mlflow
from azureml.core import Workspace

ws = Workspace.from_config()

mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())

注意

追跡 URI の有効期間は最大 1 時間以内です。The tracking URI is valid up to an hour or less. 一定のアイドル時間の経過後にスクリプトを再起動した場合は、get_mlflow_tracking_uri API を使用して新しい URI を取得してください。If you restart your script after some idle time, use the get_mlflow_tracking_uri API to get a new URI.

set_experiment() で MLflow の実験名を設定し、start_run() でトレーニング実行を開始します。Set the MLflow experiment name with set_experiment() and start your training run with start_run(). 次に、log_metric() を使用して MLflow ログ API をアクティブにし、トレーニング実行のメトリックのログ記録を開始します。Then use log_metric() to activate the MLflow logging API and begin logging your training run metrics.

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

with mlflow.start_run():
    mlflow.log_metric('alpha', 0.03)

リモート実行の追跡Track remote runs

リモート実行では、GPU 対応仮想マシンや Machine Learning コンピューティング クラスターなど、より強力なコンピューティングでモデルをトレーニングできます。Remote runs let you train your models on more powerful computes, such as GPU enabled virtual machines, or Machine Learning Compute clusters. さまざまなコンピューティング オプションについては、「モデル トレーニング用のコンピューティング ターゲットを使用する」をご覧ください。See Use compute targets for model training to learn about different compute options.

Azure Machine Learning で MLflow Tracking を使用すると、リモート実行からログに記録されたメトリックと成果物を Azure Machine Learning ワークスペースに格納できます。MLflow Tracking with Azure Machine Learning lets you store the logged metrics and artifacts from your remote runs into your Azure Machine Learning workspace. その中で MLflow 追跡コードを実行すると、メトリックのログが自動的にワークスペースに記録されます。Any run with MLflow Tracking code in it will have metrics logged automatically to the workspace.

次のサンプル conda 環境にはパッケージとして mlflowazureml-mlflow が含まれています。The following example conda environment includes mlflow and azureml-mlflow as pip packages.

name: sklearn-example
dependencies:
  - python=3.6.2
  - scikit-learn
  - matplotlib
  - numpy
  - pip:
    - azureml-mlflow
    - numpy

お使いのスクリプトで、Environment クラスを使用し、コンピューティングとトレーニングの実行環境を構成します。In your script, configure your compute and training run environment with the Environment class. 次に、コンピューティング ターゲットとして、リモート コンピューティングで ScriptRunConfig を構築します。Then, construct ScriptRunConfig with your remote compute as the compute target.

import mlflow

with mlflow.start_run():
    mlflow.log_metric('example', 1.23)

このコンピューティングおよびトレーニングの実行構成では、Experiment.submit() メソッドを使用して実行を送信します。With this compute and training run configuration, use the Experiment.submit() method to submit a run. この方法により、MLflow の追跡 URI が自動的に設定され、MLflow からワークスペースにログが送信されます。This method automatically sets the MLflow tracking URI and directs the logging from MLflow to your Workspace.

run = exp.submit(src)

MLflow Projects を使用してトレーニングするTrain with MLflow Projects

MLflow Projects を使用すると、他のデータ サイエンティスト (または自動化ツール) が実行できるようにするために、自分のコードの整理および記述を行うことができます。MLflow Projects allow for you to organize and describe your code to let other data scientists (or automated tools) run it. Azure Machine Learning で MLflow Projects を使用すると、ワークスペースでのトレーニングの実行を追跡および管理することができます。MLflow Projects with Azure Machine Learning enables you to track and manage your training runs in your workspace.

この例では、Azure Machine Learning 追跡を使用して MLflow プロジェクトをローカルに送信する方法を示します。This example shows how to submit MLflow projects locally with Azure Machine Learning tracking.

実験において Azure Machine Learning で MLflow Tracking をローカルに使用するには、azureml-mlflow パッケージをインストールします。Install the azureml-mlflow package to use MLflow Tracking with Azure Machine Learning on your experiments locally. 実験は、Jupyter Notebook またはコード エディターを介して実行できます。Your experiments can run via a Jupyter notebook or code editor.

pip install azureml-mlflow

MLflow の追跡 URI にアクセスし、ワークスペースを構成するには、mlflow および Workspace クラスをインポートします。Import the mlflow and Workspace classes to access MLflow's tracking URI and configure your workspace.

import mlflow
from azureml.core import Workspace

ws = Workspace.from_config()

mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())

set_experiment() で MLflow の実験名を設定し、start_run() でトレーニング実行を開始します。Set the MLflow experiment name with set_experiment() and start your training run with start_run(). 次に、log_metric() を使用して MLflow ログ API をアクティブにし、トレーニング実行のメトリックのログ記録を開始します。Then, use log_metric() to activate the MLflow logging API and begin logging your training run metrics.

experiment_name = 'experiment-with-mlflow-projects'
mlflow.set_experiment(experiment_name)

バックエンド構成オブジェクトを作成して、コンピューティング先や使用するマネージド環境の種類など、統合に必要な情報を格納します。Create the backend configuration object to store necessary information for the integration such as, the compute target and which type of managed environment to use.

backend_config = {"USE_CONDA": False}

ワークスペースのメトリックと重要な成果物を追跡するために、azureml-mlflow パッケージを pip 依存関係として環境構成ファイルに追加します。Add the azureml-mlflow package as a pip dependency to your environment configuration file in order to track metrics and key artifacts in your workspace.

name: mlflow-example
channels:
  - defaults
  - anaconda
  - conda-forge
dependencies:
  - python=3.6
  - scikit-learn=0.19.1
  - pip
  - pip:
    - mlflow
    - azureml-mlflow

ローカル実行を送信し、パラメーター backend = "azureml" を確実に設定します。Submit the local run and ensure you set the parameter backend = "azureml" . この設定を使用すると、実行をローカルに送信して、自動出力追跡、ログ ファイル、スナップショット、およびエラーの出力といったサポートを自分のワークスペースに追加できます。With this setting, you can submit runs locally and get the added support of automatic output tracking, log files, snapshots, and printed errors in your workspace.

Azure Machine Learning Studio で実行とメトリックを表示します。View your runs and metrics in the Azure Machine Learning studio.

local_env_run = mlflow.projects.run(uri=".", 
                                    parameters={"alpha":0.3},
                                    backend = "azureml",
                                    use_conda=False,
                                    backend_config = backend_config, 
                                    )

ワークスペースでのメトリックと成果物の表示View metrics and artifacts in your workspace

MLflow ログ記録のメトリックと成果物は、お使いのワークスペースに保持されます。The metrics and artifacts from MLflow logging are kept in your workspace. それらを随時表示するには、Azure Machine Learning Studio でワークスペースに移動し、ワークスペースで名前によって実験を見つけます。To view them anytime, navigate to your workspace and find the experiment by name in your workspace in Azure Machine Learning studio. または、次のコードを実行します。Or run the below code.

run.get_metrics()

モデルを管理するManage models

MLflow モデル レジストリをサポートする Azure Machine Learning モデル レジストリにモデルを登録して追跡します。Register and track your models with the Azure Machine Learning model registry which supports the MLflow model registry. Azure Machine Learning モデルは、MLflow モデル スキーマに対応しているため、これらのモデルをさまざまなワークフロー間で容易にエクスポートおよびインポートすることができます。Azure Machine Learning models are aligned with the MLflow model schema making it easy to export and import these models across different workflows. 実行 ID などの MLflow 関連のメタデータには、追跡可能性のために、登録されたモデルのタグも付けられます。The MLflow related metadata such as, run id is also tagged with the registered model for traceability. ユーザーは、トレーニングの実行を送信し、MLflow の実行から生成されたモデルを登録およびデプロイすることができます。Users can submit training runs, register, and deploy models produced from MLflow runs.

運用準備が整ったモデルを 1 つの手順でデプロイおよび登録したい場合は、「MLflow モデルのデプロイと登録」を参照してください。If you want to deploy and register your production ready model in one step, see Deploy and register MLflow models.

実行からのモデルを登録して表示するには、次の手順に従います。To register and view a model from a run, use the following steps:

  1. 実行が完了したら、register_model() メソッドを呼び出します。Once the run is complete call the register_model() method.

    # the model folder produced from the run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    run.register_model(model_name = 'my-model', model_path = 'model')
    
  2. Azure Machine Learning Studio を使用してワークスペースに登録されたモデルを表示します。View the registered model in your workspace with Azure Machine Learning studio.

    次の例では、登録されたモデル my-model の MLflow 追跡メタデータがタグ付けされています。In the following example the registered model, my-model has MLflow tracking metadata tagged.

    register-mlflow-model

  3. [成果物] タブを選択すると、MLflow モデル スキーマ (conda.yaml、MLmodel、model.pkl) に対応するすべてのモデル ファイルが表示されます。Select the Artifacts tab to see all the model files that align with the MLflow model schema (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. [MLmodel] を選択すると、実行によって生成された MLmodel ファイルが表示されます。Select MLmodel to see the MLmodel file generated by the run.

    MLmodel-schema

MLflow モデルのデプロイと登録Deploy and register MLflow models

MLflow の実験を Azure Machine Learning Web サービスとしてデプロイすると、Azure Machine Learning のモデル管理およびデータ誤差検出の機能を活用して、運用モデルに適用することができます。Deploying your MLflow experiments as an Azure Machine Learning web service allows you to leverage and apply the Azure Machine Learning model management and data drift detection capabilities to your production models.

そのためには、次のことが必要です。To do so, you need to

  1. モデルを登録する。Register your model.

  2. シナリオで使用する展開構成を決定する。Determine which deployment configuration you want to use for your scenario.

    1. Azure Container Instance (ACI) は、迅速な開発テストのデプロイに適した選択肢です。Azure Container Instance (ACI) is a suitable choice for a quick dev-test deployment.
    2. Azure Kubernetes Service (AKS) は、スケーラブルな運用デプロイに適しています。Azure Kubernetes Service (AKS) is suitable for scalable production deployments.

次の図は、MLflow デプロイ API を使用して、フレームワーク (PyTorch、Tensorflow、scikit-learn、ONNX など) にかかわらず既存の MLflow モデルを Azure Machine Learning Web サービスとしてデプロイでき、ワークスペース内で実稼働モデルを管理できることを示しています。The following diagram demonstrates that with the MLflow deploy API you can deploy your existing MLflow models as an Azure Machine Learning web service, despite their frameworks--PyTorch, Tensorflow, scikit-learn, ONNX, etc., and manage your production models in your workspace.

 Azure Machine Learning を使用して MLflow モデルをデプロイするdeploy mlflow models with azure machine learning

ACI にデプロイするDeploy to ACI

deploy_configuration() メソッドを使用してデプロイ構成を設定します。Set up your deployment configuration with the deploy_configuration() method. また、Web サービスの追跡に役立つタグや説明を追加することもできます。You can also add tags and descriptions to help keep track of your web service.

from azureml.core.webservice import AciWebservice, Webservice

# Set the model path to the model folder created by your run
model_path = "model"

# Configure 
aci_config = AciWebservice.deploy_configuration(cpu_cores=1, 
                                                memory_gb=1, 
                                                tags={'method' : 'sklearn'}, 
                                                description='Diabetes model',
                                                location='eastus2')

次に、Azure Machine Learning SDK deploy メソッドを使用して、1 つの手順でモデルを登録し、デプロイします。Then, register and deploy the model in one step with the Azure Machine Learning SDK deploy method.

(webservice,model) = mlflow.azureml.deploy( model_uri='runs:/{}/{}'.format(run.id, model_path),
                      workspace=ws,
                      model_name='sklearn-model', 
                      service_name='diabetes-model-1', 
                      deployment_config=aci_config, 
                      tags=None, mlflow_home=None, synchronous=True)

webservice.wait_for_deployment(show_output=True)

AKS にデプロイするDeploy to AKS

AKS にデプロイするには、まず AKS クラスターを作成します。To deploy to AKS, first create an AKS cluster. ComputeTarget.create() メソッドを使用して、AKS クラスターを作成します。Create an AKS cluster using the ComputeTarget.create() method. 新しいクラスターの作成には 20 分から 25 分かかる場合があります。It may take 20-25 minutes to create a new cluster.

from azureml.core.compute import AksCompute, ComputeTarget

# Use the default configuration (can also provide parameters to customize)
prov_config = AksCompute.provisioning_configuration()

aks_name = 'aks-mlflow'

# Create the cluster
aks_target = ComputeTarget.create(workspace=ws, 
                                  name=aks_name, 
                                  provisioning_configuration=prov_config)

aks_target.wait_for_completion(show_output = True)

print(aks_target.provisioning_state)
print(aks_target.provisioning_errors)

deploy_configuration() メソッドを使用してデプロイ構成を設定します。Set up your deployment configuration with the deploy_configuration() method. また、Web サービスの追跡に役立つタグや説明を追加することもできます。You can also add tags and descriptions to help keep track of your web service.

from azureml.core.webservice import Webservice, AksWebservice

# Set the web service configuration (using default here with app insights)
aks_config = AksWebservice.deploy_configuration(enable_app_insights=True, compute_target_name='aks-mlflow')

次に、Azure Machine Learning SDK [deploy()] を使用してモデルを 1 つの手順で登録し、デプロイします (つまり、Azure Machine Learning SDK の deploy メソッドを使用してモデルを登録し、デプロイします)。Then, register and deploy the model in one step with the Azure Machine Learning SDK [deploy()](Then, register and deploy the model by using the Azure Machine Learning SDK deploy method.


# Webservice creation using single command
from azureml.core.webservice import AksWebservice, Webservice

# set the model path 
model_path = "model"

(webservice, model) = mlflow.azureml.deploy( model_uri='runs:/{}/{}'.format(run.id, model_path),
                      workspace=ws,
                      model_name='sklearn-model', 
                      service_name='my-aks', 
                      deployment_config=aks_config, 
                      tags=None, mlflow_home=None, synchronous=True)


webservice.wait_for_deployment()

サービスのデプロイには数分かかることがあります。The service deployment can take several minutes.

リソースをクリーンアップするClean up resources

ログに記録されたメトリックと成果物をワークスペースで使用する予定がない場合、現時点では、それらを個別に削除する機能は提供されていません。If you don't plan to use the logged metrics and artifacts in your workspace, the ability to delete them individually is currently unavailable. 代わりに、ストレージ アカウントとワークスペースを含むリソース グループを削除すれば、課金は発生しません。Instead, delete the resource group that contains the storage account and workspace, so you don't incur any charges:

  1. Azure Portal で、左端にある [リソース グループ] を選択します。In the Azure portal, select Resource groups on the far left.

    Azure portal で削除する

  2. 作成したリソース グループを一覧から選択します。From the list, select the resource group you created.

  3. [リソース グループの削除] を選択します。Select Delete resource group.

  4. リソース グループ名を入力します。Enter the resource group name. 次に、 [削除] を選択します。Then select Delete.

サンプルの NotebookExample notebooks

Azure ML ノートブックでの MLflow は、この記事で提示した概念を示し、さらに詳しく説明します。The MLflow with Azure ML notebooks demonstrate and expand upon concepts presented in this article.

注意

mlflow を使用したコミュニティ主導の例のリポジトリについては、 https://github.com/Azure/azureml-examples を参照してください。A community-driven repository of examples using mlflow can be found at https://github.com/Azure/azureml-examples.

次のステップNext steps