Conector ML Feedback - AWS IoT Greengrass

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 Ground Truth para rotular suas amostras e o SageMaker para retreinar 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 no 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 do Lambda de inferência local usam o SDK de machine learning do AWS IoT Greengrass para invocar esse conector e passar a configuração de feedback de destino, a entrada do modelo e a saída do modelo (resultados da previsão). Para ver 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:

  • Software Core ‭‬AWS IoT Greengrass 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.7

    Isso 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 de métricas do CloudWatch adicionado ao grupo do Greengrass e configurado. Isso só é necessário se você deseja usar o atributo de relatório de métricas.

  • AWS IoT Greengrass‭‬A versão v1.1.0 do SDK de machine learning‭ é necessária 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 console AWS IoT: 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 ver um exemplo, consulte Exemplo de FeedbackConfigurationMap.

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 ou ENTROPY

rate

A taxa para a estratégia de amostragem Random.

Obrigatório: true se strategy-name for RANDOM_SAMPLING.

Digite: 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 se strategy-name for LEAST_CONFIDENCE, MARGIN ou ENTROPY.

Digite: number

Valores válidos:

  • 0.0 - 1.0 para a estratégia LEAST_CONFIDENCE ou MARGIN.

  • 0.0 - no limit para a estratégia ENTROPY.

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 console AWS IoT: 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" } } ] }'

Exemplo de FeedbackConfigurationMap

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 do Lambda definidas pelo usuário usam a função publish do cliente feedback no SDK de machine learning do AWS IoT Greengrass para invocar o conector. Para ver 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 parâmetro FeedbackConfigurationMap para o conector de feedback do ML.

Obrigatório: true

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 chave publish-ts com um valor de timestamp nos metadados.

Obrigatório: false

Tipo: dicionário

Exemplo: {"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 no tópico cloudwatch/metric/put.

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 e key à 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 valor 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" }
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 de análises do IoT para se inscrever nesse tópico e enviar as informações ao AWS IoT Analytics para análise adicional 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 atributo requer que você instale e configure o conector de métricas do CloudWatch.

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 de Machine Learning do AWS IoT Greengrass na página AWS IoT Greengrass de 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:

Esse conector é liberado de acordo com o Contrato de licença de software do Greengrass Core.

Consulte também