Connettore ML Feedback - AWS IoT Greengrass

AWS IoT Greengrass Version 1 è entrato nella fase di estensione della vita utile il 30 giugno 2023. Per ulteriori informazioni, consulta la politica AWS IoT Greengrass V1 di manutenzione. Dopo questa data, AWS IoT Greengrass V1 non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti, correzioni di bug o patch di sicurezza. I dispositivi che funzionano AWS IoT Greengrass V1 non subiranno interruzioni e continueranno a funzionare e a connettersi al cloud. Ti consigliamo vivamente di eseguire la migrazione a AWS IoT Greengrass Version 2, che aggiunge nuove importanti funzionalità e supporto per piattaforme aggiuntive.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connettore ML Feedback

avvertimento

Questo connettore è entrato nella fase di vita prolungata e AWS IoT Greengrass non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti alle funzionalità esistenti, patch di sicurezza o correzioni di bug. Per ulteriori informazioni, consulta AWS IoT Greengrass Version 1politica di manutenzione.

Il connettore ML Feedback semplifica l'accesso ai dati del modello di machine learning (ML) per la riqualificazione e l'analisi dei modelli. Il connettore:

  • Carica i dati di input (esempi) utilizzati dal tuo modello ML su Amazon S3. L'input del modello può essere in qualsiasi formato, ad esempio immagini, JSON o audio. Dopo che gli esempi sono stati caricati nel cloud, puoi utilizzarli per eseguire un nuovo training del modello per migliorare l'accuratezza e la precisione delle sue previsioni. Ad esempio, puoi utilizzare SageMaker AI Ground Truth per etichettare i tuoi campioni e l'SageMaker intelligenza artificiale per riqualificare il modello.

  • Pubblica i risultati delle previsioni ricevuti dal modello come messaggi MQTT. In questo modo puoi monitorare e analizzare la qualità dell'inferenza del modello in tempo reale. Puoi anche archiviare i risultati delle previsioni e utilizzarli per analizzare le tendenze nel corso del tempo.

  • Pubblica metriche sui caricamenti e sui dati di esempio su Amazon. CloudWatch

Per configurare questo connettore, descrivi le configurazioni di feedback supportate in formato JSON. Una configurazione di feedback definisce proprietà come il bucket Amazon S3 di destinazione, il tipo di contenuto e la strategia di campionamento. (Una strategia di campionamento viene utilizzata per determinare quali esempi caricare.)

Puoi utilizzare il connettore ML Feedback nei seguenti scenari:

  • Con funzioni Lambda definite dall'utente. Le funzioni Lambda di inferenza locale utilizzano il Machine AWS IoT Greengrass Learning SDK per richiamare questo connettore e trasmettere la configurazione del feedback di destinazione, l'input e l'output del modello (risultati di previsione). Per vedere un esempio, consulta Esempio di utilizzo.

  • Con il connettore ML Image Classification (v2). Per utilizzare questo connettore con il connettore ML Image Classification, configura il MLFeedbackConnectorConfigId parametro per il connettore ML Image Classification.

  • Con il connettore ML Object Detection. Per utilizzare questo connettore con il connettore ML Object Detection, configura il MLFeedbackConnectorConfigId parametro per il connettore ML Object Detection.

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

Requisiti

Questo connettore presenta i seguenti requisiti:

  • AWS IoT Greengrass Core Software v1.9.3 o versione successiva.

  • Python versione 3.7 o 3.8 installata sul dispositivo principale e aggiunta alla variabile di ambiente PATH.

    Nota

    Per usare Python 3.8, esegui il seguente comando per creare un collegamento simbolico dalla cartella di installazione predefinita di Python 3.7 ai binari Python 3.8 installati.

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

    Questo configura il dispositivo in modo che soddisfi il requisito Python per AWS IoT Greengrass.

  • Uno o più bucket Amazon S3. Il numero di bucket utilizzati dipende dalla strategia di campionamento.

  • Il ruolo del gruppo Greengrass è configurato per consentire l's3:PutObjectazione sugli oggetti nel bucket Amazon S3 di destinazione, come illustrato nel seguente esempio di policy IAM.

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

    La policy deve includere tutti i bucket di destinazione come risorse. Puoi concedere alle risorse un accesso granulare o condizionale (ad esempio, utilizzando uno schema di denominazione con il carattere jolly *).

    Per il requisito del ruolo di gruppo, è necessario configurare il ruolo in modo da concedere le autorizzazioni necessarie e assicurarsi che il ruolo sia stato aggiunto al gruppo. Per ulteriori informazioni, consulta Gestione del ruolo del gruppo Greengrass (console) o Gestione del ruolo del gruppo Greengrass (CLI).

  • Il connettore CloudWatch Metrics è stato aggiunto al gruppo Greengrass e configurato. Questo è obbligatorio solo se desideri utilizzare la funzionalità di creazione di report dei parametri.

  • AWS IoT Greengrass Per interagire con questo connettore è necessario Machine Learning SDK v1.1.0.

Parametri

FeedbackConfigurationMap

Un set di una o più configurazioni di feedback che il connettore può utilizzare per caricare campioni su Amazon S3. Una configurazione di feedback definisce proprietà quali il bucket di destinazione, il tipo di contenuti e la strategia di campionamento. Quando questo connettore viene richiamato, la funzione o il connettore Lambda chiamante specifica una configurazione di feedback di destinazione.

Nome visualizzato nella AWS IoT console: mappa di configurazione del feedback

Obbligatorio: true

Tipo: una stringa JSON ben formata che definisce l'insieme di configurazioni di feedback supportate. Per vedere un esempio, consulta FeedbackConfigurationMap esempio.

L'ID di un oggetto di configurazione di feedback dispone dei seguenti requisiti.

L'ID:

  • Deve essere univoco tra gli oggetti di configurazione.

  • Deve iniziare con una lettera o un numero. Può contenere lettere minuscole e maiuscole, numeri e trattini.

  • Deve avere una lunghezza compresa tra 2 e 63 caratteri.

Obbligatorio: true

Tipo: string

Schema valido: ^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$

Esempi: MyConfig0, config-a, 12id

Il corpo di un oggetto di configurazione di feedback contiene le seguenti proprietà.

s3-bucket-name

Il nome del bucket Amazon S3 di destinazione.

Nota

Il ruolo del gruppo deve consentire l'operazione s3:PutObject su tutti i bucket di destinazione. Per ulteriori informazioni, consulta Requisiti.

Obbligatorio: true

Tipo: string

Schema valido: ^[a-z0-9\.\-]{3,63}$

content-type

Il tipo di contenuto dei campioni da caricare. Tutti i contenuti di una singola configurazione di feedback devono essere dello stesso tipo.

Richiesto: true

Tipo: string

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

s3-prefix

Il prefisso della chiave da utilizzare per i campioni caricati. Un prefisso è simile al nome di una directory. Consente di archiviare dati simili nella stessa directory in un bucket. Per ulteriori informazioni, consulta la chiave dell'oggetto e i metadati nella Guida per l'utente di Amazon Simple Storage Service.

Obbligatorio: false

Tipo: string

file-ext

L'estensione da utilizzare per i campioni caricati. Deve essere un'estensione file valida per il tipo di contenuti.

Richiesto: false

Tipo: string

Esempi: jpg, json, ogg

sampling-strategy

La strategia di campionamento da utilizzare per filtrare i campioni da caricare. Se omessa, il connettore tenta di caricare tutti i campioni che riceve.

Richiesto: false

Tipo: una stringa JSON ben formata che contiene le seguenti proprietà.

strategy-name

Il nome della strategia di campionamento.

Obbligatorio: true

Tipo: string

Valori validi: RANDOM_SAMPLING, LEAST_CONFIDENCE, MARGIN o ENTROPY

rate

La velocità della strategia di campionamento causale.

Obbligatorio: true se lo strategy-name èRANDOM_SAMPLING.

Tipo: number

Valori validi: 0.0 - 1.0

threshold

La soglia per la strategia di campionamento Fiducia minima, Margine o Entropia.

Obbligatorio: true se strategy-name è LEAST_CONFIDENCEMARGIN, oENTROPY.

Tipo: number

Valori validi:

  • 0.0 - 1.0 per la strategia LEAST_CONFIDENCE o MARGIN.

  • 0.0 - no limit per la strategia ENTROPY.

RequestLimit

Il numero massimo di richieste che il connettore può elaborare alla volta.

Puoi utilizzare questo parametro per limitare il consumo di memoria limitando il numero di richieste che il connettore elabora nello stesso momento. Le richieste che superano questo limite vengono ignorate.

Nome visualizzato nella AWS IoT console: Request limit

Obbligatorio: false

Tipo: string

Valori validi: 0 - 999

Schema valido: ^$|^[0-9]{1,3}$

Esempio di creazione di un connettore (AWS CLI)

Il seguente comando CLI crea un file ConnectorDefinition con una versione iniziale che contiene il connettore 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 esempio

Di seguito è riportato un valore di esempio espanso per il parametro FeedbackConfigurationMap. Questo esempio include diverse configurazioni di feedback che utilizzano varie strategie di campionamento.

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

Strategie di campionamento

Il connettore supporta quattro strategie di campionamento che determinano se caricare i campioni che vengono passati al connettore. Gli esempi sono istanze discrete di dati utilizzati da un modello per una previsione. Puoi utilizzare strategie di campionamento per filtrare i campioni che è più probabile migliorino l'accuratezza del modello.

RANDOM_SAMPLING

Carica in modo casuale campioni in base alla velocità fornita. Carica un campione se un valore generato casualmente è inferiore alla velocità. Più alta è la velocità, maggiore è il numero di campioni caricati.

Nota

Questa strategia ignora qualsiasi previsione del modello fornita.

LEAST_CONFIDENCE

Carica esempi la cui probabilità di affidabilità massima scende al di sotto della soglia fornita.

Scenario di esempio:

Soglia: .6

Previsione del modello: [.2, .2, .4, .2]

Probabilità di affidabilità massima: .4

Risultato:

Utilizza il campione perché la probabilità di affidabilità massima (.4) <= soglia (.6).

MARGIN

Carica esempi se il margine tra le prime due probabilità di affidabilità principali rientra nella soglia fornita. Il margine è la differenza tra le prime due probabilità principali.

Scenario di esempio:

Soglia: .02

Previsione del modello: [.3, .35, .34, .01]

Le due probabilità di affidabilità principali: [.35, .34]

Margine: .01 (.35 - .34)

Risultato:

Utilizza il campione perché margine (.01) <= soglia (.02).

ENTROPY

Carica campioni la cui entropia è maggiore della soglia specificata. Utilizza l'entropia normalizzata della previsione del modello.

Scenario di esempio:

Soglia: 0.75

Previsione del modello: [.5, .25, .25]

Entropia per la previsione: 1.03972

Risultato:

Utilizza campione perché entropia (1.03972) > soglia (0.75).

Dati di input

Le funzioni Lambda definite dall'utente utilizzano publish la funzione del client feedback nel Machine AWS IoT Greengrass Learning SDK per richiamare il connettore. Per vedere un esempio, consulta Esempio di utilizzo.

Nota

Questo connettore non accetta messaggi MQTT come dati di input.

La funzione publish accetta i seguenti argomenti:

ConfigId

L'ID della configurazione di feedback di destinazione. Questo deve corrispondere all'ID di una configurazione di feedback definita nel FeedbackConfigurationMapparametro per il connettore ML Feedback.

Obbligatorio: true

Tipo: stringa

ModelInput

I dati di input che sono stati passati a un modello per l'inferenza. Questi dati di input vengono caricati utilizzando la configurazione di destinazione, a meno che non vengano filtrati in base alla strategia di campionamento.

Obbligatorio: true

Tipo: byte

ModelPrediction

I risultati delle previsioni dal modello. Il tipo di risultato può essere un dizionario o un elenco. Ad esempio, i risultati della previsione del connettore ML Image Classification sono un elenco di probabilità (ad esempio). [0.25, 0.60, 0.15] Questi dati vengono pubblicati nell'argomento /feedback/message/prediction.

Obbligatorio: true

Tipo: dizionario o elenco di float valori

Metadati

Metadati specifici dell'applicazione definiti dal cliente collegati al campione caricato e pubblicati nell'argomento /feedback/message/prediction. Il connettore inserisce inoltre una chiave publish-ts con un valore di timestamp nei metadati.

Obbligatorio: false

Tipo: dizionario

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

Dati di output

Questo connettore pubblica i dati in tre argomenti MQTT:

  • Le informazioni sullo stato del connettore nell'argomento feedback/message/status.

  • Risultati delle previsioni nell'argomento feedback/message/prediction.

  • Metriche destinate all' CloudWatch cloudwatch/metric/putargomento.

È necessario configurare le sottoscrizioni per consentire al connettore di comunicare su argomenti MQTT. Per ulteriori informazioni, consulta Input e output.

Filtro di argomenti: feedback/message/status

Utilizza questo argomento per monitorare lo stato dei caricamenti di campioni e dei campioni rimossi. Il connettore pubblica in questo argomento ogni volta che riceve una richiesta.

Output di esempio: caricamento campione riuscito
{ "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" }

Il connettore aggiunge i key campi bucket e alla risposta di Amazon S3. Per ulteriori informazioni sulla risposta di Amazon S3, consulta l'oggetto PUT nel riferimento all'API di Amazon Simple Storage Service.

Output di esempio: campione rimosso a causa della strategia di campionamento
{ "response": { "status": "sample_dropped_by_strategy" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
Output di esempio: caricamento campione non riuscito

Uno stato di errore include il messaggio di errore come il valore error_message e la classe di eccezione come il valore 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" }
Output di esempio: richiesta con throttling a causa del limite di richieste
{ "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 di argomenti: feedback/message/prediction

Utilizza questo argomento per ascoltare le previsioni in base ai dati campione caricati. Questo consente di analizzare le prestazioni del modello in tempo reale. Le previsioni dei modelli vengono pubblicate su questo argomento solo se i dati vengono caricati correttamente su Amazon S3. I messaggi pubblicati in questo argomento sono in formato JSON. Contengono il collegamento all'oggetto dati caricato, la previsione del modello e i metadati inclusi nella richiesta.

Puoi anche archiviare i risultati delle previsioni e utilizzarli per segnalare e analizzare le tendenze nel tempo. Le tendenze possono fornire informazioni preziose. Ad esempio, una tendenza precisione decrescente nel tempo consente di decidere se occorre eseguire un nuovo training del modello.

Output di esempio
{ "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" } }
Suggerimento

Puoi configurare il connettore IoT Analytics per iscriverti a questo argomento e inviare le informazioni a AWS IoT Analytics per ulteriori analisi o analisi cronologiche.

Filtro di argomenti: cloudwatch/metric/put

Questo è l'argomento di output utilizzato per pubblicare i parametri in CloudWatch. Questa funzionalità richiede l'installazione e la configurazione del connettore CloudWatch Metrics.

I parametri includono:

  • Il numero di campioni caricati.

  • Le dimensioni dei campioni caricati.

  • Il numero di errori causati dai caricamenti su Amazon S3.

  • Il numero di campioni rimossi in base alla strategia di campionamento.

  • Il numero di richieste sottoposte a throttling.

Output di esempio: dimensioni del campione di dati (pubblicato prima del caricamento effettivo)
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 47592, "unit": "Bytes", "metricName": "SampleSize" } } }
Output di esempio: caricamento campione riuscito
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
Output di esempio: caricamento campione riuscito e risultato delle previsioni pubblicato
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleAndPredictionPublished" } } }
Output di esempio: caricamento campione non riuscito
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadFailure" } } }
Output di esempio: campione rimosso a causa della strategia di campionamento
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleNotUsed" } } }
Output di esempio: richiesta con throttling a causa del limite di richieste
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "ErrorRequestThrottled" } } }

Esempio di utilizzo

L'esempio seguente è una funzione Lambda definita dall'utente che utilizza Machine AWS IoT Greengrass Learning SDK per inviare dati al connettore ML Feedback.

Nota

Puoi scaricare il AWS IoT Greengrass Machine Learning SDK dalla pagina dei AWS IoT Greengrass download.

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

Licenze

Il connettore ML Feedback include i seguenti software/licenze di terze parti:

Questo connettore è rilasciato ai sensi del contratto di licenza del software Greengrass Core.

Consulta anche