MLflowとは
公式ドキュメントのトップページによると以下。
- オープンソースで、機械学習の一連のサイクルを管理するためのソフトウェア。
- MLflowはPython, R, JavaのAPIを持つ他、REST APIやCLIもあるので様々なライブラリや言語と合わせて利用することができる。
- 以下4つの機能を持つ。
- MLflow tracking
- 学習に利用するコードやパラメータ、学習の結果を記録することで、過去の学習記録を簡単にトラッキングできるようにする。
- MLflow Projects
- コードを再利用可能にする仕組み。
- MLflow Models
- 機械学習モデルをパッケージングし、様々なプラットフォームで利用な可能な形式で提供することを可能にする
- MLflow Model Registry
- 機械学習モデルを保存するレジストリ。バージョンや学習の情報などを提供する。
- MLflow tracking
Tutorial
https://www.mlflow.org/docs/latest/tutorials-and-examples/tutorial.html
このチュートリアルの内容
- 線形回帰モデルを学習
- コードをパッケージングし再利用可能な状態にする
- モデルをHTTPで利用可能な形でデプロイする
実践
# 環境構築
pipenv install "mlflow[extras]"
学習を実行(MLflow Tracking)
以下を写経
https://github.com/mlflow/mlflow/blob/master/examples/sklearn_elasticnet_wine/train.py
# 実行
## ハイパーパラメータを適当に変えていくつか作ってみる
$ pipenv run python sklearn_elasticnet_wine_train.py
$ pipenv run python sklearn_elasticnet_wine_train.py 0.6 0.6
$ pipenv run python sklearn_elasticnet_wine_train.py 0.4 0.4
# mlrunsというディレクトリができる
学習を結果を確認
# UIを起動
pipenv run mlflow ui
- モデルの作成時刻やハイパーパラメータ、学習結果などを閲覧可能。
- モデルごとの比較が可能
モデルをパッケージングする(MLflow Projects)
基本的なディレクトリを作る
mkdir sklearn_elasticnet_wine
mv sklearn_elasticnet_wine.py sklearn_elasticnet_wine/train.py
Projectsファイルを作成
こちらに記載のある二つのファイルを作成する。
※ conda.yaml
は、UIのモデル詳細にあったのでコピペした
実行
condaは使いたくないので --no-conda
を利用
pipenv run mlflow run sklearn_elasticnet_wine -P alpha=0.42 --no-conda
MLProjectsの実行環境は、conda
, Docker
, System Environment
(今回)の3つを選択可能。
これで、モデル生成に利用したコードと実行環境を別環境でも再現できるようになった。
モデルをサーブする(MLflow Model)
生成されたモデルアーティファクト
モデル作成のステップで作成された mlruns/0/ハッシュ値/artifacts/model/
ディレクトリに必要なものが格納されている。
- MLmodel: モデルに関するメタ情報
- model.pkl: 学習済みモデルをシリアライズしたもの
ちなみに、MLProjectsで利用したconda.yaml
もここに入っている。
web APIとしてデプロイ
こちらも、condaを入れたくないので --no-conda
で動かす
pipenv run mlflow models serve -m mlruns/0/2ca121e400654d5898de9f4f9e1fe928/artifacts/model -p 1234 --no-conda
リクエストできた。
curl -X POST -H "Content-Type:application/json; format=pandas-split" --data '{"columns":["alcohol", "chlorides", "citric acid", "density", "fixed acidity", "free sulfur dioxide", "pH", "residual sugar", "sulphates", "total sulfur dioxide", "volatile acidity"],"data":[[12.8, 0.029, 0.48, 0.98, 6.2, 29, 3.33, 1.2, 0.39, 75, 0.66]]}' http://127.0.0.1:1234/invocations
[4.479576972663602]
Top comments (0)