次の方法で共有


Azure Machine Learning 用に MLflow を構成する

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

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

ただし、Azure Machine Learning の外部で作業する場合は、ワークスペースを指すように MLflow を構成する必要があります。 影響を受ける環境には、ローカル コンピューター、Azure Synapse Analytics、Azure Databricks が含まれます。

重要

Azure コンピューティング インフラストラクチャを使用する場合、追跡 URI を構成する必要はありません。 これは、自動的に構成されます。 自動構成を使用する環境には、Azure Machine Learning ノートブック、Azure Machine Learning コンピューティング インスタンスでホストされている Jupyter ノートブック、Azure Machine Learning コンピューティング クラスターで実行されるジョブが含まれます。

前提条件

  • MLflow SDK mlflow パッケージと MLflow 用の Azure Machine Learning azureml-mlflow プラグイン。 次のコマンドを使用して、このソフトウェアをインストールできます。

    pip install mlflow azureml-mlflow
    

    ヒント

    mlflow の代わりに、mlflow-skinny を使用することを検討してください。 このパッケージは、SQL ストレージ、サーバー、UI、またはデータ サイエンスの依存関係のない軽量 MLflow パッケージです。 MLflow の追跡とログ記録の機能を主に必要とするが、デプロイを含む機能の完全なスイートをインポートしたくないユーザーにお勧めします。

  • Azure Machine Learning ワークスペース。 ワークスペースを作成するには、「開始する必要があるリソースを作成する」を参照してください。

  • ワークスペースで MLflow 操作を実行するためのアクセス許可。 操作と必要なアクセス許可の一覧については、「MLflow 操作」を参照してください。

MLflow の追跡 URI を構成する

リモート追跡 (つまり、Azure Machine Learning の外部で実行されている実験の追跡) を実行する場合は、Azure Machine Learning ワークスペースの追跡 URI を指すように MLflow を構成します。

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

  1. ワークスペースの追跡 URI を取得します。

    適用対象: Azure CLI ml 拡張機能 v2 (現行)

    1. サインインしてワークスペースを構成します。

      az account set --subscription <subscription-ID>
      az configure --defaults workspace=<workspace-name> group=<resource-group-name> 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-identity パッケージではこのサポートが提供されます。 このパッケージは、azureml-mlflow プラグインの依存関係としてインストールされます。

認証プロセスでは、成功するまで次の方法を 1 つずつ試行します。

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

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

警告

"対話型ブラウザー" 認証は資格情報の入力を求める際にコード実行をブロックします。 このアプローチはトレーニング ジョブなどの無人環境での認証には適しません。 これらの環境では、別の認証モードを構成することをお勧めします。

非アテンド型実行が必要なシナリオでは、Azure Machine Learning と通信するようにサービス プリンシパルを構成する必要があります。 サービス プリンシパルの作成については、「サービス プリンシパルの構成」を参照してください。

次のコードでは、サービス プリンシパルのテナント ID、クライアント ID、クライアント シークレットを使用します。

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 でのこのアプローチの実装の詳細については、「環境変数内のシークレットの参照」を確認するか、プラットフォームのドキュメントを参照してください。

シークレットではなく証明書を使用する場合は、次の環境変数を構成できます。

  • Privacy Enhanced Mail (PEM) または Public-Key Cryptography Standards 12 (PKCS #12) 形式の証明書と秘密キーのペアを含むファイルのパスに AZURE_CLIENT_CERTIFICATE_PATH を設定します。
  • パスワードを使用する場合は、証明書ファイルのパスワードに 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 のワークスペースに接続されたので、操作を開始できます。