AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Conector ML Feedback
Atenção
Esse conector passou para a fase de vida útil estendida e AWS IoT Greengrass não lançará atualizações que forneçam atributos, aprimoramentos para atributos existentes, patches de segurança ou correções de erros. Para obter mais informações, consulte Política de manutenção do AWS IoT Greengrass Version 1.
O conector de feedback do ML facilita o acesso aos dados do seu modelo de machine learning (ML) para retreinamento e análise de modelos. O conector:
Faz upload dos dados de entrada (amostras) usados pelo seu modelo de ML no Amazon S3. A entrada do modelo pode estar em qualquer formato, como imagens, JSON ou áudio. Depois que as amostras são carregadas na nuvem, você pode usá-las para retreinar o modelo para melhorar a acurácia e a precisão de suas previsões. Por exemplo, você pode usar o SageMaker AI Ground Truth para rotular suas amostras e a SageMaker IA para treinar novamente o modelo.
Publica os resultados da previsão do modelo como mensagens MQTT. Isso permite monitorar e analisar a qualidade da inferência do modelo em tempo real. Você também pode armazenar os resultados da previsão e usá-los para analisar tendências ao longo do tempo.
Publica métricas sobre uploads de amostras e dados de amostra na Amazon. CloudWatch
Para configurar esse conector, descreva suas configurações de feedback compatíveis no formato JSON. Uma configuração de feedback define propriedades como o bucket de destino do Amazon S3, o tipo de conteúdo e a estratégia de amostragem. (Uma estratégia de amostragem é usada para determinar quais amostras devem ser carregadas.)
Você pode usar o conector de feedback do ML nos seguintes cenários:
-
Com funções do Lambda definidas pelo usuário. Suas funções Lambda de inferência local usam AWS IoT Greengrass o SDK do Machine Learning para invocar esse conector e transmitir a configuração de feedback de destino, a entrada do modelo e a saída do modelo (resultados de previsão). Para obter um exemplo, consulte Exemplo de uso.
-
Com o conector de classificação de imagem (v2). Para usar esse conector com o conector de classificação de imagem, configure o parâmetro
MLFeedbackConnectorConfigId
para o conector de classificação de imagem. -
Com o conector de detecção de objetos do ML. Para usar esse conector com o conector de detecção de objetos do ML, configure o parâmetro
MLFeedbackConnectorConfigId
para o conector de detecção de objetos do ML.
ARN: arn:aws:greengrass:
region
::/connectors/MLFeedback/versions/1
Requisitos
Esse conector tem os seguintes requisitos:
-
AWS IoT Greengrass Core Software v1.9.3 ou posterior.
-
Python
, versão 3.7 ou 3.8, instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH. nota
Para usar o Python 3.8, execute o comando a seguir para criar um symblink da pasta de instalação padrão do Python 3.7 para os binários instalados do Python 3.8.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Isso configura seu dispositivo para atender ao requisito Python para AWS IoT Greengrass.
-
Um ou mais buckets do Amazon S3. O número de buckets que você usa depende da sua estratégia de amostragem.
-
A função de grupo do Greengrass configurada para permitir a ação
s3:PutObject
em objetos do bucket do Amazon S3 de destino, conforme mostrado no exemplo de política do IAM a seguir.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
bucket-name
/*" ] } ] }A política deve incluir todos os buckets de destino como recursos. Você pode conceder acesso granular ou condicional aos recursos (por exemplo, usando um esquema de nomeação * curinga).
Para o requisito de função de grupo, você deve configurar a função para conceder as permissões necessárias e certificar-se de que a função tenha sido adicionada ao grupo. Para ter mais informações, consulte Gerenciar a função de grupo do Greengrass (console) ou Gerenciar a função de grupo do Greengrass (CLI).
-
O conector CloudWatch Metrics foi adicionado ao grupo Greengrass e configurado. Isso só é necessário se você deseja usar o atributo de relatório de métricas.
-
AWS IoT Greengrass O Machine Learning SDK v1.1.0 é necessário para interagir com esse conector.
Parâmetros
FeedbackConfigurationMap
-
Um conjunto de uma ou mais configurações de feedback que o conector pode usar para fazer upload de amostras no Amazon S3. Uma configuração de feedback define parâmetros como o bucket de destino, o tipo de conteúdo e a estratégia de amostragem. Quando esse conector é invocado, a função do Lambda de chamada ou o conector especifica uma configuração de feedback de destino.
Nome de exibição no AWS IoT console: mapa de configuração de feedback
Obrigatório:
true
Tipo: uma string JSON bem-formada que define o conjunto de configurações de feedback compatíveis. Para obter um exemplo, consulte FeedbackConfigurationMap exemplo.
-
O ID de um objeto de configuração de feedback tem os requisitos a seguir.
-
O ID:
Deve ser exclusivo entre os objetos de configuração.
Deve começar com uma letra ou um número. Pode conter letras minúsculas e maiúsculas, números e hifens.
Deve ter de 2 a 63 caracteres de comprimento.
Obrigatório:
true
Digite:
string
Padrão válido:
^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
Exemplos:
MyConfig0
,config-a
,12id
O corpo de um objeto de configuração de comentários contém as propriedades a seguir.
s3-bucket-name
-
O nome do bucket de destino do Amazon S3.
nota
A função de grupo deve permitir a ação
s3:PutObject
em todos os buckets de destino. Para obter mais informações, consulte Requisitos.Obrigatório:
true
Digite:
string
Padrão válido:
^[a-z0-9\.\-]{3,63}$
content-type
-
O tipo de conteúdo das amostras a serem carregadas. Todo o conteúdo de uma configuração de feedback individual deve ser do mesmo tipo.
Obrigatório:
true
Digite:
string
Exemplos:
image/jpeg
,application/json
,audio/ogg
s3-prefix
-
O prefixo de chaves a ser usado para amostras carregadas. Um prefixo é semelhante a um nome de diretório. Ele permite que você armazene dados semelhantes no mesmo diretório em um bucket. Para obter mais informações, consulte Chave e metadados de objeto no Guia do usuário do Amazon Simple Storage Service.
Obrigatório:
false
Digite:
string
file-ext
-
A extensão de arquivo a ser usada para amostras carregadas. Deve ser uma extensão de arquivo válida para o tipo de conteúdo.
Obrigatório:
false
Digite:
string
Exemplos:
jpg
,json
,ogg
sampling-strategy
-
A estratégia de amostragem a ser usada para filtrar quais amostras devem ser carregadas. Se omitido, o conector tentará fazer upload de todas as amostras que ele receber.
Obrigatório:
false
Tipo: uma string JSON bem-formada que contém as propriedades a seguir.
strategy-name
-
O nome da estratégia de amostragem.
Obrigatório:
true
Digite:
string
Valores válidos:
RANDOM_SAMPLING
,LEAST_CONFIDENCE
,MARGIN
ouENTROPY
rate
-
A taxa para a estratégia de amostragem Random.
Obrigatório:
true
sestrategy-name
forRANDOM_SAMPLING
.Tipo:
number
Valores válidos:
0.0 - 1.0
threshold
-
O limite para a estratégia de amostragem Least Confidence, Margin ou Entropy.
Obrigatório:
true
sestrategy-name
forLEAST_CONFIDENCE
,MARGIN
ouENTROPY
.Tipo:
number
Valores válidos:
-
0.0 - 1.0
para a estratégiaLEAST_CONFIDENCE
ouMARGIN
. -
0.0 - no limit
para a estratégiaENTROPY
.
-
RequestLimit
-
O número máximo de solicitações que o conector pode processar por vez.
Você pode usar esse parâmetro para restringir o consumo de memória limitando o número de solicitações que o conector processa ao mesmo tempo. As solicitações que excederem esse limite serão ignoradas.
Nome de exibição no AWS IoT console: limite de solicitações
Obrigatório:
false
Digite:
string
Valores válidos:
0 - 999
Padrão válido:
^$|^[0-9]{1,3}$
Exemplo de criação de conector (AWS CLI)
O seguinte comando da CLI cria um ConnectorDefinition
com uma versão inicial que contém o conector de feedback do ML.
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 exemplo
A seguir está um valor de exemplo expandido para o parâmetro FeedbackConfigurationMap
. Este exemplo inclui várias configurações de feedback que usam diferentes estratégias de amostragem.
{ "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" } }
Estratégias de amostragem
O conector oferece suporte a quatro estratégias de amostragem que determinam se deve ser feito upload de amostras que são passadas para o conector. As amostras são instâncias distintas de dados que um modelo usa para uma previsão. Você poderá usar estratégias de amostragem para filtrar as amostras com maior probabilidade de melhorar a precisão do modelo.
RANDOM_SAMPLING
Carrega aleatoriamente amostras com base na taxa fornecida. Ela fará upload de uma amostra se um valor gerado aleatoriamente for menor que a taxa. Quanto maior a taxa, mais amostras serão carregadas.
nota
Essa estratégia ignora qualquer previsão de modelo fornecida.
LEAST_CONFIDENCE
Faz upload de amostras cuja probabilidade máxima de confiança fica abaixo do limite fornecido.
- Cenário de exemplo:
-
Limite:
.6
Previsão do modelo:
[.2, .2, .4, .2]
Probabilidade máxima de confiança:
.4
- Resultado:
Use a amostra porque a probabilidade de confiança máxima (
.4
) é menor ou igual ao limite (.6
).
MARGIN
Carregará amostras se a margem entre as duas principais probabilidades de confiança estiver dentro do limite fornecido. A margem é a diferença entre as duas principais probabilidades.
- Cenário de exemplo:
-
Limite:
.02
Previsão do modelo:
[.3, .35, .34, .01]
As duas principais probabilidades de confiança:
[.35, .34]
Margem:
.01
(.35 - .34
) - Resultado:
-
Use o exemplo porque a margem (
.01
) é menor ou igual ao limite (.02
).
ENTROPY
Faz upload de amostras cuja entropia é maior que o limite fornecido. Usa a entropia normalizada da previsão do modelo.
- Cenário de exemplo:
-
Limite:
0.75
Previsão do modelo:
[.5, .25, .25]
Entropia para previsão:
1.03972
- Resultado:
-
Use o exemplo porque a entropia (
1.03972
) é maior que o limite (0.75
).
Dados de entrada
As funções Lambda definidas pelo usuário usam publish
a função do cliente no SDK feedback
do Machine AWS IoT Greengrass Learning para invocar o conector. Para obter um exemplo, consulte Exemplo de uso.
nota
Esse conector não aceita mensagens MQTT como dados de entrada.
A função publish
usa os seguintes argumentos:
- ConfigId
-
O ID da configuração de feedback de destino. Isso deve corresponder ao ID de uma configuração de feedback definida no FeedbackConfigurationMapparâmetro do conector ML Feedback.
Obrigatório: verdadeiro
Tipo: string
- ModelInput
-
Os dados de entrada que foram passados para um modelo para inferência. Esses dados de entrada são carregados usando a configuração de destino, a menos que sejam filtrados com base na estratégia de amostragem.
Obrigatório: true
Tipo: bytes
- ModelPrediction
-
Os resultados da previsão do modelo. O tipo de resultado pode ser um dicionário ou uma lista. Por exemplo, os resultados da previsão do conector de classificação de imagens do ML são uma lista de probabilidades (como
[0.25, 0.60, 0.15]
). Esses dados são publicados no tópico/feedback/message/prediction
.Obrigatório: true
Tipo: dicionário ou lista de valores
float
- Metadados
-
Metadados específicos ao aplicativo definidos pelo cliente que são anexados à amostra carregada e publicados no tópico
/feedback/message/prediction
. O conector também insere uma chavepublish-ts
com um valor de timestamp nos metadados.Obrigatório: false
Tipo: dicionário
Example:
{"some-key": "some value"}
Dados de saída
Esse conector publica dados em três tópicos MQTT:
-
As informações de status do conector no tópico
feedback/message/status
. -
Resultados da previsão no tópico
feedback/message/prediction
. -
Métricas destinadas ao CloudWatch
cloudwatch/metric/put
tópico.
Você deve configurar assinaturas para permitir que o conector se comunique em tópicos MQTT. Para obter mais informações, consulte Entradas e saídas.
- Filtro de tópico:
feedback/message/status
-
Use esse tópico para monitorar o status de uploads de amostra e amostras descartadas. O conector publica nesse tópico sempre que recebe uma solicitação.
- Exemplo de saída: upload de amostra bem-sucedido
-
{ "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" }
O conector adiciona os campos
bucket
ekey
à resposta do Amazon S3. Para obter mais informações sobre as respostas do Amazon S3, consulte o PUT object (Objeto PUT) na Referência de APIs do Amazon Simple Storage Service. - Exemplo de saída: amostra descartada devido à estratégia de amostragem
-
{ "response": { "status": "sample_dropped_by_strategy" }, "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3" }
- Exemplo de saída: falha no upload de amostra
-
Um status de falha inclui a mensagem de erro como o valor
error_message
e a classe de exceção como o valorerror
.{ "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" }
- Exemplo de saída: solicitação limitada devido ao limite de solicitações
-
{ "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 de tópico:
feedback/message/prediction
-
Use este tópico para ouvir previsões com base em dados de amostra carregados. Isso permite que você analise o desempenho do seu modelo em tempo real. As previsões de modelo serão publicadas nesse tópico somente se os dados forem carregados com êxito no Amazon S3. As mensagens publicadas neste tópico estão no formato JSON. Elas contêm o link para o objeto de dados carregado, a previsão do modelo e os metadados incluídos na solicitação.
Você também pode armazenar resultados de previsão e usá-los para relatar e analisar tendências ao longo do tempo. As tendências podem fornecer insights valiosos. Por exemplo, uma tendência de precisão decrescente ao longo do tempo pode ajudar você a decidir se o modelo precisa ser treinado novamente.
- Exemplo de saída
-
{ "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" } }
dica
Você pode configurar o conector do IoT Analytics para assinar este tópico e enviar as informações AWS IoT Analytics para análise posterior ou histórica.
- Filtro de tópico:
cloudwatch/metric/put
-
Este é o tópico de saída usado para publicar métricas no CloudWatch. Esse recurso exige que você instale e configure o conector CloudWatch Metrics.
As métricas incluem:
O número de amostras carregadas.
O tamanho das amostras carregadas.
O número de erros de uploads para o Amazon S3.
O número de amostras descartadas com base na estratégia de amostragem.
O número de solicitações limitadas.
- Exemplo de saída: tamanho da amostra de dados (publicada antes do upload real)
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 47592, "unit": "Bytes", "metricName": "SampleSize" } } }
- Exemplo de saída: upload de amostra bem-sucedido
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadSuccess" } } }
- Exemplo de saída: upload de amostra bem-sucedido e resultado da previsão publicado
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleAndPredictionPublished" } } }
- Exemplo de saída: falha no upload de amostra
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleUploadFailure" } } }
- Exemplo de saída: amostra descartada devido à estratégia de amostragem
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "SampleNotUsed" } } }
- Exemplo de saída: solicitação limitada devido ao limite de solicitações
-
{ "request": { "namespace": "GreengrassFeedbackConnector", "metricData": { "value": 1, "unit": "Count", "metricName": "ErrorRequestThrottled" } } }
Exemplo de uso
O exemplo a seguir é uma função do Lambda definida pelo usuário que usa o SDK de machine learning do AWS IoT Greengrass para enviar dados ao conector de feedback do ML.
nota
Você pode baixar o SDK do AWS IoT Greengrass Machine Learning na página de AWS IoT Greengrass downloads.
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
Licenças
O conector de feedback do ML inclui o seguinte licenciamento/software de terceiros:
-
AWS SDK for Python (Boto3)
/Licença Apache 2.0 -
botocore
/Licença Apache 2.0 -
dateutil
/Licença PSF -
docutils
/Licença BSD, GNU Licença pública geral (GPL), Licença Python Software Foundation, Domínio público -
jmespath
/Licença MIT -
s3transfer
/Licença Apache 2.0 -
urllib3
/Licença MIT
six
/MIT
Esse conector é liberado de acordo com o Contrato de licença de software do Greengrass Core