COLUMN誰でもわかる!お役立ちコラム

エッジ活用支援コラム

エッジAIを最適化するMLOpsとは?

DevOpsとMLOpsの関係

AIなどのプロジェクトにおいては、データを加工したり機械学習モデルを再学習させたり、また再学習したモデルのデプロイといった作業が頻繁に発生します。一方で、モデルの頻繁な変更や再学習によるアウトプットの変化は、システム運用者にとっては時にインシデントの発生源となる可能性があります。

このような機械学習に関するプロジェクトの現場で、機械学習チーム、開発チーム、運用チームが協調し、効率と品質を両立させるための考え方として、「MLOps」が存在します。MLOpsは、アプリケーションの開発現場で「DevOps」の機械学習版といえます。まずは、DevOpsについて解説します。

DevOpsとは、開発と運用の協調

DevOpsとは開発(Development)と運用(Operation)を組み合わせた用語です。もともと、運用担当と開発担当は目標の違いから対立する傾向にありました。具体的には、開発チームが新機能リリースをどんどん行いたいという目標があるのに対して、運用チームは安定稼働を優先する目標があり、目標がトレードオフとなっているため対立します。そのような状況の中で発展した考え方がDevOpsです。DevOpsについては明確な定義はありませんが、
– ツールによる開発プロセスや運用プロセスの自動化・効率化
– 開発現場と運用現場が相互に尊重しあい、コミュニケーションを円滑化する文化
といったこととされています。具体的には、開発工程と運用工程をパイプライン化して生産性を向上したり、開発プロセスを運用担当に見える化や運用状況を開発担当に見える化させて、開発方針や運用方針を話し合って決めたり、といった手法があります。まさに開発チームと運用チームが二人三脚でアプリケーションの開発と運用を実施することに加え、それにより開発しているソフトウエアを高速かつ高頻度に改善し、システムの品質、価値を高めることが可能になります。

それではMLOpsとは?

MLOpsは、機械学習(Machine Learning)の頭文字「ML」と、DevOpsをかけ合わせてつくられた概念です。DevOpsに機械学習プロジェクトにおけるエッセンスを追加したものと考えるといいでしょう。具体的には、

  • 機械学習モデルの既存システムへの組込みやビジネスの現場への適用を自動化する
  • 摘要したモデルをモニタリング(予測モデルの監視や精度評価)手法を事前に定義しておく
  • 運用のためのガバナンス(複数の予測モデルの統合管理)や運用指標(KPI)などを設定し、下回った場合の改善フローを実行する

といった考え方をDevOpsのフローに追加することになります。

エッジAI運用基盤を提供するJetsonエッジMLOpsのPoC支援サービスはこちら→

MLOpsはなぜ必要なのか?

通常のシステム開発においては、運用フェーズは顧客の満足度やサービスの品質に直結するため、非常に重要な役割を担います。たとえば、頻繁に障害が発生するサービスなどは不便であるため、顧客離れが起きてしまいます。とくに、AIにおいては開発と保守が頻繁に繰り返されるというプロジェクト上の特徴があります。具体的には下記の理由が存在します。

機械学習モデルや環境の変化

  • 機械学習モデルの時間の経過による劣化
    構築した機械学習モデルの品質は、構築時点でどんなに優れていたとしても、時間の経過とともに劣化していきます。構築時に使用したデータと、予測時に使用するデータの質に徐々に差が生じ、やがてその差が大きくなっていくためです。また、季節や天候のような、時期とともに毎年変化するデータを基にしたモデルについても同様のことが言えます。
  • ビジネス現場の変化
    ビジネスの現場においては、法律や競合の出現といった外部環境の変化や、担当者の部署の移動といった内部環境の変化が常に付きまといます。そのような些細な変化により、構築済みの機械学習モデルが徐々に使い物にならなくなる、といった現象が発生します。

MLプロジェクト自体の課題

機械学習プロジェクトについては、様々な課題もあり、MLOpsの考え方がどうしても必要となります。具体的な課題としては下記のとおりです。

  • モデルの構築やデータの学習に大量のリソースが必要
    たとえは、環境の変化により高速にモデルを再構築しようとも、機械学習のモデル構築には大量のデータやCPU、GPU等のリソースが必要となります。近年GPUは高騰していて、クラウド環境といえども簡単に用意できるようなものではありません。また、都合よくモデルを改良できるほどの人的リソースもすぐに準備できることは少ないでしょう。
  • 本番環境への適用に時間がかかる
    ローカルで構築したモデルを本番環境に適用するには、様々なテストが必要になります。例えば、構築したモデルを評価することや、ステークホルダーに有効性を説明することなどです。モデルの評価は機械的に行うことも可能ですが、有効性の説明については時間がかかる可能性があります。また、本番環境への適用に時間をかけていると、その分構築したモデルは劣化していきます。
  • 適切なバージョン管理
    機械学習のモデルの構築はある種の科学であり、再現性の担保が必要となります。そのためには、プログラムコード・ハイパーパラメータ・モデル・データ・実験結果の整合性が取れたバージョン管理をおこない、デグレートを防ぐ必要があります。また、本番環境にデプロイしたモデルに万が一不具合があった場合は切り戻しを行う仕組みも整えておく必要があります。

MLOpsの全体像

MLOpsを考慮した機械学習システムは、下記のフェーズを考えます。

  1. データ準備
    機械学習に必要な生データを収集して、集約・結合・非正規化などを行い、機械学習ができるようにします。データを蓄積して提供するためのデータレイクや、データを加工するETL基盤が必要となります。
  2. モデル構築・学習
    実験を繰り返して、機械学習モデルの作成に必要な特徴量、モデル、ハイパパラメータなどを探索し、データをモデリングします。訓練したモデルはテストデータと様々な評価手法で最終評価を行い、デプロイに向けた準備をします。
  3. モデル監視
    モデルの予測精度の低下やその兆候(入力データ分布の変化など)を監視し、予測精度が低下してきたらアラートを上げたり、最新データでモデルを再学習したり、といった仕組みを構築します。

引用:https://papers.nips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf

Googleが定義するMLOpsレベル

GAFAのなかでも機械学習分野で進んでいるGoogleにおいて、MLOpsに関するレベル別の定義がこちら(https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning)に公開されています。摘要について本記事に記載します。

レベル0~まずは手動で

データ分析、データ準備、モデルトレーニング、検証などの各手順を手動で行い、MLOpsで自動化する部分や、自社ビジネスにおける機械学習ビジネスのフローを確立させます。いきなり自動化するのではなく、堅実に足固めをするフェーズととらえることができるでしょう。

レベル1~MLパイプラインの構築

データ分析、モデルトレーニング、検証などのMLパイプラインを自動化することにより、モデルの継続的トレーニングを実行できるようにします。これにより、機械学習におけるモデル構築の継続的デリバリーを実現できます。構築したモデルを実際のアプリケーションにリリースする、といったフローは次のレベルで実現します。上記の項目でいうと、『2. モデル構築・学習』を自動化していくイメージです。

レベル2~全業務の自動化、パイプライン化

機械学習モデルをアプリケーションに適用するまでの全業務をパイプライン化し、自動~半自動で行えるようにします。具体的には、バージョン管理などを行うリポジトリの機能や、アプリケーションのデプロイの仕組みを定義します。
エッジAI運用基盤を提供するJetsonエッジMLOpsのPoC支援サービスはこちら→

まとめ

MLOpsの重要性について紹介しました。MLOpsは機械学習のプロジェクトを円滑に進め、機械学習を用いたアプリケーションの品質向上や生産性向上に役立つ手段です。一方で、MLOpsについてはステップを踏んで様々な作業を自動化していく必要があります。

いきなりMLOpsを企業に導入することは難しいですが、1歩1歩導入を進めていき、効率的で高品質な機械学習のシステムの構築を目指すといいでしょう。