Azure Machine Learning 用に MLflow を構成する

この記事では、追跡、レジストリ、デプロイのために Azure Machine Learning ワークスペースに接続するように MLflow を構成する方法について説明します。

Azure Machine Learning ワークスペースは、MLflow と互換性があります。つまり、追加の構成なしで MLflow サーバーとして機能できます。 各ワークスペースには、MLflow によってワークスペースに接続するために使用される MLflow 追跡 URI があります。 Azure Machine Learning ワークスペースは、MLflow と連携するように既に構成されているため、追加の構成は不要です。

ただし、Azure Machine Learning の外部 (ローカル コンピューター、Azure Synapse Analytics、Azure Databricks など) で作業する場合は、そのワークスペースを指すように MLflow を構成する必要があります。

重要

Azure Compute で実行する場合 (Azure Machine Learning Notebooks、Azure Machine Learning コンピューティング インスタンスでホストされている Jupyter Notebook、または Azure Machine Learning コンピューティング クラスターで実行中のジョブ)、追跡 URI を構成する必要はありません。 これは、自動的に構成されます

前提条件

このチュートリアルで従う前提条件は、次の通りです。

  • MLflow SDK パッケージ mlflow と MLflow 用の Azure Machine Learning プラグイン azureml-mlflow をインストールします。

    pip install mlflow azureml-mlflow
    

    ヒント

    SQL ストレージ、サーバー、UI、またはデータ サイエンスの依存関係のない軽量 MLflow パッケージであるパッケージ mlflow-skinny を使用できます。 主に追跡機能とログ機能を必要とし、デプロイを含む MLflow の全機能はインポートしないユーザーには、mlflow-skinny が推奨されます。

  • Azure Machine Learning ワークスペース。 「機械学習リソースの作成に関するチュートリアル」に従って作成できます。

  • リモート追跡 (Azure Machine Learning の外部で実行されている実験の追跡) を実行している場合は、Azure Machine Learning ワークスペースの追跡 URI を指すように MLflow を構成します。 MLflow をワークスペースに接続する方法の詳細については、「Azure Machine Learning 用に MLflow を構成する」を参照してください。

MLflow の追跡 URI を構成する

MLflow を Azure Machine Learning ワークスペースに接続するには、ワークスペースの追跡 URI が必要です。 各ワークスペースには独自の追跡 URI があり、プロトコル azureml:// があります。

  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 プラグインは、既定のブラウザーを開いて資格情報の入力を求める対話型認証を実行します。

MLflow 用の Azure Machine Learning プラグインでは、プラグイン azureml-mlflow の依存関係としてインストールされている、パッケージ azure-identity を通じたいくつかの認証メカニズムがサポートされています。 いずれかが成功するまで、次の認証方法が 1 つずつ試行されます。

  1. 環境: 環境変数で指定されたアカウント情報を読み取り、それを使用して認証を行います。
  2. マネージド ID: マネージド ID が有効な Azure ホストにアプリケーションがデプロイされている場合、それを使用して認証されます。
  3. Azure CLI: ユーザーが Azure CLI az login コマンドを使用してサインインする場合、そのユーザーとして認証されます。
  4. Azure PowerShell: ユーザーが Azure PowerShell の Connect-AzAccount コマンドを使用してサインインする場合、そのユーザーとして認証されます。
  5. 対話型ブラウザー: 既定のブラウザーを使用してユーザーを対話形式で認証します。

セッションに接続されているユーザーがいる対話型ジョブの場合は、対話型認証を使用できるため、これ以上の操作は必要ありません。

警告

対話型ブラウザー認証では、資格情報の入力を求めるメッセージが表示されると、コードの実行がブロックされます。 これは、トレーニング ジョブなどの無人環境での認証には適したオプションではありません。 他の認証モードを構成することをお勧めします。

無人実行が必要なシナリオでは、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_CLIENT_CERTIFICATE_PATHPEM または PKCS12 証明書ファイルへのパス (秘密キーを含む) に構成し、AZURE_CLIENT_CERTIFICATE_PASSWORD を証明書ファイルのパスワード (存在する場合) に構成することができます。

認可とアクセス許可のレベルを構成する

AzureML データ科学者共同作成者などの一部の既定のロールは、Azure Machine Learning ワークスペースで MLflow 操作を実行するために事前に構成されています。 カスタム役割を使用する場合は、次のアクセス許可が必要です。

  • MLflow 追跡を使用するには:

    • Microsoft.MachineLearningServices/workspaces/experiments/*
    • Microsoft.MachineLearningServices/workspaces/jobs/*
  • MLflow モデル レジストリを使用するには:

    • Microsoft.MachineLearningServices/workspaces/models/*/*

作成したサービス プリンシパル、またはユーザー アカウントのアクセス権をワークスペースに付与する方法については、「アクセス権の付与」を参照してください。

認証のトラブルシューティング

MLflow は、mlflow.set_experiment()mlflow.start_run() など、サービスとやり取りする最初の操作時に Azure Machine Learning に対する認証を試みます。 このプロセス中に、問題または予期しない認証プロンプトが表示された場合は、ログ レベルを上げて、エラーの詳細を取得することができます。

import logging

logging.getLogger("azure").setLevel(logging.DEBUG)

実験名を設定する (省略可能)

すべての MLflow 実行は、アクティブな実験にログが記録されます。 既定では、実行のログは、自動的に作成される Default という名前の実験に記録されます。 追跡が行われるエクスペリエンスを構成できます。

ヒント

Azure Machine Learning CLI v2 を使ってジョブを送信する場合、ジョブの YAML 定義の experiment_name のプロパティ を使って、実験の名前を設定できます。 トレーニング スクリプトでそれを構成する必要はありません。 詳しくは、「YAML: 表示名、実験名、説明、タグ」をご覧ください。

MLflow コマンド mlflow.set_experiment() を使用して実験を構成します。

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

パブリック以外の Azure クラウドのサポート

MLflow 用の Azure Machine Learning プラグインは、既定でグローバル Azure クラウドで動作するように構成されています。 ただし、環境変数 AZUREML_CURRENT_CLOUD を設定して、お使いの Azure クラウドを構成できます。

import os

os.environ["AZUREML_CURRENT_CLOUD"] = "AzureChinaCloud"

お使いのクラウドは、次の Azure CLI コマンドで特定できます。

az cloud list

現在のクラウドの値 IsActiveTrue に設定されています。

次のステップ

環境が Azure Machine Learning のワークスペースに接続されたので、操作を開始できます。