终止支持通知:2026 年 10 月 7 日, AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后,您将无法再访问这些 AWS IoT Greengrass V1 资源。如需更多信息,请访问迁移自 AWS IoT Greengrass Version 1。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
ML 反馈连接器
警告
此连接器已进入生命周期延长阶段, AWS IoT Greengrass 不会发布更新来提供功能、现有功能增强、安全补丁或错误修复。有关更多信息,请参阅 AWS IoT Greengrass Version 1 维护政策。
ML 反馈连接器使您可以更轻松地访问机器学习 (ML) 模型数据以进行模型重新训练和分析。该连接器:
将您的 ML 模型使用的输入数据(样本)上传到 Amazon S3。模型输入可以是任何格式,如图像、JSON 或音频。在将样本上传到云后,您可以使用它们来重新训练模型,以提高其预测的准确性和精确性。例如,您可以使用 SageMaker AI Ground Truth 来标记样本,使用 SageMaker AI 来重新训练模型。
从模型将预测结果发布为 MQTT 消息。这可让您实时监控和分析模型的推理质量。您也可以存储预测结果,然后使用它们来分析随时间推移的趋势。
向亚马逊 CloudWatch发布有关样本上传和示例数据的指标。
要配置此连接器,您以 JSON 格式描述支持的反馈配置。反馈配置定义诸如目标 Amazon S3 存储桶、内容类型和采样策略之类的属性。(采样策略用于确定要上传哪些样本。)
您可以在以下情况下使用 ML 反馈连接器:
-
用户定义的 Lambda 函数。您的本地推理 Lambda 函数使用 AWS IoT Greengrass 机器学习 SDK 调用此连接器并传入目标反馈配置、模型输入和模型输出(预测结果)。有关示例,请参阅用法示例。
-
使用 ML 图像分类连接器 (v2)。要将此连接器与 ML 图像分类连接器一起使用,请配置 ML 图像分类连接器的
MLFeedbackConnectorConfigId参数。 -
使用 ML 对象检测连接器。要将此连接器与 ML 对象检测连接器一起使用,请配置 ML 对象检测连接器的
MLFeedbackConnectorConfigId参数。
ARN:arn:aws:greengrass:region::/connectors/MLFeedback/versions/1
要求
此连接器具有以下要求:
-
AWS IoT Greengrass 核心软件 v1.9.3 或更高版本。
-
Python
版本 3.7 或 3.8 已安装在核心设备上,并已添加到 PATH 环境变量中。 注意
要使用 Python 3.8,请运行以下命令来创建从默认 Python 3.7 安装文件夹到已安装的 Python 3.8 二进制文件的符号链接。
sudo ln -spath-to-python-3.8/python3.8 /usr/bin/python3.7这会将设备配置为满足 AWS IoT Greengrass的 Python 要求。
-
一个或多个 Amazon S3 桶。您使用的存储桶数量取决于您的采样策略。
-
Greengrass 组角色,配置为允许对目标 Amazon S3 存储桶中的对象执行
s3:PutObject操作,如以下示例 IAM policy 所示。该策略应包括所有目标存储桶作为资源。您可以授予对资源的具体或条件访问权限(例如,通过使用通配符*命名方案)。
对于组角色要求,您必须将角色配置为授予所需权限,并确保角色已添加到组中。有关更多信息,请参阅管理 Greengrass 组角色(控制台)或管理 Greengrass 组角色 (CLI)。
-
CloudWatch 指标连接器已添加到 Greengrass 组并进行了配置。仅当您要使用指标报告功能时才需要它。
-
AWS IoT Greengrass 必须使用机器学习 SDK v1.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}$示例:
MyConfig0、config-a、12id。
反馈配置对象的主体包含以下属性。
s3-bucket-name-
目标 Amazon S3 存储桶的名称。
注意
组角色必须允许对所有目标存储桶执行
s3:PutObject操作。有关更多信息,请参阅 要求。必需:
true类型:
string有效模式:
^[a-z0-9\.\-]{3,63}$ content-type-
要上传的样本的内容类型。单个反馈配置的所有内容必须属于同一类型。
必需:
true类型:
string示例:
image/jpeg、application/json、audio/ogg。 s3-prefix-
用于上传的样本的键前缀。前缀类似于目录名称。它使您能够在存储桶的同一目录下存储相似的数据。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的对象键和元数据。
必需:
false类型:
string file-ext-
要用于上传的样本的文件扩展名。必须是内容类型的有效文件扩展名。
必需:
false类型:
string示例:
jpg、json、ogg。 sampling-strategy-
用于过滤要上传的样本的采样策略。如果省略,连接器尝试上传它收到的所有样本。
必需:
false类型:一个格式正确的 JSON 字符串,其中包含以下属性。
strategy-name-
采样策略的名称。
必需:
true类型:
string有效值:
RANDOM_SAMPLING、LEAST_CONFIDENCE、MARGIN或ENTROPY rate-
随机采样策略的速率。
如果
strategy-name为RANDOM_SAMPLING,则true是必需的。类型:
number有效值:
0.0 - 1.0 threshold-
如果
strategy-name为LEAST_CONFIDENCE、MARGIN或ENTROPY,则true是必需的。类型:
number有效值:
-
对于
LEAST_CONFIDENCE或MARGIN策略,为0.0 - 1.0。 -
对于
ENTROPY策略,为0.0 - no limit。
-
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) - 结果:
-
使用此样本,因为裕度 (
.01) <= 阈值 (.02)。
ENTROPY上传其熵大于提供的阈值的样本。使用模型预测的标准化熵。
- 示例方案:
-
阈值:
0.75模型预测:
[.5, .25, .25]预测的熵:
1.03972 - 结果:
-
使用此样本,因为熵
1.03972> 阈值0.75。
输入数据
User-defined Lambda publish 函数使用 AWS IoT Greengrass 机器学习软件开发工具包中的feedback客户端函数来调用连接器。有关示例,请参阅用法示例。
注意
该连接器不接受 MQTT 消息作为输入数据。
publish 函数采用下列参数:
- ConfigId
-
目标反馈配置的 ID。这必须与 ML 反馈连接器的FeedbackConfigurationMap参数中定义的反馈配置的 ID 相匹配。
所需:是
类型:字符串
- ModelInput
-
传递给模型以进行推理的输入数据。除非根据采样策略将此输入数据过滤掉,否则将使用目标配置上传此数据。
所需:是
类型:字节
- ModelPrediction
-
来自模型的预测结果。结果类型可以是词典或列表。例如,来自 ML 图像分类连接器的预测结果是概率列表(例如
[0.25, 0.60, 0.15])。此数据发布到/feedback/message/prediction主题。所需:是
类型:词典或
float值的列表 - 元数据
-
Customer-defined,特定于应用程序的元数据,附加到上传的示例并发布到
/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" }连接器将
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" } }注意
AWS IoT Analytics 已于 2025 年 12 月 15 日停产。IoT 分析连接器不再起作用。考虑使用亚马逊 Kinesis 数据流或 Amazon S3 等替代 AWS 服务来存储和分析预测结果。
- 主题筛选条件:
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 机器学习开发工具包将数据发送到 ML 反馈连接器。
注意
您可以从下载页面 AWS IoT Greengrass 下载 AWS IoT Greengrass 机器学习 SDK 。
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 反馈连接器包括以下第三方 software/licensing:
-
适用于 Python (Boto3) 的 AWS SDK
/Apache 许可证 2.0 -
botocore
/Apache 许可证 2.0 -
dateutil
/PSF 许可证 -
docutils
/BSD 许可证,GNU 通用公共许可证 (GPL),Python 软件基金会许可证,公共领域 -
jmespath
/MIT 许可证 -
s3transfer
/Apache 许可证 2.0 -
urllib3
/MIT 许可证
six
/MIT
该连接器在 Greengrass Core 软件许可协议