Exercício - Implantar imagens DeepStream entre plataformas em dispositivos incorporados NVIDIA com o Azure IoT Edge

Concluído

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.

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

    Captura de ecrã que mostra o separador Dispositivos 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 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.

  4. Em uma janela separada do navegador, vá para o registro do contêiner no portal do Azure:

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

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

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

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

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

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

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

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

    Captura de tela que mostra a inserção de um nome e uma imagem U R I para o módulo IoT Edge.

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

    Captura de tela que mostra as opções Criar contêiner no painel Módulos.

  10. Você retornará à página Definir módulos no dispositivo, uma vez que selecione Revisar + criar:

    Captura de ecrã que mostra o botão Rever mais 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 é 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 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 incorporado NVIDIA:

    sudo iotedge list
    
  14. Verifique se a saída mostra um status de running para os edgeAgentmódulos , edgeHube 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 IoT Edge em execução no hardware Jetson.

  15. 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"
      ]
    }
    
  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 o seu dispositivo:

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

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

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

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?