Tutorial: Configurar, conectar e verificar um módulo IoT Edge para uma GPU
Aplica-se a: IoT Edge 1.5 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
Conta do Azure – criar uma conta gratuita
Hub IoT do Azure – criar um Hub IoT
Azure IoT Edge
Se você ainda não tiver um dispositivo IoT Edge e precisar criar rapidamente um, execute o comando a seguir. Use o Azure Cloud Shell localizado no portal do Azure. Crie um nome de dispositivo para
<DEVICE-NAME>
substitua o IoT<IOT-HUB-NAME>
pelo seu.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, confira Início Rápido: Implantar seu primeiro módulo IoT Edge em um dispositivo Linux virtual. Mais adiante neste tutorial, adicionaremos 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, escolher o tamanho certo é importante. Nem todos os tamanhos de VM acomodam 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.
Acesse o modelo de implantação de VM do IoT Edge no GitHub: Azure/iotedge-vm-deploy.
Selecione o botão Implantar no Azure, que inicia a criação de uma VM personalizada para você no portal do Azure.
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
noStandard_N
significa que é uma VM habilitada para GPU.az vm list-skus --location <YOUR-REGION> --size Standard_N --all --output table
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.
Abra sua VM no portal do Azure e selecione Extensões + aplicativos no menu à esquerda.
Selecione Adicionar e escolha a Extensão de Driver de GPU NVIDIA na lista e selecione Avançar.
Escolha Examinar + criar e então Criar. A implantação pode levar até 30 minutos.
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.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
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 instalarnvidia-utils-515
para o Ubuntu 20.04. SelecioneY
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ê executarnvidia-smi
sem instalá-la primeiro, essa lista será impressa em seu console.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.
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.
Acesse o Hub IoT no portal do Azure e escolha Dispositivos no menu Gerenciamento de dispositivos.
Selecione o dispositivo do IoT Edge para abri-lo.
Selecione a guia Definir módulos na parte superior.
Selecione o módulo que você deseja habilitar para uso de GPU na lista Módulos IoT Edge.
No painel lateral que é aberto, escolha a guia Opções de Criação de Contêiner.
Copie essa cadeia de caracteres JSON
HostConfig
e cole-a na caixa Opções de Criação.{ "HostConfig": { "DeviceRequests": [ { "Count": -1, "Capabilities": [ [ "gpu" ] ] } ] } }
Selecione Atualizar.
Selecione Examinar + criar. O novo objeto
HostConfig
agora está visível no módulosettings
.Selecione Criar.
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.
Selecione o dispositivo do IoT Edge no portal do Azure no menu de Dispositivos do hub IoT.
Selecione a guia Definir módulos na parte superior.
Selecione + Adicionar sob o título Módulos IoT Edge e escolha Módulo IoT Edge.
Forneça um nome no campo Nome do Módulo IoT Edge.
Na guia Configurações do Módulo, adicione
nvidia/digits:6.0
ao campo URI de imagem.Selecione a guia Variáveis de Ambiente.
Adicione o nome da variável de ambiente
NVIDIA_VISIBLE_DEVICES
com e o valor0
. 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 ambienteNVIDIA_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 Selecione Adicionar.
Selecione Examinar + criar. As propriedades do manifesto de implantação serão exibidas.
Selecione Criar para criar o módulo.
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.
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
.
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.