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.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.
-
Le rôle de groupe Greengrass est configuré pour autoriser l'
s3:PutObject
action 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
ouENTROPY
rate
-
Taux de la stratégie d'échantillonnage aléatoire .
Obligatoire :
true
sistrategy-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
sistrategy-name
c'estLEAST_CONFIDENCE
le casMARGIN
, 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 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
champsbucket
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 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 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 :
-
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 publié dans le cadre du contrat de licence logicielle Greengrass Core