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

Aplica-se a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS é a versão suportada. IoT Edge 1.4 LTS atingiu o fim da vida útil em 12 de novembro de 2024. Se você estiver usando uma versão anterior, consulte Update IoT Edge.

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

Use o portal 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

  • Azure conta – criar uma conta gratuita

  • Hub IoT do Azure - criar um Hub IoT

  • Azure IoT Edge dispositivo

    Se você não tiver um dispositivo IoT Edge e quiser criar rapidamente um, execute o comando a seguir. Use o Azure Cloud Shell no portal do Azure. Crie um novo nome de dispositivo para <DEVICE-NAME> e substitua <YOUR-IOT-HUB-NAME> pelo nome do hub IoT.

    az iot hub device-identity create --device-id <YOUR-DEVICE-NAME> --edge-enabled --hub-name <YOUR-IOT-HUB-NAME>
    

    Para obter mais informações sobre como criar um dispositivo IoT Edge, consulte Quickstart: implantar seu primeiro módulo de IoT Edge em um dispositivo Linux virtual. Posteriormente neste artigo, você adicionará um módulo NVIDIA ao dispositivo IoT Edge.

Criar uma máquina virtual com GPU otimizadas

Para criar uma VM (máquina virtual) com otimização de GPU, escolha o tamanho certo. Nem todos os tamanhos de VM dão suporte ao processamento de GPU, e diferentes tamanhos de VM funcionam melhor 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.

Crie uma VM IoT Edge com o modelo Azure Resource Manager (ARM) no GitHub e configure-o para otimizar a GPU.

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

  2. Selecione o botão Deploy para Azure para começar a criar uma VM personalizada no portal Azure.

  3. Insira suas credenciais do Azure e informações de recurso nos campos de Implantação Personalizada:

    Propriedade Descrição ou valor de exemplo
    Subscrição Escolha sua assinatura de conta Azure.
    Grupo de recursos Adicione seu grupo de recursos 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
    Ou crie seu próprio nome de usuário.
    Cadeia de conexão do dispositivo Copie a string de conexão do seu 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 a região que sua assinatura Azure permite, experimente este comando no 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, em seguida, selecione o botão Criar . A implantação pode levar até um minuto.

Instalar a extensão NVIDIA

Agora que você tem uma VM otimizada para GPU, instale a extensão NVIDIA na VM usando o portal Azure.

  1. Abra sua VM no portal Azure e selecione Extensions + 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 Azure, retorne ao menu Extensions + aplicativos na 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 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. Por exemplo, no Ubuntu 22.04, instale nvidia-utils-535. Selecione Y quando solicitado na instalação.

    sudo apt install nvidia-utils-535
    

    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 no 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
    

    Uma tabela de confirmação é exibida, semelhante a esta tabela.

    Captura de tela da tabela de driver NVIDIA.

Observação

A extensão NVIDIA é uma maneira simplificada de instalar os drivers NVIDIA, mas talvez seja necessário 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. Uma maneira é configurar um módulo IoT Edge existente em seu dispositivo para se tornar acelerado por GPU. Outra maneira é usar um módulo de contêiner pré-fabricado que já esteja otimizado para GPU. Vamos ver como ambos os modos funcionam.

Habilitar GPU em um módulo usando DeviceRequests

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

  1. Acesse sua Hub IoT no portal do Azure e escolha Devices no menu Device management.

  2. Selecione seu dispositivo 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 IoT Edge Modules.

  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 de contêiner NVIDIA CUDA ao dispositivo IoT Edge e alocar uma GPU para o módulo definindo suas variáveis de ambiente. Este módulo NVIDIA já está em um contêiner do Docker.

  1. Selecione seu dispositivo IoT Edge no portal Azure no menu Devices do Hub IoT.

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

  3. Selecione + Adicionar no título dos módulos IoT Edge e escolha IoT Edge Module.

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

  5. Na guia Configurações do Módulo, adicione nvidia/cuda:12.6.3-base-ubuntu22.04 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 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

Observação

Para obter mais informações sobre contêineres NVIDIA otimizados para GPU, consulte o Catálogo da NVIDIA GPU Cloud (NGC).

Limpar os recursos

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

Se você criou sua máquina virtual e o hub IoT em um novo grupo de recursos, poderá excluir esse grupo, que exclui 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 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 o dispositivo IoT Edge para ser acelerado por GPU. Para executar um aplicativo com uma configuração semelhante, experimente o roteiro de aprendizagem para o desenvolvimento 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.