Ejercicio: Empaquetado de una aplicación NVIDIA DeepStream Graph Composer en una carga de trabajo en contenedores
Ya vio cómo NVIDIA DeepStream Graph Composer ayuda en el desarrollo de aplicaciones de IVA. Ahora vamos a mostrar cómo las herramientas adicionales pueden ayudar a distribuir estas aplicaciones a los centros de datos y entornos de borde.
La contenedorización también proporciona muchas ventajas durante el desarrollo y las pruebas. Algunos ejemplos son:
- Coherencia de comportamiento al ejecutar una carga de trabajo en hardware homogéneo.
- Actualizaciones incrementales debido a la capa del sistema de archivos, lo que puede reducir el tiempo de implementación.
- Documentación clara de las dependencias debido a la autodocumentación.
Para lograr estas ventajas, usará el generador de contenedores para empaquetar el ejemplo anterior como contenedor.
Antes de empezar, debe configurar una cuenta con el servicio NVIDIA GPU Containers (NGC). Este servicio es el repositorio oficial de NVIDIA para distribuir contenedores acelerados por GPU. La carga de trabajo requiere acceso a este repositorio para extraer el contenedor base de DeepStream, que usará nuestra carga de trabajo en contenedores. Para crear una cuenta o iniciar sesión con una cuenta existente, consulte la página de inicio de sesión de NVIDIA NGC.
Inicie sesión o cree una nueva cuenta en la página de inicio de sesión de NVIDIA NGC. Una vez que haya iniciado sesión en NVIDIA NGC, seleccione su nombre de usuario en la esquina superior derecha y seleccione Configuración. Verá las siguiente opciones:
Seleccione Get API Key (Obtener la clave de API). En la pantalla que aparece, en la esquina superior derecha, seleccione Generate API Key (Generar la clave de API). A continuación. seleccione Confirmar en el símbolo del sistema resultante.
Proporcione las credenciales al entorno de ejecución de Docker mediante la ejecución de los siguientes comandos en un terminal del equipo host:
sudo docker login nvcr.io
Cuando se le pida el Nombre de usuario, escriba $oauthtoken exactamente como se muestra. Cuando se le pida la Contraseña, escriba el valor de la clave de API generada. Debería recibir el mensaje “Inicio de sesión realizado correctamente”.
Ahora que tiene acceso a nvcr.io, puede empezar a compilar contenedores que usen las imágenes base proporcionadas a través de NVIDIA NGC. El generador de contenedores puede compilar imágenes si se le proporciona un archivo de configuración. Usará uno de los ejemplos proporcionados en el paquete de grafos de referencia.
Para invocar el generador de contenedores para empaquetar la aplicación deepstream-test1, ejecute los siguientes comandos en el equipo 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
Después de finalizar correctamente, debería ver la salida que contiene el mensaje “Successfully tagged deepstream_test1_dgpu:latest” (deepstream_test1_dgpu:latest se ha etiquetado correctamente).
Nota:
Si recibe un error “docker.errors.DockerException” al ejecutar los comandos anteriores, podría indicar que no tiene instalado el entorno de ejecución de Docker en el equipo host. Para continuar, revise las instrucciones de la sección “Instalación de las dependencias de NVIDIA DeepStream Graph Composer” de este módulo sobre cómo instalar Docker.
Nota:
Si recibe “docker.errors.BuildError: unauthorized: authentication required” (docker.errors.BuildError: no autorizado: se requiere autenticación), este mensaje indica que es posible que no haya autenticado correctamente la cuenta de NVIDIA NGC para su uso con Docker.
Antes de ejecutar esta carga de trabajo en contenedores, es necesario conceder acceso al entorno de visualización X11 cuando se ejecuta desde un contenedor por la carga de trabajo mediante un receptor de salida de tipo EGL (tipo = 2).
Ejecute los siguientes comandos desde un terminal del equipo host para habilitar el acceso a los servicios X11:
sudo xhost +
Confirme que la carga de trabajo en contenedores se ejecuta según lo previsto mediante la ejecución del siguiente código en un terminal del equipo host:
sudo docker run -it --rm --gpus all -v /tmp/.X11-unix/:/tmp/.X11-unix/ -e DISPLAY=:0 deepstream_test1_dgpu
Este comando inicia una instancia
deepstream_test1_dgpu
de la imagen de contenedor y le proporciona acceso a todo el hardware de GPU disponible en la máquina, al tiempo que proporciona acceso al socket X11 y alDISPLAY
actual. Debería ver una salida similar a la ejecución anterior que se invocó medianteexecute_graph.sh
.
Ya está listo para publicar la carga de trabajo em contenedores en funcionamiento en un registro de contenedor seguro para su distribución.