Exercício - Empacote um aplicativo NVIDIA DeepStream Graph Composer em uma carga de trabalho conteinerizada
Você viu como o NVIDIA DeepStream Graph Composer pode ajudar no desenvolvimento de aplicativos IVA. Agora vamos mostrar como ferramentas extras podem ajudar a distribuir esses aplicativos para ambientes de datacenter e borda.
A conteinerização também oferece muitos benefícios durante o desenvolvimento e os testes. Exemplos incluem:
- Consistência de comportamento quando você executa uma carga de trabalho em hardware homogêneo.
- Atualizações incrementais devido à camada do sistema de arquivos, o que pode reduzir o tempo de implantação.
- Documentação clara de dependências devido à natureza auto-documentante.
Para obter esses benefícios, você usará a ferramenta container-builder para empacotar o exemplo anterior como um contêiner.
Antes de começar, você precisa configurar uma conta com o serviço NVIDIA GPU Containers (NGC). Este serviço é o repositório oficial da NVIDIA para distribuição de contêineres acelerados por GPU. Sua carga de trabalho requer acesso a esse repositório para obter o contêiner base do DeepStream, que nossa carga de trabalho em contêineres usará. Para criar uma conta ou iniciar sessão com uma conta existente, consulte a página de início de sessão NVIDIA NGC.
Inicie sessão ou crie uma nova conta acedendo à página de início de sessão NVIDIA NGC. Depois de entrar no NVIDIA NGC, selecione seu nome de usuário no canto superior direito e selecione Configuração. Você verá as seguintes opções:
Selecione Obter chave de API. Na tela exibida, no canto superior direito, selecione Gerar chave de API. Em seguida, selecione Confirmar no prompt resultante.
Forneça as credenciais para o tempo de execução do Docker executando os seguintes comandos em um terminal na máquina host:
sudo docker login nvcr.io
Quando lhe for pedido o nome de utilizador, introduza $oauthtoken exatamente como mostrado. Quando lhe for solicitada a palavra-passe, introduza o valor da chave de API gerada. Você deve receber a mensagem "Login bem-sucedido".
Agora que você tem acesso ao nvcr.io, você pode começar a criar contêineres que usam as imagens base fornecidas através do NVIDIA NGC. A ferramenta container-builder pode criar imagens fornecendo-lhe um arquivo de configuração. Você usará um dos exemplos fornecidos no pacote de gráficos de referência.
Para invocar o container-builder para empacotar o aplicativo deepstream-test1, execute os seguintes comandos na máquina host:
cd /opt/nvidia/deepstream/deepstream-6.0/reference_graphs/deepstream-test1 sudo container_builder -c ds_test1_container_builder_dgpu.yaml -d /opt/nvidia/graph-composer/config/target_x86_64_cuda_11_4.yaml
Após a conclusão bem-sucedida, você verá a saída que contém a mensagem "Marcado com êxito deepstream_test1_dgpu:mais recente".
Nota
Se você receber um erro "docker.errors.DockerException" ao executar os comandos anteriores, isso pode indicar que você não tem o tempo de execução do Docker instalado na máquina host. Para continuar, consulte as instruções na seção "Install NVIDIA DeepStream Graph Composer Dependencies" deste módulo sobre como instalar o Docker.
Nota
Se você receber "docker.errors.BuildError: unauthorized: authentication required", essa mensagem indica que talvez você não tenha autenticado corretamente sua conta NVIDIA NGC para uso com o Docker.
Antes de executar essa carga de trabalho em contêiner, é necessário conceder acesso ao ambiente de exibição X11 quando ele é executado a partir de um contêiner devido à carga de trabalho usando um coletor de saída do tipo EGL (tipo = 2).
Execute os seguintes comandos a partir de um terminal na máquina host para habilitar o acesso aos serviços X11:
sudo xhost +
Confirme se a carga de trabalho em contêiner é executada conforme o esperado executando o seguinte código em um terminal na máquina host:
sudo docker run -it --rm --gpus all -v /tmp/.X11-unix/:/tmp/.X11-unix/ -e DISPLAY=:0 deepstream_test1_dgpu
Este comando inicia uma instância da
deepstream_test1_dgpu
imagem do contêiner e fornece acesso a todo o hardware de GPU disponível na máquina, ao mesmo tempo em que fornece acesso ao soquete X11 e à correnteDISPLAY
. Você deve ver uma saída semelhante à execução anterior que foi invocada usandoexecute_graph.sh
.
Agora você está pronto para publicar sua carga de trabalho em contêineres em um registro de contêiner seguro para distribuição.