【MLOps入門】MLOps概要

# 1. はじめに
* 昨今、AI・機械学習関連技術が基礎研究のフェーズを抜け、製品開発のフェーズにて本番稼働システムに投入・運用されることが多くなるに連れて聞くことが多くなった「MLOps」という概念について、簡単に書きます。
* 本記事ではMLOpsの概要を記載し、実践的な取り組みについては別途記載します。
* （追記）アップデート版として [MLOpsの意義：機械学習プロジェクトを成功させるための鍵](https://qiita.com/nokoxxx1212/items/276df4b3c18ef2ad08b8) を投稿したので、そちらも合わせてご確認ください。

# 2. 機械学習プロジェクトの課題
* 機械学習プロジェクトを遂行していくことを阻害する課題として、例えば下記があります。  
    * **学習リソースが枯渇して、迅速な実験ができない**
        * 学習環境のスピーディなスケール
        * ex. 並列で実験を回したいが、個別所有のGPUマシンだと1並列しか回せず、共同利用のGPUマシンは混んでいて使えない。（昨日まではGPUマシンを遊ばせていたのだが。。）
    * **ローカルで良い実験結果が出る->本番環境への適用、に時間がかかる**
        * ローカルで良い実験結果が出る->本番環境への適用、までに発生する様々なタスクの自動化
        * （参考）[Using MLOps to Bring ML to Production/The Promise of MLOps](https://www.slideshare.net/weaveworks/using-mlops-to-bring-ml-to-productionthe-promise-of-mlops)
        * ex. ソフトウェアエンジニア「データサイエンティストさん、実験が再現できないんですが。。というかノートブック（分析、前処理、学習、評価がオールインワン）ですか。。」
    * **実験が再現できず、品質保証ができない**
        * コード・ハイパーパラメータ・モデル・データ・実験結果の整合性が取れたバージョン管理と再現性の担保
        * ex. （PoCからしばらく経って）このモデルが精度は一番良かったはずだけど、処理速度面で課題があるから、やっぱりあの二番目に精度が良かったパターンに差し替えよう。どのくらい精度に差があったっけ？そのときの学習再現できるよね？

* （参考）課題と対策案例
![スクリーンショット 2021-03-06 16.43.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/4b159355-5001-7549-e29a-f02d92d2212f.png)

# 3. MLOpsとは
* MLOpsとは **「機械学習プロジェクトを円滑に進めるための取り組みと思想」** だと思っています。（個人的見解）
    * = 機械学習の社会実装・実運用化を加速させることを目的に、各機械学習プロジェクトごとに発生する一連のタスクに対して、様々な前提条件（組織、要員、データの特性、環境、コスト等）を考慮し、ベストな手法を模索して実践していくことだと思っています。
* MLOpsの語源としては、「DevOps」からの派生です。従来のシステムに対して適用していたDevOpsという概念を、機械学習システムに対して拡張した概念だと理解しています。（MLOps = ML + Dev + Ops）
    * [MicrosoftのDevOpsの定義](https://azure.microsoft.com/ja-jp/overview/what-is-devops/)は下記です。（一部抜粋）

        > 開発 (Dev) と運用 (Ops) を組み合わせたものであるDevOpsは、人、プロセス、テクノロジを統合したもので、お客様に継続的に価値を届けます。
        > DevOpsでは、以前はサイロ化されていた役割 (開発、IT 運用、品質管理、セキュリティ) を連携させて共同作業することで、より優れた信頼性の高い製品を作成することができます。DevOpsカルチャとDevOpsのプラクティスとツールを一緒に導入することで、チームは顧客のニーズに適切に応え、作成したアプリケーションの信頼度を高め、ビジネス目標をよりすばやく達成することができます。

    * [MicrosoftのMLOpsの定義](https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-model-management-and-deployment)は下記です。（一部抜粋）

        > Machine Learning操作(MLOps)は、ワークフローの効率を向上させる DevOpsの原則と実践に基づいています。 たとえば、継続的インテグレーション、配信、デプロイです。MLOpsでは、次のことを目標に、これらの原則を機械学習プロセスに適用します。
        >   ・ モデルのより迅速な実験と開発
        >   ・ 実稼働環境へのモデルのより迅速なデプロイ
        >   ・ 品質保証
* その他の定義
    * 「データ前処理、モデル開発、デプロイ、運用などを含む機械学習のライフサイクルを管理する技術/知見」（[MLopsコミュニティ](https://mlops.connpass.com)）
    * 「機械学習またはディープラーニングのライフサイクルを管理するための、データサイエンティスト、エンジニア、保守運用担当者のコラボレーションおよびコミュニケーションに関する実践手法」（[Wikipedia](https://ja.wikipedia.org/wiki/MLOps)）
    * 「高速に新しいモデルを検証して顧客に安定した価値を届ける仕組み」（[LayerX](https://speakerdeck.com/yuya4/my-career-and-development-strategies-for-ml-engineer-2024?slide=14)）
    * 「MLとITの橋渡し」「MLOps は ML システム開発（Dev）と ML システム オペレーション（Ops）の統合を目的とする ML エンジニアリングの文化と手法です。」（[Google](https://cloud.google.com/blog/ja/products/ai-machine-learning/key-requirements-for-an-mlops-foundation)）
    * 「MLOps is the art and science of bringing machine learning to production, and it means many things to many people. 」（[ZDNet](https://www.zdnet.com/article/the-state-of-mlops-in-2021/)）
    * 「Machine Learning Engineering for Production」
    * 「Software2.0のためのDevOps」([MLOpsのこれまでとこれから](https://speakerdeck.com/icoxfog417/mlopsfalsekoremadetokorekara))
    * 「データサイエンティストがしないこと全て」

# 4. MLOpsの全体像
## MLワークフロー
* （参考）[Continuous Delivery for Machine Learning](https://martinfowler.com/articles/cd4ml.html)
<img width="1306" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/d3ca55ee-c3d9-1223-d1e1-bab221acdbf4.png">

* （参考）[Googleが定義するMLワークフロー](https://cloud.google.com/solutions/machine-learning/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning)
    * Googleは、自動化のレベル別に3ステップでワークフローを定義しているようです。（リンク先参照）
        * MLOps level 0: Manual process
            * 自動化を含まない
        * MLOps level 1: ML pipeline automation
            * MLパイプラインを自動化
        * MLOps level 2: CI/CD pipeline automation
            * MLパイプラインおよびCI/CDパイプラインを自動化

* （参考）[機械学習システム開発フロー](https://qiita.com/nokoxxx1212/items/6e899a80aeee400e9a48)

## MLシステム構成
* （参考）[MLOps: 機械学習における継続的デリバリーと自動化のパイプライン ](https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning)
![gcp_mlops_arch.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/5f844de4-7247-ddc1-576d-513d59730814.png)

## 役割分担
![mlops_flow.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/d17ceb14-1b17-85f7-3d79-d8bde301a5c4.jpeg)


# 5. MLOpsエンジニアに必要なスキル
* MLOpsを実現するためには、エンドツーエンドでの機械学習システムのライフサイクルと勘所の理解、そしてそれを解決するための領域横断的なエンジニアリング力が必要になります。
    * [Machine Learning Operations (MLOps):Overview, Definition, and Architecture](https://arxiv.org/pdf/2205.02302.pdf)から引用
![スクリーンショット 2022-08-06 16.14.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/fbf81cad-1e13-09d6-e3b7-22abec8f4bef.png)

# 6. おわりに
* MLOpsとは「機械学習プロジェクトを円滑に進めるための取り組みと思想」であり、円滑に進めることを阻害する課題を解決すべく、様々なツールが活発に開発・公開されています。
* ただし、重要なのは、各ツールがカバーするスコープと特性を理解し、各機械学習プロジェクトに合わせてどう組み合わせ、どう使い込んでいくかを考えていくことだと思いますので、そのあたりの試行錯誤については別記事にて共有させていただければと思います。
* MLOpsシリーズ
    * [【MLOps入門】MLOps概要](https://qiita.com/noko_qii/items/d2c36b0b22ab0da6c759)
    * [【MLOps実践】機械学習システム開発における品質担保のための取り組み（PoCフェーズ編）](https://qiita.com/noko_qii/items/6dbcffb0bf45b2a6dcad)
    * [【MLOps実践】GCPで始めるエンドツーエンドなMLOps基盤（Vertex AI,etc）](https://qiita.com/noko_qii/items/1c55261f08ce7e95b255)
    * [機械学習システム開発フロー](https://qiita.com/nokoxxx1212/items/6e899a80aeee400e9a48)
    * [MLflowで実験管理入門](https://future-architect.github.io/articles/20200626/)
    * [機械学習PJにてCICDパイプラインを組むときに考えるべきこと](https://qiita.com/noko_qii/items/cfccb861c409bdaf495f)
    * [Kedroで機械学習パイプライン入門](https://qiita.com/noko_qii/items/2395d3a3dbcd9410e5e7)
    * [機械学習システムの監視入門](https://qiita.com/nokoxxx1212/items/de8764ce59439ab1af80)
    * [GCPVertexAI（Workbench,Pipelines）で始めるKaggle](https://qiita.com/nokoxxx1212/items/3b6266b9de0b0ceb7712)