みどりのジーパン

Data Science / Data Engineering / MLOpsを勉強中

MLflow Recipesを調べてみた所感

先日、Databricks社のセミナーを聴講させていただきました。 DataOpsやMLOps, DevOpsという言葉も使われており、データに関することはなんでもサポートしてくれるサービスを目指すという世界観が良いなと思いました。

ここで、MLflow2.0の機能説明もありました。 Databricksで開発を行うと、基本的にMLflowの機能がすぐに使用できるようになっているため、説明があったのだと思います。

その中でMLflow Recipesという機能の発表がありました。 一見便利そうな機能ではあったのですが、時間が限られたセミナーということもあり、具体的にどんなことができるのかを理解することができませんでした。

今回は、そんなMLflow Recipesについて、どんなことができるのか、何が嬉しいのかを簡単に調査してみます。

もし内容に間違いがあったり、機能のアップデートがありましたらコメントいただければ幸いです。

先にまとめ

調査した上での筆者が感想が大部分です。

  • MLflow Recipesは、機械学習パイプラインをテンプレートを使って素早く開発できるものである。
  • 一般化されたテンプレートを使うだけで、YAMLファイルと機械学習モデル部分のみの開発に注力できる。
    • モデル部分にAutoMLを使用できる。
    • データの取り込みからデプロイまでのフローを、コマンドを叩くだけで図示することができる。
  • 時系列や深層学習を行うには(不可能ではないと思うが)制約が大きそうな印象がある。

以下、このようなまとめに至った調査内容です。 お時間のある方は読んでください。

まずは公式発表を読んでみる

まず全容を掴むために、Databricks社のブログを読みました。 以下、引用になります。

MLflow Recipes enables data scientists to rapidly develop high-quality models and deploy them to production. With MLflow Recipes, you can get started quickly using predefined solution recipes for a variety of ML modeling tasks, iterate faster with the Recipes execution engine, and easily ship robust models to production by delivering modular, reviewable model code and configurations without any refactoring.

要は、「データサイエンティストのモデル開発を加速化します」と言っています。

では具体的に、どのように加速化するのでしょうか。

上記の引用部分から気になったフレーズを以下の文章をピックアップし、読み解いてみることにしました。

  1. using predefined solution recipes for a variety of ML modeling tasks

  2. reviewable model code and configurations without any refactoring

  3. including support for classification models

既存の機械学習パイプラインのテンプレートを使用できる

1. using predefined solution recipes for a variety of ML modeling tasks

一般的な回帰問題に対応するテンプレートをコピーして、機械学習パイプラインの開発を行うことができます。テンプレートはデータの取り込み、加工、モデル学習、デプロイまでをサポートしています。 これがMLflow Recipesの一番の推しポイントみたいです。

テンプレートは下図の構成になっています。一般的な回帰問題であれば以下の構成で十分だと考えます。

https://user-images.githubusercontent.com/78067366/200443468-bde64875-c3af-4e89-a36d-7b5b73297d51.png

テンプレートのリポジトリはこちらです。これをコピーして開発することになります。

github.com

これは特にPoCと本開発のギャップを埋めるのに大きく効果があると思います。

PoCのフェーズにおいては、モデリングを中心にスピード重視の開発になります。 ただスピードを重視しすぎて、本開発や運用を無視したコーディングを行うと、いざ本開発に差し掛かった際に大規模なリファクタリングが必要となります。

MLflow Recipes のテンプレートを使用すれば、PoCフェーズから運用を見据えたコード構成の中で開発を行うことができます。これを「データサイエンティストのモデル開発を加速化します」と表現しているのかなと考えます。

テンプレート化されているのでレビューが比較的易しい

2. reviewable model code and configurations without any refactoring

テンプレートを使用することができるので、実装者に依存したファイルやコード構成を抑制する効果がありそうです。

主に編集するのは、以下の画像のように、FIXMEと記入されている部分です。

https://www.mlflow.org/docs/latest/_images/recipes_databricks_fixme.png

テンプレートで既に大まかなパイプラインの構造ができているので、実装者もレビュワー間の想定にミスマッチなども起こりにくいです。結果的にレビューのし易さに繋がるのではないかと考えます。

分類問題用のテンプレートも存在する

3. including support for classification models

これまでは主に回帰問題におけるテンプレートを軸に記述してきましたが、同様のことが分類問題でもサポートされているようです。

github.com

カスタムモデルも可能ではあるが...

Databricks社のブログには言及がなかった部分ですが、調べていて気になったのがモデルの部分です。

ドキュメントなどでは、AutoMLやLight GBMなどが主に使用されていました。多くのMLタスクにこれで対応することができます。

一方で、プロジェクトによっては深層学習や時系列、複数モデルのアンサンブルなどを使用したい場合もあります。 その場合にはユーザーがモデルをカスタマイズすることもできます。

しかし、カスタマイズする場合には、以下の引用のように、scikit-learnと同じような構造でないといけないようです。

Returns an unfitted estimator that defines fit() and predict() methods. The estimator's input and output signatures should be compatible with scikit-learn estimators.

github.com

挙動をしっかり確認したわけではないので憶測でしか話せませんが、時系列や深層学習などをscikit-learn風に寄せて実装することは可能ではあると思います。しかし、実装構成をどうしても強引に寄せていくことには避けられず、かえって労力が必要になりそうな印象です。自分たちでゼロから開発した方が結果的に楽なのではという感想を持ちました。

動画も確認してみる

vimeo.com

最後に動画を軽く観てみます。

Databricksで使うことを前提とした機能かもしれませんが、パイプライン全体像の図や、特徴量の分布などをGUI上で確認をしているシーンがありました。エラーや精度悪化に素早く対処したい場合に大きな効果がありそうです。

終わりに

今回はMLflow Recipesの機能について調べてみました。 テンプレートのおかげでデータサイエンティストが運用を見据えた開発を素早く行うことができます。

機会があれば実際に動かして、挙動を確認してみたいです。

参考資料

画像なども以下の記事から拝借しております。本文中に貼ったURLなども再掲しています。

www.databricks.com

www.mlflow.org

github.com