Azure Databricks で MLflow プロジェクトを実行する

MLflow プロジェクトはサポートされなくなりました。

このドキュメントは廃止され、更新されない可能性があります。 このコンテンツに記載されている製品、サービス、またはテクノロジはサポートされなくなりました。

MLflow プロジェクトは、再利用可能で再現可能な方法でデータ サイエンス コードをパッケージ化するための形式です。 MLflow Projects コンポーネントには、プロジェクトを実行するための API とコマンド ライン ツールが含まれています。また、追跡コンポーネントと統合して、再現性のためにソース コードのパラメーターと git コミットを自動的に記録します。

この記事では、MLflow プロジェクトの形式と、MLflow CLI を使用して Azure Databricks クラスターで MLflow プロジェクトをリモートで実行する方法について説明します。これにより、データ サイエンス コードを垂直方向にスケーリングしやすくなります。

MLflow プロジェクトの形式

任意のローカル ディレクトリまたは Git リポジトリを MLflow プロジェクトとして扱うことができます。 次の規則では、プロジェクトを定義します。

  • プロジェクトの名前はディレクトリの名前です。
  • ソフトウェア環境が存在する場合は、 python_env.yamlで指定されます。 python_env.yaml ファイルが存在しない場合、MLflow は、プロジェクトの実行時に Python (具体的には、virtualenv で使用できる最新の Python) のみを含む virtualenv 環境を使用します。
  • プロジェクト内の .py または .sh ファイルはエントリ ポイントにすることができ、パラメーターは明示的に宣言されていません。 このようなコマンドを一連のパラメーターで実行すると、MLflow は --key <value> 構文を使用してコマンド ラインで各パラメーターを渡します。

さらにオプションを指定するには、MLproject ファイル (YAML 構文のテキスト ファイル) を追加します。 MLproject ファイルの例は次のようになります。

name: My Project

python_env: python_env.yaml

entry_points:
  main:
    parameters:
      data_file: path
      regularization: { type: float, default: 0.1 }
    command: 'python train.py -r {regularization} {data_file}'
  validate:
    parameters:
      data_file: path
    command: 'python validate.py {data_file}'

Databricks Runtime 13.0 ML 以降の場合、MLflow Projects は Databricks ジョブの種類クラスター内で正常に実行できません。 既存の MLflow プロジェクトを Databricks Runtime 13.0 ML 以降に移行するには、 MLflow Databricks Spark ジョブ プロジェクトの形式を参照してください。

MLflow Databricks Spark ジョブ プロジェクトの形式

MLflow Databricks Spark ジョブ プロジェクトは、MLflow 2.14 で導入された MLflow プロジェクトの一種です。 このプロジェクトの種類は、Spark ジョブ クラスター内からの MLflow プロジェクトの実行をサポートしており、 databricks バックエンドを使用してのみ実行できます。

Databricks Spark ジョブ プロジェクトでは、 databricks_spark_job.python_file または entry_pointsを設定する必要があります。 どちらかを指定しないか、両方の設定を指定しないと、例外が発生します。

MLproject設定を使用するdatabricks_spark_job.python_file ファイルの例を次に示します。 この設定では、Python 実行ファイルとその引数にハードコーディングされたパスを使用します。

name: My Databricks Spark job project 1

databricks_spark_job:
  python_file: 'train.py' # the file which is the entry point file to execute
  parameters: ['param1', 'param2'] # a list of parameter strings
  python_libraries: # dependencies required by this project
    - mlflow==2.4.1 # MLflow dependency is required
    - scikit-learn

MLproject設定を使用するentry_points ファイルの例を次に示します。

name: My Databricks Spark job project 2

databricks_spark_job:
  python_libraries: # dependencies to be installed as databricks cluster libraries
    - mlflow==2.4.1
    - scikit-learn

entry_points:
  main:
    parameters:
      model_name: { type: string, default: model }
      script_name: { type: string, default: train.py }
    command: 'python {script_name} {model_name}'

entry_points設定では、次のようなコマンド ライン パラメーターを使用するパラメーターを渡すことができます。

mlflow run . -b databricks --backend-config cluster-spec.json \
 -P script_name=train.py -P model_name=model123 \
 --experiment-id <experiment-id>

Databricks Spark ジョブ プロジェクトには、次の制限が適用されます。

  • このプロジェクトの種類では、 MLproject ファイルで次のセクション ( docker_envpython_env、または conda_env) の指定はサポートされていません。
  • プロジェクトの依存関係は、python_libraries セクションの databricks_spark_job フィールドで指定する必要があります。 Python のバージョンは、このプロジェクトの種類ではカスタマイズできません。
  • 実行中の環境では、メインの Spark ドライバー ランタイム環境を使用して、Databricks Runtime 13.0 以降を使用するジョブ クラスターで実行する必要があります。
    • 同様に、プロジェクトに必要として定義されているすべての Python 依存関係は、Databricks クラスターの依存関係としてインストールする必要があります。 この動作は、ライブラリを別の環境にインストールする必要がある以前のプロジェクト実行動作とは異なります。

MLflow プロジェクトを実行する

既定のワークスペースの Azure Databricks クラスターで MLflow プロジェクトを実行するには、次のコマンドを使用します。

mlflow run <uri> -b databricks --backend-config <json-new-cluster-spec>

ここで、 <uri> は MLflow プロジェクトを含む Git リポジトリ URI またはフォルダーであり、 <json-new-cluster-spec>new_cluster構造を含む JSON ドキュメントです。 Git URI は、 https://github.com/<repo>#<project-folder>の形式にする必要があります。

クラスターの仕様の例を次に示します。

{
  "spark_version": "7.3.x-scala2.12",
  "num_workers": 1,
  "node_type_id": "Standard_DS3_v2"
}

ワーカーにライブラリをインストールする必要がある場合は、"クラスター仕様" 形式を使用します。 Python ホイール ファイルは DBFS にアップロードし、 pypi 依存関係として指定する必要があることに注意してください。 例えば次が挙げられます。

{
  "new_cluster": {
    "spark_version": "7.3.x-scala2.12",
    "num_workers": 1,
    "node_type_id": "Standard_DS3_v2"
  },
  "libraries": [
    {
      "pypi": {
        "package": "tensorflow"
      }
    },
    {
      "pypi": {
        "package": "/dbfs/path_to_my_lib.whl"
      }
    }
  ]
}

Von Bedeutung

  • .egg および .jar 依存関係は、MLflow プロジェクトではサポートされていません。
  • Docker 環境での MLflow プロジェクトの実行はサポートされていません。
  • Databricks で MLflow プロジェクトを実行するときは、新しいクラスター仕様を使用する必要があります。 既存のクラスターに対するプロジェクトの実行はサポートされていません。

SparkR の使用

MLflow プロジェクトの実行で SparkR を使用するには、まず、次のように SparkR をインストールしてインポートする必要があります。

if (file.exists("/databricks/spark/R/pkg")) {
    install.packages("/databricks/spark/R/pkg", repos = NULL)
} else {
    install.packages("SparkR")
}

library(SparkR)

その後、プロジェクトで SparkR セッションを初期化し、通常どおり SparkR を使用できます。

sparkR.session()
...

この例では、実験を作成し、Azure Databricks クラスターで MLflow チュートリアル プロジェクトを実行し、ジョブの実行出力を表示し、実験で実行を表示する方法を示します。

要求事項

  1. pip install mlflowを使用して MLflow をインストールします。
  2. Databricks CLI をインストールして構成します。 Azure Databricks クラスターでジョブを実行するには、Databricks CLI 認証メカニズムが必要です。

手順 1: 実験を作成する

  1. ワークスペースで、[ MLflow 実験 > 作成] を選択します。

  2. [名前] フィールドに「Tutorial」と入力します。

  3. Create をクリックしてください。 実験 ID をメモします。 この例では、14622565です。

    実験 ID

手順 2: MLflow チュートリアル プロジェクトを実行する

次の手順では、 MLFLOW_TRACKING_URI 環境変数を設定し、プロジェクトを実行し、前の手順で説明した実験にトレーニング パラメーター、メトリック、トレーニング済みモデルを記録します。

  1. MLFLOW_TRACKING_URI環境変数を Azure Databricks ワークスペースに設定します。

    export MLFLOW_TRACKING_URI=databricks
    
  2. MLflow チュートリアル プロジェクトを実行し、 ワイン モデルをトレーニングします。 <experiment-id>は、前の手順で説明した実験 ID に置き換えます。

    mlflow run https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine -b databricks --backend-config cluster-spec.json --experiment-id <experiment-id>
    
    === Fetching project from https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine into /var/folders/kc/l20y4txd5w3_xrdhw6cnz1080000gp/T/tmpbct_5g8u ===
    === Uploading project to DBFS path /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Finished uploading project to /dbfs/mlflow-experiments/<experiment-id>/projects-code/16e66ccbff0a4e22278e4d73ec733e2c9a33efbd1e6f70e3c7b47b8b5f1e4fa3.tar.gz ===
    === Running entry point main of project https://github.com/mlflow/mlflow#examples/sklearn_elasticnet_wine on Databricks ===
    === Launched MLflow run as Databricks job run with ID 8651121. Getting run status page URL... ===
    === Check the run's status at https://<databricks-instance>#job/<job-id>/run/1 ===
    
  3. MLflow 実行出力の最後の行にある URL https://<databricks-instance>#job/<job-id>/run/1 をコピーします。

手順 3: Azure Databricks ジョブの実行を表示する

  1. 前の手順でコピーした URL をブラウザーで開き、Azure Databricks ジョブの実行出力を表示します。

    ジョブ実行の出力

手順 4: 実験と MLflow の実行の詳細を表示する

  1. Azure Databricks ワークスペースの実験に移動します。

    実験に移動する

  2. 実験をクリックします。

    実験を表示する

  3. 実行の詳細を表示するには、[日付] 列のリンクをクリックします。

    実行の詳細

[ジョブ出力] フィールドの [ログ] リンクをクリックすると、実行から ログ を表示できます。

リソース

MLflow プロジェクトの例については、 MLflow アプリ ライブラリを参照してください。このライブラリには、ML 機能をコードに簡単に含めることを目的とした、すぐに実行できるプロジェクトのリポジトリが含まれています。