機械学習とディープ ラーニングのトレーニング実行を追跡する
MLflow 追跡コンポーネントを使用すると、機械学習またはディープ ラーニング モデルのトレーニングに関連するソース プロパティ、パラメーター、メトリック、タグ、成果物をログに記録できます。 MLflow の使用を開始するには、「MLflow のクイックスタート チュートリアル」のいずれかを試してください。
MLflow 追跡は、実験と実行という 2 つの概念に基づいています。
注意
2024 年 3 月 27 日以降、MLflow では、既存および新規のすべての実行の合計パラメーター、タグ、メトリック ステップの数と、既存および新規のすべての実験の合計実行数にクォータ制限が適用されます。「リソース制限」を参照してください。 1 実験あたりの実行数のクォータに達した場合、Databricks では Python の実行削除 API を使用して、不要になった実行を削除することをお勧めします。 他のクォータ制限に達した場合、Databricks では、制限を超えないようにログ記録の方法を調整することをお勧めします。 この制限の引き上げが必要な場合は、Databricks アカウント チームに連絡して、ユース ケースの簡単な説明、推奨されている軽減策ではうまくいかない理由、依頼する新しい制限をお知らせください。
MLflow 実験は、MLflow 実行のための組織とアクセス制御の主要な単位であり、すべての MLflow 実行は実験に属します。 実験を使用すると、実行を視覚化、検索、比較できるだけでなく、他のツールで分析するために実行成果物およびメタデータをダウンロードできます。
MLflow の実行はモデル コードの 1 回の実行に対応します。
MLflow Tracking API は、モデルの実行からパラメーター、メトリック、タグ、成果物をログに記録します。 Tracking API は MLflow 追跡サーバーと通信します。 Databricks を使用すると、Databricks でホストされる追跡サーバーでデータがログに記録されます。 ホストされている MLflow 追跡サーバーには、Python、Java、R の API があります。
注意
MLflow は Databricks Runtime ML クラスターにインストールされます。 Databricks Runtime クラスターで MLflow を使用するには mlflow
ライブラリをインストールする必要があります。 クラスターにライブラリをインストールする手順については、「クラスターにライブラリをインストールする」を参照してください。 MLflow 用にインストールする特定のパッケージは次のとおりです。
- Python の場合は、[ライブラリ ソース] [PyPI] を選択し、[パッケージ] フィールドに「
mlflow
」と入力します。 - R の場合は、[ライブラリ ソース] [CRAN] を選択し、 [パッケージ] フィールド に「
mlflow
」と入力します。 - Scala の場合は、次の 2 つのパッケージをインストールします。
- [ライブラリ ソース] [Maven] を選択し、[座標] フィールドに「
org.mlflow:mlflow-client:1.11.0
」と入力します。 - [ライブラリ ソース] [PyPI] を選択し、[パッケージ] フィールドに「
mlflow
」と入力します。
- [ライブラリ ソース] [Maven] を選択し、[座標] フィールドに「
すべての MLflow 実行はアクティブな実験に記録されます。これは、次のいずれかの方法を使用して設定できます。
- mlflow.set_experiment() コマンドを使用する。
- mlflow.start_run() コマンドの
experiment_id
パラメーターを使用する。 - MLflow 環境変数 MLFLOW_EXPERIMENT_NAME または MLFLOW_EXPERIMENT_ID の 1 つを設定する。
アクティブな実験が設定されていない場合、実行はノートブックの実験に記録されます。
実験を実行しているワークスペース以外のワークスペースでリモートでホストされている 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 追跡サーバーに記録したい場合は、Databricks ワークスペース インスタンス (DATABRICKS_HOST
) と Databricks 個人用アクセス トークン (DATABRICKS_TOKEN
) を指定します。 次に、mlflow.set_tracking_uri()
でワークスペースを参照する追跡 URI を設定し、mlflow.set_experiment()
を使用して実験へのパスを設定できます。 DATABRICKS_HOST
と DATABRICKS_TOKEN
の環境変数の値を入手できる場所の詳細については、「 Azure 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 実行のみをノートブックの実験に記録できます。 任意のノートブックまたは API から起動された MLflow の実行は、ワークスペースの実験に記録できます。 ログに記録された実行の表示の詳細については、「ノートブックの実験を表示する」および「ワークスペースの実験を表示する」を参照してください。
MLflow Python API、Java API、Scala API、R API を使用して、実行を開始し、実行データを記録できます。 詳細については、「MLflow ノートブックの例」を参照してください。
Azure Databricks の外部から追跡サーバーに対して書き込みおよび読み取りを行うこともできます (たとえば MLflow CLI を使用するなど)。 「Azure Databricks の外部から MLflow 追跡サーバーにアクセスする」を参照してください。
次の 2 つの DataFrame API を使用して、プログラムで MLflow 実行データにアクセスできます。
- MLflow Python クライアント search_runs API は pandas DataFrame を返します。
- MLflow 実験データ ソースは、Apache Spark DataFrame を返します。
この例では、MLflow Python クライアントを使用して、時系列に沿った評価メトリックの変化を視覚化し、特定のユーザーによって開始された実行の数を追跡し、すべてのユーザーの実行の総数を測定するダッシュボードを構築する方法を示します。
ML で使用されるアルゴリズムの多くは、アルゴリズム自体内のサンプリングやランダムな初期条件などの、ランダムな要素を持っています。 これらのアルゴリズムのいずれかを使用してモデルをトレーニングすると、同じ条件で実行を開始した場合でも、各実行で結果が同じではない可能性があります。 多くのライブラリには、これらの確率的要素の初期条件を修正するためのシード処理メカニズムが用意されています。 ただし、シードによって制御されない、他の要因によるバリエーションが存在する可能性があります。 一部のアルゴリズムはデータの順序に反応します。分散 ML アルゴリズムもデータのパーティション分割方法の影響を受ける可能性があります。 一般に、このバリエーションは重大ではなく、モデル開発プロセスでは重要ではありません。
順序とパーティション分割の違いに起因するバリエーションを制御するには、PySpark 関数の repartition と sortWithinPartitions を使用します。
次のノートブックでは、いくつかの種類のモデルをトレーニングし、MLflow でトレーニング データを追跡する方法と、Delta Lake に追跡データを格納する方法を示します。