Exercício - Implantar imagens DeepStream entre plataformas em dispositivos incorporados NVIDIA com o Azure IoT Edge
Você publicou uma carga de trabalho conteinerizada do DeepStream Graph Composer em seu registro de contêiner e provisionou seu dispositivo incorporado NVIDIA Jetson com o tempo de execução 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, vá para o hub IoT que você criou no início deste módulo. No menu à esquerda, em Gerenciamento Automático de Dispositivos, selecione IoT Edge. Procure o seu dispositivo registado.
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 apropriadas do Registro de contêiner, para que seu dispositivo incorporado NVIDIA possa extrair cargas de trabalho de contêiner do registro de contêiner.
Em uma janela separada do navegador, vá para o registro do contêiner no portal do Azure:
No menu à esquerda, em Configurações, selecione Teclas de acesso. Em Chaves de acesso, observe os valores para Servidor de login, Nome de usuário e senha. Você usará esses valores na próxima etapa.
Volte para a 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. Usando essas credenciais, qualquer dispositivo que aplique essa especificação de módulo pode extrair com segurança cargas de trabalho de contêiner do seu registro de contêiner no Azure.
Em seguida, você configurará um módulo IoT Edge personalizado como parte de sua especificação de implantação. Na seção Módulos do IoT Edge do painel Módulos, selecione Adicionar>Módulo IoT Edge:
Em Adicionar Módulo IoT Edge, em Nome do Módulo IoT Edge, insira o nome do módulo deepstream_test4_jetson. Em Image URI, digite <Login Server>/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 à aceleração da GPU e também para fornecer acesso ao soquete X11 para permitir a renderização da 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 terminar, selecione Atualizar:
Você retornará à página Definir módulos no dispositivo, uma vez que 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 é 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 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 incorporado NVIDIA:
sudo iotedge list
Verifique se a saída mostra um status de
running
para osedgeAgent
módulos ,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
deepstream_test4_jetson
saída do módulo executando o seguinte comando em um terminal no dispositivo incorporado NVIDIA Jetson:sudo docker logs -f deepstream_test4_jetson
A cada poucos segundos, seu dispositivo envia telemetria para seu hub registrado no Hub IoT do Azure. É apresentada uma mensagem semelhante ao seguinte exemplo:
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 o seu dispositivo:
Você também pode confirmar no painel de visão geral do Hub IoT que as mensagens estão chegando ao seu hub a partir do seu dispositivo. Você deve notar um aumento nas mensagens:
Parabéns! Você desenvolveu com sucesso 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 isto
Usando as estratégias descritas neste módulo, como você pode modificar um gráfico de referência DeepStream existente para dar suporte a uma solução de conservação da vida selvagem que conta instâncias exclusivas de espécies ameaçadas 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?