Amazon Web Services ブログ
MLOps を適用して、Amazon Forecast で AI を利用した予測の自動化を構築する
この投稿では、Amazon Forecast で構築された予測モデルを開発して視覚化するために、サーバーレス Machine Learning Operations (MLOps) パイプラインを作成する方法を示します。Machine Learning (ML) のワークロードはスケーリングする必要があるため、ビジネス価値を得るために、さまざまな利害関係者間のサイロを取り除くことが重要です。MLOps モデルにより、データサイエンス、プロダクション、および運用の各チームが、可能な限り自動化されたワークフロー全体でシームレスに連携することができ、スムーズなデプロイと効果的かつ継続的なモニタリングが確実に行われるようにします。
ソフトウェア開発の DevOps モデルと同様に、ML の MLOps モデルは、ML ツールとフレームワーク全体におけるコードの構築と統合をサポートします。カスタムコードを書き直したり、既存のインフラストラクチャを再考したりすることなく、データパイプラインを自動化、運用、およびモニタリングできます。MLOps は、既存の分散ストレージと処理インフラストラクチャをスケーリングして、ML モデルを大規模にデプロイして管理するのに役立ちます。また、組織全体のすべてのモデルのドリフトを、一元化された場所で経時的に追跡および視覚化して、自動データ検証ポリシーを実装することもできます。
MLOps は、継続的な統合、継続的なデプロイ、および継続的なトレーニングを適用することにより、DevOps と ML の世界のベストプラクティスを組み合わせています。MLOps は、本番環境における ML ソリューションのライフサイクルを合理化するのに役立ちます。詳細については、Machine Learning Lens: AWS Well-Architected Framework と題したホワイトペーパーを参照してください。
以降のセクションでは、Amazon Forecast、AWS Lambda、およびAWS Step Functions を含む MLOps パイプラインを活用して、時系列予測モデルを構築、トレーニング、およびデプロイします。生成された予測を視覚化するには、Amazon Athena や Amazon QuickSight などの AWS サーバーレス分析サービスの組み合わせを使用します。
ソリューションのアーキテクチャ
このセクションでは、Amazon Forecast の使用とデプロイを自動化するための青写真として使用できる MLOps アーキテクチャをデプロイします。提供されているアーキテクチャとサンプルコードは、時系列データの MLOps パイプラインを構築するのに役立ち、予測を生成して将来のビジネス戦略を定義し、お客様のニーズを満たすことができます。
AWS が管理するサービスを使用してこのサーバーレスアーキテクチャを構築できます。つまり、ML パイプラインを作成するときにインフラストラクチャの管理について心配する必要はありません。これにより、新しいデータセットを反復処理し、機能とハイパーパラメータを調整してパフォーマンスを最適化することでモデルを調整できます。
次の図は、この投稿で作成するコンポーネントを示しています。
上の図では、Step Functions ワークフローを使用してサーバーレス MLOps パイプラインがデプロイされています。このワークフローでは、Lambda 関数がつなぎ合わされて、Amazon Forecast をセットアップし、結果を Amazon Simple Storage Service (Amazon S3) にエクスポートするために必要な手順を調整します。
アーキテクチャには次のコンポーネントが含まれます。
- 時系列データセットは、
/train
ディレクトリ (プレフィックス) の下の Amazon S3 クラウドストレージにアップロードされます。 - アップロードされたファイルは Lambda をトリガーします。Lambda は、Step Functions ステートマシンを使用して構築された MLOps パイプラインを開始します。
- ステートマシンは、一連の Lambda 関数をつなぎ合わせて、Amazon Forecast で ML モデルを構築、トレーニング、およびデプロイします。ステートマシンの Lambda コンポーネントの詳細については、次のセクションで詳細を説明します。
- ログ分析のために、ステートマシンは、Forecast のメトリクスをキャプチャする Amazon CloudWatch を使用します。
/forecast
ディレクトリのソース Amazon S3 バケットで最終予測が利用可能になったときに、Amazon Simple Notification Service (Amazon SNS) を使用して E メール通知を送信します。ML パイプラインは、古い予測を/history
ディレクトリに保存します。 - 最後に、Athena と QuickSight を使用して、現在の予測を視覚的に表現します。
この投稿では、UCI Machine Learning Repository にある個別家庭の電力消費データセットを使用します。時系列データセットは、さまざまなお客様の家庭における 1 時間あたりのエネルギー消費量を集計し、平日におけるエネルギー使用率の急上昇を示しています。後のユースケースでは、必要に応じてサンプルデータを置き換えることができます。
これでアーキテクチャに慣れることができたので、ステートマシンの各 Lambda コンポーネントの詳細について学習する準備ができました。
Step Functions を使用して MLOps パイプラインを構築する
前のセクションでは、Step Functions ステートマシンが、MLOPs パイプライン全体を自動化するアーキテクチャの中核であることを学びました。次の図は、ステートマシンを使用してデプロイされたワークフローを示しています。
前の図に示すように、Step Functions ワークフローの Lambda 関数は次のとおりです (この手順では、Lambda 関数と、Amazon S3 に保存されている params.json
ファイルから使用されるパラメータとの間のマッピングも強調表示しています)。
- Create-Dataset – Forecast データセットを作成します。データセットに関する情報は、Forecast がモデルのトレーニングのためにデータを利用する方法を理解するのに役立ちます。
- Create-DatasetGroup – データセットグループを作成します。
- Import-Data – データセットグループ内にあるデータセットにデータをインポートします。
- Create-Predictor – パラメータファイルが指定する予想期間を使用して予測子を作成します。
- Create-Forecast – 予測を作成し、Amazon S3 へのエクスポートジョブを開始します (パラメータファイルで指定された分位数を含みます)。
- Update-Resources – 必要な Athena リソースを作成し、エクスポートされた予測を入力データセットと同じ形式に変換します。
- Notify Success – Amazon SNS にメッセージを投稿して、ジョブが終了したときに E メールでアラートを送信します。
- Strategy-Choice – パラメータファイルに従って、Forecast リソースを削除するかどうかを確認します。
- Delete-Forecast – 予測を削除し、エクスポートされたデータを保持します。
- Delete-Predictor – 予測子を削除します。
- Delete-ImportJob – Forecast の
Import-Data
ジョブを削除します。
Amazon Forecast では、データセットグループは、予測の特定のコレクションのすべてのデータセットを含む抽象概念です。データセットグループ間での情報共有はありません。 スキーマのさまざまな代替案を試すには、新しいデータセットグループを作成し、対応するデータセット内で変更を加えます。詳細については、データセットおよびデータセットグループを参照してください。このユースケースでは、ワークフローはターゲットの時系列データセットをデータセットグループにインポートします。
これらの手順を完了すると、ワークフローは予測子のトレーニングジョブをトリガーします。予測子は、時系列データに基づいて予測を行うために使用される Forecast トレーニング済みモデルです。詳細については、予測子を参照してください。
予測子がトレーニングされると、ワークフローはその予測子を使用して予測の作成をトリガーします。予測の作成中、Amazon Forecast はモデルをホストして推論を行う前に、データセット全体でモデルをトレーニングします。詳細については、予測 を参照してください。
ステートマシンは、正常な予測エクスポートのデプロイ時に指定されたアドレスに通知メールを送信します。予測をエクスポートした後、Update-Resources
の手順はエクスポートされたデータを再フォーマットするため、Athena および QuickSight は簡単にデータを利用できます。
この MLOps パイプラインを再利用して、各手順の Lambda 関数のアルゴリズムとデータセットを置き換えることにより、他の ML モデルを構築、トレーニング、およびデプロイできます。
前提条件
アーキテクチャをデプロイする前に、前提条件となる以下の手順を完了してください。
- Git をインストールします。
- AWS サーバーレスアプリケーションモデル (AWS SAM) CLI をシステムにインストールします。手順については、AWS SAM CLI のインストールを参照してください。次のコードで最新バージョンがインストールされていることを確認してください。
AWS アカウントにサンプルアーキテクチャをデプロイする
デプロイを簡素化するために、この投稿では、アーキテクチャ全体を AWS CloudFormation を使用する Infrastructure as Code として提供します。これは Forecast Visualization Automation Blogpost GitHub リポジトリで入手できます。AWS SAM を使用してこのソリューションをデプロイします。
- Git リポジトリのクローンを作成します。次のコードを参照してください。
このコードは、Forecast Visualization Automation Blogpost GitHub リポジトリでも入手できます。
- 新しく作成された
amazon-forecast-samples/ml_ops/visualization_blog
ディレクトリに移動し、次のコードを入力してソリューションのデプロイを開始します。この段階で、AWS SAM は CloudFormation テンプレート変更セットを構築します。数秒後、AWS SAM から CloudFormation スタックをデプロイするように求められます。
- スタックデプロイのパラメータを指定します。この投稿では次のパラメータを使用しています。 デフォルトのパラメータを維持できます。
AWS SAM は AWS CloudFormation 変更セットを作成し、確認を求めます。
Y
と入力します。
変更セットの詳細については、変更セットを使用したスタックの更新を参照してください。
デプロイが成功すると、次の出力が表示されます。
- AWS CloudFormation コンソールの [出力] タブで、テスト手順で使用する
ForecastBucketName
の値を記録します。
サンプルアーキテクチャをテストする
次の手順は、サンプルアーキテクチャをテストする方法の概要です。Step Functions ワークフローをトリガーするには、新しく作成された S3 バケットにパラメータファイルと時系列トレーニングデータセットの 2 つのファイルをアップロードする必要があります。
- GitHub リポジトリのクローンを作成したのと同じディレクトリで、次のコードを入力します。YOURBUCKETNAME を、前にコピーした AWS CloudFormation の [出力] タブの値に置き換えます。
上記のコマンドは、Lambda 関数が Forecast API 呼び出しを設定するために使用するパラメータファイルをコピーしました。
- 次のコードを入力して、時系列データセットをアップロードします。
- Step Functions ダッシュボードで、DeployStateMachine-<random string> という名前のステートマシンを見つけます。
- 実行中のワークフローを探すためのステートマシンを選択します。
上のスクリーンショットでは、正常に実行されたすべての手順 (Lambda 関数) が緑色のボックスに表示されています。青いボックスは、手順がまだ進行中であることを示しています。色が付いていないすべてのボックスは、実行が保留されている手順です。このワークフローのすべての手順を完了するには、最大 2 時間かかる場合があります。
ワークフローが正常に完了したら、Amazon S3 コンソールに移動して、次のディレクトリを持つ Amazon S3 バケットを見つけることができます。
パラメータファイルである params.json
は、Lambda 関数から Forecast API を呼び出すための属性を格納します。これらのパラメータ設定には、予測ドメイン、頻度、およびディメンションに加えて、予測タイプ、予測子設定、およびデータセット設定などの情報が含まれています。API アクションの詳細については、Amazon Forecast Service を参照してください。
データが Amazon S3 にあるので、結果を視覚化できます。
Athena と QuickSight を使用して予測データを分析する
予測パイプラインを完了するには、データをクエリして視覚化する必要があります。Athena は、標準 SQL を使用して Amazon S3 のデータを簡単に分析できるインタラクティブなクエリサービスです。QuickSight は、クラウドを利用した高速のビジネスインテリジェンスサービスであり、データの視覚化を通じて洞察を簡単に発見できます。データの分析を開始するには、まずデータソースとして Athena を使用してデータを QuickSight に取り込みます。
AWS を初めて使用する場合は、QuickSight を設定して QuickSight アカウントを作成します。AWS アカウントがある場合は、QuickSight にサブスクライブしてアカウントを作成してください。
QuickSight で Athena を初めて使用する場合は、Athena を使用して Amazon S3 にクエリを実行するためのアクセス許可を QuickSight に付与する必要があります。詳細については、Athena を Amazon QuickSight で使用する場合のアクセス権限の不足を参照してください。
- QuickSight コンソールで、[新しい分析] を選択します。
- [新しいデータセット] を選択します。
- [Athena] を選択します。
- [新しい Athena データソース] ウィンドウで、[データソース名] に名前を入力します (例:
Utility Prediction
)。 - [接続を検証] を選択します。
- [データソースを作成] を選択します。
[テーブルの選択] のウィンドウが表示されます。
- [カスタム SQL を使用] を選択します。
- [カスタム SQL クエリの入力] ウィンドウで、クエリの名前を入力します (例:
Query to merge Forecast result with training data
)。 - クエリテキストボックスに次のコードを入力します。
- [クエリの確認] をクリックします。
これで、データを SPICE にインポートするか、データを直接クエリすることができるようになりました。
- いずれかのオプションを選択し、次に [視覚化する] をクリックします。
[フィールドリスト] では、以下のフィールドが表示されます。
item_id
target_value
timestamp
type
エクスポートされた予測には、次のフィールドが含まれています。
item_id
date
- リクエストされた分位数 (P10、P50、P90)
type
フィールドには、予測された期間の分位点タイプ(P10、P50、P90)と、トレーニングデータの値としての history
が含まれます。これは、履歴データとエクスポートされた予測との間の整合性のある履歴線を取得するために、カスタムクエリを介して行われました。
ForecastType
という名前の CreateForecast
API オプションパラメータを使用して、分位数をカスタマイズできます。この投稿では、Amazon S3 の params.json
ファイルでこれを設定できます。
- X 軸には、timestamp を選択します。
- [値] には、target_value を選択します。
- [色] には、type を選択します。
パラメータで、72 時間の期間を指定しました。結果を視覚化するには、timestamp フィールドを 1 時間ごとに集計する必要があります。
- timestamp のドロップダウンメニューから、[集計] および [時間] を選択します。
次のスクリーンショットは、最終的な予測を予想したものです。グラフは、確率的予測が生成される分位数の p10、p50m、および p90 における将来予測を示しています。
まとめ
すべての組織は、より正確な予測があることで、製品の需要をより適切に予測し、計画とサプライチェーンを最適化するなどの恩恵を受けることができます。需要の予測は困難な作業であり、ML は予測と現実の間のギャップを狭めることができます。
この投稿では、AI を利用した繰り返し可能な自動予測生成プロセスを作成する方法を示しました。また、サーバーレステクノロジーを使用して ML オペレーションパイプラインを実装する方法を学び、マネージド型の分析サービスを使用して、データをクエリし、視覚化を作成することでデータの洞察を取得しました。
Forecast でできることはまだまだあります。エネルギー消費量の予測の詳細については、Amazon Forecast を使用して正確なエネルギー消費量を予測するを参照してください。分位数の詳細については、Amazon Forecast で自由選択した分位数での予測作成のサポートを開始を参照してください。
この投稿が問題の解決に役立ったり、問題の解決のヒントになったりした場合は、お考えやご質問をコメントでお寄せいただき、共有してください。GitHub リポジトリでコードを使用および拡張できます。
著者について
Luis Lopez Soria 氏は、AWS 機械学習チームと連携する AI/ML スペシャリストソリューションアーキテクトです。彼は、AWS のお客様と連携して、大規模な機械学習の導入をサポートしています。スポーツを楽しんだり、世界中を旅したり、新しい食べ物や文化を探求したりしています。
Saurabh Shrivastava 氏は、ソリューションアーキテクトリーダー兼 AI/ML スペシャリストであり、世界で活躍するシステムインテグレーターと連携しています。Saurabh は AWS のパートナーおよびお客様と連携して、ハイブリッド環境と AWS 環境でスケーラブルアーキテクチャを構築するためのアーキテクチャ面でのガイダンスを提供しています。彼は家族とアウトドアで過ごしたり、新しい場所に旅して未知の文化を発見したりすることを楽しんでいます。
Pedro Sola Pimentel 氏は、R&D ソリューションアーキテクトであり、AWS ブラジルの商用チームと連携しています。彼は AWS と連携して、新しいテクノロジーとサービスを使用して、ソリューションを革新および開発しています。最先端のコンピューターサイエンスの研究トピックに興味があり、旅行や映画鑑賞を楽しんでいます。