Instalación y uso de NVIDIA Container Runtime en Ubuntu


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.

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

  1. 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
  1. 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
  1. 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.
Insertar descripción de la imagen aquí

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

0,1,2,oGPU-fef8089b

una lista separada por comas de UUID o índices de GPU.

all

Se podrá acceder a todas las GPU; este es el valor predeterminado en las imágenes del contenedor CUDA base.

none

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

voido vacío o desarmado

nvidia-container-runtimetendrá el mismo comportamiento que runc(es decir, ni las GPU ni las capacidades están expuestas)

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

compute,videoographics,utility

una lista separada por comas de las características del controlador que necesita el contenedor.

all

habilitar todas las capacidades del controlador disponibles.

vacío o desarmado

usar la capacidad predeterminada del controlador: utility, compute(usar la capacidad predeterminada del controlador: utilidad, cálculo)

Las funciones del controlador admitidas son las siguientes

Capacidad del conductor

Descripción

compute

Requerido para aplicaciones CUDA y OpenCL.

compat32

necesario para ejecutar aplicaciones de 32 bits.

graphics

Requerido para ejecutar aplicaciones OpenGL y Vulkan.

utility

Requerido para usar nvidia-smiNVML.

video

necesario para utilizar el SDK de códec de vídeo.

display

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

cuda

restricción en la versión del controlador CUDA.

driver

restricción en la versión del controlador.

arch

restricción en las arquitecturas informáticas de las GPU seleccionadas.

brand

restricción en la marca de las GPU seleccionadas (por ejemplo, GeForce, Tesla, GRID).

Se pueden expresar múltiples restricciones en una sola variable de entorno: las restricciones separadas por espacios se aplican mediante operación OR (o), las restricciones separadas por comas se aplican mediante operación AND (y). Por ejemplo
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.

Supongo que te gusta

Origin blog.csdn.net/qq_35395195/article/details/131431872
Recomendado
Clasificación