AI News HubLIVE
サイト内リライト5 分で読了

Amazon SageMaker AIとMLflowを使用した識別型MLモデルの監視

機械学習モデルは本番環境でデータドリフトやモデルドリフトにより精度が低下します。この記事では、オープンソースのEvidentlyライブラリ、Amazon SageMaker AI、MLflowを組み合わせて、監視レポートの生成、MLflowでの結果の整理と比較、パイプラインによるスケーリング、ドリフト通知のトリガーを実現する方法を紹介します。

ソースAWS Machine Learning Blog著者: Sandeep Raveesh-Babu

機械学習モデルはトレーニングが完了したとたんに効果と精度が低下し始めます。消費者行動の変化、新製品のリリース、センサー技術のアップグレード、経済・政治環境の変動は、モデルがトレーニング中に学習したパターンや確率を変える制御不能な要因の例です。本番環境にデプロイされたモデルの精度やベースライン統計の変化を積極的に監視することで、問題が深刻化する前に対処できます。モデル監視は、レイテンシーやアプリケーションの可用性などシステム全体の問題を特定するためのAI可観測性ツールと組み合わせることができます。

この記事は、分類や回帰のユースケースに使用される識別型機械学習モデルに焦点を当てています。生成AIモデルについては、『Amazon SageMaker AIエンドポイント推論におけるLLMの本番対応リアルタイム監視ソリューション』を参照してください。識別型MLモデルの品質低下を引き起こす要因は、大きく2つに分類できます。

  • データドリフト:入力データの統計的特性の変化。上流データソースの予期せぬ変更(列が整数から浮動小数点に変わるなど)から、まったく新しい製品ラインのリリースまでさまざまです。トレーニングデータセットのベースライン統計を計算し、本番環境で経時的に収集したデータの同じ統計と比較することで測定できます。
  • モデルドリフト:モデルが学習した確率的パターンが新しいデータに適合しなくなるために生じる予測精度の変化。例えば、経済の好転による消費者行動の変化が原因です。グラウンドトゥルースラベルを収集してモデル品質指標を計算し、モデルトレーニングプロセス中に計算された同じ指標と比較することで測定できます。

Amazon SageMaker AIは、識別型モデルと生成型モデルの両方の構築、トレーニング、デプロイ、管理を支援するフルマネージド機械学習サービスです。ただし、フルマネージドであっても、よりカスタマイズ可能なアプローチが必要な場合があります。例えば、モデリングライフサイクル全体をコスト効率よく管理したい、マネージドサービスがサポートしない独自のユースケースを監視したい、監視を他のUIや可観測性パイプラインに統合したい、といったケースです。そこで、この記事では、オープンソースのEvidently PythonライブラリとAmazon SageMaker AI、MLflowを使用したデータドリフトとモデルドリフト計算のためのモデル監視アーキテクチャを紹介します。このソリューションの結果は、好みのダッシュボードに統合したり、関係者へのアラート送信や自動モデル再トレーニングパイプラインのトリガーに使用できます。

ソリューション概要

このソリューションは、モデルトレーニングからモデルデプロイメントまでの機械学習ワークフローでモデル監視を実装する方法を示します。図2は、バッチ推論ユースケースのワークフローを示しており、SlackでのアラートやMLflowでのモデル結果の可視化までを含みます。ワークフローは以下のステップで構成されます。

  1. トレーニングジョブ:Amazon S3バケットの入力データでモデルをトレーニングし、モデル指標を計算してMLflowに保存。ベースラインデータセットは個別にS3に保存され、本番監視に使用。
  2. バッチ変換:本番ワークロードの推論を実行し、結果をS3バケットに保存。
  3. 処理ジョブ:Evidentlyのプリセットを使用してデータドリフトとモデル品質指標を計算。注意:Evidentlyはモデル指標を計算しますが、トレーニング時の指標との差異であるモデルドリフトを直接計算するわけではありません。ただし、処理ジョブをカスタムコードで拡張してモデルドリフトを計算できます。バッチ変換と処理ジョブは、Amazon EventBridge Schedulerを使用したパイプラインでスケジュール可能です。
  4. すべての監視指標とEvidentlyレポートはMLflowに保存され、実行の経時追跡、実行間の比較、レポートの可視化が可能。
  5. オプションで、ドリフトが検出された場合、Amazon SNS通知をトリガーしてメールでユーザーに警告。

リアルタイムエンドポイントのユースケースでも同様のアプローチが可能です。図3はリアルタイムエンドポイントのワークフローを示しています。主な違いは、エンドポイントでデータキャプチャを有効にし、入出力をS3バケットにログ記録することです。このアーキテクチャでは、処理ジョブの代わりにAWS Lambda関数を使用して監視コードをデプロイします。どちらのアーキテクチャでも、好みに応じて処理ジョブまたはLambdaを使用できます。Lambda関数は定期的に実行することも、S3バケットにデータが到着したときにトリガーすることもできます。

リアルタイムエンドポイントのこのパターンは、モデルトレーニングとモデル推論の両方に使用できるクラスターをプロビジョニングできるAmazon SageMaker Hyperpodでも使用できます。Hyperpodでは、エンドポイントレベル、ロードバランサーレベル、またはモデルPodレベルでデータキャプチャを有効にできます。推論リクエストとレスポンスは自動的にS3バケットに書き込まれ、モデル監視のためにアクセスできます。

実践ガイド

以下はバッチ変換のモデル監視ソリューションのセットアップ手順です。完全なリポジトリには、リアルタイムエンドポイントのサンプルも含まれています。前提条件:SageMaker AIドメイン、Studio内のMLflowアプリ、JupyterLabスペース(ml.t3.mediumで十分)、リポジトリのクローン。ノートブック predictive_ml_experimentation_data_model_monitoring_evidently.ipynb を開きます(SageMaker Python SDK v3を使用)。

モデルトレーニングと推論:サンプルノートブックはUCI機械学習リポジトリのBank Marketingデータセットを使用します。このデータセットは、ポルトガルの銀行を対象とした電話マーケティングに関する情報を含み、顧客が定期預金を申し込むかどうかを予測します(二値分類)。データをクレンジングし、XGBoostモデルをトレーニングして、ログと指標をMLflowに送信し、最終モデルをMLflowモデルレジストリに登録します。このセクションでは、後の本番監視のために、トレーニングデータセットをベースラインデータセットとしてS3バケットに保存し、モデル指標をMLflowに保存します。

データドリフトとモデル品質の計算:Evidentlyにはさまざまなプリセット(DataDriftPreset、DataSummaryPresetなど)があり、カスタマイズ可能です。サンプルノートブックでは、Evidentlyレポート(HTMLとJSON)をMLflowにアーティファクトとして保存し、特定のドリフト値をMLflow指標として抽出するヘルパー関数を作成します。これにより、異なる実行の比較や特定の値に基づくアラート生成が可能になります。各データドリフト計算はMLflowの1回の実行として保存され、モデル名、トレーニングジョブ名、データセットサイズなどのパラメータを追加できます。

モデル品質については、ClassificationPresetを使用して精度、適合率、再現率、F1スコアなどを計算します。不均衡ラベルのデータセットでは、適合率、再現率、AUCなど関連性の高い指標にターゲットを絞ったカスタムレポートも可能です。

MLflowではビューをカスタマイズし、特定の属性に基づいて個々の実行を比較できます。図9は、複数のデータドリフト、モデル品質、包括的な品質の実行を元のトレーニング実行と一緒に表示し、どのトレーニング実行が関連しているか、連続するデータドリフト実行でドリフトした列の数、精度の低下度合いなどを確認できます。図10は、モデル実験、トレーニング、デプロイメント、監視を含むモデルライフサイクル全体の指標の経時変化をプロットしたものです。

パイプラインによるスケーリング:2番目のノートブック batch_monitoring_pipeline.ipynb は、ジョブとパイプラインを通じて推論と監視をスケーリングする方法を示しています。パイプラインは2つのステップで構成されます。Transformステップ(S3から入力データを取得し、トレーニング済みXGBoostモデルで推論)とProcessingステップ(監視指標を計算)です。定期的なスケジューリングも可能です。

このソリューションにより、本番環境のモデルを包括的に監視し、期待されるパフォーマンスを維持できます。