AIモデルを構築する上で分析基盤で保証すべき拡張性～MLOps/AIOpsをはじめるそのまえに～

## 概要

AI（Machine Learing：ML）のモデル構築を、3つの観点を考慮したうえで、MLOpsに取り込みを実施することについて説明します。その観点で、Databricks（≒Spark+MLflow+Hyperopt）での検討例を提示しますので、AWS SageMaker、Azure ML等をご利用中の方は自分なりのプラクティスを検討するための参考にしてください。

まず、MLのモデルを、組織として大規模に実施するためには、以下の3つの観点が必要となります。MLOpsを実施することで3が注目されがちですが、1と2も考慮する必要があります。

| 番号 | 項目           | 実施内容                                                         |
| ---- | -------------- | ------------------------------------------------------------ |
| 1    | ML処理の拡張性 | モデル構築を実施する処理の並列化の実施                             |
| 2    | ML管理の拡張性 | ML関連情報の集約化によるML管理オペレーションの低コストで実施するためのMLライフサイクル支援ツールの利用 |
| 3    | ML運用の拡張性 | MLOpsによる運用オペレーションの削減を行うDevOpsツールの利用                          |



そもそも、MLOpsとはどういったものであるかについては、Googles様が素晴らしい[ドキュメント](https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning)を公開しております。下記の図がそのドキュメントの一部であり、MLOpsの全体像を端的に表しております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/352ff831-2292-8463-4b1b-7c9b0bd5a9e2.png)
引用元：[MLOps: 機械学習における継続的デリバリーと自動化のパイプライン  | Google Cloud](https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning#mlops_level_2_cicd_pipeline_automation)

上記図から、私は、MLOpsとは、MLのモデルの構築にDevOpsの要素を取り入れて、MLモデル作成の自動化パイプラインをベースにしたシステム開発手法として解釈しました。そのMLOpsを組織として実施し続けるためには、①自動化パイプラインの実行を大規模に並列処理で実施（＝ML処理の拡張性の担保）して、②作成したモデルの情報をてき適切に一元的な管理（＝ML管理の拡張性の担保）ができ、③それらのプロセスを低運用コストで実現（＝ML運用の拡張性の担保）が必要となります。


## Databricksで実現する3つの拡張性
Databricksでは、３つの拡張性を下記の方法により担保することが可能です。また、自動化パイプラインをDatabricksの単一サービスで実施できるため、サービス間の連携を考慮する労力が最小限で済みます。

- ML処理の拡張性
    - シングルマシン処理の並列化 
        - Databricks AutML
        - Scikit-learn + Hyperopt
    - グループごとのデータに対してシングルマシン処理の並列化
        - Hyperopt + PandasUDF
    - マルチマシンでの並列化処理
        - SparkML
- ML管理の拡張性
    - Feature Store機能
    - MLflow TrackingによるMLモデル情報の収集
    - MLflow Model Registryによるモデル情報の集約
    - ライブラリのバージョン管理
- ML運用の拡張性
    - Databricks ReposによるGit連携機能
    - Databricks Jobsによるパイプラインの実施

### ML処理の拡張性の補足
Databricks社の資料にて、３つの分散処理が紹介されています。従来のScikit-learnを利用する方法によるMLモデルの開発は、3つの分散処理には該当せず、シングルマシン処理です。

シングルマシン処理の並列化が下記図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9e74f07b-5e8c-d092-5dce-4baa9a4523b0.png)
引用元：[Tuning ML Models: Scaling, Workflows, and Architecture (slideshare.net)](https://www.slideshare.net/databricks/tuning-ml-models-scaling-workflows-and-architecture/10)


グループごとのデータに対してシングルマシン処理の並列化が下記図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/75efdb4f-b09c-fba4-ee73-32923445c40c.png)
引用元：[Tuning ML Models: Scaling, Workflows, and Architecture (slideshare.net)](https://www.slideshare.net/databricks/tuning-ml-models-scaling-workflows-and-architecture/12)

マルチマシンでの並列化処理が下記図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3faf3ea2-b59e-3275-840e-22ccdcc6451c.png)
引用元：[Tuning ML Models: Scaling, Workflows, and Architecture (slideshare.net)](https://www.slideshare.net/databricks/tuning-ml-models-scaling-workflows-and-architecture/11)



### 関連情報

- ML処理の拡張性関連
    - シングルノード処理の並列化
        - [Prophet と Spark を活用した時系列予測 - Databricks](https://databricks.com/jp/blog/2020/01/27/time-series-forecasting-prophet-spark.html)
        - [Scikit-learn と MLflow-Azure Databricks を使用したハイパーパラメーターチューニングの並列化](https://docs.microsoft.com/ja-jp/azure/databricks/applications/machine-learning/automl-hyperparam-tuning/hyperopt-spark-mlflow-integration)
        - [Tuning ML Models: Scaling, Workflows, and Architecture (slideshare.net)](https://www.slideshare.net/databricks/tuning-ml-models-scaling-workflows-and-architecture/10)
    - グループごとのデータに対してシングルマシン処理の並列化
        - [Tuning ML Models: Scaling, Workflows, and Architecture (slideshare.net)](https://www.slideshare.net/databricks/tuning-ml-models-scaling-workflows-and-architecture/12)
    - マルチノードでの並列化処理
        - [Azure Databricks で Apache Spark MLlib を使用する](https://docs.microsoft.com/ja-jp/azure/databricks/applications/machine-learning/train-model/mllib/)
        - [Prophet と Spark を活用した時系列予測 - Databricks](https://databricks.com/jp/blog/2020/01/27/time-series-forecasting-prophet-spark.html)
        - [Tuning ML Models: Scaling, Workflows, and Architecture (slideshare.net)](https://www.slideshare.net/databricks/tuning-ml-models-scaling-workflows-and-architecture/11)
- ML管理の拡張性関連
    - [databrickslabs/cicd-templates: Manage your Databricks deployments and CI with code. (github.com)](https://github.com/databrickslabs/cicd-templates)
    - [機械学習トレーニングの実行を追跡する - Azure Databricks - Workspace | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/applications/mlflow/tracking)
    - [Azure Databricks の MLflow モデルレジストリ-Azure Databricks - Workspace | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/applications/mlflow/model-registry)
- ML運用の拡張性関連
    - [Git 統合用リポジトリ - Azure Databricks | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/repos)
    - [ジョブ - Azure Databricks | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/jobs)
    - [databrickslabs/cicd-templates: Manage your Databricks deployments and CI with code. (github.com)](https://github.com/databrickslabs/cicd-templates)

## ＜次ステップ＞データ分析基盤の検討
データ分析基盤の検討方法については下記の記事に整理してます。

[最強のデータ分析基盤を目指して～汎用的なデータ分析基盤の選定方法の提案～ - Qiita](https://qiita.com/manabian/items/e689daf5cc006eced737)

![image.png](https://camo.qiitausercontent.com/46ad64e9380c7112b603e292ee2346cc2a8cb986/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f32343033312f35356463306661342d656435642d343563322d623964302d6265346237323564366332632e706e67)

## その他情報
- MLOps関連
    - [MLOps: 機械学習における継続的デリバリーと自動化のパイプライン  | Google Cloud](https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning)
- Databricksトレーニング関連
    - [Scalable Machine Learning with Apache Spark™ - Databricks](https://academy.databricks.com/instructor-led-training/scalable-machine-learning-with-apache-spark)
    - [Machine Learning in Production: MLflow and Model Deployment - Databricks](https://academy.databricks.com/instructor-led-training/ml-production)