Conector de ML Feedback - AWS IoT Greengrass

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.7

    Esto 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 y 12id

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 y audio/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 y ogg

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 o ENTROPY

rate

La velocidad de la estrategia de muestreo Random (Aleatorio).

Obligatorio: true si strategy-name es RANDOM_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 si strategy-name es LEAST_CONFIDENCE, MARGIN o ENTROPY.

Escriba: number

Valores válidos:

  • 0.0 - 1.0 para la estrategia LEAST_CONFIDENCE o MARGIN.

  • 0.0 - no limit para la estrategia ENTROPY.

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 clave publish-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 y key 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 valor 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" }
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:

Este conector se publica bajo el contrato de licencia de software de Greengrass Core.

Véase también