MLflow を使ってメトリックを追跡する

完了

スクリプトを使ってモデルをトレーニングする場合、スクリプトに MLflow を含めて、任意のパラメーター、メトリック、成果物を追跡できます。 Azure Machine Learning のジョブとしてスクリプトを実行すると、各実行のすべての入力パラメーターと出力を確認できます。

MLflow について

MLflow は、機械学習のライフサイクル全体を管理するように設計されたオープンソース プラットフォームです。 オープンソースであるため、さまざまなプラットフォームでモデルをトレーニングするときに使用できます。 ここでは、MLflow と Azure Machine Learning ジョブをどのように統合できるかについて説明します。

MLflow を使用して機械学習ジョブを追跡する場合、次の 2 つのオプションがあります。

  • mlflow.autolog() を使用して自動ログを有効にする
  • mlflow.log_* を使用して、カスタム メトリックを追跡するためのログ関数を使用する

これらのオプションのどちらを使用する場合も、MLflow を使用できるように環境を事前に設定する必要があります。

環境に MLflow を組み込む

トレーニング ジョブ中に MLflow を使用するには、mlflow および azureml-mlflow pip パッケージを、スクリプトを実行するコンピューターにインストールする必要があります。 そのため、これら 2 つのパッケージを環境に組み込む必要があります。 Conda 環境を表す YAML ファイルを参照することで、環境を作成できます。 Conda 環境の一部として、これらの 2 つのパッケージを組み込むことができます。

たとえば、このカスタム環境では、pip を使用して mlflowazureml-mlflow をインストールします。

name: mlflow-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - pip
  - pip:
    - numpy
    - pandas
    - scikit-learn
    - matplotlib
    - mlflow
    - azureml-mlflow

環境を定義して登録した後、ジョブを送信するときにその環境を参照するようにします。

自動ログを有効にする

機械学習用の一般的なライブラリのいずれかを使う場合は、MLflow で自動ログを有効にできます。 自動ログにより、誰かが何をログするか指定しなくても、パラメーター、メトリック、モデルがログされます。

自動ログは、次のライブラリでサポートされています。

  • Scikit-learn
  • TensorFlow と Keras
  • XGBoost
  • LightGBM
  • Spark
  • Fastai
  • Pytorch

自動ログを有効にするには、トレーニング スクリプトに次のコードを追加します。

import mlflow

mlflow.autolog()

MLflow を使用してメトリックをログに記録する

トレーニング スクリプトで、MLflow を使ってログするメトリックを決定できます。

ログに記録する値の種類に応じて、実験の実行で MLflow コマンドを使用してメトリックを保存します。

  • mlflow.log_param(): 単一のキーと値のパラメーターをログに記録します。 ログに記録する入力パラメーターに対して、この関数を使用します。
  • mlflow.log_metric(): 単一のキーと値のメトリックをログに記録します。 値は数値である必要があります。 実行時に保存する出力に対して、この関数を使用します。
  • mlflow.log_artifact(): ファイルをログに記録します。 ログに記録し、最初にイメージ ファイルとして保存するプロットに対して、この関数を使用します。

既存のトレーニング スクリプトに MLflow を追加するには、次のコードを追加します。

import mlflow

reg_rate = 0.1
mlflow.log_param("Regularization rate", reg_rate)

ヒント

MLflow Tracking の使用方法について詳しくは、MLflow のドキュメントに関するページを参照してください。

ジョブを送信する

最後に、Azure Machine Learning でトレーニング スクリプトをジョブとして送信する必要があります。 トレーニング スクリプトで MLflow を使い、ジョブとして実行すると、追跡されたすべてのパラメーター、メトリック、成果物は、ジョブ実行と共に格納されます。

通常どおりジョブを構成します。 必要なことは、ジョブで参照する環境に必要なパッケージが含まれていること、ログするメトリックがスクリプトに記述されてることの確認だけです。