Como configurar a inferência de machine learning usando o AWS Management Console - 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á.

Como configurar a inferência de machine learning usando o AWS Management Console

Para seguir as etapas deste tutorial, você precisa do AWS IoT Greengrass Core v1.10 ou posterior.

Você pode realizar inferência de machine learning (ML) localmente em um dispositivo de núcleo do Greengrass usando dados gerados localmente. Para obter mais informações, inclusive sobre os requisitos e restrições, consulte Executar a inferência de machine learning.

Este tutorial descreve como usar o AWS Management Console para configurar um grupo do Greengrass para executar um aplicativo de inferência do Lambda que reconhece imagens de uma câmera localmente sem enviar dados para a nuvem. O aplicativo de inferência acessa o módulo da câmera em um Raspberry Pi e executa a inferência usando o modelo de código aberto SqueezeNet.

O tutorial contém as seguintes etapas de nível elevado:

Pré-requisitos

Para concluir este tutorial, você precisa de:

nota

Este tutorial usa um Raspberry Pi, mas o AWS IoT Greengrass oferece suporte a outras plataformas, como Intel Atom e NVIDIA Jetson TX2. No exemplo para Jetson TX2, você pode usar imagens estáticas em vez de imagens transmitidas por uma câmera. Se estiver usando o exemplo do Jetson TX2, talvez seja necessário instalar o Python 3.6 em vez do Python 3.7. Para obter informações sobre como configurar o dispositivo para que você possa instalar o software do AWS IoT Greengrass Core, consulte Configurar outros dispositivos.

Para plataformas de terceiros não compatíveis com o AWS IoT Greengrass, você deve executar sua função do Lambda no modo sem contêiner. Para executar no modo sem contêiner, você deve executar sua função do Lambda como root. Para obter mais informações, consulte Considerações ao escolher a conteinerização de função do Lambda e Definir a identidade de acesso padrão para as funções do Lambda em um grupo.

Etapa 1: Configurar o Raspberry Pi

Nesta etapa, instale as atualizações no sistema operacional Raspbian, instale o software do módulo da câmera e as dependências do Python e ative a interface da câmera.

Execute os seguintes comandos no seu terminal do Raspberry Pi.

  1. Instale as atualizações no Raspbian.

    sudo apt-get update sudo apt-get dist-upgrade
  2. Instale a interface do picamera para o módulo da câmera e outras bibliotecas do Python que são necessárias para este tutorial.

    sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera

    Valide a instalação:

    • Verifique se a instalação do Python 3.7 inclui o pip.

      python3 -m pip

      Se o pip não estiver instalado, faça download dele no site do pip e execute o seguinte comando.

      python3 get-pip.py
    • Verifique se a versão do Python é 3.7 ou superior.

      python3 --version

      Se a saída listar uma versão anterior, execute o seguinte comando.

      sudo apt-get install -y python3.7-dev
    • Verifique se o Setuptools e Picamera foram instalados com êxito.

      sudo -u ggc_user bash -c 'python3 -c "import setuptools"' sudo -u ggc_user bash -c 'python3 -c "import picamera"'

      Se a saída não contiver erros, a validação será bem-sucedida.

    nota

    Se o Python executável instalado no dispositivo for o python3.7, use python3.7 em vez de python3 para os comandos neste tutorial. Verifique se a instalação do pip mapeia para a versão correta do python3 ou python3.7 para evitar erros de dependência.

  3. Reinicie o Raspberry Pi.

    sudo reboot
  4. Abra a ferramenta de configuração do Raspberry Pi.

    sudo raspi-config
  5. Use as setas do teclado para abrir Interfacing Options e habilitar a interface da câmera. Se solicitado, permita que o dispositivo seja reinicializado.

  6. Use o seguinte comando para testar a configuração da câmera.

    raspistill -v -o test.jpg

    Isso abre uma janela de visualização no Raspberry Pi, salva uma imagem chamada test.jpg no seu diretório atual e exibe informações sobre a câmera no terminal do Raspberry Pi.

Etapa 2: Instalar a estrutura de trabalho do MXNet

Nesta etapa, instale as bibliotecas MXNet no seu Raspberry Pi.

  1. Inicie sessão no seu Raspberry Pi remotamente.

    ssh pi@your-device-ip-address
  2. Abra a documentação do MXNet, abra Installing MXNet e siga as instruções para instalar o MXNet no dispositivo.

    nota

    Recomendamos instalar a versão 1.5.0 e criar o MXNet a partir da fonte para este tutorial para evitar conflitos de dispositivos.

  3. Depois de instalar o MXNet, valide a seguinte configuração:

    • Verifique se a conta do sistema ggc_user pode usar a estrutura de trabalho do MXNet.

      sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
    • Verifique se o NumPy está instalado.

      sudo -u ggc_user bash -c 'python3 -c "import numpy"'

Etapa 3: Criar um pacote de modelo do MXNet

Nesta etapa, crie um pacote de modelo que contenha um modelo do MXNet pré-treinado de exemplo para carregar o Amazon Simple Storage Service (Amazon S3). O AWS IoT Greengrass pode usar um pacote de modelo do Amazon S3, desde que você use o formato tar.gz ou zip.

  1. No seu computador, faça download do exemplo do MXNet para Raspberry Pi em Exemplos de machine learning.

  2. Não descompacte o arquivo mxnet-py3-armv7l.tar.gz obtido por download.

  3. Navegue até o diretório squeezenet.

    cd path-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenet

    O arquivo squeezenet.zip neste diretório é o pacote de modelo. Ele contém artefatos de modelo de código aberto SqueezeNet para um modelo de classificação de imagem. Posteriormente, esse pacote de modelo é carregado no Amazon S3.

Etapa 4: Crie e publique uma função do Lambda

Nesta etapa, crie um pacote de implantação da função do Lambda e uma função do Lambda. Depois, publique uma versão da função e crie um alias.

Primeiro, crie o pacote de implantação da função do Lambda.

  1. No computador, navegue até o diretório examples no pacote de exemplo que você descompactou em Etapa 3: Criar um pacote de modelo do MXNet.

    cd path-to-downloaded-sample/mxnet-py3-armv7l/examples

    O diretório examples contém código de função e dependências.

    • O greengrassObjectClassification.py é o código de inferência usado neste tutorial. Você pode usar esse código como modelo para criar sua própria função de inferência.

    • greengrasssdk é a versão 1.5.0 do AWS IoT Greengrass Core SDK para Python.

      nota

      Se uma nova versão estiver disponível, você poderá fazer download dela e atualizar a versão do SDK no seu pacote de implantação. Para obter mais informações, consulte SDK do AWS IoT Greengrass Core para Python no GitHub.

  2. Compacte o conteúdo do diretório examples em um arquivo chamado greengrassObjectClassification.zip. Esse é o pacote de implantação.

    zip -r greengrassObjectClassification.zip .
    nota

    Verifique se os arquivos .py e as dependências estão na raiz do diretório.

     

    Depois, crie a função do Lambda .

  3. No console do AWS IoT, selecione Funções e Criar função.

  4. Selecione Criar do zero e use os valores a seguir para criar a função:

    • Em Function name (Nome da função), insira greengrassObjectClassification.

    • Em Runtime (Tempo de execução), selecione Python 3.7.

    Em Permissões, mantenha a configuração padrão. Isso cria uma função de execução que concede permissões básicas do Lambda. Essa função não é usada pelo AWS IoT Greengrass.

  5. Selecione Criar função.

     

    Agora, carregue o seu pacote de implantação da função do Lambda e registre o manipulador.

  6. Selecione sua função do Lambda e carregue seu pacote de implantação da função do Lambda.

    1. Na guia Código, em Fonte do código, selecione Fazer upload a partir de. No menu suspenso, selecione o arquivo .zip.

      O menu suspenso Fazer upload a partir de com o arquivo .zip destacado.
    2. Selecione Upload e, em seguida, selecione seu pacote de implantação greengrassObjectClassification.zip. Selecione Salvar.

    3. Na guia Código da função, em Configurações de runtime, selecione Editar e insira os valores a seguir.

      • Em Runtime (Tempo de execução), selecione Python 3.7.

      • Em Handler (Manipulador), insira greengrassObjectClassification.function_handler.

      Selecione Salvar.

    Em seguida, publique a primeira versão da sua função do Lambda. Em seguida, crie um alias para a versão.

    nota

    Os grupos do Greengrass podem fazer referência a uma função do Lambda por alias (recomendado) ou por versão. Usar um alias facilita o gerenciamento de atualizações de código porque você não precisa alterar a tabela de assinaturas nem a definição do grupo ao atualizar a função do código. Em vez disso, você pode simplesmente apontar o alias para a nova versão da função.

  7. No menu Actions, selecione Publish new version.

    A opção Publish new version (Publicar nova versão) no menu Actions (Ações).
  8. Em Version description (Descrição da versão), insira First version e, em seguida, selecione Publish (Publicar).

  9. Na página de configuração greengrassObjectClassification: 1, no menu Actions, selecione Create alias.

    A opção Create alias (Criar alias) no menu Actions (Ações).
  10. Na página Create a new alias, use os seguintes valores:

    • Em Name (Nome), insira mlTest.

    • Em Version (Versão), insira 1.

    nota

    O AWS IoT Greengrass não oferece suporte a alias do Lambda para as versões $LATEST.

  11. Selecione Salvar.

     

    Agora, adicione a função do Lambda ao seu grupo do Greengrass.

Etapa 5: adicionar a função do Lambda ao grupo do Greengrass

Nesta etapa, adicione a função do Lambda ao grupo e configura o ciclo de vida e as variáveis de ambiente.

Primeiro, adicione a função do Lambda ao seu grupo do Greengrass.

  1. No painel de navegação do console de AWS IoT, em Gerenciar, expanda Dispositivos Greengrass e, em seguida selecione Grupos (V1).

  2. Na página de configuração do grupo, selecione a guia Funções do Lambda.

  3. Na seção Minhas funções do Lambda, selecione Adicionar.

  4. Na página Função do Lambda, selecione greengrassObjectClassification.

  5. Para a Versão da função do Lambda, selecione Alias:mlTest.

     

    Em seguida, configure o ciclo de vida e as variáveis de ambiente da função do Lambda.

  6. Na seção Configuração da função do Lambda, faça as atualizações a seguir.

    nota

    Recomendamos que você execute sua função do Lambda sem conteinerização, a menos que seu caso de negócios faça essa exigência. Isso ajuda a habilitar o acesso à GPU e à câmera do seu dispositivo sem configurar os recursos do dispositivo. Se você executar sem conteinerização, também deverá conceder acesso root às suas funções do Lambda do AWS IoT Greengrass.

    1. Para executar sem conteinerização:

    2. Em vez disso, para executar no modo conteinerizado:

      nota

      Não recomendamos a execução no modo conteinerizado, a menos que seu caso de negócios faça essa exigência.

      • Para Usuário e grupo do sistema, selecione Usar padrão de grupo.

      • Para Conteinerização da função do Lambda, selecione Usar padrão de grupo.

      • Em Memory limit (Limite de memória), insira 96 MB.

      • Em Timeout (Tempo limite), insira 10 seconds.

      • Para Fixado, selecione Verdadeiro.

        Para obter mais informações, consulte Configuração do ciclo de vida das funções do Lambda do Greengrass.

  7. Em Environment variables (Variáveis de ambiente), crie um par de chave/valor. Um par de chave-valor é exigido por funções que interagem com modelos do MXNet em um Raspberry Pi.

    Na chave, use MXNET_ENGINE_TYPE. No valor, use NaiveEngine.

    nota

    Se preferir, nas suas próprias funções do Lambda definidas pelo usuário, é possível definir a variável de ambiente no código da função.

  8. Mantenha os valores padrão para todas as outras propriedades e selecione Adicionar função do Lambda.

Etapa 6: Adicionar recursos ao grupo do Greengrass

Nesta etapa, crie recursos para o módulo da câmera e o modelo de inferência de ML e afilie os recursos com a função do Lambda. Isso possibilita que a função do Lambda acesse os recursos no dispositivo básico.

nota

Se você executar no modo não conteinerizado, o AWS IoT Greengrass poderá acessar a GPU e a câmera do seu dispositivo sem configurar esses recursos.

Primeiro, crie dois recursos de dispositivos locais para a câmera: um para memória compartilhada e outro para a interface do dispositivo. Para obter mais informações sobre acesso a recursos locais, consulte Acesso aos recursos locais com funções e conectores do Lambda.

  1. Na página de configuração do grupo, selecione a guia Recursos.

  2. Na seção Recursos locais, selecione Adicionar recurso local.

  3. Na página Adicionar recurso local, use os seguintes valores:

    • Em Resource Name (Nome do recurso), insira videoCoreSharedMemory.

    • Em Resource type, selecione Device.

    • Em Caminho do dispositivo local, insira /dev/vcsm.

      O caminho do dispositivo é o caminho absoluto local do recurso do dispositivo. Este caminho só pode se referir a um dispositivo de caractere ou dispositivo de blocos em /dev.

    • Em ‭‬Permissões do proprietário do grupo do sistema e ‬‬ de acesso a ‭arquivos‭‬, selecione ‭Adicionar automaticamente permissões de sistema de arquivos do grupo do sistema que é proprietário do recurso‭.‬‬‬‬‬‬‬‬

      A opção Proprietário do grupo do sistema e permissões de acesso ao arquivo permite conceder permissões adicionais de acesso a arquivos para o processo do Lambda. Para obter mais informações, consulte Permissão de acesso a arquivo do proprietário do grupo.

  4. Em seguida, você adiciona um recurso de dispositivo local para a interface da câmera.

  5. Selecione Adicionar recurso local.

  6. Na página Adicionar recurso local, use os seguintes valores:

    • Em Resource Name (Nome do recurso), insira videoCoreInterface.

    • Em Resource type, selecione Device.

    • Em Caminho do dispositivo local, insira /dev/vchiq.

    • Em ‭‬Permissões do proprietário do grupo do sistema e ‬‬ de acesso a ‭arquivos‭‬, selecione ‭Adicionar automaticamente permissões de sistema de arquivos do grupo do sistema que é proprietário do recurso‭.‬‬‬‬‬‬‬‬

  7. Na parte inferior da página, selecione Adicionar recurso.

 

Agora, adicione o modelo de inferência como um recurso de machine learning. Esta etapa inclui o upload do pacote de modelo squeezenet.zip para o Amazon S3.

  1. Na guia Recursos do seu grupo, na seção Machine Learning, selecione Adicionar recurso de machine learning.

  2. Na página Adicionar recurso de machine learning, em Nome do recurso, insira squeezenet_model.

  3. Em Fonte do modelo, selecione Usar um modelo armazenado no S3, como um modelo otimizado por meio do compilador de aprendizado profundo.

  4. Para S3 URI, insira um caminho em que o bucket do S3 seja salvo.

  5. Selecione Browse S3 (Navegar no S3). Isso abre uma nova guia no console do Amazon S3.

  6. Na guia do console do Amazon S3, faça upload do arquivo squeezenet.zip em um bucket do S3. Para obter informações, consulte Como carregar arquivos e pastas em um bucket do S3? no Guia do usuário do Amazon Simple Storage Service.

    nota

    Para que o bucket do S3 seja acessível, o nome do bucket deve conter a string greengrass e o bucket deve estar na mesma região em que você usa o AWS IoT Greengrass. Selecione um nome exclusivo (como greengrass-bucket-user-id-epoch-time). Não use ponto (.) no nome do bucket.

  7. Na guia do console do AWS IoT Greengrass, localize e selecione o bucket do S3. Localize o arquivo squeezenet.zip carregado e, em seguida selecione Select (Selecionar). Talvez seja necessário escolher Refresh (Atualizar) para atualizar a lista de buckets e arquivos disponíveis.

  8. Para Destination path (Caminho de destino), insira /greengrass-machine-learning/mxnet/squeezenet.

    Este é o destino do modelo local no namespace de runtime do Lambda. Quando você implanta o grupo, o AWS IoT Greengrass recupera o pacote do modelo de origem e, em seguida, extrai o conteúdo para o diretório especificado. O exemplo da função do Lambda para este tutorial já está configurado para usar este caminho (na variável model_path).

  9. Em Proprietário do grupo do sistema e permissões de acesso ao arquivo, selecione Sem grupo do sistema.

  10. Selecione Adicionar recurso.

Usando modelos treinados pelo SageMaker

Este tutorial usa um modelo armazenado no Amazon S3, mas você também pode usar facilmente os modelos do SageMaker. O console do AWS IoT Greengrass tem integração incorporada do SageMaker, para que você não precise fazer upload manual desses modelos no Amazon S3. Para requisitos e limitações de uso dos modelos do SageMaker, consulte Fontes de modelo compatíveis.

Para usar um modelo do SageMaker:

  • Para Origem do modelo, selecione Usar um modelo treinado no SageMakerAWS e, em seguida, selecione o nome do trabalho de treinamento do modelo.

  • Em Caminho de destino, insira o caminho para o diretório em que sua função do Lambda procura o modelo.

Etapa 7: Adicionar uma assinatura ao grupo do Greengrass

Nesta etapa, adicione uma assinatura ao grupo. Esta assinatura permite que a função do Lambda envie os resultados da previsão para a AWS IoT publicando em um tópico do MQTT.

  1. Na página de configuração do grupo, selecione a guia Assinaturas e, em seguida, Adicionar assinatura.

  2. Na página de Detalhes da assinatura, configure a origem e o destino, da seguinte forma:

    1. Na seção Tipo de origem, selecione Funções do Lambda e, em seguida, greengrassObjectClassification.

    2. Em Tipo de destino, selecione Serviços e, em seguida, IoT Cloud.

  3. Em Filtro de tópicos, insira hello/world e, em seguida, selecione Criar assinatura.

Etapa 8: Implantar o grupo do Greengrass

Nesta etapa, implante a versão atual da definição do grupo ao dispositivo de núcleo do Greengrass. A definição contém a função do Lambda, recursos e configurações de inscrição que você adicionou.

  1. Verifique se o núcleo AWS IoT Greengrass está em execução. Execute os seguintes comandos no seu terminal do Raspberry Pi, conforme necessário.

    1. Para verificar se o daemon está em execução:

      ps aux | grep -E 'greengrass.*daemon'

      Se a saída contém uma entrada root para /greengrass/ggc/packages/1.11.6/bin/daemon, o daemon está em execução.

      nota

      A versão no caminho depende da versão do software do AWS IoT Greengrass Core que foi instalada no seu dispositivo de núcleo.

    2. Para iniciar o daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Na página de configuração do grupo, selecione Implantar.

    A página do grupo com Deployments (Implantações) e Deploy (Implantar) em destaque.
  3. Na guia Funções do Lambda, na seção Funções do sistema Lambda, selecione Detector de IP e, em seguida selecione Editar.

  4. Na caixa de diálogo Editar configurações do detector de IP, selecione Detectar e substituir automaticamente os endpoints do corretor MQTT.

  5. Selecione Salvar.

    Isso permite que os dispositivos adquiram automaticamente as informações de conectividade para o núcleo, como endereço IP, DNS e o número da porta. A detecção automática é recomendada, mas o AWS IoT Greengrass também oferece suporte a endpoints especificados manualmente. Você só é solicitado pelo método de descoberta na primeira vez em que o grupo for implantado.

    nota

    Se solicitado, conceda permissão para criar o perfil de serviço do Greengrass e associá-lo à sua Conta da AWS na Região da AWS atual. Essa função permite que AWS IoT Greengrass acessem seus recursos nos serviços do AWS.

    A página Deployments mostra a data e hora, ID de versão e status da implantação. Quando concluída, o status exibido para a implantação deve ser Concluída.

    Para obter mais informações sobre implantações, consulte Implantar grupos do AWS IoT Greengrass em um núcleo do AWS IoT Greengrass. Para obter ajuda sobre a solução de problemas, consulte Solução de problemas de AWS IoT Greengrass.

Etapa 9: Testar o aplicativo de inferência

Agora você pode verificar se a implementação foi configurada corretamente. Para testar, inscreva-se no tópico hello/world e visualize os resultados de previsões publicados pela função do Lambda.

nota

Se um monitor estiver conectado ao Raspberry Pi, o feed da câmera ao vivo será exibido em uma janela de visualização.

  1. No console do AWS IoT, em Teste, selecione Cliente de teste MQTT.

  2. Para Subscriptions, use os seguintes valores:

    • No tópico de assinatura, use hello/world.

    • Em Configuração adicional, para Exibição da carga útil do MQTT, selecione Exibir cargas úteis como strings.

  3. Selecione Subscribe.

    Se o teste for bem-sucedido, as mensagens da função do função do Lambda serão exibidas na parte inferior da página. Cada mensagem contém os cinco principais resultados de previsão da imagem, usando o formato: probabilidade, ID da classe prevista e nome da classe correspondente.

    A página Subscriptions (Inscrições) mostrando resultados de teste com dados de mensagem.

Solução de problemas de inferência de ML do AWS IoT Greengrass

Se o teste não for bem-sucedido, você poderá tentar as etapas de solução de problemas a seguir. Execute os comandos no seu terminal Raspberry Pi.

Verificar logs de erros

  1. Alterne para o usuário raiz e navegue até o diretório log. O acesso aos logs do AWS IoT Greengrass requer permissões raiz.

    sudo su cd /greengrass/ggc/var/log
  2. No diretório system, verifique runtime.log ou python_runtime.log.

    No diretório user/region/account-id, verifique greengrassObjectClassification.log.

    Para obter mais informações, consulte Solução de problemas com logs.

Erro "Unpacking" em runtime.log

Se runtime.log contiver um erro semelhante ao seguinte, verifique se o pacote de modelos de origem tar.gz tem um diretório pai.

Greengrass deployment error: unable to download the artifact model-arn: Error while processing. Error while unpacking the file from /tmp/greengrass/artifacts/model-arn/path to /greengrass/ggc/deployment/path/model-arn, error: open /greengrass/ggc/deployment/path/model-arn/squeezenet/squeezenet_v1.1-0000.params: no such file or directory

Se seu pacote não tiver um diretório pai que contenha os arquivos de modelo, use o comando a seguir para tentar empacotar o modelo novamente:

tar -zcvf model.tar.gz ./model

Por exemplo:

─$ tar -zcvf test.tar.gz ./test ./test ./test/some.file ./test/some.file2 ./test/some.file3
nota

Não inclui caracteres /* finais neste comando.

 

Verifique se a função do Lambda é implantada com sucesso

  1. Liste o conteúdo do Lambda implementado no diretório /lambda. Substitua os valores de espaço reservado antes de executar o comando.

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. Verifique se o diretório contém o mesmo conteúdo do pacote de implantação greengrassObjectClassification.zip que você carregou no Etapa 4: Crie e publique uma função do Lambda.

    Verifique se os arquivos .py e as dependências estão na raiz do diretório.

 

Verifique se o modelo de inferência é implantado com sucesso

  1. Encontre o número de identificação de processo (PID) do runtime do Lambda:

    ps aux | grep 'lambda-function-name*'

    Na saída, o PID aparece na segunda coluna da linha para o processo de runtime do Lambda.

  2. Digite o namespace de runtime do Lambda. Lembre-se de substituir o valor do espaço reservado pid antes de executar o comando.

    nota

    Este diretório e seu conteúdo estão no namespace de runtime do Lambda para que não sejam visíveis em um namespace comum do Linux.

    sudo nsenter -t pid -m /bin/bash
  3. Liste o conteúdo do diretório local que você especificou para o recurso de ML.

    cd /greengrass-machine-learning/mxnet/squeezenet/ ls -ls

    Você deve ver os arquivos a seguir:

    32 -rw-r--r-- 1 ggc_user ggc_group   31675 Nov 18 15:19 synset.txt 32 -rw-r--r-- 1 ggc_user ggc_group   28707 Nov 18 15:19 squeezenet_v1.1-symbol.json 4832 -rw-r--r-- 1 ggc_user ggc_group 4945062 Nov 18 15:19 squeezenet_v1.1-0000.params

Próximas etapas

Em seguida, explore outros aplicativos de inferência. O AWS IoT Greengrass fornece outras funções do Lambda que podem ser usadas para testar a inferência local. Você pode encontrar o pacote de exemplos na pasta de bibliotecas pré-compiladas que você obteve por download Etapa 2: Instalar a estrutura de trabalho do MXNet.

Como configurar um Intel Atom

Para executar este tutorial em um dispositivo Intel Atom, você deve fornecer imagens de origem, configurar a função do Lambda e adicionar outro recurso de dispositivo local. Para usar a GPU para inferência, verifique se o software a seguir está instalado no dispositivo:

  • OpenCL versão 1.0 ou posterior

  • Python 3.7 e pip

    nota

    Se o dispositivo for pré-construído com o Python 3.6, você poderá criar um symlink para o Python 3.7. Para obter mais informações, consulte Passo 2.

  • NumPy

  • OpenCV sobre rodas

  1. Faça download de imagens PNG ou JPG estáticas para a função do Lambda para usá-las na classificação de imagens. O exemplo funciona melhor com arquivos de imagem pequenos.

    Salve os arquivos de imagem no diretório que contém o arquivo greengrassObjectClassification.py (ou em um subdiretório desse diretório). Isso está no pacote de implantação da função do Lambda do qual você fez upload em Etapa 4: Crie e publique uma função do Lambda.

    nota

    Se estiver usando o AWS DeepLens, poderá usar a câmera integrada ou montar sua própria câmera para realizar inferência em imagens capturadas em vez de imagens estáticas. No entanto, recomendamos que você comece com imagens estáticas primeiro.

    Se utilizar uma câmara, verifique se o pacote APT awscam está instalado e atualizado. Para mais informações, consulte Atualizar seu dispositivo AWS DeepLens no Guia do desenvolvedor AWS DeepLens.

  2. Edite a configuração da função do Lambda. Siga o procedimento em Etapa 5: adicionar a função do Lambda ao grupo do Greengrass.

    nota

    Recomendamos que você execute sua função do Lambda sem conteinerização, a menos que seu caso de negócios faça essa exigência. Isso ajuda a habilitar o acesso à GPU e à câmera do seu dispositivo sem configurar os recursos do dispositivo. Se você executar sem conteinerização, também deverá conceder acesso root às suas funções do Lambda do AWS IoT Greengrass.

    1. Para executar sem conteinerização:

      • Para Usuário e grupo do sistema, selecione Another user ID/group ID. Para ID de usuário do sistema, insira 0. Para ID do grupo do sistema, insira 0.

        Isso permite que sua função do Lambda seja executada como root. Para obter mais informações sobre como executar como raiz, consulte Definir a identidade de acesso padrão para as funções do Lambda em um grupo.

        dica

        Você também deve atualizar seu arquivo config.json para conceder acesso root à sua função do Lambda. Para o procedimento, consulte Executar uma função do Lambda como raiz.

      • Para Conteinerização da função do Lambda, selecione Sem contêiner.

        Para obter mais informações sobre como executar sem conteinerização, consulte Considerações ao escolher a conteinerização de função do Lambda.

      • Atualize o valor de Tempo limite para 5 segundos. Isso garante que a solicitação não expire muito cedo. Leva alguns minutos para que a inferência seja executada após a configuração.

      • Em Fixado, selecione Verdadeiro.

      • Em Parâmetros adicionais, para Acesso de leitura ao diretório /sys), selecione Habilitado.

      • Em Lambda lifecycle (Ciclo de vida Lambda), selecione Make this function long-lived and keep it running indefinitely (Definir esta função de longa duração e mantê-la em execução indefinidamente).

    2. Em vez disso, para executar no modo conteinerizado:

      nota

      Não recomendamos a execução no modo conteinerizado, a menos que seu caso de negócios faça essa exigência.

      • Atualize o valor de Tempo limite para 5 segundos. Isso garante que a solicitação não expire muito cedo. Leva alguns minutos para que a inferência seja executada após a configuração.

      • Para Fixado, selecione Verdadeiro.

      • Em Parâmetros adicionais, para Acesso de leitura ao diretório /sys, selecione Habilitado.

  3. Se estiver executando no modo conteinerizado, adicione o recurso de dispositivo local necessário para conceder acesso à GPU do seu dispositivo.

    nota

    Se você executar no modo não conteinerizado, o AWS IoT Greengrass poderá acessar a GPU do seu dispositivo sem configurar os recursos do dispositivo.

    1. Na página de configuração do grupo, selecione a guia Recursos.

    2. Selecione Adicionar recurso local.

    3. Defina o recurso:

      • Em Resource Name (Nome do recurso), insira renderD128.

      • Em Tipo de recurso, selecione Dispositivo local.

      • Em Device path (Caminho do dispositivo), insira /dev/dri/renderD128.

      • Em ‭‬Permissões do proprietário do grupo do sistema e ‬‬ de acesso a ‭arquivos‭‬, selecione ‭Adicionar automaticamente permissões de sistema de arquivos do grupo do sistema que é proprietário do recurso‭.‬‬‬‬‬‬‬‬

      • Para Afiliações da função do Lambda, conceda a permissão Acesso para leitura e gravação para sua função Lambda.

Configuração NVIDIA Jetson TX2

Para executar este tutorial em um NVIDIA Jetson TX2, forneça imagens de origem e configure a função do Lambda. Se estiver usando a GPU, você também deverá adicionar recursos do dispositivo local.

  1. Verifique se o dispositivo Jetson está configurado para que você possa instalar o software do AWS IoT Greengrass Core. Para obter mais informações sobre como configurar seu projeto, consulte Configurar outros dispositivos.

  2. Abra a documentação do MXNet, vá para Installing MXNet on a Jetson e siga as instruções para instalar o MXNet no dispositivo Jetson.

    nota

    Se você quiser criar o MXNet do código-fonte, siga as instruções para criar a biblioteca compartilhada. Edite as seguintes configurações no seu arquivo config.mk para trabalhar com um dispositivo Jetson TX2:

    • Adicione -gencode arch=compute-62, code=sm_62 à CUDA_ARCH configuração.

    • Ligue o CUDA.

      USE_CUDA = 1
  3. Faça download de imagens PNG ou JPG estáticas para a função do Lambda para usá-las na classificação de imagens. O aplicativo funciona melhor com arquivos de imagem pequenos. Se preferir, é possível instrumentar uma câmera na placa Jetson para capturar as imagens de origem.

    Salve seus arquivos de imagem no diretório que contém o arquivo greengrassObjectClassification.py. Você também pode salvá-los em um subdiretório desse diretório. Esse diretório está no pacote de implantação da função do Lambda do qual você fez upload em Etapa 4: Crie e publique uma função do Lambda.

  4. Crie um symlink do Python 3.7 para o Python 3.6 para usar o Python 3 com o AWS IoT Greengrass. Execute o seguinte comando para localizar a instalação do Python:

    which python3

    Execute o comando a seguir para criar o symlink:

    sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7

    Reinicie o dispositivo.

  5. Verifique se a conta do sistema ggc_user pode usar a estrutura de trabalho do MXNet:

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. Edite a configuração da função do Lambda. Siga o procedimento em Etapa 5: adicionar a função do Lambda ao grupo do Greengrass.

    nota

    Recomendamos que você execute sua função do Lambda sem conteinerização, a menos que seu caso de negócios faça essa exigência. Isso ajuda a habilitar o acesso à GPU e à câmera do seu dispositivo sem configurar os recursos do dispositivo. Se você executar sem conteinerização, também deverá conceder acesso root às suas funções do Lambda do AWS IoT Greengrass.

    1. Para executar sem conteinerização:

      • Para Usuário e grupo do sistema, selecione Another user ID/group ID. Para ID de usuário do sistema, insira 0. Para ID do grupo do sistema, insira 0.

        Isso permite que sua função do Lambda seja executada como root. Para obter mais informações sobre como executar como raiz, consulte Definir a identidade de acesso padrão para as funções do Lambda em um grupo.

        dica

        Você também deve atualizar seu arquivo config.json para conceder acesso root à sua função do Lambda. Para o procedimento, consulte Executar uma função do Lambda como raiz.

      • Para Conteinerização da função do Lambda, selecione Sem contêiner.

        Para obter mais informações sobre como executar sem conteinerização, consulte Considerações ao escolher a conteinerização de função do Lambda.

      • Em Parâmetros adicionais, para Acesso de leitura ao diretório /sys, selecione Habilitado.

      • Em Variáveis de ambiente, adicione os seguintes pares chave-valor à sua função do Lambda. Isso configura o AWS IoT Greengrass para usar a estrutura de trabalho do MXNet.

        Chave

        Valor

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

    2. Em vez disso, para executar no modo conteinerizado:

      nota

      Não recomendamos a execução no modo conteinerizado, a menos que seu caso de negócios faça essa exigência.

      • Aumente o valor de Memory limit (Limite de memória). Use 500 MB para a CPU ou pelo menos 2000 MB para a GPU.

      • Em Parâmetros adicionais, para Acesso de leitura ao diretório /sys, selecione Habilitado.

      • Em Variáveis de ambiente, adicione os seguintes pares chave-valor à sua função do Lambda. Isso configura o AWS IoT Greengrass para usar a estrutura de trabalho do MXNet.

        Chave

        Valor

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

  7. Se estiver executando no modo conteinerizado, adicione os recursos de dispositivo local a seguir para conceder acesso à GPU do seu dispositivo. Siga o procedimento em Etapa 6: Adicionar recursos ao grupo do Greengrass.

    nota

    Se você executar no modo não conteinerizado, o AWS IoT Greengrass poderá acessar a GPU do seu dispositivo sem configurar os recursos do dispositivo.

    Para cada recurso:

    • Em Resource type, selecione Device.

    • Em ‭‬Permissões do proprietário do grupo do sistema e ‬‬ de acesso a ‭arquivos‭‬, selecione ‭Adicionar automaticamente permissões de sistema de arquivos do grupo do sistema que é proprietário do recurso‭.‬‬‬‬‬‬‬‬

       

      Nome

      Caminho do dispositivo

      nvhost-ctrl

      /dev/nvhost-ctrl

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /dev/nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /dev/nvhost-dbg-gpu

      nvhost-prof-gpu

      /dev/nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. Se estiver executando no modo conteinerizado, adicione o recurso de volume local a seguir para conceder acesso à câmera do seu dispositivo. Siga o procedimento em Etapa 6: Adicionar recursos ao grupo do Greengrass.

    nota

    Se você executar no modo não conteinerizado, o AWS IoT Greengrass poderá acessar a câmera do seu dispositivo sem configurar os recursos do volume.

    • Em Tipo de recurso, selecione Volume.

    • Em ‭‬Permissões do proprietário do grupo do sistema e ‬‬ de acesso a ‭arquivos‭‬, selecione ‭Adicionar automaticamente permissões de sistema de arquivos do grupo do sistema que é proprietário do recurso‭.‬‬‬‬‬‬‬‬

       

      Nome

      Caminho de origem

      Caminho de destino

      shm

      /dev/shm

      /dev/shm

      .tmp

      /tmp

      /tmp