Personalizar seus componentes de machine learning - AWS IoT Greengrass

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á.

Personalizar seus componentes de machine learning

No AWS IoT Greengrass, você pode configurar exemplos de componentes de machine learning para personalizar a forma como você executa a inferência de machine learning em seus dispositivos com os componentes de inferência, modelo e runtime como blocos de construção. O AWS IoT Greengrass também oferece a flexibilidade de usar os componentes de amostra como modelos e criar seus próprios componentes personalizados conforme necessário. Você pode misturar e combinar essa abordagem modular para personalizar seus componentes de inferência de machine learning das seguintes maneiras:

Usando componentes de inferência de amostra
  • Modifique a configuração dos componentes de inferência ao implantá-los.

  • Use um modelo personalizado com o componente de inferência de amostra substituindo o componente de armazenamento de modelos de amostra por um componente de modelo personalizado. Seu modelo personalizado deve ser treinado usando o mesmo runtime do modelo de amostra.

Usando componentes de inferência personalizados
  • Use o código de inferência personalizado com os modelos de amostra e os tempos de execução adicionando componentes de modelo público e componentes de runtime como dependências de componentes de inferência personalizados.

  • Crie e adicione componentes de modelo personalizados ou componentes de runtime como dependências de componentes de inferência personalizados. Você deve usar componentes personalizados se quiser usar um código de inferência personalizado ou um runtime para o qual o AWS IoT Greengrass não fornece um componente de amostra.

Modificar a configuração de um componente de inferência pública

No console do AWS IoT Greengrass, a página do componente exibe a configuração padrão desse componente. Por exemplo, a configuração padrão do componente de classificação de imagens do TensorFlow Lite tem a seguinte aparência:

{ "accessControl": { "aws.greengrass.ipc.mqttproxy": { "aws.greengrass.TensorFlowLiteImageClassification:mqttproxy:1": { "policyDescription": "Allows access to publish via topic ml/tflite/image-classification.", "operations": [ "aws.greengrass#PublishToIoTCore" ], "resources": [ "ml/tflite/image-classification" ] } } }, "PublishResultsOnTopic": "ml/tflite/image-classification", "ImageName": "cat.jpeg", "InferenceInterval": 3600, "ModelResourceKey": { "model": "TensorFlowLite-Mobilenet" } }

Ao implantar um componente de inferência pública, você pode modificar a configuração padrão para personalizar sua implantação. Para obter informações sobre os parâmetros de configuração disponíveis para cada componente de inferência pública, consulte o tópico do componente em Componentes de machine learning fornecidos pela AWS.

Esta seção descreve como implantar um componente modificado pelo console do AWS IoT Greengrass. Para obter informações sobre a implantação de componentes usando a AWS CLI, consulte Criar implantações.

Para implantar um componente de inferência pública modificado (console)
  1. Faça login no console do AWS IoT Greengrass.

  2. No menu de navegação, escolha Componentes.

  3. Na página Componentes, na guia Componentes públicos, escolha o componente que deseja implantar.

  4. Na página do componente, escolha Implantar.

  5. Em Adicionar à implantação, escolha uma das seguintes opções:

    1. Para mesclar esse componente a uma implantação existente em seu dispositivo de destino, escolha Adicionar à implantação existente e selecione a implantação que você deseja revisar.

    2. Para criar uma nova implantação em seu dispositivo de destino, escolha Criar nova implantação. Se você tiver uma implantação existente em seu dispositivo, escolher essa etapa substituirá a implantação existente.

  6. Na página Especificar destino, faça o seguinte:

    1. Em Informações de implantação, insira ou modifique o nome amigável para sua implantação.

    2. Em Destinos de implantação, selecione um alvo para sua implantação e escolha Avançar. Você não pode alterar o destino de implantação se estiver revisando uma implantação existente.

  7. Na página Selecionar componentes, em Componentes públicos, verifique se o componente de inferência com sua configuração modificada está selecionado e escolha Avançar.

  8. Na página Configurar componentes, faça o seguinte:

    1. Selecione o componente de inferência e escolha Configurar componente.

    2. Em Adicionar atualização, insira os valores de configuração que você deseja atualizar. Por exemplo, insira a seguinte atualização de configuração na caixa Configuração a ser mesclada para alterar o intervalo de inferência para 15 segundos e instrua o componente a procurar a imagem chamada custom.jpg na pasta /custom-ml-inference/images/.

      { "InferenceInterval": "15", "ImageName": "custom.jpg", "ImageDirectory": "/custom-ml-inference/images/" }

      Para redefinir toda a configuração de um componente aos valores padrão, especifique uma única string vazia "" na caixa Redefinir caminhos.

    3. Escolha Confirmar e, em seguida, Avançar.

  9. Na página Definir configurações avançadas, mantenha as configurações padrão e escolha Avançar.

  10. Na página Revisar, escolha Implantar.

Usar um modelo personalizado com o componente de inferência de amostra

Se você quiser usar o componente de inferência de amostra com seus próprios modelos de machine learning para um rutinme para o qual o AWS IoT Greengrass fornece um componente de runtime de amostra, substitua os componentes do modelo público por componentes que usam esses modelos como artefatos. Em um alto nível, você conclui as etapas a seguir para usar um modelo personalizado com o componente de inferência de amostra:

  1. Crie um componente de modelo que use um modelo personalizado em um bucket do S3 como artefato. Seu modelo personalizado deve ser treinado usando o mesmo runtime do modelo que você deseja substituir.

  2. Modifique o parâmetro de configuração ModelResourceKey no componente de inferência para usar o modelo personalizado. Para obter informações sobre como atualizar a configuração do componente de inferência, consulte Modificar a configuração de um componente de inferência pública

Quando você implanta o componente de inferência, o AWS IoT Greengrass procura a versão mais recente de suas dependências de componentes. Ele substitui o componente do modelo público dependente se uma versão personalizada posterior do componente existir nas mesmas Conta da AWS e Região da AWS.

  1. Faça upload do seu modelo em um bucket do S3. Para obter informações sobre como carregar seus modelos para um bucket do S3, consulte Trabalhar com buckets do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

    nota

    Você deve armazenar seus artefatos em buckets do S3 que estejam nas mesmas Conta da AWS e Região da AWS que os componentes. Para permitir que o AWS IoT Greengrass acesse esses artefatos, o perfil de dispositivo do Greengrass deve permitir a ação s3:GetObject. Para mais informações sobre a função da aplicação, consulte Autorize os dispositivos principais a interagir com os serviços da AWS.

  2. No menu de navegação do console do AWS IoT Greengrass, selecione Componentes.

  3. Recupere a fórmula do componente público do repositório de modelos.

    1. Na página Componentes, na guia Componentes públicos, procure e escolha o componente do modelo público para o qual você deseja criar uma nova versão. Por exemplo, variant.DLR.ImageClassification.ModelStore.

    2. Na página do componente, escolha Exibir fórmula e copie a receita JSON exibida.

  4. Na página Componentes, na guia Meus componentes, escolha Criar componente.

  5. Na página Criar componente, em Informações do componente, selecione Inserir receita como JSON como fonte do componente.

  6. Na caixa Receita, cole a fórmula do componente que você copiou anteriormente.

  7. Na fórmula, substitua os seguintes valores:

    • ComponentVersion: incremente a versão secundária do componente.

      Ao criar um componente personalizado para substituir um componente de modelo público, você deve atualizar somente a versão secundária da versão existente do componente. Por exemplo, se a versão do componente público for 2.1.0, você poderá criar um componente personalizado com a versão 2.1.1.

    • Manifests.Artifacts.Uri: atualize cada valor de URI para o URI do Amazon S3 do modelo que você deseja usar.

    nota

    Não mude o nome do componente.

  8. Escolha Criar componente.

  1. Faça upload do seu modelo em um bucket do S3. Para obter informações sobre como carregar seus modelos para um bucket do S3, consulte Trabalhar com buckets do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

    nota

    Você deve armazenar seus artefatos em buckets do S3 que estejam nas mesmas Conta da AWS e Região da AWS que os componentes. Para permitir que o AWS IoT Greengrass acesse esses artefatos, o perfil de dispositivo do Greengrass deve permitir a ação s3:GetObject. Para mais informações sobre a função da aplicação, consulte Autorize os dispositivos principais a interagir com os serviços da AWS.

  2. Execute o comando a seguir para recuperar a fórmula do componente da variante pública. Esse comando grava a fórmula do componente no arquivo de saída que você fornece em seu comando. Converta a string recuperada codificada em base64 em JSON ou YAML, conforme necessário.

    Linux, macOS, or Unix
    aws greengrassv2 get-component \ --arn <arn> \ --recipe-output-format <recipe-format> \ --query recipe \ --output text | base64 --decode > <recipe-file>
    Windows Command Prompt (CMD)
    aws greengrassv2 get-component ^ --arn <arn> ^ --recipe-output-format <recipe-format> ^ --query recipe ^ --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
    PowerShell
    aws greengrassv2 get-component ` --arn <arn> ` --recipe-output-format <recipe-format> ` --query recipe ` --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
  3. Atualize o nome do arquivo de receita para <component-name>-<component-version>, onde a versão do componente é a versão de destino do novo componente. Por exemplo, variant.DLR.ImageClassification.ModelStore-2.1.1.yaml.

  4. Na fórmula, substitua os seguintes valores:

    • ComponentVersion: incremente a versão secundária do componente.

      Ao criar um componente personalizado para substituir um componente de modelo público, você deve atualizar somente a versão secundária da versão existente do componente. Por exemplo, se a versão do componente público for 2.1.0, você poderá criar um componente personalizado com a versão 2.1.1.

    • Manifests.Artifacts.Uri: atualize cada valor de URI para o URI do Amazon S3 do modelo que você deseja usar.

    nota

    Não mude o nome do componente.

  5. Execute o comando a seguir para criar um componente usando a fórmula que você recuperou e modificou.

    aws greengrassv2 create-component-version \ --inline-recipe fileb://path/to/component/recipe
    nota

    Essa etapa cria o componente no serviço do AWS IoT Greengrass na Nuvem AWS. É possível usar a CLI do Greengrass para desenvolver, testar e implantar o componente localmente antes de fazer upload para a nuvem. Para obter mais informações, consulte Desenvolver componentes do AWS IoT Greengrass.

Para obter mais informações sobre a criação de componentes, consulte Desenvolver componentes do AWS IoT Greengrass.

Criar componentes personalizados de machine learning

Você deve criar componentes personalizados se quiser usar um código de inferência personalizado ou um runtime para o qual o AWS IoT Greengrass não forneça um componente de amostra. Você pode usar seu código de inferência personalizado com os exemplos de modelos e tempos de execução de machine learning fornecidos pela AWS, ou pode desenvolver uma solução de inferência de machine learning totalmente personalizada com seus próprios modelos e runtime. Se seus modelos usam um runtime para o qual o AWS IoT Greengrass fornece um componente de runtime de amostra, você pode usar esse componente de runtime e precisa criar componentes personalizados somente para seu código de inferência e os modelos que deseja usar.

Recuperar a fórmula de um componente público

Você pode usar a fórmula de um componente público existente de machine learning como modelo para criar um componente personalizado. Para ver a fórmula do componente para a versão mais recente de um componente público, use o console ou a AWS CLI da seguinte maneira:

  • Utilizar o console

    1. Na página Componentes, na guia Componentes públicos, procure pelo componente público e escolha-o.

    2. Na página do componente, escolha Exibir fórmula.

  • Usar o AWS CLI

    Execute o comando a seguir para recuperar a fórmula do componente da variante pública. Esse comando grava a fórmula do componente no arquivo de fórmula JSON ou YAML que você fornece em seu comando.

    Linux, macOS, or Unix
    aws greengrassv2 get-component \ --arn <arn> \ --recipe-output-format <recipe-format> \ --query recipe \ --output text | base64 --decode > <recipe-file>
    Windows Command Prompt (CMD)
    aws greengrassv2 get-component ^ --arn <arn> ^ --recipe-output-format <recipe-format> ^ --query recipe ^ --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
    PowerShell
    aws greengrassv2 get-component ` --arn <arn> ` --recipe-output-format <recipe-format> ` --query recipe ` --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>

    Substitua os valores dos argumentos no comando da seguinte maneira.

    • <arn>. O nome de recurso da Amazon (ARN) do componente público.

    • <recipe-format>. O formato no qual você deseja criar o arquivo de fórmula. Os valores compatíveis são JSON e YAML.

    • <recipe-file>. O nome da fórmula no formato <component-name>-<component-version>.

Recuperar amostras de artefatos de componentes

Você pode usar os artefatos usados pelos componentes públicos de machine learning como modelos para criar seus artefatos de componentes personalizados, como código de inferência ou scripts de instalação em runtime.

Para visualizar os artefatos de amostra que estão incluídos nos componentes públicos de machine learning, implante o componente de inferência pública e, em seguida, visualize os artefatos em seu dispositivo na pasta /greengrass/v2/packages/artifacts-unarchived/component-name/component-version/.

Carregar artefatos de componente em um bucket do S3

Antes de criar um componente personalizado, você deve carregar os artefatos do componente em um bucket do S3 e usar os URIs do S3 na fórmula do componente. Por exemplo, para usar um código de inferência personalizado em seu componente de inferência, faça o upload do código em um bucket do S3. Em seguida, você pode usar o URI do Amazon S3 do seu código de inferência como um artefato em seu componente.

Para obter informações sobre como carregar conteúdo para um bucket do S3, consulte Trabalhar com buckets do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

nota

Você deve armazenar seus artefatos em buckets do S3 que estejam nas mesmas Conta da AWS e Região da AWS que os componentes. Para permitir que o AWS IoT Greengrass acesse esses artefatos, o perfil de dispositivo do Greengrass deve permitir a ação s3:GetObject. Para mais informações sobre a função da aplicação, consulte Autorize os dispositivos principais a interagir com os serviços da AWS.

Criar componentes personalizados

Você pode usar os artefatos e as fórmulas que você recuperou para criar seus componentes personalizados de machine learning. Para obter um exemplo, consulte Criar um componente de inferência personalizado.

Para obter informações detalhadas sobre a criação e implantação de componentes em dispositivos Greengrass, consulte Desenvolver componentes do AWS IoT Greengrass e Implemente AWS IoT Greengrass componentes em dispositivos.

Criar um componente de inferência personalizado

Esta seção mostra como criar um componente de inferência personalizado usando o componente de classificação de imagem DLR como modelo.

Fazer upload do código de inferência para um bucket do Amazon S3

Crie o código de inferência e, em seguida, faça upload para um bucket do S3. Para obter informações sobre como carregar conteúdo para um bucket do S3, consulte Trabalhar com buckets do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

nota

Você deve armazenar seus artefatos em buckets do S3 que estejam nas mesmas Conta da AWS e Região da AWS que os componentes. Para permitir que o AWS IoT Greengrass acesse esses artefatos, o perfil de dispositivo do Greengrass deve permitir a ação s3:GetObject. Para mais informações sobre a função da aplicação, consulte Autorize os dispositivos principais a interagir com os serviços da AWS.

Crie uma fórmula para o componente de inferência

  1. Execute o comando a seguir para recuperar a fórmula do componente de classificação de imagem DLR. Esse comando grava a fórmula do componente no arquivo de fórmula JSON ou YAML que você fornece em seu comando.

    Linux, macOS, or Unix
    aws greengrassv2 get-component \ --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version \ --recipe-output-format JSON | YAML \ --query recipe \ --output text | base64 --decode > <recipe-file>
    Windows Command Prompt (CMD)
    aws greengrassv2 get-component ^ --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version ^ --recipe-output-format JSON | YAML ^ --query recipe ^ --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
    PowerShell
    aws greengrassv2 get-component ` --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version ` --recipe-output-format JSON | YAML ` --query recipe ` --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>

    Substitua <recipe-file> pelo nome da fórmula no formato <component-name>-<component-version>.

  2. No objeto ComponentDependencies em sua fórmula, faça um ou mais dos seguintes, dependendo do modelo e dos componentes de runtime que você deseja usar:

    • Mantenha a dependência do componente DLR se quiser usar modelos compilados pelo DLR. Você também pode substituí-lo por uma dependência de um componente de runtime personalizado, conforme mostrado no exemplo a seguir.

      Componente de runtime

      JSON
      { "<runtime-component>": { "VersionRequirement": "<version>", "DependencyType": "HARD" } }
      YAML
      <runtime-component>: VersionRequirement: "<version>" DependencyType: HARD
    • Mantenha a dependência do armazenamento do modelo de classificação de imagem DLR para usar os modelos pré-treinados do ResNet-50 que a AWS fornece, ou modifique-os para usar um componente de modelo personalizado. Quando você inclui uma dependência para um componente de modelo público, se uma versão personalizada posterior do componente existir nas mesmas Conta da AWS e Região da AWS, o componente de inferência usará esse componente personalizado. Especifique a dependência do componente do modelo, conforme mostrado nos exemplos a seguir.

      Componente de modelo público

      JSON
      { "variant.DLR.ImageClassification.ModelStore": { "VersionRequirement": "<version>", "DependencyType": "HARD" } }
      YAML
      variant.DLR.ImageClassification.ModelStore: VersionRequirement: "<version>" DependencyType: HARD

      Componente de modelo personalizado

      JSON
      { "<custom-model-component>": { "VersionRequirement": "<version>", "DependencyType": "HARD" } }
      YAML
      <custom-model-component>: VersionRequirement: "<version>" DependencyType: HARD
  3. No objeto ComponentConfiguration, adicione a configuração padrão para esse componente. Posteriormente, você poderá modificar essa configuração ao implantar o componente. O trecho a seguir mostra a configuração do componente de classificação de imagem DLR.

    Por exemplo, se você usar um componente de modelo personalizado como uma dependência para seu componente de inferência personalizado, modifique ModelResourceKey para fornecer os nomes dos modelos que você está usando.

    JSON
    { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "aws.greengrass.ImageClassification:mqttproxy:1": { "policyDescription": "Allows access to publish via topic ml/dlr/image-classification.", "operations": [ "aws.greengrass#PublishToIoTCore" ], "resources": [ "ml/dlr/image-classification" ] } } }, "PublishResultsOnTopic": "ml/dlr/image-classification", "ImageName": "cat.jpeg", "InferenceInterval": 3600, "ModelResourceKey": { "armv7l": "DLR-resnet50-armv7l-cpu-ImageClassification", "x86_64": "DLR-resnet50-x86_64-cpu-ImageClassification", "aarch64": "DLR-resnet50-aarch64-cpu-ImageClassification" } }
    YAML
    accessControl: aws.greengrass.ipc.mqttproxy: 'aws.greengrass.ImageClassification:mqttproxy:1': policyDescription: 'Allows access to publish via topic ml/dlr/image-classification.' operations: - 'aws.greengrass#PublishToIoTCore' resources: - ml/dlr/image-classification PublishResultsOnTopic: ml/dlr/image-classification ImageName: cat.jpeg InferenceInterval: 3600 ModelResourceKey: armv7l: "DLR-resnet50-armv7l-cpu-ImageClassification" x86_64: "DLR-resnet50-x86_64-cpu-ImageClassification" aarch64: "DLR-resnet50-aarch64-cpu-ImageClassification"
  4. No objeto Manifests, forneça informações sobre os artefatos e a configuração desse componente que são usados quando o componente é implantado em plataformas diferentes e qualquer outra informação necessária para executar o componente com êxito. O trecho a seguir mostra a configuração do objeto Manifests para a plataforma Linux no componente de classificação de imagem DLR.

    JSON
    { "Manifests": [ { "Platform": { "os": "linux", "architecture": "arm" }, "Name": "32-bit armv7l - Linux (raspberry pi)", "Artifacts": [ { "URI": "s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "Setenv": { "DLR_IC_MODEL_DIR": "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}", "DEFAULT_DLR_IC_IMAGE_DIR": "{artifacts:decompressedPath}/image_classification/sample_images/" }, "Run": { "RequiresPrivilege": true, "script": ". {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate\npython3 {artifacts:decompressedPath}/image_classification/inference.py" } } } ] }
    YAML
    Manifests: - Platform: os: linux architecture: arm Name: 32-bit armv7l - Linux (raspberry pi) Artifacts: - URI: s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip Unarchive: ZIP Lifecycle: SetEnv: DLR_IC_MODEL_DIR: "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}" DEFAULT_DLR_IC_IMAGE_DIR: "{artifacts:decompressedPath}/image_classification/sample_images/" Run: RequiresPrivilege: true script: |- . {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate python3 {artifacts:decompressedPath}/image_classification/inference.py

Para informações detalhadas sobre a criação de fórmulas de componentes, consulte A referência da fórmula do componente do AWS IoT Greengrass.

Criar o componente de inferência

Use o console do AWS IoT Greengrass ou o AWS CLI para criar um componente usando a fórmula que você acabou de definir. Depois de criar o componente, implante-o para realizar inferência no dispositivo. Para obter um exemplo de como implantar um componente de inferência, consulte Tutorial: realize uma inferência de classificação de imagens de amostra usando o TensorFlow Lite.

  1. Faça login no console do AWS IoT Greengrass.

  2. No menu de navegação, escolha Componentes.

  3. Na página Componentes, na guia Meus componentes, escolha Criar componente.

  4. Na página Criar componente, em Informações do componente, selecione Inserir fórmula como JSON ou Inserir fórmula como YAML como fonte do componente.

  5. Na caixa Receita, insira a fórmula personalizada que você criou.

  6. Clique em Criar componente.

Execute o seguinte comando para criar um novo componente personalizado usando a fórmula que você criou.

aws greengrassv2 create-component-version \ --inline-recipe fileb://path/to/recipe/file
nota

Essa etapa cria o componente no serviço do AWS IoT Greengrass na Nuvem AWS. É possível usar a CLI do Greengrass para desenvolver, testar e implantar o componente localmente antes de fazer upload para a nuvem. Para obter mais informações, consulte Desenvolver componentes do AWS IoT Greengrass.