Tutorial: Configurar, conectar e verificar um módulo IoT Edge para uma GPU

Aplica-se a:Marca de seleção do IoT Edge 1.5 IoT Edge 1.5 marca de seleção do IoT Edge 1.4 IoT Edge 1.4

Importante

O IoT Edge 1.5 LTS e o IoT Edge 1.4 LTS são versões com suporte. O IoT Edge 1.4 LTS chegará ao fim da vida útil em 12 de novembro de 2024. Se você estiver em uma versão anterior, confira Atualizar o Azure IoT Edge.

Este tutorial mostra como criar uma VM (máquina virtual) habilitada para GPU. Na VM, você verá como executar um dispositivo IoT Edge que aloca o trabalho de um de seus módulos para sua GPU.

Usaremos o portal do Azure, o Azure Cloud Shell e a linha de comando da VM para:

  • Criar uma VM compatível com GPU
  • Instalar a extensão de driver NVIDIA na VM
  • Configurar um módulo em um dispositivo IoT Edge para alocar trabalho a uma GPU

Pré-requisitos

Criar uma máquina virtual com GPU otimizadas

Para criar uma VM (máquina virtual) com otimização de GPU, escolher o tamanho certo é importante. Nem todos os tamanhos de VM acomodarão o processamento de GPU. Além disso, há diferentes tamanhos de VM para cargas de trabalho diferentes. Para mais informações, confira Tamanhos de máquina virtual otimizados para GPU ou experimente o Seletor de máquinas virtuais.

Vamos criar uma VM IoT Edge com o modelo do ARM (Azure Resource Manager) no GitHub e configurá-la para ser otimizada para GPU.

  1. Acesse o modelo de implantação de VM do IoT Edge no GitHub: Azure/iotedge-vm-deploy.

  2. Selecione o botão Implantar no Azure, que inicia a criação de uma VM personalizada para você no portal do Azure.

  3. Preencha os campos de Implantação personalizada com suas credenciais e recursos do Azure:

    Propriedade Descrição ou valor de exemplo
    Subscription Escolha a assinatura da conta do Azure.
    Resource group Adicione seu grupo de recursos do Azure.
    Região East US
    VMs de GPU não estão disponíveis em todas as regiões.
    Prefixo do rótulo DNS Crie um nome para a VM.
    Nome de Usuário do Administrador adminUser
    Como alternativa, crie seu nome de usuário.
    Cadeia de conexão do dispositivo Copie a cadeia de conexão do dispositivo IoT Edge e cole aqui.
    Tamanho da VM Standard_NV6
    Tipo de autenticação Escolha senha ou Chave Pública SSH e crie um nome de par de chaves ou senha, se necessário.

    Dica

    Verifique quais VMs de GPU têm suporte em cada região: produtos disponíveis por região.

    Para verificar qual região sua assinatura do Azure permite, experimente este comando do Azure no portal do Azure. O N no Standard_N significa que é uma VM habilitada para GPU.

    az vm list-skus --location <YOUR-REGION> --size Standard_N --all --output table
    
  4. Selecione o botão Examinar + criar na parte inferior e então o botão Criar. A implantação pode levar um minuto para ser concluída.

Instalar a extensão NVIDIA

Agora que temos uma VM com otimização de GPU, vamos instalar a extensão NVIDIA na VM usando o portal do Azure.

  1. Abra sua VM no portal do Azure e selecione Extensões + aplicativos no menu à esquerda.

  2. Selecione Adicionar e escolha a Extensão de Driver de GPU NVIDIA na lista e selecione Avançar.

  3. Escolha Examinar + criar e então Criar. A implantação pode levar até 30 minutos.

  4. Para confirmar a instalação no portal do Azure, retorne ao menu Extensões + aplicativos em sua VM. A nova extensão chamada NvidiaGpuDriverLinux deve estar na lista de extensões e mostrar Provisionamento bem-sucedido em Status.

  5. Para confirmar a instalação usando o Azure Cloud Shell, execute este comando para listar suas extensões. Substitua os espaços reservados <> pelos seus valores:

    az vm extension list --resource-group <YOUR-RESOURCE-GROUP> --vm-name <YOUR-VM-NAME> -o table
    
  6. Com um módulo NVIDIA, usaremos o programa NVIDIA System Management Interface, também conhecido como nvidia-smi.

    No dispositivo, instale o pacote nvidia-smi com base na sua versão do Ubuntu. Para este tutorial, vamos instalar nvidia-utils-515 para o Ubuntu 20.04. Selecione Y quando solicitado na instalação.

    sudo apt install nvidia-utils-515
    

    Aqui está uma lista de todas as versões de nvidia-smi. Se você executar nvidia-smi sem instalá-la primeiro, essa lista será impressa em seu console.

    Captura de tela de todas as versões de `nvidia-smi`.

  7. Após a instalação, execute este comando para confirmar se ele está instalado:

    nvidia-smi
    

    Será exibida uma tabela de confirmação semelhante a esta tabela.

    Captura de tela da tabela de driver NVIDIA.

Observação

A extensão NVIDIA é um modo simplificado de instalar os drivers NVIDIA, mas talvez você precise de mais personalização. Para obter mais informações sobre instalações personalizadas em VMs da série N, confira Instalar drivers de GPU NVIDIA em VMs da série N executando Linux.

Habilitar um módulo com aceleração de GPU

Há diferentes maneiras de habilitar um módulo IoT Edge para que ele use uma GPU para processamento. Um modo é configurar um módulo IoT Edge em seu dispositivo para se tornar acelerado por GPU. Outro é usar um módulo de contêiner pré-fabricado, por exemplo, um módulo NVIDIA DIGITS já otimizado para GPU. Vamos ver como ambos os modos funcionam.

Habilitar GPU em um módulo usando DeviceRequests

Se você tem um módulo em seu dispositivo IoT Edge, adicionar uma configuração usando DeviceRequests no createOptions do manifesto de implantação torna o módulo otimizado para GPU. Siga estas etapas para configurar um módulo.

  1. Acesse o Hub IoT no portal do Azure e escolha Dispositivos no menu Gerenciamento de dispositivos.

  2. Selecione o dispositivo do IoT Edge para abri-lo.

  3. Selecione a guia Definir módulos na parte superior.

  4. Selecione o módulo que você deseja habilitar para uso de GPU na lista Módulos IoT Edge.

  5. No painel lateral que é aberto, escolha a guia Opções de Criação de Contêiner.

  6. Copie essa cadeia de caracteres JSON HostConfig e cole-a na caixa Opções de Criação.

     {
         "HostConfig": {
             "DeviceRequests": 
             [
                 {
                     "Count": -1,
                     "Capabilities": [
                         [
                             "gpu"
                         ]
                     ]
                 }
             ]
         }
     }
    
  7. Selecione Atualizar.

  8. Selecione Examinar + criar. O novo objeto HostConfig agora está visível no módulo settings.

  9. Selecione Criar.

  10. Para confirmar se a nova configuração funciona, execute este comando em sua VM:

    sudo docker inspect <YOUR-MODULE-NAME>
    

    Você deve ver os parâmetros especificados para DeviceRequests na impressão JSON no console.

Observação

Para entender melhor o parâmetro DeviceRequests, veja o código-fonte: moby/host_config.go

Habilitar uma GPU em um módulo NVIDIA pré-fabricado

Vamos adicionar um módulo NVIDIA DIGITS ao dispositivo IoT Edge e alocar uma GPU ao módulo definindo suas variáveis de ambiente. Este módulo NVIDIA já está em um contêiner do Docker.

  1. Selecione o dispositivo do IoT Edge no portal do Azure no menu de Dispositivos do hub IoT.

  2. Selecione a guia Definir módulos na parte superior.

  3. Selecione + Adicionar sob o título Módulos IoT Edge e escolha Módulo IoT Edge.

  4. Forneça um nome no campo Nome do Módulo IoT Edge.

  5. Na guia Configurações do Módulo, adicione nvidia/digits:6.0 ao campo URI de imagem.

  6. Selecione a guia Variáveis de Ambiente.

  7. Adicione o nome da variável de ambiente NVIDIA_VISIBLE_DEVICES com e o valor 0. Essa variável controla quais GPUs são visíveis para o aplicativo conteinerizado em execução no dispositivo de borda. A variável de ambiente NVIDIA_VISIBLE_DEVICES pode ser definida como uma lista separada por vírgula de identidades do dispositivo, que correspondem às GPUs físicas no sistema. Por exemplo, se houver duas GPUs no sistema com as identidades do dispositivo 0 e 1, a variável poderá ser definida como "NVIDIA_VISIBLE_DEVICES=0,1" para tornar ambas as GPUs visíveis para o contêiner. Neste artigo, como a VM tem apenas uma GPU, usaremos a primeira (e somente) uma.

    Nome Tipo Valor
    NVIDIA_VISIBLE_DEVICES Texto 0
  8. Selecione Adicionar.

  9. Selecione Examinar + criar. As propriedades do manifesto de implantação serão exibidas.

  10. Selecione Criar para criar o módulo.

  11. Selecione Atualizar para atualizar sua lista de módulos. O módulo levará alguns minutos para mostrar a em execução no Status do runtime, portanto, continue atualizando o dispositivo.

  12. Em seu dispositivo, execute este comando para confirmar se o novo módulo NVIDIA existe e está em execução.

    iotedge list
    

    Você deve ver o módulo NVIDIA em uma lista de módulos em seu dispositivo IoT Edge com um status de running.

    Captura de tela do resultado do comando 'iotedge list'.

Observação

Para mais informações sobre o módulo de contêiner NVIDIA DIGITS, confira a Documentação de Dígitos de Aprendizado Profundo.

Limpar recursos

Se você quiser continuar com outros tutoriais IoT Edge, poderá usar o dispositivo criado para este tutorial. Caso contrário, você pode excluir os recursos do Azure que criou para evitar encargos.

Se você tiver criado a sua máquina virtual e o Hub IoT em um novo grupo de recursos, poderá excluir esse grupo, o que excluirá todos os recursos associados. Verifique novamente o conteúdo do grupo de recursos para ter certeza de que não haja nada que você queira manter. Caso não queira excluir o grupo inteiro, você poderá excluir recursos individuais (máquina virtual, dispositivo ou módulo de GPU).

Importante

A exclusão de um grupo de recursos é irreversível.

Use o comando a seguir para remover o grupo de recursos do Azure. A exclusão de um grupo de recursos pode demorar alguns minutos.

az group delete --name <YOUR-RESOURCE-GROUP> --yes

Para confirmar se o grupo de recursos foi removido, veja a lista de grupos de recursos.

az group list

Próximas etapas

Este artigo ajudou você a configurar sua máquina virtual e dispositivo IoT Edge a ser acelerado por GPU. Para executar um aplicativo com uma configuração semelhante, experimente o roteiro de aprendizagem para Desenvolvimento do NVIDIA DeepStream com Microsoft Azure. O tutorial do Learn mostra como desenvolver aplicativos de vídeo inteligentes otimizados que podem consumir várias fontes de vídeo, imagem e áudio.