ML フィードバックコネクタ - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は、2023 年 6 月 30 日に延長ライフサイクルフェーズに入りました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日付を過ぎる AWS IoT Greengrass V1 と、 は機能、機能強化、バグ修正、セキュリティパッチを提供する更新プログラムをリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行する AWS IoT Greengrass Version 2ことを強くお勧めします。これにより、重要な新機能が追加され、追加のプラットフォームのサポートが追加されます

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ML フィードバックコネクタ

警告

このコネクタは延長ライフサイクルフェーズに移行しており、AWS IoT Greengrass では、機能、既存機能の拡張、セキュリティパッチ、バグ修正を提供するアップデートはリリースされません。詳細については、「AWS IoT Greengrass Version 1 メンテナンスポリシー」を参照してください。

この ML フィードバックコネクタにより、モデルの再トレーニングと分析のための機械学習 (ML) モデルデータへのアクセスが容易になります。コネクタ:

  • ML モデルで使用される入力データ (サンプル) を Amazon S3 にアップロードします。モデル入力は、イメージ、JSON、オーディオなど、任意の形式にすることができます。サンプルをクラウドにアップロードした後、そのサンプルを使用してモデルを再トレーニングし、予測の正確性と精度を向上させることができます。例えば、SageMaker Ground Truth を使用してサンプルにラベルを付け、SageMaker モデルを再トレーニングできます。

  • モデルからの予測結果を MQTT メッセージとして発行します。これにより、モデルの推論品質をリアルタイムでモニタリングおよび分析できます。また、予測結果を保存し、それを使用して経時的な傾向を分析することもできます。

  • サンプルアップロードとサンプルデータに関するメトリクスを Amazon CloudWatch に発行します。

このコネクタを設定するには、サポートされているフィードバック設定を JSON 形式で記述します。フィードバック設定では、送信先 Amazon S3 バケット、コンテンツタイプ、サンプリング戦略などのプロパティを定義します。(サンプリング戦略は、アップロードするサンプルを決定するために使用されます)。

ML フィードバックコネクタは、次のシナリオで使用できます。

  • ユーザー定義関数と共に使用する。ローカル推論 Lambda 関数は AWS IoT Greengrass Machine Learning SDK を使用してこのコネクタを呼び出し、ターゲットフィードバック設定、モデル入力、モデル出力 (予測結果) を渡します。例については、「使用例」を参照してください。

  • ML イメージ分類コネクタ (v2) と共に使用する。このコネクタを ML イメージ分類コネクタで使用するには、ML イメージ分類コネクタの MLFeedbackConnectorConfigId パラメータを設定します。

  • ML オブジェクト検出コネクタと共に使用する。このコネクタを ML オブジェクト検出コネクタで使用するには、ML オブジェクト検出コネクタの MLFeedbackConnectorConfigId パラメータを設定します。

ARN: arn:aws:greengrass:region::/connectors/MLFeedback/versions/1

要件

このコネクタには以下の要件があります。

  • AWS IoT Greengrass Core ソフトウェア v1.9.3 以降。

  • Python バージョン 3.7 または 3.8 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

    注記

    Python 3.8 を使用するには、次のコマンドを実行して、Python 3.7 のデフォルトのインストールフォルダからインストール済みの Python 3.8 バイナリへのシンボリックリンクを作成します。

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    これにより、AWS IoT Greengrass の Python 要件を満たすようにデバイスが設定されます。

  • 1 つ以上の Amazon S3 バケット。使用するバケットの数は、サンプリング戦略によって異なります。

  • 以下の IAM ポリシーの例に示すように、送信先 Amazon S3 バケットのオブジェクトに対して s3:PutObject アクションを許可するために Greengrass グループロールが設定されている。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::bucket-name/*" ] } ] }

    ポリシーには、すべての送信先バケットをリソースとして含める必要があります。リソースにきめ細かいアクセス権限または条件付きアクセス権限を付与できます (たとえば、ワイルドカード * 命名スキームを使用)。

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、「Greengrass グループロールの管理 (コンソール)」または「Greengrass グループロールの管理 (CLI)」を参照してください。

  • CloudWatch Metrics コネクタが Greengrass グループに追加され、設定されている。これは、メトリクスレポート機能を使用する場合にのみ必要です。

  • このコネクタを操作するには、AWS IoT Greengrass Machine Learning SDK v1.1.0 が必要です。

パラメータ

FeedbackConfigurationMap

コネクタが Amazon S3 にサンプルをアップロードするために使用できる 1 つ以上のフィードバック設定のセット。フィードバック設定は、送信先バケット、コンテンツタイプ、 サンプリング戦略などのパラメータを定義します。このコネクタが呼び出されると、呼び出し元の Lambda 関数またはコネクタはターゲットフィードバック設定を指定します。

AWS IoT コンソールでの表示名: [Feedback configuration map] (フィードバック設定マップ)

必須: true

タイプ: サポートされているフィードバック設定のセットを定義する正しい形式の JSON 文字列。例については、「FeedbackConfigurationMap の例」を参照してください。

フィードバック設定オブジェクトの ID には、次の要件があります。

ID:

  • 設定オブジェクト間で一意である必要があります。

  • 文字または数字で始まる必要があります。小文字と大文字の英文字、数字、およびハイフン (-) を含めることができます。

  • 2~63 文字の長さにする必要があります。

必須: true

タイプ: string

有効なパターン: ^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

例: MyConfig0config-a12id

フィードバック設定オブジェクトの本文には、次のプロパティが含まれます。

s3-bucket-name

宛先 Amazon S3 バケットの名前。

注記

グループロールは、すべての送信先バケットで s3:PutObject アクションを許可する必要があります。詳細については、「要件」を参照してください。

必須: true

タイプ: string

有効なパターン: ^[a-z0-9\.\-]{3,63}$

content-type

アップロードするサンプルのコンテンツタイプ。個々のフィードバック設定のすべてのコンテンツは、同じタイプである必要があります。

必須: true

タイプ: string

例: image/jpegapplication/jsonaudio/ogg

s3-prefix

アップロードされたサンプルに使用するキープレフィックス。プレフィックスはディレクトリ名に似ています。これにより、バケット内の同じディレクトリに類似したデータを保存できます。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトメタデータの使用」を参照してください。

必須: false

タイプ: string

file-ext

アップロードされたサンプルに使用するファイル拡張子。コンテンツタイプの有効なファイル拡張子である必要があります。

必須: false

タイプ: string

例: jpgjsonogg

sampling-strategy

アップロードするサンプルをフィルタリングするために使用するサンプリング戦略。省略した場合、コネクタは受け取ったすべてのサンプルのアップロードを試みます。

必須: false

タイプ: 次のプロパティを含む正しい形式の JSON 文字列。

strategy-name

サンプリング戦略の名前。

必須: true

タイプ: string

有効な値: RANDOM_SAMPLINGLEAST_CONFIDENCEMARGIN、または ENTROPY

rate

Random サンプリング戦略のレート。

必須: strategy-nameRANDOM_SAMPLING の場合、true

タイプ: number

有効な値: 0.0 - 1.0

threshold

Least ConfidenceMargin、または Entropy サンプリング戦略のしきい値。

必須: strategy-nameLEAST_CONFIDENCEMARGIN、または ENTROPY の場合、true

タイプ: number

有効な値:

  • LEAST_CONFIDENCE または MARGIN 戦略の場合は 0.0 - 1.0

  • ENTROPY 戦略の場合は 0.0 - no limit

RequestLimit

コネクタが一度に処理できるリクエストの最大数。

このパラメータを使用すると、コネクタが同時に処理するリクエストの合計数を限定して、メモリ消費量を制限することができます。この制限を超えるリクエストは無視されます。

AWS IoT コンソールでの表示名: [Request limit] (リクエスト制限)

必須: false

タイプ: string

有効な値: 0 - 999

有効なパターン: ^$|^[0-9]{1,3}$

サンプルコネクタを作成する (AWS CLI)

以下の CLI コマンドは、ML フィードバックコネクタを含む初期バージョンで ConnectorDefinition を作成します。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyMLFeedbackConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/MLFeedback/versions/1", "Parameters": { "FeedbackConfigurationMap": "{ \"RandomSamplingConfiguration\": { \"s3-bucket-name\": \"my-aws-bucket-random-sampling\", \"content-type\": \"image/png\", \"file-ext\": \"png\", \"sampling-strategy\": { \"strategy-name\": \"RANDOM_SAMPLING\", \"rate\": 0.5 } }, \"LeastConfidenceConfiguration\": { \"s3-bucket-name\": \"my-aws-bucket-least-confidence-sampling\", \"content-type\": \"image/png\", \"file-ext\": \"png\", \"sampling-strategy\": { \"strategy-name\": \"LEAST_CONFIDENCE\", \"threshold\": 0.4 } } }", "RequestLimit": "10" } } ] }'

FeedbackConfigurationMap の例

以下に示しているのは、FeedbackConfigurationMap パラメータ値の拡張例です。この例には、さまざまなサンプリング戦略を使用するいくつかのフィードバック設定が含まれています。

{ "ConfigID1": { "s3-bucket-name": "my-aws-bucket-random-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "RANDOM_SAMPLING", "rate": 0.5 } }, "ConfigID2": { "s3-bucket-name": "my-aws-bucket-margin-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "MARGIN", "threshold": 0.4 } }, "ConfigID3": { "s3-bucket-name": "my-aws-bucket-least-confidence-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "LEAST_CONFIDENCE", "threshold": 0.4 } }, "ConfigID4": { "s3-bucket-name": "my-aws-bucket-entropy-sampling", "content-type": "image/png", "file-ext": "png", "sampling-strategy": { "strategy-name": "ENTROPY", "threshold": 2 } }, "ConfigID5": { "s3-bucket-name": "my-aws-bucket-no-sampling", "s3-prefix": "DeviceA", "content-type": "application/json" } }

サンプリング戦略

コネクタは、コネクタに渡されたサンプルをアップロードするかどうかを決定する 4 つのサンプリング戦略をサポートします。サンプルは、モデルが予測に使用するデータの個別のインスタンスです。サンプリング戦略を使用して、モデルの精度を向上させる可能性が最も高いサンプルをフィルタリングできます。

RANDOM_SAMPLING

指定されたレートに基づいてサンプルをランダムにアップロードします。ランダムに生成された値がレートより小さい場合、サンプルをアップロードします。レートが高いほど、アップロードされるサンプルが増えます。

注記

この戦略では、提供されたモデル予測は無視されます。

LEAST_CONFIDENCE

最大信頼確率が指定されたしきい値を下回るサンプルをアップロードします。

シナリオの例:

しきい値: .6

モデル予測: [.2, .2, .4, .2]

最大信頼確率: .4

結果:

最大信頼確率 (.4) <= しきい値 (.6) であるため、サンプルを使用します。

MARGIN

上位 2 つの信頼確率間のマージンが指定されたしきい値内である場合、サンプルをアップロードします。マージンは、上位 2 つの確率の差です。

シナリオの例:

しきい値: .02

モデル予測: [.3, .35, .34, .01]

トップ 2 つの信頼確率: [.35, .34]

マージン: .01 .35 - .34

結果:

マージン (.01) <= しきい値 (.02) であるため、サンプルを使用します。

ENTROPY

指定されたしきい値よりエントロピーが大きいサンプルをアップロードします。モデル予測の正規化されたエントロピーを使用します。

シナリオの例:

しきい値: 0.75

モデル予測: [.5, .25, .25]

予測のエントロピー: 1.03972

結果:

エントロピー (1.03972) > しきい値 (0.75) のため、サンプルを使用します。

入力データ

ユーザー定義の Lambda 関数は、AWS IoT Greengrass Machine Learning SDK の feedback クライアントの publish 関数を使用してコネクタを呼び出します。例については、「使用例」を参照してください。

注記

このコネクタは MQTT メッセージを入力データとして受け入れません。

publish 関数は次の引数を取ります。

ConfigId

ターゲットフィードバック設定の ID。これは、ML フィードバックコネクタの FeedbackConfigurationMap パラメータに定義されたフィードバック設定の ID と一致する必要があります。

必須: true

タイプ: 文字列

ModelInput

推論のためにモデルに渡された入力データ。この入力データは、サンプリング戦略に基づいて除外されない限り、ターゲット設定を使用してアップロードされます。

必須: true

タイプ: バイト

ModelPrediction

モデルからの予測結果。結果タイプは、ディクショナリまたはリストです。例えば、ML イメージ分類コネクタコネクタからの予測結果は、確率のリスト ([0.25, 0.60, 0.15] など) です。このデータは /feedback/message/prediction トピックに発行されます。

必須: true

タイプ: ディクショナリまたは float 値のリスト

メタデータ

アップロードされたサンプルにアタッチされ、/feedback/message/prediction トピックに発行される、お客様が定義したアプリケーション固有のメタデータ。また、コネクタはタイムスタンプ値を持つ publish-ts キーをメタデータに挿入します。

必須: false

タイプ: ディクショナリ

例: {"some-key": "some value"}

出力データ

このコネクタは、3 つの MQTT トピックにデータを発行します。

  • feedback/message/status トピックに関するコネクタからのステータス情報。

  • feedback/message/prediction トピックに関する予測結果。

  • cloudwatch/metric/put トピックの CloudWatch を対象とするメトリクス。

コネクタが MQTT トピックで通信できるようにするには、サブスクリプションを設定する必要があります。詳細については、「入力と出力」を参照してください。

トピックのフィルター: feedback/message/status

このトピックを使用して、サンプルのアップロードと削除されたサンプルのステータスをモニタリングします。コネクタは、リクエストを受け取るたびに、このトピックに発行します。

出力例: サンプルアップロードが成功しました
{ "response": { "status": "success", "s3_response": { "ResponseMetadata": { "HostId": "IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km", "RetryAttempts": 1, "HTTPStatusCode": 200, "RequestId": "79104EXAMPLEB723", "HTTPHeaders": { "content-length": "0", "x-amz-id-2": "lbbqaDVFOhMlyU3gRvAX1ZIdg8P0WkGkCSSFsYFvSwLZk3j7QZhG5EXAMPLEdd4/pEXAMPLEUqU=", "server": "AmazonS3", "x-amz-expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"", "x-amz-request-id": "79104EXAMPLEB723", "etag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"", "date": "Thu, 11 Jul 2019 00:12:50 GMT", "x-amz-server-side-encryption": "AES256" } }, "bucket": "greengrass-feedback-connector-data-us-west-2", "ETag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"", "Expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"", "key": "s3-key-prefix/UUID.file_ext", "ServerSideEncryption": "AES256" } }, "id": "5aaa913f-97a3-48ac-5907-18cd96b89eeb" }

コネクタは、bucket フィールドと key フィールドを Amazon S3 からのレスポンスに追加します。Amazon S3 のレスポンスについては、「Amazon Simple Storage Service API リファレンス」の「PUT オブジェクト」を参照してください。

出力例: サンプリング戦略のために削除されたサンプル
{ "response": { "status": "sample_dropped_by_strategy" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
出力例: サンプルアップロードに失敗しました

失敗ステータスには、エラーメッセージが error_message 値、例外クラスが error 値として含まれます。

{ "response": { "status": "fail", "error_message": "[RequestId: 4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3] Failed to upload model input data due to exception. Model prediction will not be published. Exception type: NoSuchBucket, error: An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist", "error": "NoSuchBucket" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
出力例: リクエスト制限のために調整されたリクエスト
{ "response": { "status": "fail", "error_message": "Request limit has been reached (max request: 10 ). Dropping request.", "error": "Queue.Full" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
トピックのフィルター: feedback/message/prediction

このトピックを使用して、アップロードされたサンプルデータに基づく予測をリッスンします。これにより、モデルのパフォーマンスをリアルタイムで分析できます。モデル予測は、データが Amazon S3 に正常にアップロードされた場合にのみ、このトピックに発行されます。このトピックで発行されるメッセージは JSON 形式です。これには、アップロードされたデータオブジェクトへのリンク、モデルの予測、およびリクエストに含まれるメタデータが含まれます。

また、予測結果を保存し、それを使用して経時的な傾向を報告および分析することもできます。傾向は、価値あるインサイトを提供できます。たとえば、時間の傾向に伴って精度が低下した場合に、モデルを再トレーニングする必要があるかどうかを判断するのに役立ちます。

出力例
{ "source-ref": "s3://greengrass-feedback-connector-data-us-west-2/s3-key-prefix/UUID.file_ext", "model-prediction": [ 0.5, 0.2, 0.2, 0.1 ], "config-id": "ConfigID2", "metadata": { "publish-ts": "2019-07-11 00:12:48.816752" } }
ヒント

IoT Analytics コネクタは、このトピックにサブスクライブし、さらなる分析または履歴分析のために AWS IoT Analytics に情報を送信するように設定できます。

トピックのフィルター: cloudwatch/metric/put

これは、CloudWatch にメトリクスを発行するために使用される出力トピックです。この機能を使用するには、CloudWatch Metrics コネクタをインストールして設定する必要があります。

メトリクスには次のものがあります。

  • アップロードされたサンプルの数。

  • アップロードされたサンプルのサイズ。

  • Amazon S3 へのアップロードからのエラーの数。

  • サンプリング戦略に基づいて削除されたサンプルの数。

  • スロットルされたリクエストの数。

出力例: データサンプルのサイズ (実際のアップロード前に発行)
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 47592, "unit": "Bytes", "metricName": "SampleSize" } } }
出力例: サンプルアップロードが成功しました
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
出力例: サンプルアップロードが成功し、予測結果が発行されました
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleAndPredictionPublished" } } }
出力例: サンプルアップロードに失敗しました
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadFailure" } } }
出力例: サンプリング戦略のために削除されたサンプル
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleNotUsed" } } }
出力例: リクエスト制限のために調整されたリクエスト
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "ErrorRequestThrottled" } } }

使用例

次の例は、AWS IoT Greengrass Machine Learning SDK を使用して ML フィードバックコネクタにデータを送信するユーザー定義 Lambda 関数です。

注記

AWS IoT Greengrass Machine Learning SDK は、AWS IoT Greengrass ダウンロードページからダウンロードできます。

import json import logging import os import sys import greengrass_machine_learning_sdk as ml client = ml.client('feedback') try: feedback_config_id = os.environ["FEEDBACK_CONFIG_ID"] model_input_data_dir = os.environ["MODEL_INPUT_DIR"] model_prediction_str = os.environ["MODEL_PREDICTIONS"] model_prediction = json.loads(model_prediction_str) except Exception as e: logging.info("Failed to open environment variables. Failed with exception:{}".format(e)) sys.exit(1) try: with open(os.path.join(model_input_data_dir, os.listdir(model_input_data_dir)[0]), 'rb') as f: content = f.read() except Exception as e: logging.info("Failed to open model input directory. Failed with exception:{}".format(e)) sys.exit(1) def invoke_feedback_connector(): logging.info("Invoking feedback connector.") try: client.publish( ConfigId=feedback_config_id, ModelInput=content, ModelPrediction=model_prediction ) except Exception as e: logging.info("Exception raised when invoking feedback connector:{}".format(e)) sys.exit(1) invoke_feedback_connector() def function_handler(event, context): return

ライセンス

ML フィードバックコネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。

このコネクタは、Greengrass Core ソフトウェアライセンス契約に従ってリリースされます。

以下も参照してください。