Exercício – Implantar imagens multiplataforma do DeepStream em dispositivos NVIDIA inseridos com o Azure IoT Edge

Concluído

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.

  1. 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.

    Captura de tela que mostra a guia Dispositivos do IoT Edge no portal do Azure.

  2. Para ver detalhes sobre a configuração atual, selecione o nome do dispositivo:

    Captura de tela que mostra uma visão geral do dispositivo IoT Edge.

  3. Selecione a guia Definir módulos para abrir o editor de módulos:

    Captura de tela que mostra o painel 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.

  4. Em uma janela separada do navegador, acesse seu registro de contêiner no portal do Azure:

    Captura de tela que mostra uma visão geral da instância do Registro de Contêiner do Azure.

  5. 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.

    Captura de tela que mostra as credenciais do registro de contêiner.

  6. 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.

    Captura de tela que mostra a inserção de credenciais do registro de contêiner no Hub IoT do Azure.

  7. 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:

    Captura de tela que mostra a adição de um módulo do IoT Edge.

  8. 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.

    Captura de tela que mostra a inserção de um nome e um URI de imagem para o módulo do IoT Edge.

  9. 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:

    Captura de tela que mostra as opções de Criação de Contêiner no painel Módulos.

  10. Você retornará à página Definir módulos no dispositivo; quando estiver nela, selecione Revisar + criar:

    Captura de tela que mostra o botão Examinar + criar realçado no painel Módulos.

  11. 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": {}
        }
    }
    }
    
  12. Verifique se a configuração de implantação está correta e, depois, selecione Criar para iniciar o processo de implantação:

    Captura de tela que mostra a caixa de texto Implantação e o botão Criar.

  13. Para verificar se a implantação foi bem-sucedida, execute os seguintes comandos em um terminal no dispositivo NVIDIA inserido:

    sudo iotedge list
    
  14. Verifique se a saída mostra um status de running para os módulos edgeAgent, edgeHub e deepstream_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:

    Captura de tela que mostra o módulo do IoT Edge em execução no hardware Jetson.

  15. 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"
      ]
    }
    
  16. 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:

    Captura de tela que mostra uma visão geral do dispositivo IoT Edge com status de runtime.

  17. 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:

    Captura de tela que mostra gráficos que ilustram as mensagens recebidas no painel Uso do Hub IoT.

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?