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 に接続したときに使用できない場合があります。 サポートされている操作とサポートされていない操作の詳細については、「実行と実験のクエリを実行するためのサポートマトリックス」をご覧ください。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning をお試しください。
MLflow SDK パッケージ
mlflow
と MLflow 用の Azure Machine Learningazureml-mlflow
プラグインをインストールします。pip install mlflow azureml-mlflow
ヒント
SQL ストレージ、サーバー、UI、またはデータ サイエンスの依存関係のない軽量 MLflow パッケージであるパッケージ
mlflow-skinny
を使用できます。 主に必要とするのは MLflow の追跡およびログ機能であり、デプロイを含め、完全な機能のスイートのインポートは必要としないユーザーにはmlflow-skinny
が推奨されます。Azure Machine Learning ワークスペース。 ワークスペースを作成するには、「機械学習リソースの作成チュートリアル」を参照してください。 ワークスペース内で MLflow 操作を実行するために必要なアクセス許可を確認します。
リモート追跡 (つまり、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 を介してプログラムでアクセスしたりできます。
スタジオでメトリックと成果物を表示する方法。
[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 を使った実験と実行のクエリと比較」をご覧ください。