Connecteur ML Feedback - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connecteur ML Feedback

Avertissement

Ce connecteur a été déplacé dans lePhase de vie prolongée, etAWS IoT Greengrassne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bugs. Pour plus d'informations, consultez AWS IoT Greengrass Version 1politique de maintenance.

Le connecteur ML Feedback facilite l'accès aux données de votre modèle d'apprentissage-machine pour la reformation et l'analyse du modèle. Le connecteur :

  • Charge les données d'entrée (exemples) utilisées par votre modèle d'apprentissage-machine dans Amazon S3. L'entrée du modèle peut être dans n'importe quel format, tel que des images, JSON ou audio. Une fois les échantillons chargés dans le cloud, vous pouvez les utiliser pour reformer le modèle afin d'améliorer l'exacitude et la précision de ses prédictions. Par exemple, vous pouvez utiliserSageMaker Ground Truthpour étiqueter vos échantillons etSageMakerpour recycler le modèle.

  • Publie les résultats des prédictions à partir du modèle sous forme de messages MQTT. Cela vous permet de surveiller et d'analyser la qualité d'inférence de votre modèle en temps réel. Vous pouvez également stocker les résultats des prédictions et les utiliser pour analyser les tendances au fil du temps.

  • Publie des métriques sur des exemples de chargements et des exemples de données vers Amazon CloudWatch.

Pour configurer ce connecteur, vous décrivez vos configurations de commentaires prises en charge au format JSON. Une configuration de commentaire définit des propriétés telles que le compartiment Amazon S3 de destination, le type de contenu etstratégie d'échantillonnage. (Une stratégie d'échantillonnage est utilisée pour déterminer les échantillons à charger.)

Vous pouvez utiliser le connecteur ML Feedback dans les scénarios suivants :

  • Avec les fonctions Lambda définies par l'utilisateur Les fonctions Lambda d'inférence locales utilisent leAWS IoT GreengrassMachine Learning SDK pour appeler ce connecteur et transmettre la configuration des commentaires cibles, l'entrée du modèle et la sortie du modèle (résultats de prédiction). Pour voir un exemple, consultez Exemple d'utilisation.

  • Avec l’Connecteur ML Image Classification(v2). Pour utiliser ce connecteur avec le connecteur ML Image Classification, configurez leMLFeedbackConnectorConfigIdpour le connecteur ML Image Classification.

  • Avec l’Connecteur de détection d'objets ML. Pour utiliser ce connecteur avec le connecteur ML Object Detection, configurez leMLFeedbackConnectorConfigIdpour le connecteur ML Object Detection.

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

Prérequis

Ce connecteur possède les critères suivants :

  • AWS IoT GreengrassCore Software v1.9.3 ou version ultérieure.

  • PythonLa version 3.7 ou 3.8 installée sur l'appareil principal et ajoutée à la variable d'environnement PATH.

    Note

    Pour utiliser Python 3.8, exécutez la commande suivante pour créer un lien symbolique à partir du dossier d'installation Python 3.7 par défaut vers les binaires Python 3.8 installés.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    Ceci configure votre appareil de sorte qu'il réponde aux exigence de Python pour AWS IoT Greengrass.

  • Un ou plusieurs compartiments Amazon S3. Le nombre de compartiments que vous utilisez dépend de votre stratégie d'échantillonnage.

  • LeRôle de groupe Greengrassconfiguré pour autoriser les3:PutObjectaction sur des objets dans le compartiment Amazon S3 de destination, comme indiqué dans l'exemple de stratégie IAM suivant.

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

    La stratégie doit inclure tous les compartiments de destination en tant que ressources. Vous pouvez octroyer un accès précis ou conditionnel aux ressources (par exemple, en utilisant un schéma d'attribution de nom avec caractère générique *).

    Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d'informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).

  • LeConnecteur CloudWatch Metricsajouté au groupe Greengrass et configuré. Cette opération est obligatoire uniquement si vous souhaitez utiliser la fonction de création de rapports de métriques.

  • AWS IoT GreengrassKit SDK de Machine Learningv1.1.0 est nécessaire pour interagir avec ce connecteur.

Paramètres

FeedbackConfigurationMap

Ensemble d'une ou plusieurs configurations de commentaire que le connecteur peut utiliser pour charger des exemples dans Amazon S3. Une configuration de commentaire définit des paramètres tels que le compartiment de destination, le type de contenu et la stratégie d'échantillonnage. Lorsque ce connecteur est appelé, la fonction ou le connecteur Lambda appelante spécifie une configuration de commentaire cible.

Nom d'affichage dans leAWS IoTConsole  : Mappage de configuration des commentaires

Obligatoiretrue

Type : Une chaîne JSON bien formée qui définit l'ensemble des configurations de commentaire prises en charge. Pour voir un exemple, consultez Exemple FeedbackConfigurationMap.

L'ID d'un objet de configuration de commentaire présente les exigences suivantes.

ID :

  • Doit être unique parmi les objets de configuration.

  • Doit commencer par une lettre ou un chiffre. Les noms de compartiments peuvent contenir des lettres minuscules, des chiffres et des traits d'union.

  • Nombre maximal de caractères : 2 à 63.

Obligatoiretrue

Type: string

Modèle valide :^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Exemples : MyConfig0, config-a, 12id

Le corps d'un objet de configuration de commentaire contient les propriétés suivantes.

s3-bucket-name

Nom du compartiment Amazon S3 de destination.

Note

Le rôle de groupe doit autoriser l'action s3:PutObject sur tous les compartiments de destination. Pour plus d'informations, consultez Prérequis.

Obligatoiretrue

Type: string

Modèle valide :^[a-z0-9\.\-]{3,63}$

content-type

Type de contenu des exemples à charger. Tout le contenu d'une configuration de commentaire individuelle doit être du même type.

Obligatoiretrue

Type: string

Exemples : image/jpeg, application/json, audio/ogg

s3-prefix

Préfixe de clé à utiliser pour les exemples chargés. Un préfixe est similaire à un nom de répertoire. Il vous permet de stocker des données similaires dans le même répertoire d'un compartiment. Pour de plus amples informations, veuillez consulterClé d'objet et métadonnéesdans leGuide de l'utilisateur Amazon Simple Storage Service.

Obligatoirefalse

Type: string

file-ext

Extension de fichier à utiliser pour les exemples chargés. Doit être une extension de fichier valide pour le type de contenu.

Obligatoirefalse

Type: string

Exemples : jpg, json, ogg

sampling-strategy

Stratégie d'échantillonnage à utiliser pour filtrer les exemples à charger. S'il n'est pas spécifié, le connecteur essaie de charger tous les exemples qu'il reçoit.

Obligatoirefalse

Type : Une chaîne JSON bien formée qui contient les propriétés suivantes.

strategy-name

Nom de la stratégie d'échantillonnage.

Obligatoiretrue

Type: string

Valeurs valides : RANDOM_SAMPLING, LEAST_CONFIDENCE, MARGIN ou ENTROPY

rate

Taux de la stratégie d'échantillonnage aléatoire .

Obligatoiretruesistrategy-nameestRANDOM_SAMPLING.

Type: number

Valeurs valides : 0.0 - 1.0

threshold

Seuil de la stratégie d'échantillonnage Least Confidence, Margin ou Entropy .

Obligatoiretruesistrategy-nameestLEAST_CONFIDENCE,MARGIN, ouENTROPY.

Type: number

Valeurs valides :

  • 0.0 - 1.0 pour la stratégie LEAST_CONFIDENCE ou MARGIN.

  • 0.0 - no limit pour la stratégie ENTROPY.

RequestLimit

Nombre maximal de demandes que le connecteur peut traiter à la fois.

Vous pouvez utiliser ce paramètre pour limiter la consommation de mémoire en limitant le nombre de demandes traitées par le connecteur en même temps. Les demandes qui dépassent cette limite sont ignorées.

Nom d'affichage dans leAWS IoTConsole  : Limite de demande

Obligatoirefalse

Type: string

Valeurs valides : 0 - 999

Modèle valide :^$|^[0-9]{1,3}$

Exemple de création de connecteur (AWS CLI)

La commande CLI suivante crée uneConnectorDefinitionavec une version initiale qui contient le connecteur 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" } } ] }'

Exemple FeedbackConfigurationMap

Voici un exemple de valeur développé pour le paramètre FeedbackConfigurationMap. Cet exemple inclut plusieurs configurations de commentaires qui utilisent différentes stratégies d'échantillonnage.

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

Stratégies d'échantillonnage

Le connecteur prend en charge quatre stratégies d'échantillonnage qui déterminent s'il convient de charger les échantillons transmis au connecteur. Les exemples sont des instances de données discrètes qu'un modèle utilise pour une prédiction. Vous pouvez utiliser des stratégies d'échantillonnage pour filtrer les échantillons les plus susceptibles d'améliorer la précision du modèle.

RANDOM_SAMPLING

Charge de façon aléatoire les exemples en fonction du débit fourni. Il charge un exemple si une valeur générée de façon aléatoire est inférieure à la fréquence. Plus le taux est élevé, plus le nombre d'échantillons chargés est élevé.

Note

Cette stratégie ignore toute prédiction de modèle fournie.

LEAST_CONFIDENCE

Charge des exemples dont la probabilité de fiabilité maximale est inférieure au seuil fourni.

Exemple de scénario

Seuil : .6

Prédiction du modèle : [.2, .2, .4, .2]

Probabilité de fiabilité maximale : .4

Résultat:

Utilisez l'exemple, car la probabilité de fiabilité maximale (.4) <= seuil (.6).

MARGIN

Charge des exemples si la marge entre les deux principales probabilités de confiance se situe dans le seuil fourni. La marge correspond à la différence entre les deux principales probabilités.

Exemple de scénario

Seuil : .02

Prédiction du modèle : [.3, .35, .34, .01]

Les deux principales probabilités de confiance : [.35, .34]

Marge : .01 (.35 - .34)

Résultat:

Utilisez l'exemple car marge (.01) <= seuil (.02).

ENTROPY

Charge des exemples dont l'entropie est supérieure au seuil fourni. Utilise l'entropie normalisée de la prédiction du modèle.

Exemple de scénario

Seuil : 0.75

Prédiction du modèle : [.5, .25, .25]

Entropie pour la prédiction : 1.03972

Résultat:

Utilisez sample car entropy (1.03972) > threshold (0.75).

Données d'entrée

Les fonctions Lambda définies par l'utilisateur utilisent lepublishfonction de lafeedbackclient dans leAWS IoT GreengrassSDK Machine Learning pour appeler le connecteur. Pour voir un exemple, consultez Exemple d'utilisation.

Note

Ce connecteur n'accepte pas les messages MQTT comme données d'entrée.

La fonction publish accepte les arguments suivants :

ConfigId

ID de la configuration des commentaires cibles. Cela doit correspondre à l'ID d'une configuration de commentaire définie dans leFeedbackConfigurationMappour le connecteur ML Feedback.

Obligatoire

Type : chaîne

ModelInput

Données d'entrée qui ont été transmises à un modèle pour l'inférence. Ces données d'entrée sont chargées à l'aide de la configuration cible, sauf si elles sont filtrées en fonction de la stratégie d'échantillonnage.

Obligatoire

Type : octets

ModelPrediction

La prédiction est le résultat du modèle. Le type de résultat peut être un dictionnaire ou une liste. Par exemple, les résultats de prédiction du connecteur ML Image Classification sont une liste de probabilités (par exemple,[0.25, 0.60, 0.15]). Ces données sont publiées dans la rubrique /feedback/message/prediction.

Obligatoire

Type : dictionnaire ou liste defloatvaleurs

Metadonnées

Métadonnées spécifiques à l'application définies par le client qui sont attachées à l'exemple chargé et publiées dans la rubrique /feedback/message/prediction. Le connecteur insère également une clé publish-ts avec une valeur d'horodatage dans les métadonnées.

Obligatoire : false

Type : dictionnaire

Exemple : {"some-key": "some value"}

Données de sortie

Ce connecteur publie les données dans trois rubriques MQTT :

  • Informations sur le statut à partir du connecteur dans la rubrique feedback/message/status.

  • Résultats des prédictions sur la rubrique feedback/message/prediction.

  • Mesures destinées à CloudWatch sur lecloudwatch/metric/putsujet.

Vous devez configurer les abonnements pour autoriser le connecteur à communiquer sur les rubriques MQTT. Pour plus d'informations, consultez Entrées et sorties.

Filtre de rubriques : feedback/message/status

Utilisez cette rubrique pour surveiller le statut des exemples de chargement et d'exemples supprimés. Le connecteur publie dans cette rubrique chaque fois qu'il reçoit une demande.

Exemple de sortie : Exemple de chargement réussi
{ "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" }

Le connecteur ajoute lebucketetkeychamps de réponse d'Amazon S3. Pour plus d'informations sur la réponse Amazon S3, consultezPUT Objectdans leRéférence des API Amazon Simple Storage Service.

Exemple de sortie : Exemple supprimé en raison de la stratégie d'échantillonnage
{ "response": { "status": "sample_dropped_by_strategy" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
Exemple de sortie : Échec du chargement d'exemple

Un statut d'échec inclut le message d'erreur comme valeur error_message et la classe d'exception comme valeur 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" }
Exemple de sortie : Demande limitée en raison de la limite de demande
{ "response": { "status": "fail", "error_message": "Request limit has been reached (max request: 10 ). Dropping request.", "error": "Queue.Full" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
Filtre de rubriques : feedback/message/prediction

Utilisez cette rubrique pour écouter les prédictions basées sur des exemples de données chargés. Cela vous permet d'analyser les performances de votre modèle en temps réel. Les prédictions de modèle sont publiées dans cette rubrique uniquement si les données sont correctement chargées vers Amazon S3. Les messages publiés dans cette rubrique sont au format JSON. Ils contiennent le lien vers l'objet de données chargé, la prédiction du modèle et les métadonnées incluses dans la demande.

Vous pouvez également stocker les résultats des prédictions et les utiliser pour signaler et analyser les tendances au fil du temps. Les tendances peuvent fournir des informations précieuses. Par exemple, une tendance de précision décroissante au fil du temps peut vous aider à décider si le modèle doit être reformé.

Exemple de sortie
{ "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" } }
Astuce

Vous pouvez configurer leConnecteur IoT Analyticspour vous abonner à ce sujet et envoyer les informations àAWS IoT Analyticspour une analyse plus poussée ou historique.

Filtre de rubriques : cloudwatch/metric/put

Il s'agit de la rubrique de sortie utilisée pour publier des métriques dans CloudWatch. Cette fonction nécessite que vous installiez et configuriez leConnecteur CloudWatch Metrics.

Les métriques incluent :

  • Nombre d'échantillons chargés.

  • Taille des échantillons chargés.

  • Nombre d'erreurs depuis les chargements vers Amazon S3.

  • Nombre d'échantillons abandonnés en fonction de la stratégie d'échantillonnage.

  • Nombre de demandes limitées.

Exemple de sortie : Taille de l'échantillon de données (publié avant le chargement réel)
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 47592, "unit": "Bytes", "metricName": "SampleSize" } } }
Exemple de sortie : Exemple de chargement réussi
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
Exemple de sortie : L'exemple de chargement réussi et résultat de prédiction publié
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleAndPredictionPublished" } } }
Exemple de sortie : Échec du chargement d'exemple
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadFailure" } } }
Exemple de sortie : Exemple supprimé en raison de la stratégie d'échantillonnage
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleNotUsed" } } }
Exemple de sortie : Demande limitée en raison de la limite de demande
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "ErrorRequestThrottled" } } }

Exemple d'utilisation

L'exemple suivant est une fonction Lambda définie par l'utilisateur qui utilise le kitAWS IoT GreengrassKit SDK de Machine Learningpour envoyer des données au connecteur ML Feedback.

Note

Vous pouvez télécharger leAWS IoT GreengrassSDK Machine Learning à partir duAWS IoT Greengrass page des téléchargements.

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

Licences

Le connecteur inclut les logiciels et licences tiers suivants :

Ce connecteur est libéré sous leContrat de licence du logiciel Greengrass Core.

Consulter aussi