Exercício – Implantar imagens multiplataforma do DeepStream em dispositivos NVIDIA inseridos com o Azure IoT Edge
Você publicou uma carga de trabalho conteinerizada do DeepStream Graph Composer ao seu registro de contêiner e provisionou seu dispositivo NVIDIA Jetson inserido com o runtime do IoT Edge. Agora, você está pronto para criar uma especificação de implantação em seu hub para executar a carga de trabalho como um módulo do IoT Edge.
No portal do Azure, acesso o hub IoT que você criou no início deste módulo. No painel esquerdo, em Gerenciamento Automático de Dispositivo, selecione IoT Edge. Procure seu dispositivo registrado.
Para ver detalhes sobre a configuração atual, selecione o nome do dispositivo:
Selecione a guia Definir módulos para abrir o editor de módulos:
Você deve fornecer as credenciais do Registro de Contêiner apropriadas, para que seu dispositivo NVIDIA inserido possa efetuar pull das cargas de trabalho de contêineres do seu registro de contêiner.
Em uma janela separada do navegador, acesse seu registro de contêiner no portal do Azure:
No menu à esquerda, em Configurações, selecione Chaves de acesso. Em Chaves de acesso, anote os valores de Servidor de logon, Nome de usuário e Senha. Você usará esses valores na próxima etapa.
Retorne à janela do navegador que está aberta para Definir módulos. Em Credenciais do Registro de Contêiner, insira os valores das Chaves de acesso do registro de contêiner. Ao usar essas credenciais, qualquer dispositivo que aplique essa especificação de módulo pode efetuar pull de cargas de trabalho de contêiner com segurança do seu registro de contêiner no Azure.
Depois, você configurará um módulo IoT Edge personalizado como parte da sua especificação de implantação. Na seção Módulos do IoT Edge do painel Módulos, selecione Adicionar>Módulo do IoT Edge:
Em Adicionar módulo do IoT Edge, em Nome do módulo do IoT Edge, insira o nome do módulo deepstream_test4_jetson. Em URI da imagem, insira <Servidor de Logon>/deepstream_test4_jetson:v1. Para <Servidor de Logon>, use a URL do seu registro de contêiner.
Em seguida, selecione a guia Opções de Criação de Contêiner para habilitar o suporte para aceleração por GPU e também para fornecer acesso ao soquete X11 para permitir a renderização de saída de vídeo do contêiner adicionando o seguinte:
{ "NetworkingConfig": { "EndpointsConfig": { "host": {} } }, "HostConfig": { "DeviceRequests": [ { "Count": -1, "Capabilities": [ [ "gpu" ] ] } ], "NetworkMode": "host", "Binds": [ "/tmp/.X11-unix/:/tmp/.X11-unix/", "/tmp/argus_socket:/tmp/argus_socket" ] } }
Quando tiver terminado, selecione Atualizar:
Você retornará à página Definir módulos no dispositivo; quando estiver nela, selecione Revisar + criar:
A caixa de texto Implantação exibe a especificação de implantação que você está prestes a enviar para seu dispositivo. Verifique se o conteúdo tem aparência semelhante a este exemplo:
{ "modulesContent": { "$edgeAgent": { "properties.desired": { "modules": { "deepstream_test4_jetson": { "settings": { "image": "<Login Server>.azurecr.io/deepstream_test4_jetson:v1", "createOptions": "{\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}},\"HostConfig\":{\"DeviceRequests\":[{\"Count\":-1,\"Capabilities\":[[\"gpu\"]]}],\"NetworkMode\":\"host\",\"Binds\":[\"/tmp/.X11-unix/:/tmp/.X11-unix/\",\"/tmp/argus_socket:/tmp/argus_socket\"]}}" }, "type": "docker", "version": "1.0", "env": { "DISPLAY": { "value": ":0" } }, "status": "running", "restartPolicy": "always" } }, "runtime": { "settings": { "minDockerVersion": "v1.25", "registryCredentials": { "<Your Registry Name>": { "address": "<Login Server>.azurecr.io", "password": "<Your Password>", "username": "<Your Username>" } } }, "type": "docker" }, "schemaVersion": "1.1", "systemModules": { "edgeAgent": { "settings": { "image": "mcr.microsoft.com/azureiotedge-agent:1.1", "createOptions": "" }, "type": "docker" }, "edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }, "type": "docker", "status": "running", "restartPolicy": "always" } } } }, "$edgeHub": { "properties.desired": { "routes": { "route": "FROM /messages/* INTO $upstream" }, "schemaVersion": "1.1", "storeAndForwardConfiguration": { "timeToLiveSecs": 7200 } } }, "deepstream_test4_jetson": { "properties.desired": {} } } }
Verifique se a configuração de implantação está correta e, depois, selecione Criar para iniciar o processo de implantação:
Para verificar se a implantação foi bem-sucedida, execute os seguintes comandos em um terminal no dispositivo NVIDIA inserido:
sudo iotedge list
Verifique se a saída mostra um status de
running
para os módulosedgeAgent
,edgeHub
edeepstream_test4_jetson
.Se o dispositivo estiver conectado a um monitor, você poderá ver a saída visualizada do aplicativo DeepStream Graph Composer, como neste exemplo:
Monitore a saída do módulo
deepstream_test4_jetson
executando o seguinte comando em um terminal no dispositivo NVIDIA Jetson inserido:sudo docker logs -f deepstream_test4_jetson
A cada poucos segundos, seu dispositivo envia telemetria para seu hub registrado no Hub IoT do Azure. Uma mensagem semelhante ao seguinte exemplo é exibida:
Message sent : { "version" : "4.0", "id" : 1440, "@timestamp" : "2021-09-21T03:08:51.161Z", "sensorId" : "sensor-0", "objects" : [ "-1|570|478.37|609|507.717|Vehicle|#|sedan|Bugatti|M|blue|XX1234|CA|-0.1" ] }
Você pode confirmar o status dos módulos em execução no portal do Azure retornando à visão geral do dispositivo do seu dispositivo IoT Edge. Você deve ver os seguintes módulos e status associados listados para seu dispositivo:
Você também pode confirmar no painel de visão geral do Hub IoT que as mensagens chegam ao seu hub do seu dispositivo. Você deve observar um aumento nas mensagens:
Parabéns! Você desenvolveu com êxito uma implantação de borda de nível de produção de uma carga de trabalho do DeepStream Graph Composer e a implantou em um dispositivo real usando o Azure IoT Edge.
Experimente fazer isto
Usando as estratégias descritas neste módulo, como você pode modificar um grafo de referência do DeepStream existente para dar suporte a uma solução de conservação de vida selvagem que conta instâncias exclusivas de espécies em risco usando feeds de câmera ao vivo? Quais componentes você precisaria modificar para dar suporte a essa solução? Você precisaria fazer alguma modificação na estratégia geral de implantação?