Databricksの機械学習モデルの自動ロギング


[Databricks Autologging \| Databricks on AWS](https://docs.databricks.com/applications/mlflow/databricks-autologging.html) [2022/1/26時点]の翻訳です。

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

Databricks Autologgingは、Databricksにおける機械学習トレーニングセッションに対して、自動のエクスペリメントトラッキングの体験を提供するために、MLflowの自動ロギングを拡張するノーコードのソリューションです。Databricks Autologgingを用いることで、様々な著名ない機械学習ライブラリのモデルをトレーニングする際、モデルのパラメーター、メトリクス、ファイル、リネージュ情報は自動で記録されます。トレーニングのセッションは、[MLflowトラッキングのラン](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb)として記録されます。モデルのファイルもトラッキングされるので、容易に[MLflowのモデルレジストリ](https://qiita.com/taka_yayoi/items/e7a4bec6420eb7069995)に登録し、[MLflowのモデルサービング](https://qiita.com/taka_yayoi/items/b5a5f83beb4c532cf921)を用いてリアルタイムスコアリングを行うためにデプロイすることができます。

以下の動画では、インタラクティブなPythonノートブックにおけるscikit-learnモデルのトレーニングセッションに対するDatabricks Autologgingを示しています。トラッキング情報は自動で記録され、Experiment RunsサイドバーとMLflow UIに表示されます。
![](https://docs.databricks.com/_images/autologging-example.gif)

# 要件

- Databricks Autologgingは、Databricks機械学習ランタイム9.0以降、全ての地域でGA(Generally Available)となっています。
- Databricks機械学習ランタイム9.0以降では、特定のプレビューの地域で利用することができます。

# 動作原理

DatabricksクラスターにインタラクティブPythonノートブックをアタッチした際、Databricks Autologgingは皆様のモデルトレーニングセッションのトラッキングをセットアップするために、自動で[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)を呼び出します。ノートブックでモデルのトレーニングを行う際、モデルトレーニングの情報は自動で[MLflowトラッキング](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb)によって追跡されます。このモデルトレーニング情報がどのようにセキュアに管理されるのかに関しては、[セキュリティ、データ管理](#セキュリティデータ管理)を参照ください。

[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)呼び出しに対するデフォルト設定は以下のようになります。

```py:Python
mlflow.autolog(
    log_input_examples=False,
    log_model_signatures=True,
    log_models=True,
    disable=False,
    exclusive=True,
    disable_for_unsupported_versions=True,
    silent=True
)
```

[オートロギングの設定のカスタマイズ](#ロギングの挙動のカスタマイズ)を行うことも可能です。

# 使用法

DatabricksのAutologgingを使用するには、インタラクティブなDatabricks Pythonノートブックを用いて、[サポートされているフレームワーク](#サポートされる環境フレームワーク)で機械学習モデルのトレーニングを行います。Databricks Autologgingは自動でモデルのリネージュ情報、パラメーター、そしてメトリクスを[MLflowトラッキング](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb)に記録します。[オートロギングの設定のカスタマイズ](#ロギングの挙動のカスタマイズ)を行うことも可能です。

:::note info
**注意**
Databricks Autologgingは`mlflow.start_run()`を用いた[MLflow fluent API](https://www.mlflow.org/docs/latest/python_api/mlflow.html)を用いて作成されたランには適用されません。この場合、MLflowランに自動でロギングされたコンテンツを保存するには`mlflow.autolog()`を呼び出す必要があります。[追加コンテンツの追跡](#追加コンテンツの追跡)をご覧ください。
:::

# ロギングの挙動のカスタマイズ

ロギングをカスタマイズするには、[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)を使用します。この関数では、モデルロギング(`log_models`)を有効化するための設定パラメーター(`log_input_examples`)を提供し、入力サンプルを収集し、警告の設定(`silent`)などを行います。

# 追加コンテンツの追跡

Databricks Autologgingによって作成されるMLflowランの追加のメトリクス、パラメーター、ファイル、メタデータを追跡するには、DatabricksのインタラクティブPythonノートブックで以下のステップを実行します。

1. `exclusive=False`を指定して[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)を呼び出します。
1. [mlflow\.start\_run\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.start_run)を用いてMLflowのランをスタートします。この呼び出しを`with mlflow.start_run()`の中にラップすることができます。これを行う際、処理が完了するとランは自動で終了します。
1. トレーニング前のコンテンツをトラッキングするために、[mlflow\.log\_param\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.log_param)のような[MLflowトラッキングのメソッド](https://mlflow.org/docs/latest/python_api/mlflow.html)を使用します。
1. Databricks Autologgingでサポートされているフレームワークで一つ以上の機械学習モデルをトレーニングします。
1. トレーニング後のコンテンツをトラッキングするために[MLflowトラッキングのメソッド](https://mlflow.org/docs/latest/python_api/mlflow.html)を使用します。
1. ステップ2で`with mlflow.start_run()`を使用しない場合、[mlflow\.end\_run\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.end_run)を用いてMLflowランを終了します。

例を以下に示します。

```py:Python
import mlflow
mlflow.autolog(exclusive=False)

with mlflow.start_run():
  mlflow.log_param("example_param", "example_value")
  # <your model training code here>
  mlflow.log_param("example_metric", 5)
```

# Databricks Autologgingの無効化

DatabricksのインタラクティブPythonノートブックでDatabricks Autologgingを無効化するには、`disable=True`を指定して[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)を呼び出します。

```py:Python
import mlflow
mlflow.autolog(disable=True)
```

管理者は、[Adminコンソール](https://docs.databricks.com/administration-guide/admin-console.html)の**Advanced**タブでワークスペース上の全てのクラスターでDatabricks Autologgingを無効化することができます。この変更を反映するにはクラスターを再起動する必要があります。

# サポートされる環境、フレームワーク

Databricks AutologgingはインタラクティブPythonノートブックでサポートされており、以下のMLフレームワークで使用することができます。

- scikit-learn
- Apache Spark MLlib
- TensorFlow
- Keras
- PyTorch Lightning
- XGBoost
- LightGBM
- Gluon
- Fast.ai (バージョン 1.x)
- statsmodels

サポートされるそれぞれのフレームワークの詳細については、[MLflow automatic logging](https://mlflow.org/docs/latest/tracking.html#automatic-logging)を参照ください。

# セキュリティ、データ管理

Databricks Autologgingによって追跡される全てのモデルトレーニング情報はMLflowトラッキングに格納され、[MLflowエクスペリメントのアクセス権](https://qiita.com/taka_yayoi/items/2dd6711b7b254505e4a3#mlflow%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%A8%A9)によってセキュリティ保護されます。[MLflowトラッキング](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb)のAPIあるいはUIを用いて、モデルトレーニング情報の共有、修正、削除を行うことができます。

# 管理

管理者は、[Adminコンソール](https://docs.databricks.com/administration-guide/admin-console.html)の**Advanced**タブでワークスペースにおける全てのインタラクティブノートブックのセッションでDatabricks Autologgingを有効化・無効化することができます。この変更を反映するにはクラスターを再起動する必要があります。

# 制限

- Databricks AutologgingはDatabricks機械学習ランタイム8.4以下、Databricksランタイムではサポートされていません。これらのバージョンのランタイムでオートロギングを使用するには、明示的に[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)を呼び出す必要があります。
- Databricks AutologgingはDatabricksジョブではサポートされていません。ジョブからオートロギングを使用するには、明示的に[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)を呼び出す必要があります。
- Databricks Autologgingはお使いのDatabricksクラスターのドライバーノードでのみ有効化されます。ワーカーノードからオートロギングを使用するには、それぞれのワーカーノードで実行されるコードで明示的に[mlflow\.autolog\(\)](https://mlflow.org/docs/latest/python_api/mlflow.html#mlflow.autolog)を呼び出す必要があります。
- XGBoostとscikit-learnのインテグレーションはサポートされていません。

# Apache Spark MLlib、Hyperoptおよび自動化されたMLflowトラッキング

Databricks Autologgingは、既存の[Apache Spark MLlib](https://docs.databricks.com/applications/machine-learning/automl-hyperparam-tuning/mllib-mlflow-integration.html)、[Hyperopt](https://docs.databricks.com/applications/machine-learning/automl-hyperparam-tuning/hyperopt-spark-mlflow-integration.html)と自動化MLflowトラッキングインテグレーションの挙動を変更しません。

:::note info
**注意**
Databricks機械学習ランタイム10.1では、自動化MLflowトラッキングとApache Spark MLlibの`CrossValidator`と`TrainValidationSplit`モデルとのインテグレーションの無効化は、全てのApache Spark MLlibモデルに対するDatabricks Autologging機能も無効化します。
:::

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)