MLflowのご紹介：オープンソース機械学習プラットフォーム

[Introducing MLflow: an Open Source Platform for the Complete Machine Learning Lifecycle](https://www.databricks.com/blog/2018/06/05/introducing-mlflow-an-open-source-machine-learning-platform.html)の翻訳です。

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

:::note
2018年の記事です。
:::

> [DatabricksのマネージドMLflowの詳細](https://www.databricks.com/jp/product/managed-mlflow)

機械学習の開発に携わった人は誰も、それが複雑であることを知っています。ソフトウェアは開発における通常の懸念に加え、機械学習(ML)開発では新たな複数の課題が存在します。Databricksでは、MLを活用している数百の企業と共に取り組みを行っており、同じような懸念を何度も伺っています:

1. **無数のツール。** データの準備からモデルのトレーニングに至るMLのライフサイクルのそれぞれのフェーズを、数百のオープンソースツールがカバーしています。しかし、チームがそれぞれのフェーズで一つのツールを選択する従来のソフトウェア開発と異なり、MLでは結果が改善されるのかを確認するために、通常は*利用可能なすべてのツール*(アルゴリズムなど)をトライしたいと考えます。このため、ML開発者は膨大な数のライブラリを活用し、プロダクションに投入する必要があります。
1. **実験の追跡が困難。** 機械学習アルゴリズムには、膨大な数の設定可能なパラメータが存在し、あなたが一人で作業するのかチームで作業するのかにかかわらず、モデルを生成するためのそれぞれの実験でどのパラメーター、コード、データが使用されたのかを追跡することが困難です。
1. **結果の再現が困難。** 詳細な追跡なしには、チームが同じコードを動作させる際にトラブルに見舞われることになるでしょう。あなたがトレーニングコードをプロダクションで使用するためにエンジニアに引き渡すデータサイエンティストであっても、問題をデバックするために過去の取り組みを振り返ろうとしていても、MLワークフローのステップの再現は重要となります。
1. **MLのデプロイが困難。** 膨大な数のデプロイメントツールや、モデルを実行するのに必要な環境(RESTサービング、バッチ推論、モバイルアプリなど)によって、モデルをプロダクションに移行することは困難となります。すべてのライブラリをそれらすべてのツールに移行するために標準化された方法は存在しておらず、新たなデプロイメントごとにリク酢を生じさせることになります。

これらの課題によって、ML開発も従来のソフトウェア開発と同じように、堅牢かつ広く利用されるものになるためには、大きく進化する必要があることは明らかです。このため、多くの企業はMLライフサイクルを管理するために内部で*機械学習プラットフォーム*を構築し始めました。例えば、データの準備やモデルのトレーニング、デプロイメントのために、Facebook、Google、Uberは[FBLearner Flow](https://engineering.fb.com/2016/05/09/core-data/introducing-fblearner-flow-facebook-s-ai-backbone/)、[TFX](http://www.kdd.org/kdd2017/papers/view/tfx-a-tensorflow-based-production-scale-machine-learning-platform)、[Michelangelo](https://eng.uber.com/michelangelo-machine-learning-platform/)を開発しました。しかし、これらの内部プラットフォームは限定的なものであるだけでなく(典型的なMLプラットフォームはビルトインアルゴリズムの小規模なセットあるいは単一のMLライブラリしかサポートしていませんでした)、それらはそれぞれの企業のインフラストラクチャに紐付けられていました。ユーザーは容易に新たなMLライブラリを活用したり、より広いコミュニティに自分たちの成果を共有することができませんでした。

Databricksでは、MLライフサイクルを管理するためのより良い方法があるに違いないと信じており、だからこそ、本日[アルファ](https://github.com/databricks/mlflow)をリリースする[**MLflow: オープンソース機械学習プラットフォーム**](http://www.mlflow.org/)を発表できることを嬉しく思っているのです。

# MLflow：オープンソース機械学習プラットフォーム

MLflowは既存のMLプラットフォームからインスピレーションを得ていますが、2つの観点で*オープン*なものとして設計されています:

1. **オープンなインタフェース:** MLflowはすべてのMLライブラリ、アルゴリズム、デプロイメントツール、言語と動作するように設計されています。小規模なセットのビルトイン機能のみを提供するのでは無く、さまざまなツールから利用できるようにREST APIとシンプルなデータフォーマット(ラムダ関数としてモデルを参照できる等)で構築されています。また、これによって、*既存の*MLコードをにMLflowを容易に追加できるので、すぐにメリットを享受でき、組織の他の人が実行できるように任意のMLライブラリを用いたコードを共有できるようになります。
1. **オープンソース:** 我々は、ユーザーやライブラリ開発者が拡張できるように[オープンソースプロジェクト](https://github.com/databricks/mlflow)としてMLflowをリリースします。さらに、ご自身のコードをオープンソース化したいと思うのであれば、MLflowのオープンフォーマットによって、*組織における*ワークフローステップやモデルの共有が非常に容易になります。

MLflowは現時点ではアルファですが、MLコードを取り扱うための有用なフレームワークを提供するものであると信じており、フィードバックをぜひお聞かせいただきたいと思っています。この記事では、MLflowを詳細にご紹介し、コンポーネントを説明します。

## MLflowアルファリリースのコンポーネント

この最初のMLflowのアルファリリースでは3つのコンポーネントが含まれます:
![](https://www.databricks.com/wp-content/uploads/2018/06/mlflow.png)

## MLflowトラッキング

MLflowトラッキングは、ご自身の機械学習コードを実行する際に後で可視化できるように、パラメーター、コードのバージョン、メトリクスや出力ファイルを記録するためのAPIとUIです。数行のシンプルなコードで、パラメーター、メトリクス、アーティファクトを追跡することができます:

```py
import mlflow

# Log parameters (key-value pairs)
mlflow.log_param("num_dimensions", 8)
mlflow.log_param("regularization", 0.1)

# Log a metric; metrics can be updated throughout the run
mlflow.log_metric("accuracy", 0.1)
...
mlflow.log_metric("accuracy", 0.45)

# Log artifacts (output files)
mlflow.log_artifact("roc.png")
mlflow.log_artifact("model.pkl")
```

結果をローカルファイルあるいやサーバーに記録し、複数のランを比較できるように、いかなる環境(例えば、スタンドアローンのスクリプトやノートブック)でもMLflowトラッキングを活用することができます。Web UIを用いることで、複数のランの出力を参照、比較することができます。また、チームでは異なるユーザーからの結果を比較するためにこのツールを活用することができます:
![](https://www.databricks.com/wp-content/uploads/2018/06/mlflow-web-ui.png)
*MLflowトラッキングのUI*

## MLflowプロジェクト

MLflowプロジェクトは、再利用可能なデータサイエンスコードをパッケージングするための標準フォーマットを提供します。それぞれのプロジェクトは、コードやGitリポジトリのディレクトリであり、依存関係やコードの実行方法を指定するためのディスクリプタファイルを使用します。MLflowプロジェクトは`MLproject`と呼ばれるシンプルなYAMLファイルによって定義されます。

```yaml
name: My Project
conda_env: conda.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}"
```

プロジェクトでは、Conda環境を通じて自身の依存関係を指定することができます。プロジェクトには、名前付きパラメーターを用いてランを起動する複数のエントリーポイントを含めることができます。ローカルファイルあるいはGitリポジトリに対して`mlflow run`コマンドラインツールを用いてプロジェクトを実行することができます:

```sh
mlflow run example/project -P alpha=0.5

mlflow run git@github.com:databricks/mlflow-example.git -P alpha=0.5
```

MLflowは自動でプロジェクトに適切な環境をセットアップして実行します。さらに、プロジェクトでMLflow Tracking APIを使っている場合には、実行されたプロジェクトのバージョン(すなわち、Gitコミット)とすべてのパラメーターを記憶します。これによって、全く同じコードを容易に再実行することができます。

プロジェクトのフォーマットによって、企業であっても、オープンソースコミュニティであっても、容易に再現可能なデータサイエンスコードを共有できるようになります。MLflowトラッキングと組み合わせることで、MLflowプロジェクトは再現可能性、拡張可能性、実験における偉大なツールを提供します。

## MLflowモデル

MLflowモデルは、`フレーバー`と呼ばれる複数のフォーマットで、機械学習モデルをパッケージングするための慣習です。MLflowはさまざまなモデルのフレーバーのデプロイに役立つ多くのツールを提供します。それぞれのMLflowモデルは、任意のファイルとモデル使用できるフレーバーを一覧する`MLmodel`デスクリプタファイルを含むディレクトリとして保存されます。

```yaml
time_created: 2018-02-21T13:21:34.12
flavors:
  sklearn:
    sklearn_version: 0.19.1
    pickled_model: model.pkl
  python_function:
    loader_module: mlflow.sklearn
    pickled_model: model.pkl
```

この例では、このモデルは、`sklearn`あるいは`python_function`モデルフレーバーのいずれかをサポートするツールで使用することができます。

MLflowは、さまざまなプラットフォームに数多くの一般的なモデルタイプをデプロイするためのツールを提供します。例えば、`python_function`フレーバーをサポートするすべてのモデルは、DockerベースのRESTサーバー、Azure MLやAmazon SageMakerのようなクラウドプラットフォームにデプロイすることができ、バッチ推論やストリーミング推論のためにApache [Spark](https://www.databricks.com/jp/spark/about)のユーザー定義関数としてデプロイすることもできます。Tracking APIを用いてMLflowモデルをアーティファクトとして出力した場合には、MLflowは自動でプロジェクトや実行されたランを記録します。

# MLflowを使い始める

MLflowを使い始めるには、[mlflow\.org](http://www.mlflow.org/)の手順に従うか、[Github](https://github.com/databricks/mlflow)のアルファリリースコードをご覧ください。コンセプトやコードに関するフィードバックをお待ちしています！

# DatabricksでホストされているMLflow

ホスティングされているバージョンのMLflowを実行したいのであれば、[databricks\.com/product/managed\-mlflow](https://www.databricks.com/jp/product/managed-mlflow)にサインアップしてください。DatabricksにおけるMLflowは、ノートブック、ジョブ、[Delta Lake](https://www.databricks.com/jp/product/delta-lake-on-databricks)、Databricksのセキュリティモデルを含むDatabricksレイクハウスプラットフォームとインテグレーションされており、セキュアかつプロダクションレベルの方法で既存のMLflowジョブを大規模に実行することができます。

# 次は？

我々はMLflowをスタートさせたばかりであり、今後も多くの機能がもたらされます。プロジェクトのアップデートだけでは無く、新たなメジャーコンポーネント(モニタリングなど)、ライブラリのインテグレーション、すでにリリースされているものに対する拡張(より多くの環境タイプのサポート)などの導入も計画しています。さらなる情報に関しては[我々のブログ記事](https://www.databricks.com/blog)を楽しみにしていてください。

[Spark\+AI SummitのMLflowキーノートを見る](https://vimeo.com/274266886#t=33s)

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

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