Repositorio GitHub del sitio web oficial de NVIDIA Container Runtime : Docker es la tecnología de contenedores más utilizada por los desarrolladores. Con NVIDIA Container Runtime, los desarrolladores pueden exponer las GPU NVIDIA a aplicaciones en el contenedor simplemente registrando un nuevo tiempo de ejecución durante la creación del contenedor. NVIDIA Container Runtime para Docker es un proyecto de código abierto alojado en GitHub.
Directorio de artículos
Introducción
NVIDIA Container Runtime es un tiempo de ejecución de contenedores compatible con GPU, compatible con la especificación Open Containers Initiative (OCI) utilizada por Docker, CRI-O y otras tecnologías de contenedores populares. Simplifica el proceso de creación e implementación de aplicaciones en contenedores aceleradas por GPU en el escritorio. nube o centros de datos.
NVIDIA Container Runtime es un tiempo de ejecución de contenedor compatible con GPU que es compatible con la especificación Open Containers Initiative (OCI) utilizada por Docker, CRI-O y otras tecnologías de contenedores populares. Simplifica el proceso de creación de aplicaciones en contenedores aceleradas por GPU e implementación en el escritorio, la nube o el centro de datos.
Con las tecnologías de contenedores compatibles con NVIDIA Container Runtime, como Docker, los desarrolladores pueden empaquetar sus aplicaciones aceleradas por GPU junto con sus dependencias en un único paquete que garantiza el mejor rendimiento en las GPU de NVIDIA, independientemente del entorno de implementación
. los desarrolladores empaquetan sus aplicaciones aceleradas por GPU y sus dependencias en un solo paquete que garantiza un rendimiento óptimo en las GPU NVIDIA independientemente del entorno de implementación.
Instalar
Este artículo hace referencia a la documentación de instalación oficial de NVIDIA Container Toolkit para instalarlo en Ubuntu 22.04.
Requisitos medioambientales
- El controlador NVIDIA Linux está instalado y la versión >= 418.81.07
- Versión del kernel > 3.10 GNU/Linux x86_64
- Ventana acoplable >= 19.03
- GPU NVIDIA con arquitectura >= Kepler (o Compute Capability 3.0)
iniciar la instalación
- Configurar el repositorio de paquetes y la clave GPG
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
- Actualice y descargue e instale nvidia-docker2
sudo apt-get update
la actualización puede informar un error:
sudo apt-get update
E: Valores conflictivos establecidos para la opción Firmado por con respecto a la fuente https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/ /: /usr/share/keyrings/nvidia- container-toolkit-keyring.gpg !=
E: No se pudo leer la lista de fuentes.
Para obtener soluciones, consulte el documento oficial Valores conflictivos establecidos para la opción Error firmado por al ejecutar apt update
sudo apt-get install -y nvidia-docker2
sudo nvidia-ctk runtime configure --runtime=docker
- Reinicie el demonio Docker y pruebe
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Si ve un resultado similar al siguiente, la instalación se realizó correctamente.
Ejemplo de uso
Consulte el documento oficial Guía del usuario.
Agregar el tiempo de ejecución de NVIDIA
Debido a que nvidia-docker2 se instaló anteriormente, no es necesario agregar NVIDIA Runtime.
Establecer variables de entorno
Los usuarios pueden utilizar variables de entorno para controlar el comportamiento del tiempo de ejecución del contenedor NVIDIA, específicamente la capacidad de enumerar GPU y controladores.
Estas variables de entorno ya se han configurado en la imagen CUDA básica proporcionada por NVIDIA.
enumeración de GPU
Utilice --gpus o utilice la variable de entorno NVIDIA_VISIBLE_DEVICES para controlar qué GPU puede utilizar el contenedor
El valor de NVIDIA_VISIBLE_DEVICES es el siguiente
Valores posibles |
Descripción |
---|---|
|
una lista separada por comas de UUID o índices de GPU. |
|
Se podrá acceder a todas las GPU; este es el valor predeterminado en las imágenes del contenedor CUDA base. |
|
no se podrá acceder a ninguna GPU, pero se habilitarán las capacidades del controlador (no se pueden usar todas las GPU, pero las capacidades del controlador están habilitadas). |
|
|
Cuando use --gpu para especificar la GPU, también debe usar el parámetro del dispositivo. El ejemplo es el siguiente
docker run --gpus '"device=1,2"' \
nvidia/cuda nvidia-smi --query-gpu=uuid --format=csv
Habilitar todas las GPU
docker run --rm --gpus all nvidia/cuda nvidia-smi
Utilice NVIDIA_VISIBLE_DEVICES para habilitar todas las GPU
docker run --rm --runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=all nvidia/cuda nvidia-smi
Utilice NVIDIA_VISIBLE_DEVICES para habilitar GPU específicas
docker run --rm --runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=1,2 \
nvidia/cuda nvidia-smi --query-gpu=uuid --format=csv
Inicie un contenedor habilitado para GPU en dos GPU
docker run --rm --gpus 2 nvidia/cuda nvidia-smi
Utilice nvidia-smi para consultar el UUID de la GPU y asignarlo al contenedor
nvidia-smi -i 3 --query-gpu=uuid --format=csv
uuid
GPU-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24
docker run --gpus device=GPU-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24 \
nvidia/cuda nvidia-smi
Función de conducción
NVIDIA_DRIVER_CAPABILITIES controla qué bibliotecas/binarios de controladores se montan en el contenedor.
Los valores de NVIDIA_DRIVER_CAPABILITIES son los siguientes
Valores posibles |
Descripción |
---|---|
|
una lista separada por comas de las características del controlador que necesita el contenedor. |
|
habilitar todas las capacidades del controlador disponibles. |
vacío o desarmado |
usar la capacidad predeterminada del controlador: |
Capacidad del conductor |
Descripción |
---|---|
|
Requerido para aplicaciones CUDA y OpenCL. |
|
necesario para ejecutar aplicaciones de 32 bits. |
|
Requerido para ejecutar aplicaciones OpenGL y Vulkan. |
|
Requerido para usar |
|
necesario para utilizar el SDK de códec de vídeo. |
|
necesario para aprovechar la pantalla X11. |
Por ejemplo, especifique computación y utilidad, dos formas de escribir
docker run --rm --runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=2,3 \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
nvidia/cuda nvidia-smi
docker run --rm --gpus 'all,"capabilities=compute,utility"' \
nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
restricción
El tiempo de ejecución de NVIDIA también proporciona a los contenedores la capacidad de definir restricciones en los archivos de configuración.
NVIDIA_REQUIRE_* es una expresión lógica que se utiliza para definir restricciones en la versión del software o la arquitectura de GPU en el contenedor. El siguiente es el contenido específico de las restricciones.
Restricción |
Descripción |
---|---|
|
restricción en la versión del controlador CUDA. |
|
restricción en la versión del controlador. |
|
restricción en las arquitecturas informáticas de las GPU seleccionadas. |
|
restricción en la marca de las GPU seleccionadas (por ejemplo, GeForce, Tesla, GRID). |
NVIDIA_REQUIRE_CUDA "cuda>=11.0 driver>=450"
Ver el texto original para más información.
archivo acoplable
Esto se puede configurar mediante variables de entorno, por ejemplo
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
Composición acoplable
Consulte el tutorial en la documentación oficial de Docker.
Método de escritura componer v2.3
services:
test:
image: nvidia/cuda:10.2-base
command: nvidia-smi
runtime: nvidia
Esta forma de escribir no puede controlar las propiedades específicas de la GPU.
Control más granular
- Los valores de capacidades
se especifican como una lista de cadenas (p. ej. capacidades: [gpu]). Debe configurar este campo en el archivo Redactar. De lo contrario, devolverá un error cuando se implemente el servicio. - count
se especifica como un valor de int o all que indica la cantidad de dispositivos GPU que deben reservarse (suponiendo que el host tenga esa cantidad de GPU). - device_ids
se especifica como el valor de una lista de cadenas que representan los ID de dispositivo GPU del host. La ID del dispositivo se puede encontrar en la salida nvidia-smi de la máquina host. - controlador
especificado como un valor de cadena (por ejemplo, controlador: 'nvidia') - options
representa un par clave-valor de opciones específicas del controlador.
count y device_ids son mutuamente excluyentes. Sólo puede definir un campo a la vez.
Para obtener más información sobre estas propiedades, consulte la sección Especificación de redacción en implementación.
Por ejemplo, use todas las GPU en el host y las funciones del controlador especificadas (aunque el valor de NVIDIA_DRIVER_CAPABILITIES puede ser todo, no puede escribirlo todo aquí, se informará un error, solo puede escribir cada uno claramente)
services:
test:
image: nvidia/cuda:10.2-base
command: nvidia-smi
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [compute,graphics,video,utility,display]
Para obtener más ejemplos de configuración, consulte la documentación oficial.