MLOpsの意義：機械学習プロジェクトを成功させるための鍵

## はじめに
MLOpsエンジニアとして、MLOpsの意義を他人に説明する機会が定期的にあるので、まとめてみました。
このブログでは、MLOps（Machine Learning Operations）という概念を紹介し、機械学習プロジェクトの成功に向けてどのように活用し得るかを記載します。

## MLOpsが登場した背景
機械学習（ML）は今日、ビジネスにおいて重要な役割を果たしています。
しかし、機械学習プロジェクトというのは「データサイエンティストが自身のラップトップでモデルを開発すれば終わり」ではありません。そのモデルがシステム・プロダクトに組み込まれ、価値を発揮し続けるためには、様々な工程を繰り返し経る必要があります。（参考: [ITコンサル企業のAIチームでMLOpsをすることの面白みと今後の展望](https://note.future.co.jp/n/n19778c5c59e3)）
そこで発生する課題に対応するためには、従来のソフトウェア開発手法とは異なる、新たなアプローチが必要とされています。これがMLOpsの出発点です。

## MLOpsとは
### MLOpsとは
MLOpsの定義は様々あります。いくつかご紹介します。
* 「Software2.0のためのDevOps」（参考: [MLOpsのこれまでとこれから](https://speakerdeck.com/icoxfog417/mlopsfalsekoremadetokorekara)）
    * （補足）DevOps: 開発者と運用者が協力して高品質なソフトウェアを迅速に提供し、システムの価値を継続的に向上させるための概念
* 「データ前処理、モデル開発、デプロイ、運用などを含む機械学習のライフサイクルを管理する技術/知見」（参考：[MLOps勉強会](https://mlops.connpass.com)）
* 「MLOps is the art and science of bringing machine learning to production」（参考：[The state of MLOps in 2021](https://www.zdnet.com/article/the-state-of-mlops-in-2021/)）
* 「高速に新しいモデルを検証して顧客に安定した価値を届ける仕組み」（[LayerX](https://speakerdeck.com/yuya4/my-career-and-development-strategies-for-ml-engineer-2024?slide=14)）

つなげると、「MLOpsとは、DevOpsの原則を機械学習に応用し、機械学習のライフサイクルを管理することで、高速に新しいモデルを検証およびプロダクション化して顧客に安定した価値を届けるための技術」、と言えると思います。

### MLエンジニアとMLOpsエンジニアの違い
上記で定義したMLOpsを担当する人がMLOpsエンジニアですが、さらにスコープを明確にするためにMLエンジニアと責務を比較してみます。
* Chat GPTの整理
    * MLエンジニア: データを分析し、機械学習モデルを開発・トレーニングする専門家
    * MLOpsエンジニア: 機械学習モデルの開発から運用までを統合し、自動化、監視、およびパフォーマンス最適化を担う専門家
* [バンダイナムコネクサス](https://bandainamco-nexus.co.jp/careers/data-strategy/ml-engineer/)の整理
    * MLエンジニア: 機械学習モデルのPoCと一部のML基盤タスク（Ex.推論APIの構築）
    * MLOpsエンジニア: ML基盤開発
* [ZOZO](https://hrmos.co/pages/zozo/jobs/0000031)の整理
    * MLエンジニア: データ分析・機械学習・深層学習を用いた新規事業や機能の開発
    * MLOpsエンジニア: ML（Machine Learning）を活用したプロダクトを世に送り出すために必要となる、モデル開発以外のすべてのエンジニアリング

また、MLとMLOpsの比較としては、[MLOps って何?](https://cloudonair.withgoogle.com/events/innovators-live-jp/watch?talk=aiml_220817)で話されていた「MLとMLOpsの関係は、お菓子作りとお菓子工場作りの関係」という比喩もしっくり来ます。

## MLOpsが解決する課題と効果の指標
もちろんビジネスの目標やMLチーム全体の目標を達成するためにMLOpsはあります。
例えば、MLチーム全体の目標例としては下記があります。
* 「リードタイム2週間、年間100リリース」（[Sansan Labs](https://speakerdeck.com/sansan_randd/application-infrastructure-view-of-the-challenge-of-2-week-lead-time-and-100-releases-per-year?slide=8)）
* 「AI-OCR以外で新たに5つの機械学習による価値を作る」（[LayerX](https://tech.layerx.co.jp/entry/2023/11/16/185944)）

MLチームの目標を達成するためにMLOpsチームとしてできることは、「エンジニアリングの力で、MLを社会実装するアジリティと信頼性を向上させる」ことだと思います。
アジリティと信頼性と言えば、また、MLOpsはDevOpsの原則を機械学習に応用したものであることを思い出すと、MLOpsチームの効果を測る指標としては、例えば[Four Keys]()が使えると思います。

### MLOps版Four Keys
1.  **デプロイメント頻度（Deployment Frequency）**
    *   機械学習モデルがどれだけ頻繁にプロダクション環境にデプロイされるかを測定。
    *   この指標は、チームが新しいモデルやモデルのアップデートを迅速にリリースできるかどうかを示す。
2.  **リードタイム（Lead Time）**
    *   モデルのアイデアから実際の運用環境でのデプロイメントまでの時間。
    *   データ準備、トレーニング、テスト、バリデーションを含むプロセスの効率を反映する。
3.  **チェンジフェイル率（Change Failure Rate）**
    *   新たにデプロイされたモデルが期待通りに機能しない割合。
    *   モデルの品質、データの整合性、モデルの適切な評価の重要性を強調する。
4.  **リカバリータイム（Time to Recover）**
    *   モデルやシステムの障害から復旧するまでの時間。
    *   モデルの監視、異常検知、迅速な対応能力を測る指標。

また、SREとPlatform Engineeringの指標としてまとめられた下記は、MLの文脈で読み直してそのまま参考にすることができると思います。

![スクリーンショット 2024-05-11 21.58.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/ecb122da-0a21-e6e3-8ecb-ba9081721a27.png)
（参考: [これからのPlatform Engineeringを支えるコンテナ×Backstageの真価](https://speakerdeck.com/skitamura7446/the-future-of-platform-engineering-unveiling-the-true-value-of-containers-and-backstage?slide=9)）


### 機械学習プロジェクトで発生する課題
上記の指標を向上させるために解決するべき課題、つまりMLOpsが解決するべき課題、そして機械学習プロジェクトでよく起こりがちな課題としては、例えば下記があります。

1.	計算リソースの管理を怠ると:
    * 計算リソースの過剰または不足が生じ、コストの増加やプロジェクトの遅延を引き起こす可能性があります。また、リソースが不足すると、モデルのトレーニングや実験が効果的に行えなくなる可能性があります。
2.	実験管理を怠ると:
    * どの実験がどの結果をもたらしたか追跡が困難になり、効果的な問題解決やモデルの改善が難しくなります。結果として、プロジェクトの進行が遅れ、品質が低下する恐れがあります。
3.	CI/CDを適切に行わない場合:
    * コードの変更やモデルの更新が本番環境に適切に統合されず、バグやパフォーマンスの問題が頻発する可能性があります。これにより、システムの信頼性やユーザー体験が低下する恐れがあります。
4.	モデルレジストリを使用しない場合:
    * モデルのバージョン管理や再利用が困難になり、再現性と一貫性の低下を招きます。これは、品質の一貫した保証が難しくなり、運用上の複雑さを増加させる可能性があります。
5.	MLパイプラインを整備しない場合:
    * データ処理やモデルトレーニングが非効率的になり、プロセス全体の時間とコストが増加します。また、結果の再現性や一貫性の低下も招きます。
6.	特徴量ストアを使用しない場合:
    * 特徴量の管理と再利用が難しくなり、データの前処理や特徴量の計算に多大な時間が必要になります。これは、全体的なプロジェクトの効率性を低下させる可能性があります。
7.	モニタリングを怠ると: 
    * モデルの性能が時間とともに低下する可能性があり、データドリフトやモデルの劣化に対応することが困難になります。また、問題が発生してもそれを迅速に検知し、対応することができなくなる可能性があります。

これらの課題は、プロジェクトの品質、コスト、進行に直接的な影響を及ぼすため、適切に管理することが重要です。

## MLOpsの主要コンポーネントと取り組みイメージ
### 主要コンポーネント
上記の課題を解決するためにMLOpsを実践するわけですが、MLOpsは主に以下の三つの要素から構成されます。

![スクリーンショット 2023-12-10 11.51.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/8347bec1-e29f-1025-49fc-8e3348d8d15f.png)

（参考: [Step-by-step MLOps](https://speakerdeck.com/shisyu_gaku/step-by-step-mlops-v1-dot-2)）

### 取り組みイメージ
機械学習プロジェクトにおいてのMLOpsエンジニアの取り組みイメージは下記です。
MLOpsエンジニアは、機械学習プラットフォームの構築と運用を行い、データサイエンスとエンジニアリングのプロセスを統合して効率的で再現可能な機械学習ワークフローを確立し、持続可能な開発と運用のための体制と文化を構築します。

![gcp_mlops_arch.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/b0fd4d6b-8f95-bc84-9251-1116e101fc4c.png)

### 補足: MLOps版CAMSモデル
また、DevOpsの重要な要素として、CAMSモデルがありました。MLOps版を考えると、下記になると思います。

* 文化 (Culture): MLOpsでは、データサイエンティスト、機械学習エンジニア、オペレーションチームが密接に協力する文化が必要です。この文化は、実験的なアプローチを奨励し、失敗から学ぶことを重視し、機械学習モデルの開発と運用の間のギャップを埋めることに焦点を当てています。

* オートメーション (Automation): モデルトレーニング、テスト、デプロイメント、モニタリングのプロセスを自動化することが重要です。これには、連続的インテグレーションとデプロイメント（CI/CD）の原則の適用、データの前処理と変換、モデルのスケーリングと管理が含まれます。

* 測定 (Measurement): モデルのパフォーマンス、データの品質、プロジェクトの進捗を定量的に測定することが不可欠です。これには、モデルの精度、再現性、データの完全性、予測の信頼性などの指標が含まれます。これらの測定値を用いて、モデルの改善やビジネスへの影響を評価します。

* 共有 (Sharing): データ、知見、ベストプラクティス、失敗事例の共有はMLOpsの重要な側面です。これには、実験の結果、モデルのパフォーマンスデータ、データの洞察などが含まれます。共有により、チーム間での透明性が高まり、機械学習プロジェクトの効率と効果が向上します。

**Automation** によってアンチパターンを避けながらリソースを効率化し、その結果について **Metrics** を用いて判断・フィードバックを行った上で、得られた知見を **Sharing** することで **Culture** が強化されていきます。
（参考: [DevOpsのCAMS原則に従ってアラート/不具合対応プロセスを改善する](https://techblog.gaudiy.com/entry/2022/12/21/131609)）

## おわりに
MLOpsは単なる技術的な取り組みにとどまらず、ビジネスの成長とイノベーションを加速させる重要な要素です。
機械学習の開発と運用を効率化し、モデルの品質を保証することで、企業は競争力を高め、新たな価値を生み出すことができます。
MLOpsの採用と実践は、持続可能な機械学習プラクティスを築く上で不可欠であり、今後もその重要性は増していくと考えています。