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

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

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

エクスペリメント、実行、モデルによるMLflow追跡

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

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

MLflow 3 では、LoggedModels によって生成されたモデルの概念を 実行 さまざまなトレーニングと評価にわたってモデルのライフサイクルを追跡するための個別のエンティティとして確立します。

注記

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 クラスタリングにプリインストールされています。 MLflowDatabricks Runtimeクラスタリングで を使用するには、mlflow ライブラリをインストールする必要があります。ライブラリをクラスタリングにインストールする手順については、「 クラスタにライブラリをインストールする」を参照してください。 MLflow 3 とその最先端の追跡機能を使用するには、必ず最新バージョンにアップグレードしてください ( 「MLflow 3 のインストール」を参照)。

MLflow の実行がログに記録される場所

Databricks は、セットアップなしでエクスペリメント データをワークスペースに保存するホスト型 MLflow 追跡サーバーを提供します。 必要に応じて、異なる追跡サーバーを使用するように MLflow を構成することもできます。

MLflow の追跡は、次の 2 つの設定によって制御されます。

  • 追跡 URI: 使用するサーバー (デフォルトから現在のワークスペース Databricks ) を決定します。
  • エクスペリメント : ログに記録するエクスペリメントを決定します
Python
import mlflow

# By default MLflow logs to the Databricks-hosted workspace tracking server. You can connect to a different server using the tracking URI.
mlflow.set_tracking_uri("databricks://remote-workspace-url")

# Set experiment in the tracking server
mlflow.set_experiment("/Shared/my-experiment")

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

詳細については、MLflow データの保存場所を制御する方法については、「MLflow データの保存場所を選択する」を参照してください。

ログ実行とモデルをエクスペリメントに

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

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

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

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

MLflow 3 の MLflow 自動ログ Python ノートブック

Open notebook in new tab

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

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

MLflow 3 の 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)

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

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

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

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

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

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

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

MLflowトラッキングの例

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