組織は、機械部品の予知保全、顧客の好みに基づく製品の推奨、クレジットプロファイリング、コンテンツのモデレーション、不正検出など、さまざまなユースケースや問題に対して機械学習(ML)を利用したソリューションを構築して使用することが増えています。 これらのシナリオの多くでは、これらのMLを利用したソリューションから得られる有効性と利点は、データイベントをほぼリアルタイムで処理して洞察を引き出すことができれば、さらに強化できます。
ほぼリアルタイムのMLを利用したソリューションのビジネス価値とメリットは十分に確立されていますが、これらのソリューションを最適な信頼性とパフォーマンスで大規模に実装するために必要なアーキテクチャは複雑です。 この投稿では、組み合わせる方法について説明しています アマゾンキネシス, AWSグルー, アマゾンセージメーカー 予知保全のためのほぼリアルタイムの特徴エンジニアリングおよび推論ソリューションを構築します。
ユースケースの概要
現場に配備されたセンサー(産業機器やネットワークデバイスなど)が故障してダウンタイムが発生する前に交換または修正する必要がある予知保全のユースケースに焦点を当てています。 ダウンタイムは企業にとって高額になる可能性があり、顧客体験の低下につながる可能性があります。 MLモデルを利用した予知保全は、良好な状態の機械部品をいつ交換すべきかを通知することで、定期的なスケジュールベースのメンテナンスサイクルを強化し、不要なコストを回避するのにも役立ちます。
この投稿では、気温、プロセス温度、回転速度、トルク、工具摩耗などの機能による機械の故障を含む合成データセットに機械学習を適用することに焦点を当てます。 使用されるデータセットは、 UCIデータリポジトリ.
機械の故障は、XNUMXつの独立した故障モードで構成されています。
- 工具摩耗不良(TWF)
- 熱放散障害(HDF)
- 停電(PWF)
- 過ひずみ破壊(OSF)
- ランダム障害(RNF)
マシン障害ラベルは、前述の障害モードのいずれかが真である場合に、特定のデータポイントでマシンに障害が発生したかどうかを示します。 障害モードの少なくとも1つが真の場合、プロセスは失敗し、マシン障害ラベルはXNUMXに設定されます。MLモデルの目的は、マシン障害を正しく識別することであるため、ダウンストリームの予知保全アクションを開始できます。
ソリューションの概要
予知保全のユースケースでは、デバイスセンサーが機械部品に関するさまざまな測定値と読み取り値をストリーミングすると想定しています。 次に、私たちのソリューションは、毎回ストリーミングデータのスライスを取得し(マイクロバッチ)、処理と特徴エンジニアリングを実行して特徴を作成します。 作成された機能は、トレーニングおよびデプロイされたMLモデルからほぼリアルタイムで推論を生成するために使用されます。 生成された推論は、ダウンストリームアプリケーションによってさらに処理および消費され、適切なアクションを実行してメンテナンスアクティビティを開始できます。
次の図は、ソリューション全体のアーキテクチャを示しています。
このソリューションは、大まかに次のセクションで構成されています。これらのセクションについては、この投稿の後半で詳しく説明します。
- ストリーミングデータソースと取り込み - を使用しております Amazon Kinesisデータストリーム フィールドセンサーからストリーミングデータを大規模に収集し、さらに処理できるようにします。
- ほぼリアルタイムの特徴エンジニアリング– AWS Glueストリーミングジョブを使用して、Kinesisデータストリームからデータを読み取り、データ処理と特徴エンジニアリングを実行してから、派生した機能をに保存します。 Amazon シンプル ストレージ サービス (Amazon S3)。 Amazon S3は、大量のデータを保存するための信頼性が高く費用効果の高いオプションを提供します。
- モデルのトレーニングと展開– UCIデータリポジトリのAI4I予知保全データセットを使用して、SageMakerを使用したXGBoostアルゴリズムに基づいてMLモデルをトレーニングします。 次に、トレーニング済みモデルをSageMaker非同期推論エンドポイントにデプロイします。
- ほぼリアルタイムのML推論 – Amazon S3で機能が利用可能になったら、デプロイされたモデルからほぼリアルタイムで推論を生成する必要があります。 SageMaker非同期推論エンドポイントは、より大きなペイロードサイズ(最大1 GB)をサポートし、数分(最大15分)以内に推論を生成できるため、この要件に最適です。 S3イベント通知を使用して AWSラムダ SageMaker非同期推論エンドポイントを呼び出す関数。 SageMaker非同期推論エンドポイントは、入力としてS3の場所を受け入れ、デプロイされたモデルから推論を生成し、これらの推論をほぼリアルタイムでAmazonS3に書き戻します。
このソリューションのソースコードはにあります GitHubの。 ソリューションはテスト済みであり、us-east-1で実行する必要があります。
私たちは使用します AWS CloudFormation テンプレート、を使用して展開 AWSサーバーレスアプリケーションモデル (AWS SAM)、およびソリューションをデプロイするためのSageMakerノートブック。
前提条件
開始するには、前提条件として、 サム CLI, Pythonの3, PIP インストールされています。 あなたはまた持っている必要があります AWSコマンドラインインターフェイス (AWS CLI)が正しく設定されている。
ソリューションを展開する
あなたが使用することができます AWS クラウドシェル これらの手順を実行します。 CloudShellは、コンソールクレデンシャルで事前認証されたブラウザーベースのシェルであり、プリインストールされた一般的な開発および運用ツール(AWS SAM、AWS CLI、Pythonなど)が含まれています。 したがって、ローカルにインストールしたり構成したりする必要はありません。
- まず、AWSGlueストリーミングジョブのスクリプトを保存するS3バケットを作成します。 ターミナルで次のコマンドを実行して、新しいバケットを作成します。
- 作成されたバケットの名前を書き留めます。
- 次に、スタックをデプロイするためのCloudFormationテンプレートを含むコードリポジトリをローカルに複製します。 ターミナルで次のコマンドを実行します。
- sam-templateディレクトリに移動します。
- 次のコマンドを実行して、AWS Glueジョブスクリプト(glue_streaming / app.pyから)を作成したS3バケットにコピーします。
- これで、AWS SAMを介したCloudFormationテンプレートを使用して、ソリューションのビルドとデプロイを進めることができます。 次のコマンドを実行します。
- スタック名、優先AWSリージョン(
us-east-1
)、及びGlueScriptsBucket
.
AWS GlueスクリプトのS3バケット用に以前に作成したものと同じS3バケットを提供していることを確認してください(パラメーター GlueScriptsBucket
次のスクリーンショット)。
必要な引数を指定すると、AWSSAMはスタックのデプロイを開始します。 次のスクリーンショットは、作成されたリソースを示しています。
スタックが正常にデプロイされると、次のメッセージが表示されます。
- AWS CloudFormationコンソールで、スタックを開きます(この投稿では、
nrt-streaming-inference
)CloudFormationテンプレートをデプロイするときに提供されました。 - ソフトウェア設定ページで、下図のように リソース タブで、SageMakerノートブックインスタンスIDをメモします。
- SageMakerコンソールで、このインスタンスを開きます。
SageMakerノートブックインスタンスには、必要なノートブックがすでにプリロードされています。
ノートブックフォルダに移動し、ノートブック内の指示を開いてそれに従います(Data_Pre-Processing.ipynb
& ModelTraining-Evaluation-and-Deployment.ipynb
)データセットを探索し、前処理と特徴エンジニアリングを実行し、モデルをトレーニングしてSageMaker非同期推論エンドポイントにデプロイします。
ストリーミングデータソースと取り込み
Kinesis Data Streamsは、サーバーレスでスケーラブルで耐久性のあるリアルタイムデータストリーミングサービスであり、データレコードの大規模なストリームをリアルタイムで収集して処理するために使用できます。 Kinesis Data Streamsを使用すると、ITインフラストラクチャログデータ、アプリケーションログ、ソーシャルメディア、市場データフィード、Webクリックストリームデータ、IoTデバイスとセンサーなど、さまざまなソースからのデータストリームをキャプチャ、処理、および保存できます。 スループットとスケーリングの要件に応じて、Kinesisデータストリームをオンデマンドモードまたはプロビジョニングモードでプロビジョニングできます。 詳細については、を参照してください。 データストリーム容量モードの選択.
このユースケースでは、さまざまなセンサーが温度、回転速度、トルク、工具摩耗などの測定値をデータストリームに送信していると想定しています。 Kinesis Data Streamsは、データストリームを収集して取り込むためのファネルとして機能します。
私たちは、使用 AmazonKinesisデータジェネレーター (KDG)この投稿の後半で、データを生成してKinesisデータストリームに送信し、センサーによって生成されるデータをシミュレートします。 データストリームsensor-data-streamからのデータは、AWSGlueストリーミングジョブを使用して取り込まれ、処理されます。これについては、次に説明します。
ほぼリアルタイムの特徴エンジニアリング
AWSGlueストリーミングジョブ コンピューティング環境を管理する必要なしに、ストリーミングデータを大規模に処理するための便利な方法を提供します。 AWS Glueを使用すると、継続的に実行されているジョブを使用して、ストリーミングデータに対して抽出、変換、読み込み(ETL)操作を実行できます。 AWSGlueストリーミングETLはApacheSparkStructured Streamingエンジン上に構築されており、Kinesis、Apache Kafka、および ApacheKafkaのAmazonマネージドストリーミング (Amazon MSK)。
ストリーミングETLジョブは、AWSGlue組み込みトランスフォームとApacheSparkStructuredStreamingにネイティブなトランスフォームの両方を使用できます。 SparkMLと MLLib すぐに利用できるヘルパーライブラリを使用して機能を簡単に処理するためのAWSGlueジョブのライブラリ。
ストリーミングデータソースのスキーマが事前に決定されている場合は、AWSデータカタログテーブルで指定できます。 スキーマ定義を事前に決定できない場合は、ストリーミングETLジョブでスキーマ検出を有効にできます。 次に、ジョブは受信データからスキーマを自動的に決定します。 さらに、あなたは使用することができます AWSGlueスキーマレジストリ データストリームスキーマの集中的な検出、制御、および進化を可能にします。 さらに、スキーマレジストリをデータカタログと統合して、データカタログでAWSGlueテーブルまたはパーティションを作成または更新するときにスキーマレジストリに保存されているスキーマをオプションで使用できます。
この投稿では、AWS Glueデータカタログテーブルを作成します(sensor-stream
)Kinesisデータストリームをソースとして使用し、センサーデータのスキーマを定義します。
データカタログテーブルからAWSGlue動的データフレームを作成して、Kinesisからストリーミングデータを読み取ります。 また、次のオプションを指定します。
- ウィンドウサイズが60秒であるため、AWSGlueジョブは60秒のウィンドウでデータを読み取って処理します
- 開始位置
TRIM_HORIZON
、Kinesisデータストリーム内の最も古いレコードからの読み取りを可能にする
SparkMLlibも使用しています 文字列インデクサー 文字列列タイプをラベルインデックスにエンコードする機能トランスフォーマー。 この変換は、SparkMLパイプラインを使用して実装されます。 SparkMLパイプライン MLアルゴリズム用の高レベルAPIの統一されたセットを提供して、複数のアルゴリズムを単一のパイプラインまたはワークフローに簡単に組み合わせることができるようにします。
foreachBatch APIを使用して、processBatchという名前の関数を呼び出します。この関数は、このデータフレームによって参照されるデータを処理します。 次のコードを参照してください。
関数processBatchは、指定された変換を実行し、年、月、日、およびバッチIDに基づいてAmazonS3のデータを分割します。
また、Amazon S3に小さなファイルが多すぎないように、AWSGlueパーティションを単一のパーティションに再パーティション化します。 複数の小さなファイルがあると、各ファイルの検索、オープン、および読み取りに関連するオーバーヘッドが増大するため、読み取りパフォーマンスが低下する可能性があります。 最後に、S3バケット内のプレフィックス(機能)に推論を生成する機能を記述します。 次のコードを参照してください。
モデルのトレーニングと展開
SageMakerは、完全に管理され統合されたMLサービスであり、データサイエンティストとMLエンジニアが、MLモデルをすばやく簡単に構築、トレーニング、デプロイできるようにします。
Data_Pre-Processing.ipynbノートブック内, まず、UCIデータリポジトリからAI4I予知保全データセットをインポートし、探索的データ分析(EDA)を実行します。 また、モデルのトレーニングに機能をより役立つようにするために、機能エンジニアリングを実行します。
たとえば、データセット内には、typeという名前の機能があります。これは、製品の品質タイプをL(低)、M(中)、またはH(高)として表します。 これはカテゴリカル機能であるため、モデルをトレーニングする前にエンコードする必要があります。 これを実現するために、Scikit-LearnのLabelEncoderを使用します。
機能が処理され、キュレートされたトレインとテストのデータセットが生成されたら、MLモデルをトレーニングして、システムの読み取り値に基づいてマシンに障害が発生したかどうかを予測する準備が整います。 SageMakerの組み込みアルゴリズムを使用して、XGBoostモデルをトレーニングします。 XGブースト トレーニングサンプルが限られている場合でも、分類を含む複数のタイプのML問題に対して良好な結果を提供できます。
SageMakerトレーニングジョブ SageMakerでMLモデルをトレーニングするための強力で柔軟な方法を提供します。 SageMakerは、基盤となるコンピューティングインフラストラクチャを管理し、提供します 複数のオプション ユースケースに基づいて、さまざまなモデルトレーニング要件から選択できます。
モデルのトレーニングが完了し、ビジネス要件に基づいてモデルの評価が満足のいくものになったら、モデルの展開を開始できます。 まず、AsyncInferenceConfigオブジェクトオプションを使用し、以前にトレーニングしたモデルを使用して、エンドポイント構成を作成します。
次に、作成したエンドポイント設定を使用して、SageMaker非同期推論エンドポイントを作成します。 プロビジョニングが完了したら、エンドポイントの呼び出しを開始して、非同期で推論を生成できます。
ほぼリアルタイムの推論
セージメーカー 非同期推論 エンドポイントは、着信推論要求をキューに入れ、ほぼリアルタイムで非同期に処理する機能を提供します。 これは、より大きなペイロードサイズ(最大1 GB)の推論要求があり、より長い処理時間(最大15分)が必要で、ほぼリアルタイムのレイテンシ要件があるアプリケーションに最適です。 非同期推論では、処理するリクエストがないときにインスタンス数をゼロに自動スケーリングすることでコストを節約できるため、エンドポイントがリクエストを処理しているときにのみ料金を支払うことができます。
リアルタイム推論エンドポイントを作成する方法と同様に、SageMaker非同期推論エンドポイントを作成し、さらに AsyncInferenceConfig
CreateEndpointConfigAPIのEndpointConfigフィールドを使用してエンドポイント構成を作成する際のオブジェクト。 次の図は、推論ワークフローと、非同期推論エンドポイントが推論を生成する方法を示しています。
非同期推論エンドポイントを呼び出すには、リクエストペイロードをAmazon S3に保存し、このペイロードへの参照をInvokeEndpointAsyncリクエストの一部として提供する必要があります。 呼び出し時に、SageMakerは処理要求をキューに入れ、識別子と出力場所を応答として返します。 処理時に、SageMakerは結果をAmazonS3の場所に配置します。 オプションで、成功またはエラー通知を受け取ることを選択できます。 Amazon シンプル通知サービス (AmazonSNS)。
エンドツーエンドのソリューションをテストする
ソリューションをテストするには、次の手順を実行します。
- AWS CloudFormationコンソールで、前に作成したスタックを開きます(
nrt-streaming-inference
). - ソフトウェア設定ページで、下図のように 出力 タブで、S3バケットの名前をコピーします(
EventsBucket
).
これは、Kinesisデータストリームから読み取って処理した後、AWSGlueストリーミングジョブが機能を書き込むS3バケットです。
次に、このS3バケットのイベント通知を設定します。
- Amazon S3コンソールで、バケットに移動します
EventsBucket
. - ソフトウェア設定ページで、下図のように プロパティ タブの イベント通知 セクションでは、選択 イベント通知を作成する.
- イベント名、 入る
invoke-endpoint-lambda
. - 接頭辞、 入る
features/
. - サフィックス、 入る
.csv
. - イベントの種類選択 すべてのオブジェクト作成イベント.
- 開催場所選択 ラムダ関数.
- ラムダ関数、および機能を選択します
invoke-endpoint-asynch
. - 選択する 変更を保存します.
- AWS Glueコンソールで、ジョブを開きます
GlueStreaming-Kinesis-S3
. - 選択する ジョブを実行する.
次に、Kinesis Data Generator(KDG)を使用して、Kinesisデータストリームにデータを送信するセンサーをシミュレートします。 KDGを初めて使用する場合は、を参照してください。 概要 初期設定用。 KDGは、ユーザーを作成し、KDGを使用してKinesisにイベントを送信するのに十分な権限を割り当てるためのCloudFormationテンプレートを提供します。 を実行します CloudFormationテンプレート この投稿でソリューションを構築するために使用しているAWSアカウント内。 KDGをセットアップしたら、ログインしてKDGにアクセスし、Kinesisデータストリームにテストイベントを送信します。
- Kinesisデータストリームを作成したリージョン(us-east-1)を使用します。
- ドロップダウンメニューで、データストリームを選択します
sensor-data-stream
. - XNUMX秒あたりのレコード セクション、選択 定数 100と入力します。
- Unselect レコードを圧縮する.
- 記録テンプレート、次のテンプレートを使用します。
- クリック データを送信する Kinesisデータストリームへのデータの送信を開始します。
AWS Glueストリーミングジョブは、提供されたウィンドウサイズに基づいて、Kinesisデータストリームからデータのマイクロバッチ(センサーの読み取り値を表す)を読み取り、抽出します。 次に、ストリーミングジョブは、このマイクロバッチで機能エンジニアリングを処理および実行してから、パーティション化してS3バケット内のプレフィックス機能に書き込みます。
AWS Glueストリーミングジョブによって作成された新機能がS3バケットに書き込まれると、Lambda関数(invoke-endpoint-asynch
)がトリガーされます。これは、デプロイされたMLモデルから推論を取得するための呼び出しリクエストを送信することにより、SageMaker非同期推論エンドポイントを呼び出します。 非同期推論エンドポイントは、非同期呼び出しの要求をキューに入れます。 処理が完了すると、SageMakerは推論結果をAmazon S3の場所に保存します(S3OutputPath
)非同期推論エンドポイントの構成中に指定されました。
私たちのユースケースでは、推論結果は、センサーの読み取り値に基づいて、機械部品が故障する可能性があるかどうかを示します。
SageMakerは、AmazonSNSで成功またはエラー通知も送信します。 たとえば、 メール購読 成功およびエラーのSNSトピック(非同期SageMaker推論エンドポイント設定内で指定)の場合、推論要求が処理されるたびに電子メールを送信できます。 次のスクリーンショットは、SNSの成功トピックからのサンプルメールを示しています。
実際のアプリケーションの場合、SNS通知を次のような他のサービスと統合できます。 Amazon シンプル キュー サービス (Amazon SQS)およびLambdaは、要件に基づいて、生成された推論の追加の後処理または他のダウンストリームアプリケーションとの統合を行います。 たとえば、予知保全のユースケースでは、SNS通知に基づいてLambda関数を呼び出して、Amazon S3から生成された推論を読み取り、さらに処理(集計やフィルタリングなど)し、次の作業指示の送信などのワークフローを開始できます。技術者への機器の修理。
クリーンアップ
スタックのテストが終了したら、リソース(特に、Kinesisデータストリーム、Glueストリーミングジョブ、およびSNSトピック)を削除して、予期しない請求を回避します。
次のコードを実行して、スタックを削除します。
また、ModelTraining-Evaluation-and-Deploymentノートブックのクリーンアップセクションに従って、SageMakerエンドポイントなどのリソースを削除します。
まとめ
この投稿では、予知保全のユースケースを使用して、Kinesis、AWS Glue、SageMakerなどのさまざまなサービスを使用してほぼリアルタイムの推論パイプラインを構築する方法を示しました。 このソリューションを試してみて、ご意見をお聞かせください。
ご不明な点がございましたら、コメント欄でお知らせください。
著者について
ラーフル・シャルマ はAWSDataLabのソリューションアーキテクトであり、AWSのお客様がAI/MLソリューションを設計および構築するのを支援しています。 AWSに参加する前、Rahulは金融および保険セクターで数年を過ごし、顧客がデータと分析プラットフォームを構築するのを支援してきました。
パット・ライリー はAWSDataLabのアーキテクトであり、お客様がビジネスをサポートするためのデータワークロードを設計および構築するのを支援しています。 AWSの前は、PatはAWSパートナーに相談し、さまざまな業界でAWSデータワークロードを構築していました。