AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Conector de ML Feedback
aviso
Este conector ha pasado a la fase de vida útil prolongada y AWS IoT Greengrass no lanzará actualizaciones que proporcionen funciones, mejoras de las funciones existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte AWS IoT Greengrass Version 1política de mantenimiento.
El conector ML Feedback facilita el acceso a los datos del modelo de machine learning (ML) para volver a entrenar y analizar modelos. El conector:
Carga los datos de entrada (muestras) utilizados por el modelo de ML en Amazon S3. La entrada del modelo puede estar en cualquier formato, como imágenes, JSON o audio. Después de cargar muestras en la nube, puede utilizarlas para volver a entrenar el modelo y mejorar la precisión y exactitud de sus predicciones. Por ejemplo, puede utilizar SageMaker Ground Truth para etiquetar muestras y SageMaker para volver a entrenar el modelo.
Publica los resultados de la predicción del modelo como mensajes MQTT. Esto le permite monitorizar y analizar la calidad de inferencia de su modelo en tiempo real. También puede almacenar los resultados de las predicciones y utilizarlos para analizar las tendencias a lo largo del tiempo.
Publica métricas sobre cargas de muestras y datos de muestras en Amazon CloudWatch.
Para configurar este conector, describa las configuraciones de comentarios admitidas en formato JSON. Una configuración de retroalimentación define propiedades como el bucket de Amazon S3 de destino, el tipo de contenido y la estrategia de muestreo. Se utiliza una estrategia de muestreo para determinar qué muestras cargar.
Puede utilizar el conector ML Feedback en los siguientes escenarios:
-
Con funciones de Lambda definidas por el usuario. Sus funciones de Lambda de inferencia local utilizan el SDK de machine learning AWS IoT Greengrass para invocar este conector y pasar la configuración de la retroalimentación de destino, la entrada del modelo y la salida del modelo (resultados de la predicción). Para ver un ejemplo, consulte Ejemplo de uso.
-
Con el conector de la clasificación de ML Image (v2) Para utilizar este conector con el conector de clasificación de ML Image, configure el parámetro
MLFeedbackConnectorConfigId
para el conector de clasificación de ML Image. -
Con el conector de detección de ML Object Para utilizar este conector con el conector de detección de ML Object, configure el parámetro
MLFeedbackConnectorConfigId
para el conector de detección de ML Object.
ARN: arn:aws:greengrass:
region
::/connectors/MLFeedback/versions/1
Requisitos
Este conector exige los siguientes requisitos:
-
Software AWS IoT Greengrass Core versión 1.9.3 o posterior.
-
Python
versión 3.7 o 3.8 instalado en el dispositivo principal y añadido a la variable de entorno PATH. nota
Para usar Python 3.8, ejecute el siguiente comando para crear un enlace simbólico desde la carpeta de instalación predeterminada de Python 3.7 a los binarios de Python 3.8 instalados.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Esto configura su dispositivo para que cumpla con el requisito de Python para AWS IoT Greengrass.
-
Uno o más buckets de Amazon S3. El número de buckets que utilice depende de su estrategia de muestreo.
-
El rol del grupo de Greengrass configurado para permitir la acción
s3:PutObject
en los objetos del bucket de Amazon S3 de destino, tal como se muestra en la siguiente política de IAM de ejemplo.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
bucket-name
/*" ] } ] }La política debe incluir todos los buckets de destino como recursos. Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín *)
Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte Administración del rol de grupo de Greengrass (consola) o Administración del rol de grupo de Greengrass (CLI).
-
El conector CloudWatch Metrics añadido al grupo de Greengrass y configurado. Esto solo es necesario si desea utilizar la característica de informes de métricas.
-
Se requiere el SDK AWS IoT Greengrass de machine learning versión 1.1.0 para interactuar con este conector.
Parámetros
FeedbackConfigurationMap
-
Un conjunto de una o varias configuraciones de comentarios que el conector puede utilizar para cargar muestras en Amazon S3. Una configuración de comentarios define parámetros como el bucket de destino, el tipo de contenido y la estrategia de muestreo. Cuando se invoca este conector, el conector o la función de Lambda que realiza la llamada especifica una configuración de comentarios de destino.
Nombre para mostrar en la consola AWS IoT: Mapa de configuración de comentarios
Obligatorio:
true
Tipo: una cadena JSON bien formada que define el conjunto de configuraciones de comentarios admitidas. Para ver un ejemplo, consulte Ejemplo de FeedbackConfigurationMap.
-
El ID de un objeto de configuración de comentarios tiene los siguientes requisitos.
-
El ID:
Debe ser único entre los objetos de configuración.
Debe comenzar por una letra o un número. Puede contener letras minúsculas y mayúsculas, números y guiones.
Debe tener entre 2 y 63 caracteres de longitud.
Obligatorio:
true
Escriba:
string
Patrón válido:
^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
Ejemplos:
MyConfig0
,config-a
y12id
El cuerpo de un objeto de configuración de comentarios contiene las siguientes propiedades.
s3-bucket-name
-
El nombre del bucket de Amazon S3 de destino.
nota
El rol de grupo debe permitir la acción
s3:PutObject
en todos los buckets de destino. Para obtener más información, consulte Requisitos.Obligatorio:
true
Escriba:
string
Patrón válido:
^[a-z0-9\.\-]{3,63}$
content-type
-
El tipo de contenido de las muestras que se van a cargar. Todo el contenido de una configuración de retroalimentación individual debe ser del mismo tipo.
Obligatorio:
true
Escriba:
string
Ejemplos:
image/jpeg
,application/json
yaudio/ogg
s3-prefix
-
El prefijo de clave que se va a utilizar para las muestras cargadas. Un prefijo es similar a un nombre de directorio. Le permite almacenar datos similares en el mismo directorio en un bucket. Para obtener más información, consulte Clave de objeto y metadatos en la Guía del usuario de Amazon Simple Storage Service.
Obligatorio:
false
Escriba:
string
file-ext
-
La extensión de archivo que se va a utilizar para las muestras cargadas. Debe ser una extensión de archivo válida para el tipo de contenido.
Obligatorio:
false
Escriba:
string
Ejemplos:
jpg
,json
yogg
sampling-strategy
-
La estrategia de muestreo que se va a utilizar para filtrar qué muestras cargar. Si se omite, el conector intenta cargar todas las muestras que recibe.
Obligatorio:
false
Tipo: una cadena JSON bien formada que contiene las siguientes propiedades.
strategy-name
-
El nombre de la estrategia de muestreo.
Obligatorio:
true
Escriba:
string
Valores válidos:
RANDOM_SAMPLING
,LEAST_CONFIDENCE
,MARGIN
oENTROPY
rate
-
La velocidad de la estrategia de muestreo Random (Aleatorio).
Obligatorio:
true
sistrategy-name
esRANDOM_SAMPLING
.Escriba:
number
Valores válidos:
0.0 - 1.0
threshold
-
El umbral de la estrategia de muestreo Least Confidence (Confianza mínima), Margin (Margen) o Entropy (Entropía).
Obligatorio:
true
sistrategy-name
esLEAST_CONFIDENCE
,MARGIN
oENTROPY
.Escriba:
number
Valores válidos:
-
0.0 - 1.0
para la estrategiaLEAST_CONFIDENCE
oMARGIN
. -
0.0 - no limit
para la estrategiaENTROPY
.
-
RequestLimit
-
El número máximo de solicitudes que el conector puede procesar a la vez.
Puede utilizar este parámetro para restringir el consumo de memoria limitando el número de solicitudes que el conector procesa al mismo tiempo. Se ignorarán las solicitudes que superen ese límite.
Nombre para mostrar en la consola AWS IoT: Límite de solicitudes
Obligatorio:
false
Escriba:
string
Valores válidos:
0 - 999
Patrón válido:
^$|^[0-9]{1,3}$
Ejemplo de creación de conector (AWS CLI)
El siguiente comando de la CLI crea una ConnectorDefinition
con una versión inicial que contiene el conector de 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" } } ] }'
Ejemplo de FeedbackConfigurationMap
A continuación se muestra un valor de ejemplo ampliado para el parámetro FeedbackConfigurationMap
. Este ejemplo incluye varias configuraciones de comentarios que utilizan diferentes estrategias de muestreo.
{ "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" } }
Estrategias de muestreo
El conector admite cuatro estrategias de muestreo que determinan si cargar muestras que se transfieren al conector. Las muestras son instancias discretas de datos que un modelo utiliza para una predicción. Puede utilizar estrategias de muestreo para filtrar por las muestras que es más probable que mejoren la precisión del modelo.
RANDOM_SAMPLING
Carga aleatoriamente muestras en función de la velocidad proporcionada. Carga una muestra si un valor generado aleatoriamente es inferior a la velocidad. Cuanto mayor sea la velocidad, más muestras se cargarán.
nota
Esta estrategia hace caso omiso de cualquier predicción de modelo que se proporcione.
LEAST_CONFIDENCE
Carga muestras cuya probabilidad de confianza máxima sea inferior al umbral proporcionado.
- Ejemplo de escenarios:
-
Umbral:
.6
Predicción del modelo:
[.2, .2, .4, .2]
Probabilidad de confianza máxima:
.4
- Resultado:
Utilice el muestreo, ya que la probabilidad de confianza máxima (
.4
) es inferior o igual al umbral (.6
).
MARGIN
Carga muestras si el margen entre las dos primeras probabilidades de confianza se encuentra dentro del umbral proporcionado. El margen es la diferencia entre las dos primeras probabilidades.
- Ejemplo de escenarios:
-
Umbral:
.02
Predicción del modelo:
[.3, .35, .34, .01]
Dos probabilidades de confianza principales:
[.35, .34]
Margen:
.01
(.35 - .34
) - Resultado:
-
Utilice la muestra, ya que el margen (
.01
) es inferior o igual que el umbral (.02
).
ENTROPY
Carga muestras cuya entropía es mayor que el umbral proporcionado. Utiliza la entropía normalizada de la predicción del modelo.
- Ejemplo de escenarios:
-
Umbral:
0.75
Predicción del modelo:
[.5, .25, .25]
Entropía para la predicción:
1.03972
- Resultado:
-
Utilice la muestra porque la entropía (
1.03972
) es superior al umbral (0.75
).
Datos de entrada
Las funciones de Lambda definidas por el usuario utilizan la función publish
del cliente feedback
en el SDK AWS IoT Greengrass de machine learning para invocar al conector. Para ver un ejemplo, consulte Ejemplo de uso.
nota
Este conector no acepta mensajes MQTT como datos de entrada.
La función publish
acepta los argumentos siguientes:
- ConfigId
-
El ID de la configuración de comentarios de destino. Debe coincidir con el ID de una configuración de realimentación definida en el parámetro FeedbackConfigurationMap para el conector de ML Feedback.
Obligatorio: true
Tipo: cadena
- ModelInput
-
Los datos de entrada que se pasaron a un modelo para la inferencia. Estos datos de entrada se cargan utilizando la configuración de destino a menos que se filtren en función de la estrategia de muestreo.
Obligatorio: true
Tipo: bytes
- ModelPrediction
-
La predicción se genera a partir del modelo. El tipo de resultado puede ser un diccionario o una lista. Por ejemplo, los resultados de predicción del conector de clasificación de ML Image es una lista de probabilidades (como
[0.25, 0.60, 0.15]
). Estos datos se publican en el tema/feedback/message/prediction
.Obligatorio: true
Tipo: diccionario o lista de valores
float
- Metadatos
-
Metadatos específicos de la aplicación definidos por el cliente que se añaden a la muestra cargada y se publican en el tema
/feedback/message/prediction
. El conector también inserta una clavepublish-ts
con un valor de marca temporal en los metadatos.Obligatorio: false
Tipo: diccionario
Ejemplo:
{"some-key": "some value"}
Datos de salida
Este conector publica datos en tres temas MQTT:
-
La información del estado del conector en el tema
feedback/message/status
. -
Resultados de predicción en el tema
feedback/message/prediction
. -
Métricas destinadas a CloudWatch en el tema
cloudwatch/metric/put
.
Debe configurar las suscripciones para permitir la comunicación del conector en temas de MQTT. Para obtener más información, consulte Entradas y salidas.
- Filtro de temas:
feedback/message/status
-
Utilice este tema para monitorizar el estado de las cargas de muestra y las muestras eliminadas. El conector publica en este tema cada vez que recibe una solicitud.
- Ejemplo del resultado: carga de muestra realizada correctamente
-
{ "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" }
El conector añade los campos
bucket
ykey
a la respuesta desde Amazon S3. Para obtener más información sobre la respuesta de Amazon S3, consulte Objeto PUT en la Referencia de la API de Amazon Simple Storage Service.. - Ejemplo del resultado: muestra eliminada debido a la estrategia de muestreo
-
{ "response": { "status": "sample_dropped_by_strategy" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
- Ejemplo de resultado: error al cargar el ejemplo
-
Un estado de error incluye el mensaje de error como el valor
error_message
y la clase de excepción como el valorerror
.{ "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" }
- Ejemplo del resultado: solicitud limitada debido al límite de solicitudes
-
{ "response": { "status": "fail", "error_message": "Request limit has been reached (max request: 10 ). Dropping request.", "error": "Queue.Full" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
- Filtro de temas:
feedback/message/prediction
-
Utilice este tema para escuchar predicciones basadas en datos de muestra cargados. Esto le permite analizar el rendimiento del modelo en tiempo real. Las predicciones de modelos se publican en este tema solo si los datos se cargan correctamente en Amazon S3. Los mensajes publicados en este tema están en formato JSON. Contienen el enlace al objeto de datos cargado, la predicción del modelo y los metadatos incluidos en la solicitud.
También puede almacenar los resultados de las predicciones y utilizarlos para analizar las tendencias a lo largo del tiempo e informar de ellas. Las tendencias pueden proporcionar información valiosa. Por ejemplo, una reducción de la precisión a lo largo del tiempo puede ayudarle a decidir si el modelo debe volver a entrenarse.
- Ejemplo de salida
-
{ "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" } }
sugerencia
Puede configurar el conector de IoT Analytics para suscribirse a este tema y enviar información a AWS IoT Analytics para obtener un análisis adicional o histórico.
- Filtro de temas:
cloudwatch/metric/put
-
Este es el tema de salida que se utiliza para publicar métricas en CloudWatch. Esta característica requiere que instale y configure el conector CloudWatch Metrics.
Entre las métricas se incluyen:
El número de muestras cargadas.
El tamaño de las muestras cargadas.
El número de errores de cargas en Amazon S3.
El número de muestras eliminadas en función de la estrategia de muestreo.
El número de solicitudes restringidas.
- Ejemplo de salida: tamaño de la muestra de datos (publicada antes de la carga real)
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 47592, "unit": "Bytes", "metricName": "SampleSize" } } }
- Ejemplo del resultado: carga de muestra realizada correctamente
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
- Ejemplo de resultado: carga de muestra realizada correctamente y resultado de predicción publicado
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleAndPredictionPublished" } } }
- Ejemplo de resultado: error al cargar el ejemplo
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadFailure" } } }
- Ejemplo del resultado: muestra eliminada debido a la estrategia de muestreo
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleNotUsed" } } }
- Ejemplo del resultado: solicitud limitada debido al límite de solicitudes
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "ErrorRequestThrottled" } } }
Ejemplo de uso
El siguiente ejemplo es una función de Lambda definida por el usuario que utiliza el SDK AWS IoT Greengrass de machine learning para enviar datos al conector ML Feedback.
nota
Puede descargar el SDK de AWS IoT Greengrass Machine Learning desde la página de AWS IoT Greengrass descargas.
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
Licencias
El conector de ML Feedback incluye las siguientes licencias y software de terceros:
-
AWS SDK for Python (Boto3)
/Apache License 2.0 -
botocore
/Apache License 2.0 -
dateutil
/PSF License -
docutils
/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain -
jmespath
/MIT License -
s3transfer
/Apache License 2.0 -
urllib3
/MIT License
six
/MIT
Este conector se publica bajo el contrato de licencia de software de Greengrass Core