MLOpsがいろいろ進化しててすごい

先日機械学習系の勉強会に参加させてもらって、最近のMLOpsめっちゃ便利になっててスゲーって思ったのでつらつらと

## MLOpsとは
雑に言うと機械学習の研究からデプロイまでのサイクルをいい感じに回そぜーっていうやつです
DevOpsの機械学習バージョンです。

## 推論サービスの提供
何かしらの推論サービスを提供しようとすると、以下のようなフェーズをぐるぐる回すことが多いと思います。

- 研究開発フェーズ
    - サービスとして提供できるレベルの機械学習モデルを研究するフェーズ
- モデル学習フェーズ
    - 機械学習モデルを作成するフェーズ。
    - いわゆる学習と呼ばれるもの。
    - サービスによるが定期的に作成しなおしたりする。
- デプロイフェーズ
    - 作成した機械学習モデルをデプロイするフェーズ。
    - 作り直したりする場合、バージョン管理なども必要
- サービス提供フェーズ
    - デプロイされた機械学習モデルを使用して推論サービスを提供するフェーズ。
    - いわゆる推論と呼ばれるもの。
- 精度監視フェーズ
    - 推論サービスがどの程度あたったか監視するフェーズ。

## フェーズごとの要件
フェーズごとに機械学習ならではの要件があるのですが、エンジニアとしてはなかなかつらい要件です

- 研究開発フェーズ
    - いろいろな条件で機械学習をぶん回したいので、高スペック環境が必要
        - CPUどころかGPU・TPU環境が必要になることも
    - いろいろな条件で検証して比較検討するので、検証した条件や結果を保存したい
- モデル学習フェーズ
    - もちろん高スペック環境が必要
    - 大量のデータを取得する必要（になることが多い）
    - 最新データを扱う必要があったり速度が求められる場合はかなり工夫しなければならない
- デプロイフェーズ
    - 機械学習モデルが巨大な場合、どこかのストレージに配置する必要がある
    - モデルを再作成する場合など、バージョン管理が必要になることもある
- サービス提供フェーズ
    - もちろん高スペック環境が必要
        - モデル作成ほどではないが一時的にめっちゃメモリ食ったりCPU鬼使いする
    - デプロイされた機械学習モデルを使用して推論サービスを提供するフェーズ。
    - サービスダウンさせちゃいけない
        - 何もケアしないと、いとも簡単にサーバーが逝きます（CPUメモリ鬼食いするから）
    - 速度が求められる
- 精度監視フェーズ
    - リアルタイムや速報ベースで精度を監視する必要がある

## んな要件むり！！！
機械学習ってただでさえ専門知識必要な難しい領域なのにOpsまで見てられるか！！:rage:ぷん！！！
と言いたくもなりますが、じゃぁそこの面倒見てくれる人がいるかっていうといないことが多いわけで。。

とはいえこの要件満たせないとサービスとして提供するのは難しいし、自前で全部構築するのはつらすぎなんだけど。。

というわけで満を持して登場したのがMLOpsマネージドサービスですね
面倒なことは全部マネージドサービスにやらせちゃおう、というやつです

## MLOps系のサービス・ツールたち
AWS、GCP、AzureなどのクラウドサービスではMLOpsのマネージドサービスが結構出ているみたいです。
OSSで便利なツールもたくさんあるみたいです。

-  MLOpsマネージドサービス
    -  機械学習ぜんぶまかせて～ALL IN ONE～なやつら
        - モデル学習、モデル評価、モデルデプロイまでぜーんぶやっちゃうよっ
    - 勉強会では[SageMaker](https://aws.amazon.com/jp/sagemaker/) (AWS)、[VertexAI](https://cloud.google.com/vertex-ai?hl=ja) (GCP 前はAI Platformという名前だった)、[Kubeflow](https://www.kubeflow.org) (OSS)の名前をよく聞きました。
    - ここでサービス提供用のエンドポイントまで用意してあるってんだからすごいよね～（誰）
- 実験管理ツール
    - 研究開発フェーズの強力なサポートツール。実験管理記録はまかしとき～なやつ
    - いろいろあるみたいですが勉強会では[MLFlow](https://mlflow.org)の名前をよく聞きました。
- パイプライン管理ツール
    - データ前処理→モデル学習→モデル評価のフローを管理できるツール
    - いろいろあるみたいですが勉強会では[Airflow](https://airflow.apache.org)の名前をよく聞きました。

正直このあたりのサービスを全く試した経験がなかったので、あまりにも当たり前に語られててヤバイ…！:fearful:と思いました。勉強しないと。。

## サービス提供の環境について
MLOpsマネージドサービスにのっけていればエンドポイント提供してハイ終わり、ということもできるのですが、そうもうまくいかないこともありますよね。はい。

前述したとおり高スペック環境が必要・サービスダウンさせちゃいけない・速度が求められるとなかなか大変な要求をこなさないといけないので、本番で提供するうえでかなり重要な観点です。

勉強会後の懇親会でみんな何使ってる～？って聞いたら マネージドサービスでエンドポイントあけるか、クラウドサービスのコンテナサービス（k8s含む）に乗っけること が多いんじゃないかな？とのことでした

**そ、それってコンテナとかk8sにのっけた推論サービスの本番運用の知識も必要になるのかな？？？** :innocent: 
Opsも勉強しないとーー:sob:

## MLOps事例
ということで少しYouTubeを漁ってみました

https://www.youtube.com/watch?v=7ZeP62Vknu0&t=1s

- 2019年の動画なのでちょっと古いかもしれない
- 推論サービスはGKE（k8s）上で動かしているみたいです
- k8sまわりの苦労が結構あったみたいです。。
    - k8sまわりはためになるような気がする情報が多いような気がします

https://www.youtube.com/watch?v=PyUAbLaRecI

- 推論サービスを（インフラ的に）どこに乗っけているのかはわからなかった
    - （書いてないけど）どこかのコンテナかな？
- フレームワークはgRPCのようです
- C++ライブラリをカスタマイズして使っている都合でCythonを使用してるみたいです
    - 高速化に成功してる。すごい。

## MLOpsの勉強大事！
ということで勉強会を通じてMLOps勉強せなあかん！！と焦ったという話でした

まずはマネージドサービスの機能を調べてさくっと実装して体験しちゃうのもよさそうですね
また今後もYouTube漁ったり勉強会に参加するのも強い人が試した情報が得られてgoodだと思いました

## 超参考文献
こちらもめっちゃわかりやすかったのでどうぞ～

https://qiita.com/noko_qii/items/d2c36b0b22ab0da6c759#5-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E8%AA%B2%E9%A1%8C%E3%82%92%E8%A7%A3%E6%B1%BA%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB