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 Feedback 連接器可讓您更輕鬆地存取機器學習 (ML) 模型資料,以進行模型重新訓練和分析。連接器:

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

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

  • 發佈範例上傳和範例資料至 Amazon CloudWatch 的指標。

若要設定此連接器,請以 JSON 格式描述支援的意見回饋組態。意見回饋組態定義屬性,例如目的地 Amazon S3 儲存貯體、內容類型和取樣策略。(抽樣策略用來決定要上傳哪些範例。)

您可以在下列情況下使用 ML Feedback 連接器:

  • 使用使用者定義的 Lambda 函數。您的本機推論 Lambda 函數使用 AWS IoT Greengrass Machine Learning SDK 來叫用此連接器,並傳遞目標意見回饋組態、模型輸入和模型輸出 (預測結果)。如需範例,請參閱「用量範例」。

  • 使用 ML Image Classification 連接器 (v2)。若要搭配 ML Image Classification 連接器使用此連接器,請設定 ML Image Classification 連接器的 MLFeedbackConnectorConfigId 參數。

  • 使用 ML 物件偵測連接器。若要搭配 ML 物件偵測連接器使用此連接器,請設定 ML 物件偵測連接器的 MLFeedbackConnectorConfigId 參數。

ARNarn:aws:greengrass:region::/connectors/MLFeedback/versions/1

要求

此連接器有下列要求:

  • AWS IoT Greengrass 核心軟體 1.9.3 版或更新版本。

  • Python 3.7 或 3.8 版安裝在核心裝置上,並新增至 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 需求。

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

  • Greengrass 群組角色設定為允許對目的地 Amazon S3 儲存貯體中的物件s3:PutObject執行動作,如下列範例 IAM 政策所示。

    { "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 1.1.0 版才能與此連接器互動。

參數

FeedbackConfigurationMap

連接器可用來將範例上傳至 Amazon S3 的一組或多組意見回饋組態。意見回饋組態會定義目的地儲存貯體、內容類型和抽樣策略之類的屬性。叫用此連接器時,呼叫 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

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

必要: false

類型:格式良好的 JSON 字串,其中包含下列屬性。

strategy-name

抽樣策略的名稱。

必要: true

類型:string

有效值:RANDOM_SAMPLINGLEAST_CONFIDENCEMARGINENTROPY

rate

隨機取樣策略的速率。

必要:true如果 strategy-nameRANDOM_SAMPLING

類型:number

有效值:0.0 - 1.0

threshold

最低可信度邊界取樣策略的閾值。

必要:true如果 strategy-nameLEAST_CONFIDENCEMARGINENTROPY

類型: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 Feedback 連接器的初始版本來建立 。

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 函數使用 AWS IoT Greengrass Machine Learning SDK 中的feedback用戶端publish函數來叫用連接器。如需範例,請參閱「用量範例」。

注意

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

publish 函數採用下列引數:

ConfigId

目標意見回饋組態的 ID。這必須符合 ML Feedback 連接器的 FeedbackConfigurationMap 參數中定義的意見回饋組態 ID。

必要: 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 參考》中的 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 指標連接器

指標包括:

  • 上傳的範例數量。

  • 上傳的範例大小。

  • 從上傳至 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 SDK 將資料傳送至 ML Feedback 連接器。

注意

您可以從 AWS IoT Greengrass 下載頁面下載 AWS IoT Greengrass Machine Learning開發套件。

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 Feedback 連接器包含下列第三方軟體/授權:

此連接器根據 Greengrass Core 軟體授權合約發行。

另請參閱