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 est passé à la phase de durée de vie prolongée et AWS IoT Greengrass ne 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 bogues. Pour de plus amples informations, veuillez consulter AWS IoT Greengrass Version 1politique de maintenance.

Le connecteur ML Feedback facilite l'accès aux données de votre modèle d'apprentissage automatique (ML) pour le réentraînement et l'analyse des modèles. Le connecteur :

  • Télécharge les données d'entrée (échantillons) utilisées par votre modèle de machine learning vers 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 utiliser SageMaker AI Ground Truth pour étiqueter vos échantillons et SageMaker AI pour réentraîner 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 statistiques relatives aux téléchargements d'échantillons et d'échantillons de données sur Amazon CloudWatch.

Pour configurer ce connecteur, vous décrivez vos configurations de commentaires prises en charge au format JSON. Une configuration de feedback définit des propriétés telles que le compartiment Amazon S3 de destination, le type de contenu et la straté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 des fonctions Lambda définies par l'utilisateur. Vos fonctions Lambda d'inférence locales utilisent le SDK Machine AWS IoT Greengrass Learning pour appeler ce connecteur et transmettre la configuration du feedback cible, l'entrée du modèle et la sortie du modèle (résultats de prédiction). Pour obtenir un exemple, consultez Exemple d'utilisation.

  • Avec le connecteur ML Image Classification (v2). Pour utiliser ce connecteur avec le connecteur ML Image Classification, configurez le MLFeedbackConnectorConfigId paramètre du connecteur ML Image Classification.

  • Avec le connecteur ML Object Detection. Pour utiliser ce connecteur avec le connecteur ML Object Detection, configurez le MLFeedbackConnectorConfigId paramètre du 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 Greengrass Core Software v1.9.3 ou version ultérieure.

  • Python version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.

    Note

    Pour utiliser Python 3.8, exécutez la commande suivante pour créer un lien symbolique entre le dossier d'installation par défaut de Python 3.7 et les fichiers 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.

  • Le rôle de groupe Greengrass est configuré pour autoriser l's3:PutObjectaction sur les objets du compartiment Amazon S3 de destination, comme illustré dans l'exemple de politique 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).

  • Le connecteur CloudWatch Metrics a été ajouté 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 Greengrass Le SDK Machine Learning v1.1.0 est requis pour interagir avec ce connecteur.

Paramètres

FeedbackConfigurationMap

Ensemble d'une ou plusieurs configurations de feedback que le connecteur peut utiliser pour charger des échantillons sur 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 invoqué, la fonction ou le connecteur Lambda appelant spécifie une configuration de feedback cible.

Nom affiché dans la AWS IoT console : carte de configuration des commentaires

Nécessaire : true

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

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.

Nécessaire : true

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 de plus amples informations, veuillez consulter Prérequis.

Nécessaire : true

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.

Nécessaire : true

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 plus d'informations, consultez la section Clé d'objet et métadonnées dans le guide de l'utilisateur d'Amazon Simple Storage Service.

Nécessaire : false

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.

Nécessaire : false

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.

Nécessaire : false

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

strategy-name

Nom de la stratégie d'échantillonnage.

Nécessaire : true

Type : string

Valeurs valides : RANDOM_SAMPLING, LEAST_CONFIDENCE, MARGIN ou ENTROPY

rate

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

Obligatoire : true si strategy-name c'est le casRANDOM_SAMPLING.

Type : number

Valeurs valides : 0.0 - 1.0

threshold

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

Obligatoire : true si strategy-name c'est LEAST_CONFIDENCE le casMARGIN, 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 affiché dans la AWS IoT console : limite de demandes

Nécessaire : false

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 un ConnectorDefinition avec une version initiale contenant 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" } } ] }'

FeedbackConfigurationMap exemple

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 publish la fonction feedback du client dans le SDK Machine AWS IoT Greengrass Learning pour appeler le connecteur. Pour obtenir 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 feedback définie dans le FeedbackConfigurationMapparamètre du connecteur ML Feedback.

Obligatoire : vrai

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 : vrai

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 (telles que[0.25, 0.60, 0.15]). Ces données sont publiées dans la rubrique /feedback/message/prediction.

Obligatoire : vrai

Type : dictionnaire ou liste de float valeurs

Métadonné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 : faux

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.

  • Des métriques destinées CloudWatch à cloudwatch/metric/put ce sujet.

Vous devez configurer les abonnements pour autoriser le connecteur à communiquer sur les rubriques MQTT. Pour de plus amples informations, veuillez consulter 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 : l'exemple de chargement a 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 les key champs bucket et à la réponse d'Amazon S3. Pour plus d'informations sur la réponse Amazon S3, consultez l'objet PUT dans le manuel Amazon Simple Storage Service API Reference.

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 de l'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 du modèle sont publiées dans cette rubrique uniquement si les données sont correctement chargées sur 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 le connecteur IoT Analytics pour vous abonner à cette rubrique et envoyer les informations à des AWS IoT Analytics fins d'analyse ultérieure 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 fonctionnalité nécessite l'installation et la configuration du connecteur CloudWatch Metrics.

Les métriques incluent :

  • Nombre d'échantillons chargés.

  • Taille des échantillons chargés.

  • Le nombre d'erreurs liées aux 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 : l'exemple de chargement a réussi
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
Exemple de sortie : 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 de l'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 SDK Machine AWS IoT Greengrass Learning pour envoyer des données au connecteur ML Feedback.

Note

Vous pouvez télécharger le SDK AWS IoT Greengrass Machine Learning depuis la page des AWS IoT Greengrass 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 ML Feedback inclut les logiciels/licences tiers suivants :

Ce connecteur est publié dans le cadre du contrat de licence logicielle Greengrass Core.

Consultez aussi