次の方法で共有


MLflow を使用してモデル開発を追跡する

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

MLflow の実験、実行、およびモデルを用いたトラッキング

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

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

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

2024 年 3 月 27 日以降、MLflow では、既存および新規のすべての実行の合計パラメーター、タグ、メトリック ステップの数と、既存および新規のすべての実験の合計実行数にクォータ制限が適用されます。「リソース制限」を参照してください。 1 実験あたりの実行数のクォータに達した場合、Databricks では Python の実行削除 API を使用して、不要になった実行を削除することをお勧めします。 他のクォータ制限に達した場合、Databricks では、制限を超えないようにログ記録の方法を調整することをお勧めします。 この制限の引き上げが必要な場合は、Databricks アカウント チームに連絡して、ユース ケースの簡単な説明、推奨されている軽減策ではうまくいかない理由、依頼する新しい制限をお知らせください。

MLflow 追跡 API

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

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

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

Databricks には、セットアップを必要とせず、ワークスペースに実験データを格納するホスト型 MLflow 追跡サーバーが用意されています。 必要に応じて、異なる追跡サーバーを使用するように MLflow を構成することもできます。

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

  • 追跡 URI: 使用するサーバーを決定します (既定では現在の Databricks ワークスペース)
  • 実験: ログに記録するそのサーバー内の実験を決定します
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 ログ API を使用します。 ノートブックの を参照してください。

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

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

MLflow 3

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

ノートブックを入手

MLflow 2.x

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

ノートブックを入手

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

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

MLflow 3

MLflow 3 用 MLflow ログ API Python ノートブック

ノートブックを入手

MLflow 2.x

MLflow ログ API Python ノートブック

ノートブックを入手

ワークスペースの実験に対する実行をログに記録する

既定では、Databricks ノートブックでモデルをトレーニングすると、実行がノートブックの実験に記録されます。 ノートブック内で開始された MLflow 実行のみをノートブックの実験に記録できます。

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

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

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

プログラムによって MLflow 実行を分析する

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

  • MLflow Python クライアント search_runs API は pandas DataFrame を返します。
  • MLflow 実験データ ソースは、Apache Spark DataFrame を返します。

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

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

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

順序とパーティション分割の違いに起因するバリエーションを制御するには、PySpark 関数の repartitionsortWithinPartitions を使用します。

MLflowトラッキングの例

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