メインコンテンツまでスキップ

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

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

エクスペリメントとランに対するMLflowトラッキング

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

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

注記

2024 年 3 月 27 日以降、 MLflow では、既存および新規のすべてのランのパラメーター、タグ、メトリクス ステップの合計数、および既存および新規のすべてのエクスペリメントの合計実行数にクォータ制限が課されます ( 「リソースの制限」を参照してください)。 エクスペリメントクォータあたりのランのクォータに達した場合、Databricks では、Python のPythonのdelete run APIを用いて 不要になったランを削除することをお勧めします。他のクォータ制限に達した場合、Databricks では、制限内に収まるようにロギング戦略を調整することをお勧めします。 この制限の引き上げが必要な場合は、Databricks アカウント チームに連絡して、ユース ケースの簡単な説明、推奨される軽減アプローチが機能しない理由、および要求する新しい制限をお知らせください。

MLflow トラッキング API

MLflow Tracking API は、モデル実行からパラメーター、メトリクス、タグ、アーティファクトをログに記録します。Tracking 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() を使用してリモート ワークスペース内のエクスペリメントへのパスを設定します。

Python
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 個人用アクセス トークン認証の実行」を参照してください。

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

Python

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 ノートブック

Open notebook in new tab

ロギング API を使用してモデル開発を追跡する

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

MLflow ログ API Python ノートブック

Open notebook in new tab

ワークスペース エクスペリメントへのランのロギング

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

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

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

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

Databricks の外部から MLflow 追跡サーバーにアクセスする

また、トラッキング サーバーの外部からトラッキング サーバーに対して書き込みを行ったり、トラッキング サーバーからの読み取りを行ったりすることもできます (例 Databricks MLflow CLI)。「Databricks の外部から MLflow トラッキングサーバーにアクセスする」を参照してください。

プログラムによるMLflowランの解析

MLflow ランのデータには、次の 2 つのデータフレーム APIを使用して、プログラムでアクセスできます。

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

モデルトレーニング メトリクスと出力が異なる場合があるのはなぜか

ML で使用されるアルゴリズムの多くには、アルゴリズム自体にサンプリングやランダムな初期条件などのランダムな要素があります。 これらのアルゴリズムのいずれかを使用してモデルをトレーニングすると、同じ条件でランを開始した場合でも、ランごとに結果が同じにならない場合があります。 多くのライブラリは、これらの確率要素の初期条件を固定するためのシード処理メカニズムを提供しています。 ただし、シードによって制御されないバリエーションの他のソースが存在する場合があります。 一部のアルゴリズムはデータの順序に敏感であり、分散 ML アルゴリズムはデータのパーティション分割方法によっても影響を受ける場合があります。 一般に、このバリエーションは重要ではなく、モデル開発プロセスでは重要ではありません。

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

MLflowトラッキングの例

次のノートブックは、MLflow を使用してモデル開発を追跡する方法を示しています。