ML 意見回饋 連接器 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

ML 意見回饋 連接器

TheThethe ML 意見回饋 連接器使得您可以更輕鬆地訪問機器學習(ML)模型的重新培訓和分析模型。連接器:

  • 將 ML 模型使用的輸入資料 (範例) 上傳至 Amazon S3. 模型輸入可以採用任何格式,例如影像、JSON 或音訊。在範例上傳至雲端之後,您可以使用它們來重新訓練模型,以改善其預測的精確性和準確性。例如,您可以使用 SageMaker 地面真相 標籤您的樣本和 SageMaker 重新培訓模型。

  • 以 MQTT 訊息形式發佈模型的預測結果。這可讓您即時監控和分析模型的推論品質。您也可以存放預測結果,並使用它們來分析隨時間變化的趨勢。

  • 將範例上傳和範例資料的相關指標發佈至 Amazon CloudWatch.

要配置此連接器,請描述支持 反饋配置 JSON格式。反饋配置定義了目標等屬性 Amazon S3 桶、內容類型 採樣策略. (抽樣策略用來決定要上傳哪些範例。)

您可以在下列案例中使用 ML 意見回饋 連接器:

  • 搭配使用者定義的 Lambda 函數。您當地的推論 Lambda 功能使用 AWS IoT Greengrass Machine Learning 軟體開發套件 要調用此連接器並通過目標反饋配置、模型輸入和模型輸出(預測結果)。如需範例,請參閱 使用範例.

  • ML Image Classification 連接器 (v2)。要使用此連接器, ML Image Classification 連接器,配置 MLFeedbackConnectorConfigId 參數 ML Image Classification 連接器。

  • ML 物件偵測 連接器. 要使用此連接器, ML 物件偵測 連接器,配置 MLFeedbackConnectorConfigId 參數 ML 物件偵測 連接器。

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

要求

此連接器有下列要求:

  • AWS IoT Greengrass 核心軟體 v。1.9.3 or later.

  • Python 3.7 版已安裝在核心裝置上並已新增至 PATH 環境變數。

  • 一或多個 Amazon S3 儲存貯體。您使用的儲存貯體數量取決於您的取樣策略。

  • TheThethe Greengrass集團角色 配置爲允許 s3:PutObject 對象中對象的操作 Amazon S3 如下示例所示 IAM 政策。

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

    政策應該包含所有目的地儲存貯體做為資源。您可以為資源授予精細或條件式存取 (例如,使用萬用字元 命名機制)。

    針對群組角色要求,您必須設定角色以授與必要的許可,並確認已將角色新增至群組。如需更多詳細資訊,請參閱 管理 Greengrass 群組角色 (主控台)管理 Greengrass 群組角色 (CLI)

  • TheThethe CloudWatch Metrics 連接器 添加到Greengrass集團並配置。只有在您想要使用指標報告功能時,才需要此項目。

  • AWS IoT Greengrass Machine Learning 軟體開發套件需有 1.1.0 版,才能與此連接器互動。

Parameters

FeedbackConfigurationMap

一組意見回饋組態 (一或多個),連接器可用來將範例上傳至 Amazon S3. 反饋配置定義了目標桶、內容類型等參數,以及 samplingstrategy. 叫用此連接器時,呼叫 Lambda 函數或連接器會指定目標意見回饋組態。

AWS IoT 主控台中的顯示名稱: :意見回饋組態對應

必要: 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

TheThethe 採樣策略 用於篩選要上傳的樣品。如果省略,連接器會嘗試上傳它收到的所有範例。

必要: false

類型:格式正確的 JSON 字串,其中包含以下屬性。

strategy-name

抽樣策略的名稱。

必要: true

類型: string

有效值: RANDOM_SAMPLINGLEAST_CONFIDENCEMARGIN,或 ENTROPY

rate

TheRatefortheRate 隨機 採樣策略。

必要: true IFIFIF strategy-nameRANDOM_SAMPLING.

類型: number

有效值: 0.0 - 1.0

threshold

的閾值 最少信心利潤,或 Entropy 採樣策略。

必要: true IFIFIF strategy-nameLEAST_CONFIDENCEMARGIN,或 ENTROPY.

類型: number

有效值:

  • 0.0 - 1.0 對於 LEAST_CONFIDENCEMARGIN 策略。

  • 0.0 - no limit,適用於 ENTROPY 策略。

RequestLimit

連接器一次可處理的請求數量上限。

您可以使用此參數來限制連接器同時處理的要求數量,以限制記憶體消耗。超過此限制的請求會被忽略。

AWS IoT 主控台中的顯示名稱: :請求限制

必要: false

類型: string

有效值: 0 - 999

有效的模式: ^$|^[0-9]{1,3}$

建立範例連接器 (AWS CLI)

以下CLI命令會創建 ConnectorDefinition 包含 ML 意見回饋 連接器。

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" } }

抽樣策略

連接器支援四種抽樣策略,這些抽樣策略會決定是否要上傳已傳遞至連接器的範例。範例是模型用於預測的離散資料執行個體。您可以使用取樣策略來篩選出最有可能提高模型準確性的範例。

RANDOM_SAMPLING

根據提供的速率隨機上傳範例。如果隨機產生的值小於此速率,它會上傳範例。速率越高,上傳的範例越多。

注意

此策略會忽略任何提供的模型預測。

LEAST_CONFIDENCE

上傳其最大可信度機率低於所提供閾值的範例。

範例藍本

閾值:.6

模型預測:[.2, .2, .4, .2]

最大可信度機率:.4

結果:

使用範例,因為最大可信度機率 (.4) <= 閾值 ()。.6).

MARGIN

如果前兩個可信度機率之間的邊界落在所提供閾值內,則上傳範例。邊界是前兩個機率之間的差異。

範例藍本

閾值:.02

模型預測:[.3, .35, .34, .01]

前兩個可信度機率:[.35, .34]

邊界: () .01.35 - .34)

結果:

使用範例,因為邊界1 (.01) <= 閾值 ()。.02).

ENTROPY

上傳其熵大於所提供閾值的範例。使用模型預測的標準化熵。

範例藍本

閾值:0.75

模型預測:[.5, .25, .25]

預測的熵:1.03972

結果:

使用範例:因為熵 (1.03972) > 閾值 ()。0.75).

輸入資料

用戶定義 Lambda 功能使用 publish 功能 feedback 客戶在 AWS IoT Greengrass Machine Learning 軟體開發套件 調用連接器。如需範例,請參閱 使用範例.

注意

這個連接器不接受 MQTT 訊息做為輸入資料。

TheThethe publish 函數採用以下論點:

ConfigId

目標意見回饋組態的 ID。這必須匹配在 反饋配置圖 參數 ML 意見回饋 連接器。

必要true

類型:字串

ModelInput

傳遞至模型以進行推論的輸入資料。除非根據取樣策略將此輸入資料篩選掉, 否則會使用目標組態來上傳此輸入資料。

必要true

類型位元組

ModelPrediction

來自模型的預測結果。結果類型可以是字典或清單。例如,來自 ML Image Classification 連接器的預測結果是機率清單 (例如 )。[0.25, 0.60, 0.15]). 此資料會發佈至 /feedback/message/prediction 主題。

必要true

類型:字典或 float 值清單

中繼資料

客戶定義的應用程式特定中繼資料,其會附加至上傳的範例並發佈至 /feedback/message/prediction 主題。連接器也會將具有時間戳記值的 publish-ts 金鑰插入至中繼資料。

必要"false"

類型:字典

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

輸出資料

此連接器會將資料發佈至三個 MQTT 主題:

  • feedback/message/status 主題上來自連接器的狀態資訊。

  • 預測結果 feedback/message/prediction 主題。

  • 指定的指標 CloudWatch 在 cloudwatch/metric/put 主題。

您必須設定訂閱,以允許連接器在 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" }

連接器添加 bucketkey 對應的響應字段 Amazon S3. 有關 Amazon S3 響應,請參閱 放置對象Amazon Simple Storage Service API Reference.

範例輸出。樣品由於採樣策略而下降
{ "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" } } }

使用範例

以下示例是用戶定義的 Lambda 使用 AWS IoT Greengrass Machine Learning 軟體開發套件 將數據發送到 ML 意見回饋 連接器。

注意

您可以下載 AWS IoT Greengrass Machine Learning 軟體開發套件 從 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

授權

TheThethe ML 意見回饋 連接器包括以下第三方軟件/許可:

這個連接器的發行係遵守 Greengrass Core 軟體授權合約

另請參閱 。