0
1

More than 1 year has passed since last update.

DatabricksでMLflow Projectsを実行する

Posted at

Run MLflow Projects on Databricks | Databricks on AWS [2021/10/14時点]の翻訳です。

注意
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

MLflow Projectは、データサイエンスのコードを再利用可能かつ再現可能な方法でパッケージするためのフォーマットです。MLflow Projectsのコンポーネントには、プロジェクトを実行するためのAPI、コマンドラインツールが含まれており、再現性確保のために、パラメーターとソースコードのgitコミットを記録するためのトラッキングコンポーネントと連携します。

本書では、MLflowプロジェクトのフォーマットを説明し、お使いのデータサイエンスコードを容易に垂直スケールできるように、MLflowのCLIを用いてDatabricksクラスターでMLflowプロジェクトをリモートで実行する方法を説明します。

MLflowプロジェクトの実行はDatabricksコミュニティエディションではサポートされていません。

MLflowプロジェクトのフォーマット

任意のローカルディレクトリ、GitリポジトリをMLflowプロジェクトとして取り扱うことができます。以下のルールに基づいてプロジェクトを定義します。

  • プロジェクト名はディレクトリ名となります。
  • Conda環境はconda.yamlが存在すればconda.yamlによって定義されます。conda.yamlが存在しない場合には、MLflowはプロジェクトを実行する際にはPython(特にCondaで利用できる最新のPython)のみを含むConda環境を使用します。
  • プロジェクトにおける任意の.py.shファイルを、明示的にパラメーターを宣言することなしに、エントリーポイントにすることができます。一連のパラメーターを指定してこのようなコマンドを実行する際には、MLflowはコマンドのそれぞれのパラメーターを--key <value>文法を使用して引き渡します。

YAML文法のテキストファイルであるMLプロジェクトファイルを指定することで、更なるオプションを指定することができます。MLプロジェクトファイルのサンプルは以下のようになります。

YAML
name: My Project

conda_env: my_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}"

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

デフォルトワークスペースのDatabricksクラスターでMLflowプロジェクトを実行するには、以下のコマンドを使用します。

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

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

クラスター設定のサンプルは以下の通りとなります。

JSON
{
  "spark_version": "7.3.x-scala2.12",
  "num_workers": 1,
  "node_type_id": "i3.xlarge"
}

ワーカーノードにライブラリをインストールする必要がある場合には、“cluster specification”フォーマットを使用してください。wheelをDBFSにアップロードし、pypi依存関係として指定する必要があります。例を以下に示します。

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

重要!

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

SparkRの使用

MLflowプロジェクトの実行においてSparkRを使用するには、以下のようにお使いのプロジェクトコードの最初にSparkRをインストール、インポートを行う必要があります。

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

library(SparkR)

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

R
sparkR.session()
...

サンプル

このサンプルでは、エクスペリメントの作成、DatabricksクラスターでのMLflowチュートリアルプロジェクトの実行、ジョブ実行のアウトプットの参照、エクスペリメントのランの参照方法を説明します。

前提条件

  1. pip install mlflowを用いてMLflowをインストールします。
  2. Databricks CLIをインストール、設定します。Databricksクラスターでジョブを実行するためにDatabricks CLIの認証機構が必要となります。

ステップ1: エクスペリメントの作成

  1. ワークスペースでCreate > MLflow Experimentを選択します。
  2. NameフィールドにTutorialと入力します。
  3. Createをクリックします。Experiment IDをメモします。この例では、14622565となります。

ステップ2: MLflowチュートリアルプロジェクトの実行

以下のステップでは、環境変数MLFLOW_TRACKING_URIをセットアップし、プロジェクトを実行し、上でメモしたエクスペリメントにトレーニングパラメーター、メトリクス、トレーニングしたモデルを記録します。

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

    Bash
    export MLFLOW_TRACKING_URI=databricks
    
  2. MLflowチュートリアルプロジェクトを実行し、ワインモデルをトレーニングします。<experiment-id>を、上のステップでメモしたExperiment IDで置き換えます。

    Bash
    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ランのアウトプットの最後の行のURLhttps://<databricks-instance>#job/<job-id>/run/1をコピーします。

ステップ3: Databricksジョブ実行の参照

  1. Databricksジョブ実行のアウトプットを参照するために、ブラウザーに以前のステップのURLをオープンします。

ステップ4: エクスペリメント、MLflowラン詳細の参照

  1. Databricksワークスペースでエクスペリメントにナビゲートします。

  2. エクスペリメントをクリックします。

  3. ランの詳細を表示するためにDateカラムのリンクをクリックします。

Job OutputフィールドのLogsリンクをクリックすることで、ランのログを参照することも可能です。

リソース

MLflowプロジェクトのサンプルについては、お使いのコードにML機能を用意に取り込むことを狙いとした、すぐに利用できるプロジェクトのリポジトリがあるMLflow App Libraryを参照ください。

Databricks 無料トライアル

Databricks 無料トライアル

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1