PythonによるDatabricks MLflowクイックスタートガイド

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

[Quickstart Python \| Databricks on AWS](https://docs.databricks.com/applications/mlflow/quick-start-python.html) [2021/3/30時点]の翻訳です。

[MLflow](https://www.mlflow.org/)は、機械学習のエンドツーエンドのライフサイクルを管理するためのオープンソースプラットフォームです。MLflowはメトリクス(モデルのロスなど)、パラメーター(学習率など)、学習モデルをロギングするためのシンプルなAPIを提供し、トレーニング結果の分析、モデルのデプロイを容易にします。

本記事では以下を説明します。

- [MLflowのインストール](#MLflowのインストール)
- [ランの自動ロギング](#ランの自動ロギング)
- [結果の表示](#結果の表示)
- [追加のメトリクス、パラメーター、モデルの追跡](#追加のメトリクスパラメーターモデルの追跡)
- [サンプルノートブック](#サンプルノートブック)
- [追加情報](#追加情報)

# MLflowのインストール

[Databricks機械学習ランタイム](https://qiita.com/taka_yayoi/items/824b507019d3ade7eedc)を使用しているのであれば、既にMLflowはインストールされています。そうでない場合には、[PyPIからMLflowパッケージをインストール(英語)](https://docs.databricks.com/libraries/cluster-libraries.html)します。

# ランの自動ロギング

MLflowは様々な機械学習フレームワークで記述されたトレーニングのコードを自動でロギングする`mlflow.<framework>.autolog()`を提供しています。トレーニング前に、このAPIを呼び出すことで、モデル特有のメトリクス、パラメーター、モデルのアーティファクトをロギングできます。

**TensorFlow**

```python
# Also autoinstruments tf.keras
import mlflow.tensorflow
mlflow.tensorflow.autolog()
```

**Keras**

```python
# Use import mlflow.tensorflow and mlflow.tensorflow.autolog() if using tf.keras
import mlflow.keras
mlflow.keras.autolog()
```

**XGBoost**

```python
import mlflow.xgboost
mlflow.xgboost.autolog()
```

**LightGBM**

```python
import mlflow.lightgbm
mlflow.lightgbm.autolog()
```

**Scikit-learn**

```python
import mlflow.sklearn
mlflow.sklearn.autolog()
```

**PySpark**

`pyspark.ml`でチューニングを行なっている際には、メトリクス、モデルは自動的にMLflowにロギングされます。[Apache Spark MLlib and automated MLflow tracking(英語)](https://docs.databricks.com/applications/machine-learning/automl-hyperparam-tuning/mllib-mlflow-integration.html)を参照ください。

# 結果の表示

機械学習コードを実行後、エクスペリメントランサイドバーを使って、結果を参照することができます。どのように、エクスペリメント、ラン、ノートブックのバージョンを参照するかについては、[View notebook experiment(英語)](https://docs.databricks.com/applications/mlflow/tracking.html#view-notebook-experiment)を参照ください。

# 追加のメトリクス、パラメーター、モデルの追跡

直接[MLflow Tracking logging APIs(英語)](https://www.mlflow.org/docs/latest/tracking.html#logging-functions)を呼び出すことで、追加情報をロギングすることができます。

- 数値のメトリクス

```python
import mlflow
mlflow.log_metric("accuracy", 0.9)
```

- トレーニングパラメーター

```python
import mlflow
mlflow.log_param("learning_rate", 0.001)
```

- モデル

**Scikit-learn**

```Python
import mlflow.sklearn
mlflow.sklearn.log_model(model, "myModel")
```

**PySpark**

```python
import mlflow.spark
mlflow.spark.log_model(model, "myModel")
```

**XGBoost**

```python
import mlflow.xgboost
mlflow.xgboost.log_model(model, "myModel")
```

**TensorFlow**

```python
import mlflow.tensorflow
mlflow.tensorflow.log_model(model, "myModel")
```

**Keras**

```python
import mlflow.keras
mlflow.keras.log_model(model, "myModel")
```

**PyTorch**

```python
import mlflow.pytorch
mlflow.pytorch.log_model(model, "myModel")
```

**SpaCy**

```python
import mlflow.spacy
mlflow.spacy.log_model(model, "myModel")
```

- 他のアーティファクト(ファイル)

```python
import mlflow
mlflow.log_artifact("/tmp/my-file", "myArtifactPath")
```

# サンプルノートブック

## 要件

Databricksランタイム6.4以降かDatabricksランタイムML6.4以降が必要です。

## ノートブック

PythonでMLflowによるトラッキングを始めるおすすめの方法は、`autolog()`APIを使うというものです。MLflowのオートロギング機能によって、一行追加するだけで、結果のモデル、パラメーター、メトリクスを自動で記録することができます。以下のノートブックでは、オートロギングを実行するための手順を説明しています。

- [MLflow autologging quickstart Python notebook(英語)](https://docs.databricks.com/_static/notebooks/mlflow/mlflow-quick-start-python.html)

それぞれのトレーニングで、何をロギングするのかを自分で設定したい、テーブルやグラフなど追加のアーティファクトを記録したい場合には、以下のノートブックで説明されているようにMLflowのロギングAPIを使うことができます。

- [MLflow logging API quickstart Python notebook(英語)](https://docs.databricks.com/_static/notebooks/mlflow/mlflow-logging-api-quick-start-python.html)

# 追加情報

- [MLflow overview(英語)](https://docs.databricks.com/applications/mlflow/index.html)
- [Databricksにおける機械学習トレーニングのトラッキング](https://qiita.com/taka_yayoi/items/ba0c7f46ff7c3dbf87bb)
- [Run MLflow Projects on Databricks(英語)](https://docs.databricks.com/applications/mlflow/projects.html)
- [DatabricksのMLflowを用いたモデルのログ、ロード、登録、デプロイ](https://qiita.com/taka_yayoi/items/e265d48a3e3473edd1b6)

### Databricks 無料トライアル

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