MLflow についてまとめて翻訳してみた

##はじめに
MLflow について、下記のリンク先の動画と記事を元に内容をまとめて翻訳しました。

■本動画リンク
[MLflow: Infrastructure for a Complete Machine Learning Life Cycle with Mani Parkhe & Tomas Nykod](https://www.youtube.com/watch?v=ek4mJnDw8eE&t=446s)

■本記事リンク
[Introducing MLflow: an Open Source Machine Learning Platform](https://databricks.com/blog/2018/06/05/introducing-mlflow-an-open-source-machine-learning-platform.html)

##MLflow - 完璧な機械学習（ML）ライフサイクルのためのインフラ

### ML 開発の困難さ
図は一般的な ML のライフサイクルとなります。
基本的には取得したデータをチェックした後にトレーニングし、デプロイした後で新たにデータを取り込ませたりすることで改善させる、といったサイクルの繰り返しになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/de73f8e9-60f6-3d95-62d4-072b902dbaf5.png)
ML の開発が困難な理由としては、主に3点あります。

- どのライフサイクルにおいても利用できるツールが豊富にある
- それぞれのライフサイクルで使用するツールが必ずしも同じでは無い
- 次のライフサイクルにデータやモデル、コードを渡すのに苦労する


### MLflow について
MLflow は、そんな ML 開発における問題点を解決するオープンソースの ML プラットフォームです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/e249cb68-9dfc-6238-3da1-75641c9a2720.png)
MLflow の主な特徴は4つあります。

- どの ML ライブラリや言語にも対応
- どの環境でも同じ様に実行可能
- 1人、または複数人の場合でも利用できるデザイン設計
- ビッグデータや Apache Spark に対応可能


### MLflow デザインの哲学
MLflow のデザイン哲学は大きく分けて2つあります。
「「API ファースト」のオープンプラットフォーム」と、「モジュール設計」です。

■デザイン哲学

- 「API ファースト」のオープンプラットフォーム
 - どんなライブラリや言語、でも実行可能な環境
 - 既存の ML プラットフォームやワークフロとの統合が可能
- モジュール設計
 -  個々人で異なるコンポーネントの利用が可能
 -  ML ツールデベロッパが多くのユーザと簡単に繋がることが可能

## MLflow コンポーネント
MLflow の主なコンポーネントは3つあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/a736ada6-124f-b450-ceb1-47c6fe5cea54.png)
■コンポーネント

- MLflow Tracking
 - 実験の記録やクエリを行う
- MLflow Projects
 - どのプラットフォームでも再利用可能なフォーマットにパッケージング
- MLflow Models
 - 様々なデプロイツールをサポートするモデルフォーマット

###MLflow Tracking
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/808776e6-0236-05fa-7b80-34f74a0ebd56.png)
MLflow Tracking は 機械学習コードを実行して視覚化した際、パラメータやコードのバージョン、そしてメトリクスなどのロギングや、ファイルのアウトプットをするための API と UI です。

■MLflow Tracking の特徴

- 簡単なコード数行で、パラメータやメトリクスなどのトラッキングが可能
- notebook やスタンドアローンなスクリプトなど、どの環境でも利用可能
- ローカル環境のファイルやサーバにログの結果を保存し、複数の実行の比較が可能

###MLflow Projects
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/be61a0eb-3f27-9f96-2be0-c180ba3a63fb.png)
MLflow Projects は再利用可能なデータサイエンスコードをパッケージングするためのスタンダードなフォーマットを提供するサービスです。

■MLflow Projects の特徴

- Porject はそれぞれコードや Git リポジトリがついたディレクトリ
- 記述ファイルを使って依存関係とコードの実行方法を特定

###MLflow Models
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/3de71a54-0f39-8f4f-a773-7eeac09f6a37.png)
MLflow Models は “flavors” と呼ばれる 複数のモデルで ML モデルをパッケージングする方法です。MLFlow は、異なる flavor のモデルをユーザが開発できるよう、様々なツールを提供します。MLflow モデルは、任意のファイルを含んだディレクトリと使用可能な flavors をリストする MLmodel 記述ファイルとに保存されます。


- MLflow Models の例

```python

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 モデル flavor か python_function モデル flavor をサポートするツールと使用することができます。
MLflow は、一般的なモデルを様々なプラットフォームに開発するためのツールを提供します。例えば、python_function flavor をサポートするモデルを Docker ベースの REST サーバや Azure ML、Amazonn SageMaker、そしてバッチとストリーミング推論のための Apache Spark のユーザ定義関数としてデプロイすることができます。
MLflow Models をトラッキング API を使用してアーティファクトとして出力すると、MLflow はどのプロジェクトで実行したのかを自動的に記録します。


##おわりに
MLflow についてのまとめは以上となります。
本編では、より詳し解説やデモなども紹介されているので、本編もぜひ確認ください。