Ejecutar instancias con aceleradores de GPU

En esta página se describe cómo usar aceleradores de hardware de unidades de procesamiento gráfico (GPU) de NVIDIA en instancias de máquinas virtuales (VM) de Container-Optimized OS.

Información general

Con Compute Engine, puedes crear instancias de máquina virtual que ejecuten Container-Optimized OS y que tengan GPUs conectadas. Solo puedes usar dos familias de máquinas al ejecutar GPUs en Compute Engine: las optimizadas para aceleradores y las de uso general N1.

  • En el caso de los tipos de máquinas optimizadas para aceleradores, cada tipo de máquina tiene un modelo específico de GPU NVIDIA conectada.

    • En los tipos de máquinas A4 optimizadas para aceleradores, se incluyen GPUs NVIDIA B200.
    • En los tipos de máquinas A3 Ultra optimizadas para aceleradores, se incluyen GPUs NVIDIA H200 de 141 GB.
    • En los tipos de máquinas A3 optimizadas para aceleradores, se incluyen GPUs NVIDIA H100 de 80 GB.
    • En los tipos de máquinas A2 optimizadas para aceleradores, se incluyen GPUs NVIDIA A100. Están disponibles en las opciones A100 de 40 GB y A100 de 80 GB.
    • En los tipos de máquinas G2 optimizadas para aceleradores, se incluyen GPUs NVIDIA L4.
  • En los tipos de máquinas de uso general N1, puedes conectar las siguientes GPUs:

Las GPUs proporcionan potencia de cálculo para llevar a cabo tareas de aprendizaje profundo, como el reconocimiento de imágenes y el procesamiento del lenguaje natural, así como otras tareas que requieren muchos recursos de computación, como la transcodificación de vídeo y el procesamiento de imágenes.

Google Cloud te ofrece una experiencia fluida para ejecutar tus cargas de trabajo de GPU en contenedores en instancias de VM de Container-Optimized OS, de forma que puedas beneficiarte de otras funciones de Container-Optimized OS, como la seguridad y la fiabilidad.

Para obtener más información sobre los casos prácticos de las GPUs, consulta GPUs en la nube.

Para obtener información sobre cómo usar GPUs en Google Kubernetes Engine (GKE), consulta Ejecutar GPUs en GKE.

Requisitos

Para ejecutar GPUs en instancias de VM de Container-Optimized OS, se deben cumplir los siguientes requisitos:

  • Imágenes x86 de Container-Optimized OS: solo las imágenes x86 de Container-Optimized OS admiten la ejecución de GPUs. Las imágenes de Container-Optimized OS basadas en Arm no admiten esta función.

  • Versión de Container-Optimized OS: para ejecutar GPUs en instancias de VM de Container-Optimized OS, el hito de lanzamiento de Container-Optimized OS debe ser un hito de LTS y el número del hito debe ser 85 o superior.

  • Cuota de GPUs: debes tener cuota de GPUs de Compute Engine en la zona que elijas para poder crear instancias de máquina virtual de Container-Optimized OS con GPUs. Para asegurarte de que tienes suficiente cuota de GPU en tu proyecto, consulta Cuotas en la Google Cloud consola.

    Si necesitas más cuota de GPU, debes solicitarla en la consola de Google Cloud . Si tienes una cuenta de facturación, tu proyecto recibirá automáticamente la cuota de GPU después de enviar la solicitud.

  • Controladores de GPU NVIDIA: debes instalar los controladores de GPU NVIDIA por tu cuenta en tus instancias de VM con SO optimizado para contenedores. En esta sección se explica cómo instalar los controladores en instancias de VM de Container-Optimized OS.

Crear VM

En las siguientes secciones se explica cómo ejecutar GPUs en VMs con Container-Optimized OS.

Primero, necesitas una instancia de VM de Container-Optimized OS con GPUs. El método utilizado para crear una VM depende del modelo de GPU seleccionado.

También puedes añadir GPUs a instancias de máquina virtual con Container-Optimized OS.

Cuando crees máquinas virtuales, recuerda elegir imágenes o familias de imágenes del proyecto de imágenes cos-cloud.

Para comprobar todas las GPUs conectadas a tus instancias de máquina virtual de Container-Optimized OS, ejecuta el siguiente comando:

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

Haz los cambios siguientes:

Instalar los controladores de dispositivos de GPU NVIDIA

Después de crear una instancia con una o varias GPUs, tu sistema necesita controladores de dispositivo para que tus aplicaciones puedan acceder al dispositivo. En esta guía se explica cómo instalar controladores propietarios de NVIDIA en instancias de VM de Container-Optimized OS.

Container-Optimized OS proporciona una utilidad integrada cos-extensions para simplificar el proceso de instalación de los controladores de NVIDIA. Al ejecutar la utilidad, los usuarios aceptan el contrato de licencia de NVIDIA.

Identificar las versiones de los controladores de GPU

Cada versión de la imagen de Container-Optimized OS tiene una lista de versiones de controladores de GPU NVIDIA compatibles para cada tipo de GPU, así como un controlador predeterminado para cada tipo. Para ver una lista completa de las versiones compatibles, consulta las notas de la versión de los principales hitos de LTS de Container-Optimized OS.

También puedes consultar todas las versiones del controlador de GPU compatibles con la GPU de tu instancia de VM de Container-Optimized OS ejecutando el siguiente comando:

sudo cos-extensions list

Identificar la versión necesaria del kit de herramientas de CUDA

Si tus aplicaciones usan CUDA, instala el kit de herramientas CUDA de NVIDIA en tus contenedores. Cada versión de CUDA requiere una versión mínima del controlador de la GPU o una versión posterior. Para comprobar la versión mínima del controlador de GPU necesaria para tu versión de CUDA, consulta CUDA Toolkit and Compatible Driver Versions (Kit de herramientas de CUDA y versiones de controladores compatibles). Asegúrate de que la versión de Container-Optimized OS que estés usando tenga la versión correcta del controlador de GPU para la versión de CUDA que estés usando.

Instalar el controlador

Puedes instalar GPUs mediante comandos de shell, secuencias de comandos de inicio o cloud-init. Los tres métodos utilizan el comando sudo cos-extensions install gpu para instalar el controlador de GPU predeterminado de tu versión LTS de Container-Optimized OS.

Shell

Después de conectarte a tus instancias de VM de Container-Optimized OS, puedes ejecutar el siguiente comando manualmente para instalar los controladores:

sudo cos-extensions install gpu

Secuencias de comandos de inicio

También puedes instalar controladores de GPU mediante scripts de inicio. Puedes proporcionar la secuencia de comandos de inicio al crear instancias de VM o aplicar la secuencia de comandos a instancias de VM en ejecución y, a continuación, reiniciar las VMs. De esta forma, puedes instalar controladores sin conectarte a las VMs. También se asegura de que los controladores de GPU estén configurados en cada reinicio de la VM.

A continuación, se muestra un ejemplo de secuencia de comandos de inicio para instalar controladores:

#! /bin/bash

sudo cos-extensions install gpu

Cloud-init

Cloud-init es similar a las secuencias de comandos de inicio, pero más potente. En el siguiente ejemplo se muestra cómo instalar el controlador de GPU mediante cloud-init:

#cloud-config

runcmd:
  - cos-extensions install gpu

Con cloud-init, puedes especificar las dependencias para que tus aplicaciones de GPU solo se ejecuten después de que se haya instalado el controlador. Consulta la sección De extremo a extremo: ejecutar una aplicación de GPU en Container-Optimized OS para obtener más información.

Para obtener más información sobre cómo usar cloud-init en instancias de VM de Container-Optimized OS, consulta la página sobre creación y configuración de instancias.

En algunos casos, el controlador predeterminado incluido en Container-Optimized OS no cumple los requisitos mínimos del controlador de tu kit de herramientas de CUDA o de tu modelo de GPU. Consulta las versiones de controladores de NVIDIA obligatorias para ver los requisitos de versión de tipos específicos de GPUs.

Para instalar una versión específica del controlador de GPU, ejecuta el siguiente comando:

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

Sustituye DRIVER_VERSION por una de las siguientes opciones:

  • default: instala el controlador predeterminado designado por la versión de Container-Optimized OS. Esta versión recibe correcciones de errores y actualizaciones de seguridad.
  • latest: instala el controlador más reciente disponible en la versión de Container-Optimized OS. Ten en cuenta que esto puede introducir cambios en la compatibilidad debido a posibles actualizaciones de versiones principales en las versiones de COS.
  • Versión completa: úsala para fijar una versión específica para cargas de trabajo sensibles a los cambios en los controladores. Por ejemplo, especifica la versión 535.183.01.
  • Rama del controlador de NVIDIA: instala el controlador estable más reciente de una rama específica de NVIDIA para estar al día de las actualizaciones de seguridad y las correcciones de errores de esa rama. Por ejemplo, especifica la rama R535. Esta opción está disponible a partir de cos-gpu-installer:v2.2.1.

Para ver las versiones disponibles de cada una de esas opciones, ejecuta el comando para identificar las versiones del controlador de la GPU.

Transferir parámetros a los módulos del kernel

Puedes transferir parámetros específicos al módulo del kernel de NVIDIA durante la instalación mediante la marca --module-arg. Esta marca es útil para habilitar o inhabilitar determinadas funciones del controlador. La marca se puede usar varias veces para transferir varios argumentos.

Por ejemplo, en una VM de COS, puedes usar el siguiente comando para instalar el controlador de NVIDIA y cargar el módulo del kernel nvidia.ko con el parámetro NVreg_EnableGpuFirmware=0.

sudo cos-extensions install gpu -- --module-arg nvidia.NVreg_EnableGpuFirmware=0

Precargar el controlador

Puedes precargar el controlador de la GPU en tu instancia de Container-Optimized OS aunque no haya ningún dispositivo de GPU conectado. Esto resulta útil para preparar entornos o probar configuraciones antes de conectar hardware de GPU físico.

Para precargar el controlador de GPU, ejecuta el siguiente comando:

sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE

Este comando se admite a partir de cos-gpu-installer:v2.3.0. Se aplican las siguientes marcas:

  • -no-verify: descarga y prepara los archivos del controlador, pero omite la carga del módulo del kernel y la verificación de la instalación.

  • -target-gpu: especifica el dispositivo de GPU para asegurarse de que el controlador correcto se precarga, lo que evita problemas de compatibilidad cuando se conecta el dispositivo de GPU más adelante. Sustituye GPU_DEVICE por un modelo de GPU específico (por ejemplo,NVIDIA_L4) que se indique en la vista general. Si no se especifica -target-gpu, se precargará el controlador de GPU predeterminado.

Verificar la instalación

Puedes ejecutar los siguientes comandos en tus instancias de VM de Container-Optimized OS para verificar manualmente la instalación de los controladores de GPU. La salida del comando muestra información sobre los dispositivos de GPU, como el estado de los dispositivos y la versión del controlador.

# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

Configurar contenedores para que usen GPUs

Una vez que se hayan instalado los controladores de GPU, podrás configurar los contenedores para que usen GPUs. En el siguiente ejemplo se muestra cómo ejecutar una aplicación CUDA en un contenedor de Docker que consume /dev/nvidia0:

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

Puedes ejecutar tus contenedores a través de cloud-init para especificar la dependencia entre la instalación del controlador y tus contenedores. Consulta la sección De principio a fin: ejecutar una aplicación de GPU en Container-Optimized OS para obtener más información.

De principio a fin: ejecutar una aplicación de GPU en Container-Optimized OS

En el siguiente ejemplo integral se muestra cómo usar cloud-init para configurar instancias de VM de Container-Optimized OS que aprovisionan un contenedor de aplicaciones de GPU myapp:latest después de instalar el controlador de GPU:

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

Acerca de las bibliotecas NVIDIA CUDA-X

CUDA® es la plataforma de computación paralela y el modelo de programación de NVIDIA para GPUs. Para usar aplicaciones CUDA, las bibliotecas deben estar presentes en la imagen que estés usando. Puedes hacer cualquiera de las siguientes acciones para añadir las bibliotecas CUDA-X de NVIDIA:

  • Usa una imagen con las bibliotecas NVIDIA CUDA-X preinstaladas. Por ejemplo, puedes usar los contenedores de aprendizaje profundo de Google. Estos contenedores preinstalan los frameworks de ciencia de datos clave, las bibliotecas de NVIDIA CUDA-X y las herramientas. También puedes usar la imagen CUDA de NVIDIA, que solo contiene las bibliotecas NVIDIA CUDA-X.

  • Crea y usa tu propia imagen. En este caso, incluye /usr/local/cuda-XX.X/lib64, que contiene las bibliotecas NVIDIA CUDA-X, y /usr/local/nvidia/lib64, que contiene los controladores de dispositivos NVIDIA, en la variable de entorno LD_LIBRARY_PATH. En el caso de /usr/local/cuda-XX.X/lib64, el nombre del directorio depende de la versión de la imagen que hayas usado. Por ejemplo, las bibliotecas NVIDIA CUDA-X y las utilidades de depuración de los contenedores Docker pueden estar en /usr/local/cuda-11.0/lib64 y /usr/local/nvidia/bin, respectivamente.

Seguridad

Al igual que otros módulos del kernel en Container-Optimized OS, los controladores de GPU están firmados criptográficamente y verificados por claves integradas en el kernel de Container-Optimized OS. A diferencia de otras distribuciones, Container-Optimized OS no permite que los usuarios registren su clave de propietario de la máquina (MOK) y usen las claves para firmar módulos de kernel personalizados. De esta forma, se asegura la integridad del kernel de Container-Optimized OS y se reduce la superficie de ataque.

Restricciones

Restricciones de la versión de Container-Optimized OS

Solo la versión LTS 85 y posteriores de Container-Optimized OS admiten la utilidad cos-extensions mencionada en la sección Instalar controladores de dispositivos de GPU NVIDIA. Para versiones anteriores de Container-Optimized OS, usa la herramienta de código abierto cos-gpu-installer para instalar manualmente los controladores de GPU.

Restricciones de las instancias de VM

Las instancias de VM con GPUs tienen restricciones específicas que hacen que se comporten de forma diferente a otros tipos de instancias. Para obtener más información, consulta la página Restricciones de las GPUs de Compute Engine.

Cuota y disponibilidad

Las GPUs están disponibles en regiones y zonas concretas. Cuando solicites cuota de GPU, ten en cuenta las regiones en las que quieras ejecutar tus instancias de VM de Container-Optimized OS.

Para ver una lista completa de las regiones y zonas aplicables, consulta GPUs en Compute Engine. También puedes ver las GPUs disponibles en tu zona con la CLI de Google Cloud.

gcloud compute accelerator-types list

Precios

Para obtener información sobre los precios de las GPUs, consulta la página de precios de Compute Engine.

Compatibilidad

Cada versión de lanzamiento de Container-Optimized OS tiene al menos una versión compatible del controlador de GPU NVIDIA. El equipo de Container-Optimized OS comprueba que los controladores de GPU compatibles sean compatibles con la versión de Container-Optimized OS antes de lanzarla. De vez en cuando, pueden publicarse nuevas versiones de los controladores de GPU de NVIDIA. Algunas versiones de controladores de GPU no cumplen los requisitos de Container-Optimized OS y no se garantiza el plazo para cumplir los requisitos.

Cuando el equipo de Container-Optimized OS lanza una nueva versión en un hito de lanzamiento, intentamos admitir la versión más reciente del controlador de GPU en la rama del controlador correspondiente. El objetivo es corregir las CVEs descubiertas en los controladores de GPU lo antes posible.

Si un cliente de Container-Optimized OS identifica un problema relacionado con los controladores de GPU de NVIDIA, debe ponerse en contacto directamente con NVIDIA para obtener asistencia. Si el problema no es específico de un controlador, los usuarios pueden abrir una solicitud con el equipo de Asistencia de Google Cloud.

Siguientes pasos