MLflow を使用して ML の実験とモデルを追跡する

追跡とは、実行するすべての実験に関連する可能性があるすべての実験の関連情報を保存するプロセスを指します。 このようなメタデータはプロジェクトによって異なりますが、次のものが含まれる場合があります。

  • コード
  • 環境の詳細 (OS バージョン、Python パッケージ)
  • 入力データ
  • パラメーターの構成
  • モデル
  • 評価メトリック
  • 評価の視覚化 (混同行列、重要度プロット)
  • 評価結果 (一部の評価予測を含む)

これらの要素の一部は、ジョブ (コード、環境、入力および出力データを含む) を操作するときに、Azure Machine Learning によって自動的に追跡されます。 ただし、モデル、パラメーター、メトリックなどの他のものは、特定のシナリオに固有であるため、モデル ビルダーによってインストルメント化する必要があります。

この記事では、MLflow を使用して Azure Machine Learning ワークスペースで実験と実行を追跡する方法について説明します。

注意

Azure Databricks または Azure Synapse Analytics で実行されている実験を追跡する場合は、専用のアーティクルMLflow と Azure Machine Learning を使用した Azure Databricks ML 実験の追跡またはMLflow と Azure Machine Learning を使用した Azure Synapse Analytics ML 実験の追跡を参照してください。

実験を追跡する利点

Azure Machine Learning でジョブを使用してトレーニングしているか、ノートブックで対話形式でトレーニングしているかに関係なく、機械学習の実践者が実験を追跡してインストルメント化することを強くお勧めします。 利点は次のとおりです。

  • すべての ML 実験は 1 か所に整理されているため、実験を検索してフィルター処理して情報を見つけたり、ドリルダウンして前に試した内容を正確に確認したりできます。
  • 余分な作業をほとんど行わずに、実験を比較し、結果を分析して、モデルのトレーニングをデバッグできます。
  • 実験を再現または再実行して結果を検証できます。
  • すべてのユーザーが何を行っているかを確認し、実験結果を共有して、プログラムで実験データにアクセスすることで、コラボレーションを改善できます。

MLflow が選ばれる理由

Azure Machine Learning ワークスペースは MLflow 互換です。つまり、MLflow を使用して、Azure Machine Learning ワークスペースで実行、メトリック、パラメーター、成果物を追跡できます。 MLflow を使用して追跡することにより、Azure Machine Learning で動作するようにトレーニング ルーチンを変更したり、クラウド固有の構文を挿入したりする必要がなくなります。これは、このアプローチの主な利点の 1 つです。

MLflow プロジェクトのサポート (プレビュー) やモデル デプロイなど、サポートされているすべての MLflow および Azure Machine Learning 機能については、「MLflow と Azure Machine Learning」を参照してください。

前提条件

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

    pip install mlflow azureml-mlflow
    

    ヒント

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

  • Azure Machine Learning ワークスペースが必要です。 このチュートリアルに従って作成することができます。

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

実験を構成する

MLflow では、実験と実行に情報が整理されます (Azure Machine Learning では、実行はジョブと呼ばれます)。 実行は既定では、自動的に作成される [既定] という名前の実験にログされます。 追跡が行われるエクスペリエンスを構成できます。

Jupyter Notebook などで対話形式でトレーニングする場合は、MLflow コマンド mlflow.set_experiment() を使用します。 たとえば、次のコード スニペットでは、実験の構成と、その後のジョブの間のログが示されています。

experiment_name = 'hello-world-example'
mlflow.set_experiment(experiment_name)

実行の構成

Azure Machine Learning は、MLflow が実行を呼び出すトレーニング ジョブを追跡します。 実行を使用して、ジョブが実行するすべての処理をキャプチャします。

対話形式で作業する場合、アクティブな実行を必要とする情報をログしようとすると、すぐに MLflow によってトレーニング ルーチンの追跡が開始されます。 たとえば、メトリックをログするときや、パラメーターをログするとき、または Mlflow の自動ログ機能が有効になっているときにトレーニング サイクルを開始するときなどです。 ただし、実験の合計時間を [期間] フィールドにキャプチャする場合は特に、通常は、実行を明示的に開始すると便利です。 実行を明示的に開始するには、mlflow.start_run() を使用 します。

実行を手動で開始したかどうかにかかわらず、最終的には、実行を停止して、実験の実行が完了したことを MLflow に通知し、その状態を [完了] としてマークする必要があります。 これを行うには、mlflow.end_run() を実行するだけです。 ノートブックで作業するときに実行を終了することを忘れないように、手動で実行を開始することを強くお勧めします。

mlflow.start_run()

# Your code

mlflow.end_run()

実行の終了を忘れないようにするには、通常、コンテキスト マネージャー パラダイムを使用すると便利です。

with mlflow.start_run() as run:
    # Your code

mlflow.start_run() で新しい実行を開始するときは、パラメーター run_name を指定すると便利な場合があります。これは、Azure Machine Learning のユーザー インターフェイスで実行の名前に変換され、実行をより迅速に識別するのに役に立ちます。

with mlflow.start_run(run_name="hello-world-example") as run:
    # Your code

自動ログ

MLflow を使用してメトリック、パラメーター、ファイルを手動でログできます。 ただし、MLflow 自動ログ機能に依存することもできます。 MLflow でサポートされている各機械学習フレームワークは、自動的に追跡する内容を決定します。

自動ログ記録を有効にするには、トレーニング コードの前に次のコードを挿入します。

mlflow.autolog()

ワークスペースでのメトリックと成果物の表示

MLflow ログ記録のメトリックと成果物は、お使いのワークスペースで追跡されます。 それらを随時表示するには、Azure Machine Learning Studio でワークスペースに移動し、ワークスペースで名前によって実験を見つけます。

メトリック ビューのスクリーンショット。

右側にグラフをレンダリングするには、ログされたメトリックを選びます。 スムージングを適用する、色を変更する、複数のメトリックを 1 つのグラフにプロットするという方法でグラフをカスタマイズすることができます。 また、サイズ変更、レイアウトの並べ替えも自由に行えます。 目的のビューを作成したら、後で使用できるように保存することや、直接リンクを使ってチームメイトと共有することができます。

MLflow SDK を使用して、メトリック、パラメーター、成果物にプログラムでアクセスしたり、クエリを実行したりすることもできます。 以下の説明に従って、mlflow.get_run() を使用します。

import mlflow

run = mlflow.get_run("<RUN_ID>")

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

print(metrics, params, tags)

ヒント

メトリックの場合、前の例では、そのメトリックの最後の値のみが返されます。 そのメトリックのすべての値を取得する場合は、「実行からパラメーターとメトリックを取得する」で説明されている mlflow.get_metric_history メソッドを使用します。

ファイルやモデルなど、ログした成果物をダウンロードするには、mlflow.artifacts.download_artifacts() を使用できます。

mlflow.artifacts.download_artifacts(run_id="<RUN_ID>", artifact_path="helloworld.txt")

MLflow を使用して Azure Machine Learning の実験と実行から情報を取得して比較する方法の詳細については、「MLflow を使った実験と実行のクエリと比較」を参照してください

サンプルの Notebook

Jupyter Notebook で MLflow を使用する方法の例をお探しの場合は、MLflow の使用 (Jupyter Notebooks) のサンプルのリポジトリを参照してください。

制限事項

MLflow API で使用できる一部のメソッドは、Azure Machine Learning に接続したときに使用できない場合があります。 サポートされている操作とサポートされていない操作の詳細については、実行と実験のクエリを実行するためのサポートマトリックスを参照してください。

次のステップ