– DataRobot MLOps監視エージェントによるAIモデルの運用管理 –
はじめに
小売・流通業界のお客様を担当しているデータサイエンティストの濱上大基です。本稿はバイスプレジデント、ジャパンAIエキスパートの小川幹雄と濱上が執筆しました。
AIガバナンスという言葉が世の中でも注目されています。経済産業省は令和3年7月に報告書「我が国の AI ガバナンスの在り方 ver. 1.1」[1] を公開しました。様々な業界でAI(機械学習モデル)が研究フェーズから業務実装フェーズへと急速に進む中、同報告書に記載された「AI ガバナンスは、様々な分野の有識者の知識と経験を結集しなければならないと解決できない喫緊の課題である。」との指摘は、広く産業界で共通認識になりつつあると感じます。
弊社のデータサイエンティストがお客様と技術的な議論をするとき、かつてはAIモデル(機械学習モデル)をいかに高い精度で効率的に作るかという点が主なトピックでした。しかし、AIガバナンスの認識が浸透しつつある昨今では、AIモデルの説明性や運用管理というトピックにもお客様の関心が高くなってきています。説明性についてはモデルの精度向上や現場への説明という観点で以前から注目されていましたが、運用管理に関しては課題を感じている一方でまだ組織的に取り組めていないとの認識を持たれているお客様が多いようです。一例として、データサイエンティストがDataRobot外で作成した機械学習モデルの運用が必要な場合 には運用管理ができないまま放置されていたり、別の運用管理環境をゼロから作成するのに四苦八苦している、といった課題をご相談いただくことがあります。
DataRobot AI PlatformはAIモデル(機械学習モデル)の開発実験環境だけでなく、デプロイ後運用フェーズに入ったモデルの運用管理環境も高度に自動化しているため、AIガバナンスに課題をお持ちのお客様にも高くご評価をいただいています。さらに、DataRobot MLOps を利用すればプラットフォーム上に構築されたモデルだけではなくDataRobot外で開発されたモデルの運用管理も可能なので、DataRobotを導入したお客様はそれまでに自社のデータサイエンティストがPythonなどで独自に開発したモデルも併せてDataRobotで一元的な運用管理を行うことができます。
本稿では、PythonやR、Javaで構築し、DataRobot外でデプロイされた機械学習モデル(以下「外部モデル 」と表記)の運用管理を行いたい方やDataRobot外に出力したモデルの運用管理を行いたい方に最適なDataRobot MLOps監視エージェント の概要とその価値についてご紹介します。
社内のAIモデルを一元的に運用管理
弊社の経験では、機械学習モデルの開発を単一の開発環境で行っている企業は数少なく、自社のデータサイエンティストが各々慣れ親しんだ開発環境を使ってモデルを作成する、モデル開発を外部委託する、など様々な理由で、企業内にはDataRobotのようなAIプラットフォームを利用しないで開発したモデルが存在しています 。そして、それら機械学習モデルの構築者(モデルビルダー)が自身が作ったモデルの運用管理まで継続的に行ってくれるケースは決して多くありません。
その理由を考えると以下のような問題点を挙げることができます。
モデル社内開発ケース:機械学習モデルの開発から運用に至るプロセス全体での分業化が機械学習エンジニアらの登場によって進んだ結果、現在のデータサイエンティストは運用管理業務をあまり好きではないパーソナリティの人が多い
モデル外部納品ケース:モデル開発ベンダーにその運用管理まで依頼すると常駐支援となり、膨大なコストがかかる
これらの背景から、様々な環境で開発された機械学習モデルを実運用フェーズで一つのプラットフォーム上に集約 し、なるべく少ないリソース/コストで運用管理を行いたいという意向をどの組織も持っています。
運用管理基盤を統合する目的から逆算して、運用の上流に存在するモデル開発のための環境を一つに絞るという考え方があります。運用管理基盤を統一できるだけでなく、ツールの使い方を習得する教育コストも下がりますし、一つの理想ではあります。ただし、社内の既存モデル開発環境がバラバラの状況からいきなり強制すると摩擦も大きくなります。さらには統合までの時間やコスト、別環境に慣れたエンジニアの再教育と理想に対してのコストが大きくなりすぎるきらいがあります。
すでに機械学習モデルを複数の環境で開発している状況にあり、その状態が今後も一定期間は続く場合にお勧めしたいのが、運用管理基盤だけを一元化すること です。DataRobot MLOps に搭載されているDataRobot MLOps監視エージェント は、外部で作成したPythonやR、Javaモデルに対してエージェントを設定することによってその運用情報をDataRobot MLOpsに送信し、DataRobot内で作成したモデルと同じUI上で、外部モデルの運用管理を行うことを可能とする機能です 。図1はダッシュボード上でDataRobot作成モデルと外部の予測サーバーで動作している機械学習モデルが一元的に表示されている例を示しています。
図1:DataRobot MLOpsのトップ画面
DataRobot MLOps監視エージェントが提供する主要機能
DataRobot MLOps監視エージェントは既存のPythonやR、Javaで作成した機械学習モデルに手を加えずに、その実行環境にDataRobot MLOpsライブラリとMLOps監視エージェントを登録することによって、機械学習モデルの運用管理に必要なメトリックをDataRobot MLOpsに連携します(図2)。メトリックを飛ばす方法はオンライン/オフラインのどちらでも選択できるため、様々な環境で動作する機械学習モデルに対応しています。
ちなみにDataRobot AI Platformで構築したモデルを外部に書き出す機能としてポータブル予測サーバー やスコアリングコード がありますが、これらの機能を使うと監視エージェントのインストールを完了した状態で書き出すことができ、より簡単にDataRobot MLOpsで運用管理することができます。
*注意点:DataRobot MLOps監視エージェントは2023年3月時点ではLinux環境のみをサポートしています
図2. MLOps監視エージェントによる外部モデルの一元管理
以下、DataRobot MLOps監視エージェントの4つの主要機能をご紹介します。
1.外部モデルの正常性監視
外部モデルにエージェントを設定することによって、予測の利用回数(行数やリクエスト数)や予測にかかった時間をトラッキングすることができ、機械学習モデルが正しく予測が実行されているか監視することができます(図3)。
図3. DataRobot MLOpsによる正常性監視
2.外部モデルのデータドリフト監視
外部モデルにエージェントを設定することによって、データドリフトの発生をモニタリングすることができます。データドリフトは学習データとその後の予測処理時にモデルに入力されるデータを比較して、各特徴量の分布の違いを意味しており、入力データパイプラインの何らかの変化やトレンド変化の検知に役立つ指標です。DataRobotのデータドリフト監視では、各特徴量ごとに元の学習データからどのように乖離し、時系列でどのように乖離していったかを確認することができます(図4)。
外部モデルにMLOpsライブラリを加えることによって、外部モデルへの入力をバイパスし、DataRobot MLOpsサービスに送信するデータを準備します。どの時点の入力を送信するかは設定で選ぶことができるので、入力直前のエンコーディングした後のデータでなく、元の学習データを送信するということも可能です。
さらに、データドリフトを計算するための統計情報のみをMLOpsサービスに送信し、データドリフトを検知することもできます。これはデータの秘匿性が高く、外部サーバーに予測データや予測値の生データを送信したくない場合や予測データの容量が大きく大規模な監視 を行いたい場合に有効な方法です。
図4. DataRobot MLOpsによるデータドリフト監視
3.外部モデルの精度監視
先に挙げたデータドリフトは予測のためにモデルに入力されるデータの変化を監視するものでしたが、入力データの傾向は変わってないのに精度が劣化している場合には、入出力のパターン(関係性)そのものが変わったことが考えられ、機械学習モデルの再学習が必須となります。機械学習モデルは運用を続ければ必ず精度は劣化します。ただし、運用に耐えられないレベルの精度劣化がいつ起こるかは誰にもわからないため、その劣化がいつ起こるかを監視することが重要となります。
DataRobot MLOps監視エージェントでは精度をトラッキングすることも可能です。任意に設定した予測IDと予測結果をメトリックとして送信し、予測IDと一致する実測の値が取得できたタイミングでDataRobot MLOpsにアップロードすることによって、DataRobot内部で精度のトラッキングを行うことができます(図5)。
図5. DataRobot MLOpsによる精度監視
4.運用レポート自動生成
機械学習モデルの運用管理の特徴は、正常性確認、データドリフトや精度劣化など従来ITシステムよりも監視するべき項目が多いことです。管理対象のモデルが増えてくると、仮に人手で対応するならば監視業務だけで多くの工数がかかるため、運用状況のレポートを作成する負担は大きな問題になります。DataRobot MLOps は、モニタリングしているモデルの運用レポートを自動生成する機能により普段の運用作業の大部分を自動化 しています。またスケジューリング機能もありますので、特定の時間に特定の期間範囲での正常性、データドリフト、精度監視の結果をワード形式のレポートとして自動生成することが可能です(図6)。
図6. DataRobot MLOpsによって自動発行されるデプロイレポート
DataRobot MLOps監視エージェント利用手順概要
前章ではDataRobot MLOps監視エージェントの主要機能を紹介し、何ができるかを解説しました。本章では監視エージェントがどう動作していて、どう設定するかについても簡単に紹介したいと思います。監視エージェントは、大きく4つのサービスと連携して動いています(図7)。
図7. DataRobot MLOpsで外部モデルを監視する際の各サービスの役割
External model(外部モデル):PythonやRで構築し、DataRobot環境以外で動くモデル
MLOps library(MLOpsライブラリ):Python(v2およびv3)およびJavaで利用可能なMLOpsライブラリ。外部モデルの予測データとメトリックをレポートするAPIを提供
Spooler(Buffer)(スプーラー/バッファ):MLOpsライブラリのAPIで設定したスプーラー(バッファ)にデータを送信
Monitoring agent(監視エージェント):監視エージェントはスプーラーに書き込まれたデータを検出し、MLOpsサービスに送信
DataRobot MLOps service(DataRobot MLOpsサービス):監視エージェントがサービスとして実行されている場合にはオンラインで、そうでない場合にはオフラインでデータを取得
上記の仕組みによって外部モデルがDataRobot MLOpsとネットワークで切り離されていても、USBドライブなどを利用してスプーラーからデータを手動コピーしエージェントに渡せばDataRobot MLOpsに監視データを送信することが可能です。データをどこに書き出して、どこから読み取り、どれくらいの頻度で送信するかなどの設定も可能です。
図8. 外部デプロイ環境とDataRobot MLOps間でやり取りされる運用情報の流れ方
設定手順はシンプルで、まず図8のようにDataRobot MLOpsでデータの受け取り側となるモデルパッケージを作成しデプロイして、デプロイメントIDとモデルIDを取得します。次に、MLOps監視エージェントをインストール・設定・実行 します。ダウンロードはDataRobotの開発者ツール画面から行うことができ、インストールはMLOps .tar ファイルの解凍だけです。
また、conf/mlops.agent.conf.yaml を編集することで以下の設定を行います。
APIトークン設定
DataRobot MLOpsサービスのURL設定
任意でスプーラー設定(デフォルトではファイルシステムチャネルでの/tmp/taへの書き出し)の変更
スプーラーの設定 では、ファイルシステムだけでなく、2023年2月時点でAmazon SQS、RabbitMQ、Google Cloud Pub/Sub、Apache Kafka、Azure Event Hubsを設定することができます。
MLOps監視エージェントは./bin/start-agent.shのシェルを実行するだけで作動します。MLOpsライブラリのインストール(Pythonパッケージからならpip install datarobot-mlops-connected-client)を行い、外部モデルにMLOpsライブラリからのレポートメソッドを追記したら準備は完了で、外部モデルを実行すればそのモデルの運用管理ができるようになります。運用管理の結果はDataRobotで作成したモデルと同じようにDataRobot MLOpsのGUIから一元的に確認することが可能です。
一階層上での運用管理環境の統合
機械学習モデルをすでに様々な業務で運用している組織では、モデル単体の運用実績だけでなく、運用管理下にある全てのモデルが連動した上でビジネス指標やKPIがどのように変化しているのかを知りたいというニーズがあります。さらに、機械学習モデルを利用していないが社内で動かしている別のサービスやサーバー自体に問題がないのかなど、社内システム全体の統合的な運用管理も実現したいことがあるかと思います。
前章まで、MLOps監視エージェントを利用して様々な出自の機械学習モデル全体の運用管理をDataRobot MLOpsに一元化できることを解説してきました。他方、監視エージェントで、機械学習モデルを利用していないサービスの運用管理やビジネス指標/KPIの管理などを行うことは残念ながらできません。
このような場合にはDataRobot MLOpsの持つREST API機能を使い、統合運用管理ツールと連携することがおすすめです。複雑なサービス監視やKPI監視を必要とする企業においてそれらの統合運用管理は必須であり、すでに何らかのツールが導入されて社内の通知システムなどとも連携されている状態かと思います。多くの統合運用管理ツールはREST APIに対応しており、別のREST APIに対応してるサービスを包括的に監視することができます。DataRobot MLOpsもREST APIに対応しているので、全体の統合運用管理を一つのツールで行い、アラートを受け取った時にだけDataRobot MLOpsに深掘りしに行くという運用も可能です(図9)。
図9. 社内システム全体の統合的な運用管理
まとめ
AIの需要はここ数年、さらに増え続けています。ボトルネックと言われていたデータサイエンティストの数も増加し、AutoMLや簡単に使えて便利なライブラリの登場により多くの機械学習モデルが日々構築されています。
モデル開発環境にはモデルビルダーの慣れもあり、さらに既存の資産をなるべく使い続けたいという想いも強いでしょう。また、弊社の経験ではAIプロジェクトに関わるスタッフで機械学習モデルの運用管理が重要だと言う人は多くとも、実際にその業務を行うのが好きだという人は決して多くありません。そのような運用管理がモデルごとに手法からバラバラになってしまうと、さらに誰もやりたくないものとなってしまうでしょう。
DataRobotのMLOps監視エージェントを利用すれば、DataRobot外で作成した機械学習モデル(外部モデル)であってもその精度やデータドリフトなど、機械学習モデルでトラックするべきメトリックを一元的に運用管理することができます。さらにリソースは既存のDataRobot環境をそのまま利用可能です。
組織で運用中の外部モデルがあって、いまは放置してしまっているという方はぜひこの機会にDataRobot MLOps監視エージェント の活用をご検討ください。
参考
[1] 経済産業省(2021)「我が国のAIガバナンスの在り方 ver1.1 」
執筆者について
濱上 大基(Hiroki Hamagami)
データサイエンティスト
DataRobot データサイエンティストとして、小売・流通業界のお客さまの AI 活用/推進を支援。博士(工学)修了後、大手電機メーカーにて研究開発に従事。AIを用いた需要予測や材料の配合最適化シミュレーションに取り組んだ経験を有する。現在は、小売・流通業界を中心に複数のプロジェクトに従事し、AIによる継続的な価値創出を支援。
濱上 大基(Hiroki Hamagami) についてもっとくわしく
小川 幹雄
DataRobot Japan VP, Japan Applied AI Experts
DataRobot Japan 3番目のメンバーとして参加。現在は、金融業界を担当するディレクター兼リードデータサイエンティストとして、金融機関のお客様での AI 導入支援から CoE 構築の支援を行いながら、イベント、大学機関、金融庁、経産省などでの講演を多数実施。初期はインフラからプロダクトマネジメント業、パートナリング業まで DataRobot のあらゆる業務を担当。前職はデータマネジメント系の外資ベンダーで分析ソリューション・ビッグデータ全般を担当。
小川 幹雄 についてもっとくわしく