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

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

追跡 は、実行する実験に関する関連情報を保存するプロセスです。 保存された情報 (メタデータ) はプロジェクトによって異なり、次の情報を含めることができます。

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

Azure Machine Learning でジョブを操作している場合、Azure Machine Learning は、コード、環境、入出力データなど、実験に関する情報を自動的に追跡します。 ただし、モデル、パラメーター、メトリックなどの他のものは、特定のシナリオに固有であるため、モデル ビルダーによって追跡を構成する必要があります。

Note

Azure Databricks で実行されている実験を追跡する場合は、「MLflow と Azure Machine Learning を使用して Azure Databricks ML の実験を追跡する」をご覧ください。 Azure Synapse Analytics で実行されている実験の追跡については、「MLflow と Azure Machine Learning を使用して Azure Synapse Analytics ML の実験を追跡する」をご覧ください。

実験を追跡する利点

Azure Machine Learning でジョブを使用してトレーニングする場合でも、ノートブックで対話形式でトレーニングする場合でも、機械学習の実践者が実験を追跡することを強くお勧めします。 実験の追跡を使用すると、次のことができます。

  • すべての機械学習実験を 1 か所で整理します。 その後、実験を検索してフィルター処理し、ドリルダウンして、以前実行した実験の詳細を確認できます。
  • 余分な作業をほとんど行わずに、実験を比較し、結果を分析して、モデルのトレーニングをデバッグできます。
  • 実験を再現または再実行して結果を検証できます。
  • 他のチームメイトが何を行っているかを確認し、実験結果を共有して、プログラムで実験データにアクセスすることで、コラボレーションを改善できます。

実験の追跡に MLflow を使用する理由とは?

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

サポートされている MLflow と Azure Machine Learning の機能の詳細については、「MLflow と Azure Machine Learning」をご覧ください。

制限事項

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

前提条件

  • 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 では、実験と実行に情報が整理されます (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 の自動ログ機能が有効になっているときにトレーニング サイクルを開始するときなどに開始されます。 ただし、実験の合計時間を [期間] フィールドにキャプチャする場合は特に、通常は、実行を明示的に開始すると便利です。 実行を明示的に開始するには、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 Autologging を有効化

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

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

mlflow.autolog()

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

MLflow ログ記録のメトリックと成果物は、お使いのワークスペースで追跡されます。 いつでもスタジオで表示およびアクセスしたり、MLflow SDK を介してプログラムでアクセスしたりできます。

スタジオでメトリックと成果物を表示する方法。

  1. [Azure Machine Learning Studio] に移動します。

  2. ワークスペースに移動します。

  3. ワークスペース内の名前で実験を見つけます。

  4. 右側にグラフをレンダリングするには、ログされたメトリックを選びます。 スムージングを適用する、色を変更する、複数のメトリックを 1 つのグラフにプロットするという方法でグラフをカスタマイズすることができます。 また、サイズ変更、レイアウトの並べ替えも自由に行えます。

  5. 目的のビューを作成したら、後で使用できるように保存し、直接リンクを使ってチームメイトと共有します。

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

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 を使った実験と実行のクエリと比較」をご覧ください。