DevOpsとMLOps~GitHubもDevOpsを支える支援ツール~


 とあるオンラインセミナーを聞いていて、機械学習からDevOps、更にはMLOpsと話が展開し、DevOpsとMLOpsについていったん整理しておく。

DevOpsとは

開発 (Development) と運用 (Operations) を組み合わせた語。開発手法やツールを使って 開発者(Development)と運用者(Operations)が密接に連携することで、 より柔軟かつスピーディーに システムを開発すること。

開発者と運用者が効率的に連携するためのソフトウェア開発手法・活動・ツールの総称。文化のようなもので、明確な定義はない。

狭義には,システムへの変更をコミットしてから通常の運用に移るまでの時間を短縮することを目的とした一連のプラクティスのこと


DevOpsの有無をまとめたみた、極端な一覧

項目DevOpsのない世界ある世界
バージョン管理フォルダ名にバージョン名や作成日時を記入することでバージョン管理する.
複数人が同じコードを編集することがあり,競合がしばしば発生している.
Gitを使用し,問題がある場合には適切にロールバックする.
明確なブランチ戦略のもとでコミットやプルリクエストが小まめに行われており,競合はほとんど発生しない.
環境構築サービスが依存するアプリケーションはインストール手順書を見ながらサーバー上に直接インストールする.長大な手順書のメンテナンスに工数がかかっている.サービスはコンテナ上で動作する複数のマイクロサービスからなる.プロビジョニングもInfrastructure as Codeで自動化されており,手順書は簡潔.
テスト・ビルド手動でコマンドを実行する.GitプッシュをトリガーとしてCIツールが自動的に実行する.
デプロイデプロイ時はサーバーの一般公開を一旦止めて,本番サーバーでデプロイ・テストを行い,問題なければサーバーを公開する.stagingブランチへのマージと同時にステージング環境へのデプロイが開始され,masterブランチへのマージと同時に自動で本番環境のローリングアップデートが実施される.
チーム体制開発チームと運用チームが独立しており,コードの引き継ぎの機会を除いて連携はほとんどない.どのチームのメンバーもフルサイクルエンジニアとして開発運用両方の知見を有している.
文化運用チームは開発チームの頻繁な仕様変更にうんざりしている.変更が原因の不具合によってサービスが停止するたびに非難の応酬が起きている.自動テストとステージング環境での検証により,本番環境で不具合が発生する頻度は非常に低い.定期的に開かれる成果報告会では互いの成果を発表し,今後の改善点を話し合う.

MLOpsとは

MLOps = ML + DevOps

※ML=Mailing Listではない!

MLOpsとは、「機械学習チーム(Machine Learning)/開発チーム」と「運用チーム(Operations)」がお互いに協調し合うことで、機械学習モデルの実装から運用までのライフサイクルを円滑に進めるための管理体制(機械学習基盤)を築くこと、またはその概念全体を指す。類義語にDevOpsがあるが、まさにそのDevOpsから発展して生まれた考え方である。DevOpsに詳しければ、その機械学習版だと考えるとよい。

 DevOpsの考え方と同様に、機械学習チーム/開発チームは、最終的なソリューションの一機能となる機械学習モデルの作成とデリバリー(もしくはデプロイ)を自動化し、リリースサイクルを早める。運用チームは、刻々と変化するビジネス要求を捉えて、機械学習チームにフィードバックしながら、より付加価値の高いソリューションをエンドユーザーに届ける。これら一連のライフサイクルをシームレスにつなげるための基盤を作成する必要があるということらしい。

MLOpsの有無をまとめたみた、極端な一覧

項目MLOpsのない世界ある世界
データの管理全データは社内のサーバーに保存されており,分析に用いるデータは一度ハードディスクに移して開発チームに郵送する.全データはクラウドに保存されており,分析時には必要なサブセットをSQLで取得する.
ハイパーパラメータチューニングハイパーパラメータやデータの組み合わせを手動で書き換えながら,MLモデルを学習・評価する.実験管理ツールを用いてモデル開発を行う.ハイパーパラメータの探索には数理最適化を使用している.
MLプロセス分析メンバーはパラメータを変更するごとに,jupyter notebookに記述された前処理・学習・評価の一連のMLテストを順番に実行する.MLプロセスは統合・自動化されており,学習・テストのイテレーションは高速に実行される.
デプロイ推論モデルの実装時には,学習に用いるノートブックとrequirements.txtを実装メンバーに渡し,実装メンバーは推論コードを抽出した上で,Flaskなどを用いて推論用web APIサーバーを構成する.推論用web APIサーバーへのデプロイは CI/CD ツールを通じて自動化されており,GCPのAI Platform predictionにより推論エンドポイントを作成するため,メンバーは機械学習モデルの作成に集中することができる.
継続的学習モデル開発には月単位の時間がかかるため,モデルの再トレーニングはほとんど行わない.常に環境の変化に対応するため,定期的に最新のデータを用いて再学習が行われる.
CI/CDモデルの更新はほとんどないため,CI, CDは考慮されない.新しいデータでトレーニングされたモデルは自動的に精度検証・テスト・デプロイ対象となる.
監視モデルのパフォーマンス低下などを検出するためのモニタリングは行わないため,環境のダイナミクスの変化に対して脆弱.ライブデータに基づいてモデルのパフォーマンスに関する統計情報を収集する.パフォーマンスが一定の水準に満たない場合,再学習パイプラインが自動的に実行される.