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 le
MLFeedbackConnectorConfigId
pour 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 le
MLFeedbackConnectorConfigId
pour 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.
-
Python
La 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.7Ceci 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 le
s3:PutObject
action 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
Obligatoire
true
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.
Obligatoire
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 plus d'informations, consultez Prérequis.Obligatoire
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.
Obligatoire
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 de plus amples informations, veuillez consulterClé d'objet et métadonnéesdans leGuide de l'utilisateur Amazon Simple Storage Service.
Obligatoire
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.
Obligatoire
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.
Obligatoire
false
Type : Une chaîne JSON bien formée qui contient les propriétés suivantes.
strategy-name
-
Nom de la stratégie d'échantillonnage.
Obligatoire
true
Type:
string
Valeurs valides :
RANDOM_SAMPLING
,LEAST_CONFIDENCE
,MARGIN
ouENTROPY
rate
-
Taux de la stratégie d'échantillonnage aléatoire .
Obligatoire
true
sistrategy-name
estRANDOM_SAMPLING
.Type:
number
Valeurs valides :
0.0 - 1.0
threshold
-
Seuil de la stratégie d'échantillonnage Least Confidence, Margin ou Entropy .
Obligatoire
true
sistrategy-name
estLEAST_CONFIDENCE
,MARGIN
, ouENTROPY
.Type:
number
Valeurs valides :
-
0.0 - 1.0
pour la stratégieLEAST_CONFIDENCE
ouMARGIN
. -
0.0 - no limit
pour la stratégieENTROPY
.
-
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
Obligatoire
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 uneConnectorDefinition
avec 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 lepublish
fonction de lafeedback
client 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 de
float
valeurs - 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 le
cloudwatch/metric/put
sujet.
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 le
bucket
etkey
champs 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 valeurerror
.{ "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 :
-
AWS SDK for Python (Boto3)
/Licence Apache 2.0 -
botocore
/Licence Apache 2.0 -
dateutil
/Licence PSF -
docutils
/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public -
jmespath
/Licence MIT -
s3transfer
/Licence Apache 2.0 -
urllib3
/Licence MIT
six
/MIT
Ce connecteur est libéré sous leContrat de licence du logiciel Greengrass Core