MLflowを使用したモデル開発のトラッキング

MLflow トラッキングを使用すると、機械学習モデルまたはディープラーニング モデルのトレーニングに関連するノートブックとトレーニング データセット、パラメーター、メトリクス、タグ、アーティファクトをログに記録できます。 MLflow の使用を開始するノートブックの例については、チュートリアル: Databricks のエンドツーエンド ML モデルを参照してください。

エクスペリメントとランを使用したMLflowトラッキング

モデル開発プロセスは反復的であり、モデルの開発と最適化の際に作業をトラッキングするのは難しい場合があります。 Databricks では、 MLflowトラッキング を使用して、試したパラメーター設定や組み合わせ、モデルのパフォーマンスへの影響など、モデル開発プロセスをトラッキングできます。

MLflow トラッキングでは、 エクスペリメントラン を使用して、機械学習とディープラーニングのモデル開発をログに記録し、追跡します。 ランは、モデル コードの 1 回の処理実行です。 MLflow ランの過程で、パラメーターと結果を記録済みモデルを作成できます。 エクスペリメントは、関連するランのコレクションです。 エクスペリメントでは、ランを比較およびフィルター処理して、モデルのパフォーマンスと、そのパフォーマンスがパラメーター設定や入力データなどにどのように依存するかを理解できます。

2024 年 3 月 27 日より、 MLflow 、既存および新規のすべてのランに対する パラメーター、タグ、メトリック ステップ の合計数と、既存および新規のすべての拡張に対する ラン の合計数にクォータ制限が課せられます。リソース制限を参照してください。 エクスペリメントあたりラン数の拡張クォータに達した場合、Databricks のPythonのラン削除APIを使用して 不要になったランを削除することをお勧めします。他のクォータ制限に達した場合、Databricks では、制限内に抑えるためにログ記録戦略を調整することをお勧めします。 この制限を増やす必要がある場合は、ユースケースの簡単な説明、提案された緩和策が機能しない理由、および要求する新しい制限を添えて、Databricks アカウント チームに連絡してください。

MLflow トラッキング API

MLflowトラッキングAPI は、モデルのランからパラメーター、メトリクス、タグ、および成果物をログに記録します。トラッキングAPI は、MLflow トラッキングサーバーと通信します。 Databricks を使用すると、Databricks でホストされているトラッキングサーバーがデータをログに記録します。 ホストされている MLflow トラッキング サーバーには、Python、Java、および RのAPIがあります。

MLflow は Databricks Runtime ML クラスターにプリインストールされています。 Databricks RuntimeクラスターでMLflowを使用するには、mlflow ライブラリをインストールする必要があります。ライブラリをクラスターにインストールする手順については、クラスタにライブラリをインストールするを参照してください。

MLflowのランが記録される場所

すべての MLflowランはアクティブなエクスペリメントに記録され、次のいずれかの方法で設定できます。

アクティブなエクスペリメントが設定されていない場合、ランは ノートブックのエクスペリメントに記録されます。

エクスペリメントを実行しているワークスペース以外のワークスペースで、リモートでホストされている MLflow Tracking サーバーにエクスペリメントの結果を記録するには、 mlflow.set_tracking_uri()を使用してリモート ワークスペースを参照するようにトラッキング URI を設定し、 mlflow.set_experiment()を使用してリモート ワークスペース内のエクスペリメントへのパスを設定します。

mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")

エクスペリメントをローカルで実行していて、エクスペリメントの結果を Databricks MLflow Tracking サーバーに記録する場合は、Databricks ワークスペース インスタンス (DATABRICKS_HOST) と Databricks パーソナルアクセストークン (DATABRICKS_TOKEN) を指定します。 次に、 mlflow.set_tracking_uri()を使用してワークスペースを参照するように追跡 URI を設定し、 mlflow.set_experiment()を使用してエクスペリメントへのパスを設定できます。 DATABRICKS_HOST 環境変数と DATABRICKS_TOKEN 環境変数の値を見つける場所の詳細については、Databricksパーソナルアクセストークン認証の実行を参照してください。

次のコード例は、これらの値の設定を示しています。


os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"

mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")

エクスペリメントへのランの記録

MLflowは多くの機械学習フレームワークやディープラーニングフレームワークで書かれたトレーニングコードを自動的にログに記録できます。 これは、MLflowトラッキングの利用を開始する最も簡単な方法です。 ノートブックの例を参照してください。

ログに記録するパラメーターとメトリクスをより詳細に制御したり、 CSV ファイルやプロットなどの追加のアーティファクトをログに記録したりするには、 MLflow logging APIを使用します。 ノートブックの例を参照してください。

自動ログ記録を使用してモデル開発を追跡する

このノートブックの例は、 scikit-learn で自動ログを使用する方法を示しています。 他の Python ライブラリとの自動ログ記録に関する情報については、MLflow 自動ログ記録のドキュメントを参照してください。

MLflow 自動ログ記録 Python ノートブック

ノートブックを新しいタブで開く

ログ API を使用してモデル開発をトラッキングする

このノートブック例では、 Python ロギング API の使用方法を示します。 MLflow には、REST、R、Java APIsもあります。

MLflow ログ API Python ノートブック

ノートブックを新しいタブで開く

ワークスペース エクスペリメントへのランの記録

デフォルトでは、 Databricks ノートブックでモデルをトレーニングすると、実行はノートブック エクスペリメントに記録されます。 ノートブック内で開始された MLflow 実行のみをノートブック エクスペリメントに記録できます。

任意のノートブックまたはAPIから起動されたMLflowランは、ワークスペース エクスペリメントにログに記録できます。ワークスペース エクスペリメントにランを記録するには、ノートブックまたは API 呼び出しで次のようなコードを使用します。

experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)

ワークスペース エクスペリメントを作成する手順については、ワークスペース エクスペリメントを作成するを参照してください。 ログ記録された実行の表示に関する情報については、ノートブック エクスペリメントの参照およびワークスペース エクスペリメントの参照を参照してください。

Databricks外部からのMLflowトラッキングサーバーへのアクセス

また、MLflow CLI などを使用して、Databricks の外部からトラッキングサーバーへの書き込みと追跡サーバーからの読み取りを行うこともできます。 Databricks の外部から MLflowトラッキングサーバーにアクセスするを参照してください。

MLflowのランをプログラムを使って分析する

MLflow 実行データには、次の 2 つの DataFrame APIsを使用してプログラムでアクセスできます。

この例では、MLflow Python クライアントを使用して、時間の経過に伴う評価メトリクスの変化を視覚化し、特定のユーザーによって開始された実行数を追跡し、すべてのユーザーの実行の合計数を測定するダッシュボードを構築する方法を示します。

モデルトレーニングメトリクスと出力が異なる理由

機械学習で使用されるアルゴリズムの多くは、アルゴリズム自体の中にサンプリングやランダムな初期条件などのランダムな要素を持っています。 これらのアルゴリズムのいずれかを使用してモデルをトレーニングすると、同じ条件で実行を開始した場合でも、各実行で結果が同じにならない場合があります。 多くのライブラリは、これらの確率的要素の初期条件を修正するためのシードメカニズムを提供します。 ただし、シードによって制御されない他の変動源があるかもしれません。 一部のアルゴリズムはデータの順序に敏感であり、分散機械学習アルゴリズムもデータのパーティション分割方法の影響を受ける可能性があります。 一般に、この変動は重要ではなく、モデル開発プロセスでは重要ではありません。

順序とパーティション分割の違いによって生じる変動を制御するには、PySpark 関数の repartitionsortWithinPartitionsを使用します。