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

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 のランが記録される場所

すべての 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 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 を使用してモデル開発を追跡する方法を示しています。