Ejecuta instancias con aceleradores de GPU

En esta página, se describe cómo usar los aceleradores de hardware de la unidad de procesamiento de gráficos (GPU) de NVIDIA en instancias de máquina virtual (VM) de Container-Optimized OS.

Descripción general

Con Compute Engine, puedes crear instancias de VM Container-Optimized OS que tiene GPU conectadas. Solo puedes usar dos de máquinas virtuales cuando se ejecutan GPU en Compute Engine: y N1 de uso general.

  • En el caso de los tipos de máquinas optimizados para aceleradores, cada tipo de máquina tiene un de GPU de NVIDIA.

    • En el caso de los tipos de máquinas con optimización de acelerador A3, Se conectaron GPU NVIDIA H100 de 80 GB.
    • Para los tipos de máquina optimizados con acelerador A2 Las GPU de NVIDIA A100 están conectadas. Están disponibles en las opciones A100 de 40 GB y A100 de 80 GB.
    • Para los tipos de máquinas optimizados para el acelerador G2 Las GPU L4 de NVIDIA están conectadas.
  • En los tipos de máquinas de uso general N1, puedes conectar las siguientes GPU:

Las GPU proporcionan potencia de procesamiento para impulsar tareas de aprendizaje profundo, como el reconocimiento de imágenes. y el procesamiento de lenguaje natural, además de otras tareas de procesamiento intensivo, como la transcodificación de videos y el procesamiento de imágenes.

Google Cloud proporciona una experiencia fluida para que ejecutes tus cargas de trabajo de GPU en contenedores en instancias de VM de Container-Optimized OS para puedes beneficiarte de otras funciones de Container-Optimized OS, como la seguridad y confiabilidad del sistema.

Para obtener más información sobre los casos de uso de las GPU, consulta GPU de Cloud.

Para obtener más información sobre el uso de GPU en Google Kubernetes Engine (GKE), consulta Ejecuta GPU en GKE.

Requisitos

Ejecutar GPU en instancias de VM de Container-Optimized OS tiene los siguientes requisitos:

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

  • Versión de Container-Optimized OS: Para ejecutar GPU en instancias de VM de Container-Optimized OS, la meta de la actualización de Container-Optimized OS debe ser una meta de LTS y el número de hito debe ser 85 o superior.

  • Cuota de GPU: Debes tener una cuota de GPU de Compute Engine. en la zona que elegiste antes de crear una VM de Container-Optimized OS instancias con GPU. Para asegurarte de tener suficiente cuota de GPU en tu proyecto, haz lo siguiente: consulta Cuotas en la consola de Google Cloud.

    Si necesitas cuota de GPU adicional, debes solicitar cuota de GPU en la consola de Google Cloud Si tienes una cuenta de facturación establecida, tu proyecto recibirá de forma automática la cuota de GPU después de enviar la solicitud de cuota.

  • Controladores de GPU de NVIDIA: Debes instalar los controladores de GPU de NVIDIA por tu cuenta en las instancias de VM de Container-Optimized OS. En esta sección, se explica cómo instalar los controladores en las instancias de VM de Container-Optimized OS.

Crea una VM

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

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

También puedes agregar GPU a instancias de VM de Container-Optimized OS existentes.

Cuando crees VMs, recuerda elegir las imágenes o familias de imágenes el proyecto de imagen cos-cloud

Para verificar todas las GPU conectadas a tus instancias de VM actuales de Container-Optimized OS, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • INSTANCE_NAME: El nombre de la instancia VM nueva.
  • PROJECT_ID: Es el ID del proyecto.
  • zone: Es la zona de la instancia de VM.

Instala los controladores de GPU de NVIDIA

Después de crear una instancia con una o más GPU, el sistema requiere controladores de dispositivo para que las aplicaciones puedan acceder a este. En esta guía, se muestran las formas de instalar controladores propiedad 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 del controlador NVIDIA. Cuando se ejecuta la utilidad, los usuarios aceptan aceptar el contrato de licencia de NVIDIA.

Identifica las versiones del controlador de GPU

Cada versión de la imagen de Container-Optimized OS tiene una versión de controlador de GPU de NVIDIA compatible y predeterminada. Consulta las notas de la versión de los principales eventos importantes de LTS de Container-Optimized OS para conocer la versión predeterminada.

También puedes verificar todas las versiones de controlador de GPU compatibles si ejecutas el siguiente comando en tu instancia de VM de Container-Optimized OS:

sudo cos-extensions list

Identifica la versión requerida del kit de herramientas CUDA

Si tus aplicaciones usan CUDA, instalar el kit de herramientas CUDA de NVIDIA en tus contenedores. Cada versión de CUDA requiere una versión mínima del controlador de GPU o posterior. Para comprobar el mínimo La versión del controlador de GPU necesaria para tu versión de CUDA, consulta Kit de herramientas CUDA y versiones de controladores compatibles. Asegúrate de que la versión de Container-Optimized OS que usas tenga la versión correcta del controlador de GPU para la versión de CUDA que usas.

Instala el controlador

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

Shell

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

sudo cos-extensions install gpu

Secuencias de comandos de inicio

También puedes instalar controladores de GPU a través de secuencias de comandos de inicio. Puedes proporcionar la secuencia de comandos de inicio cuando creas instancias de VM o aplicar la secuencia de comandos a las instancias de VM en ejecución y, luego, reiniciarlas. Esto te permite 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 una 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 es más potente. En el siguiente ejemplo, se muestra cómo instalar el controlador de GPU a través de cloud-init:

#cloud-config

runcmd:
  - cos-extensions install gpu

El uso de cloud-init te permite especificar las dependencias para que tu GPU Las aplicaciones solo se ejecutarán luego de instalar el controlador. Consulta la sección De extremo a extremo: Ejecuta una aplicación de GPU en Container-Optimized OS para obtener más detalles.

Si deseas obtener más información para usar cloud-init en las instancias de VM de Container-Optimized OS, consulta la página Crea y configura instancias.

En algunos casos, el controlador predeterminado incluido en Container-Optimized OS no cumple con los requisitos mínimos de controlador de tu kit de herramientas CUDA o tu Modelo de GPU. Consulta el Controlador de NVIDIA obligatorio de versiones para los requisitos de versión de tipos específicos de GPU.

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

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

Reemplaza DRIVER_VERSION por uno de los siguientes valores: Opciones:

  • default: Instala el controlador predeterminado designado por el 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 el versión de Container-Optimized OS. Ten en cuenta que esto podría generar Cambios de compatibilidad debido a posibles actualizaciones importantes de versiones en COS y lanzamientos de versiones.
  • La versión completa: Usa esta opción para fijar una versión específica de las cargas de trabajo. sensibles a los cambios del controlador. Por ejemplo, especifica la versión 535.183.01.
  • Rama del controlador de NVIDIA: Instala el controlador estable más reciente dentro de un rama de NVIDIA para mantenerse al día con las actualizaciones de seguridad y las correcciones de errores . Por ejemplo, especifica la rama R535. Esta opción estará disponible a partir de desde cos-gpu-installer:v2.2.1.

Para ver las versiones disponibles de cada una de esas opciones, ejecuta el siguiente comando: Identifica las versiones de controladores de GPU.

Verifique la instalación

Puedes ejecutar los siguientes comandos en tu VM de Container-Optimized OS para verificar manualmente la instalación de los controladores de GPU. El resultado del comando muestra información de los dispositivos GPU, como el estado de los dispositivos 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

Configura contenedores para consumir GPU

Después de instalar los controladores de GPU, puedes configurar los contenedores para consumen GPU. En el siguiente ejemplo, se muestra cómo ejecutar una solicitud 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 con cloud-init para especificar la dependencia entre la instalación de los controladores y los contenedores. consulta la De extremo a extremo: Ejecuta una aplicación de GPU en Container-Optimized OS para obtener más detalles.

De extremo a extremo: Ejecuta una aplicación de GPU en Container-Optimized OS

En el siguiente ejemplo de extremo a extremo, se muestra cómo usar cloud-init para configurar las 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 de NVIDIA CUDA-X

CUDA® es una plataforma de procesamiento paralela de NVIDIA y un modelo de programación para las GPUs. Para usar aplicaciones CUDA, las bibliotecas deben estar presentes en la imagen que usas. Puedes realizar alguna de las siguientes acciones para agregar las bibliotecas NVIDIA CUDA-X:

  • Usa una imagen con las bibliotecas NVIDIA CUDA-X preinstaladas. Por ejemplo, puedes usar los contenedores de aprendizaje profundo de Google. Estos contenedores instalan previamente los frameworks de ciencia de datos clave, las bibliotecas y las herramientas de CUDA-X de NVIDIA. Como alternativa, la imagen CUDA de NVIDIA solo contiene las bibliotecas NVIDIA CUDA-X.

  • Compila 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 contienen los controladores del dispositivo NVIDIA, en la variable de entorno LD_LIBRARY_PATH. Para /usr/local/cuda-XX.X/lib64, el nombre del directorio depende de la versión de la imagen que usaste. Por ejemplo, las bibliotecas de NVIDIA CUDA-X y las utilidades de depuración en contenedores de Docker pueden estar en /usr/local/cuda-11.0/lib64 y /usr/local/nvidia/bin, respectivamente.

Seguridad

Al igual que otros módulos de kernel en Container-Optimized OS, los controladores de GPU están firmados y verificados criptográficamente por claves que están incorporadas en el kernel de Container-Optimized OS. A diferencia de otros entornos, Container-Optimized OS no permite que los usuarios inscriban su clave de propietario de máquina (MOK) ni usen las claves para firmar módulos de kernel personalizados. Esto es para garantizar la integridad del kernel de Container-Optimized OS y reducir la superficie de ataque.

Restricciones

Restricciones de versiones de Container-Optimized OS

Solo Container-Optimized OS LTS 85 y versiones posteriores admiten el La utilidad cos-extensions mencionada en Instala controladores de dispositivos de GPU de NVIDIA sección. Para los hitos de versiones anteriores de Container-Optimized OS, utiliza el cos-gpu-installer de código abierto para instalar manualmente los controladores de GPU.

Restricciones de instancias de VM

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

Cuota y disponibilidad

Las GPU están disponibles en regiones y zonas específicas. Cuando solicitas la cuota de GPU, debes tener en cuenta las regiones en las que quieres ejecutar tus instancias de VM de Container-Optimized OS.

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

gcloud compute accelerator-types list

Precios

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

Compatibilidad

Cada versión de actualización de Container-Optimized OS tenga al menos una versión compatible del controlador de GPU de NVIDIA. El equipo de Container-Optimized OS califica los controladores de GPU compatibles con la versión de Container-Optimized OS antes de su lanzamiento para asegurarse de que sean compatibles. Es posible que las versiones nuevas de los controladores de GPU de NVIDIA estén disponibles cada tanto. Algunas versiones de controladores de GPU no califican Container-Optimized OS, y no se garantiza el cronograma de calificación.

Cuando el equipo de Container-Optimized OS lanza una versión nueva en un evento importante de actualización, intentamos admitir la última versión del controlador de GPU en la rama del controlador correspondiente. El propósito de esto es corregir las CVE que se descubren 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, el cliente debe trabajar directamente con NVIDIA para obtener asistencia. Si el problema no es específico de un conductor, los usuarios pueden abrir una solicitud con Atención al cliente de Cloud.

¿Qué sigue?