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

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

Importante

IoT Edge 1.5 LTS é a versão suportada. O IoT Edge 1.4 LTS atingiu o fim de vida útil a 12 de novembro de 2024. Se estiveres a usar uma versão anterior, vê Update IoT Edge.

Este tutorial mostra como criar uma máquina virtual (VM) habilitada para GPU. A partir da VM, executas um dispositivo IoT Edge que aloca trabalho de um dos seus módulos para a tua GPU.

Use o portal Azure, o Azure Cloud Shell e a linha de comandos da sua VM para:

  • Crie uma VM compatível com GPU
  • Instale a extensão do driver NVIDIA na VM
  • Configure um módulo num dispositivo IoT Edge para alocar trabalho a uma GPU

Pré-requisitos

  • Azure conta - criar uma conta gratuita

  • Azure IoT Hub - criar um IoT Hub

  • dispositivo Azure IoT Edge

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

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

    Para mais informações sobre como criar um dispositivo IoT Edge, consulte Quickstart: Implemente o seu primeiro módulo IoT Edge num dispositivo Linux virtual. Mais adiante neste artigo, irá adicionar um módulo NVIDIA ao seu dispositivo IoT Edge.

Criar uma máquina virtual otimizada para GPU

Para criar uma máquina virtual (VM) otimizada para GPU, escolha o tamanho certo. Nem todos os tamanhos de VM suportam processamento de GPU e tamanhos de VM diferentes funcionam melhor para cargas de trabalho diferentes. Para obter mais informações, consulte Tamanhos de máquinas virtuais otimizados para GPU ou tente o seletor de máquinas virtuais.

Cria uma VM IoT Edge com o template Azure Resource Manager (ARM) no GitHub, depois configura-a para ser otimizada para GPU.

  1. Vai ao modelo de implementação de VM IoT Edge em GitHub em Azure/iotedge-vm-deploy.

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

  3. Introduza as suas credenciais de Azure e informações de recursos nos campos Custom deployment:

    Property Descrição ou valor da amostra
    Subscrição Escolha a subscrição da sua conta Azure.
    Grupo de recursos Adicione o seu grupo de recursos Azure.
    Região East US
    As VMs GPU não estão disponíveis em todas as regiões.
    Prefixo de Etiqueta DNS Crie um nome para sua VM.
    Nome de Utilizador de Administrador adminUser
    Ou crie seu próprio nome de usuário.
    Cadeia de Ligação de Dispositivo Copie a sua connection string do seu dispositivo IoT Edge e depois cole aqui.
    Tamanho da VM Standard_NV6
    Tipo de autenticação Escolha a palavra-passe ou a Chave Pública SSH e, em seguida, crie uma palavra-passe ou um nome de par de chaves, se necessário.

    Gorjeta

    Verifique quais VMs de GPU são suportadas em cada região: Produtos disponíveis por região.

    Para verificar qual a região que a sua subscrição de Azure permite, experimente este comando Azure no portal Azure. O N in 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 Rever + criar na parte inferior e, em seguida, selecione o botão Criar . A implantação pode levar até um minuto.

Instale a extensão NVIDIA

Agora que tens uma VM otimizada para GPU, instala a extensão NVIDIA na VM usando o portal Azure.

  1. Abra a sua VM no portal Azure e selecione Extensões + aplicações no menu esquerdo.

  2. Selecione Adicionar e escolha a extensão de driver de GPU NVIDIA na lista e, em seguida, selecione Avançar.

  3. Escolha Rever + criar e, em seguida, Criar. A implantação pode levar até 30 minutos para ser concluída.

  4. Para confirmar a instalação no portal Azure, volte ao menu Extensões + aplicações na sua VM. A nova extensão nomeada NvidiaGpuDriverLinux deve estar na sua 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 as suas extensões. Substitua os <> marcadores de posição pelas suas próprias configurações.

    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.

    A partir do seu dispositivo, instale o nvidia-smi pacote 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 nvidia-smi versões. Se você executar nvidia-smi sem instalá-lo primeiro, essa lista será impressa no console.

    Captura de ecrã de todas as versões do «nvidia-smi».

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

    nvidia-smi
    

    É apresentada uma tabela de confirmação, semelhante a esta tabela.

    Captura de ecrã da tabela de drivers NVIDIA.

Nota

A extensão NVIDIA é uma maneira simplificada de instalar os drivers NVIDIA, mas você pode precisar de mais personalização. Para obter mais informações sobre instalações personalizadas em VMs da série N, consulte Instalar drivers de GPU NVIDIA em VMs da série N executando Linux.

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

Existem diferentes formas de ativar um módulo IoT Edge para que utilize uma GPU para o processamento. Uma forma é configurar um módulo IoT Edge existente no seu dispositivo para ser acelerado por GPU. Outra forma é usar um módulo contentor pré-fabricado que já esteja otimizado para GPU. Vamos ver como ambas as maneiras são realizadas.

Habilitar GPU em um módulo existente usando DeviceRequests

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

  1. Vai ao teu IoT Hub no portal Azure e escolhe Dispositivos no menu Gestão de dispositivos.

  2. Selecione o seu dispositivo IoT Edge para o abrir.

  3. Selecione o separador Definir módulos no topo.

  4. Seleciona o módulo que queres ativar para uso da GPU na lista IoT Edge Módulos.

  5. Um painel lateral se abre, escolha a guia Opções de criação de contentor.

  6. Copie esta HostConfig cadeia de caracteres JSON e cole na caixa Criar opções .

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

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

  9. Selecione Criar.

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

    sudo docker inspect <YOUR-MODULE-NAME>
    

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

Nota

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

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

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

  1. Selecione o seu dispositivo IoT Edge no portal Azure a partir do menu Dispositivos do seu IoT Hub.

  2. Selecione o separador Definir módulos no topo.

  3. Selecione + Add no cabeçalho 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 da Imagem.

  6. Selecione a guia Variáveis de Ambiente.

  7. Adicione o nome NVIDIA_VISIBLE_DEVICES da variável de ambiente com o valor 0. Essa variável controla quais GPUs são visíveis para o aplicativo em contêiner em execução no dispositivo de borda. A NVIDIA_VISIBLE_DEVICES variável de ambiente pode ser definida como uma lista separada por vírgulas de IDs de dispositivo, que correspondem às GPUs físicas no sistema. Por exemplo, se houver duas GPUs no sistema com IDs de dispositivo 0 e 1, a variável pode 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 única).

    Nome Tipo valor
    NVIDIA_VISIBLE_DEVICES Texto 0
  8. Selecione Adicionar.

  9. Selecione Verificar + criar. As propriedades do manifesto de implantação são exibidas.

  10. Selecione Criar para criar o módulo.

  11. Selecione Atualizar para atualizar sua lista de módulos. O módulo leva alguns minutos para indicar que está a executar no estado de runtime, portanto, continue a atualizar o dispositivo.

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

    iotedge list
    

    Deves ver o teu módulo NVIDIA numa lista de módulos no teu dispositivo IoT Edge com o estado de running.

    Captura de ecrã do resultado do comando 'iotedge list'.

Nota

Para mais informações sobre contentores NVIDIA otimizados para GPU, consulte o Catálogo NVIDIA GPU Cloud (NGC).

Limpar recursos

Se quiseres continuar com outros tutoriais de IoT Edge, podes usar o dispositivo que criaste para este tutorial. Caso contrário, pode eliminar os recursos do Azure que criou para evitar cobranças.

Se você criou sua máquina virtual e o hub IoT em um novo grupo de recursos, poderá excluir esse grupo, o que exclui todos os recursos associados. Verifique novamente o conteúdo do grupo de recursos para certificar-se de que não há nada que você queira manter. Se não quiser excluir todo o grupo, você pode excluir recursos individuais (máquina virtual, dispositivo ou módulo de GPU).

Importante

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

Use o comando seguinte para remover o seu grupo de recursos Azure. Pode levar alguns minutos para excluir um grupo de recursos.

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

Você pode confirmar que o grupo de recursos foi removido exibindo a lista de grupos de recursos.

az group list

Próximos passos

Este artigo ajudou-o a configurar a sua máquina virtual e dispositivo IoT Edge para serem acelerados por GPU. Para correr uma aplicação com uma configuração semelhante, experimente o caminho de aprendizagem para o desenvolvimento NVIDIA DeepStream com Microsoft Azure. O tutorial Learn mostra como desenvolver aplicativos de vídeo inteligentes otimizados que podem consumir várias fontes de vídeo, imagem e áudio.