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 que ejecuten Container-Optimized OS y que tengan GPUs conectadas. Solo puedes usar dos familias de máquinas cuando ejecutas GPUs en Compute Engine: optimizadas para aceleradores y de uso general N1.
En el caso de los tipos de máquinas optimizados para aceleradores, cada tipo de máquina tiene un modelo específico de GPU de NVIDIA conectada.
- En los tipos de máquinas optimizadas para aceleradores A3, se conectan GPU NVIDIA H100 de 80 GB.
- En los tipos de máquinas optimizados para aceleradores A2, se conectan las GPU NVIDIA A100. Están disponibles en las opciones A100 de 40 GB y A100 de 80 GB.
- En los tipos de máquinas optimizados para aceleradores G2, se conectan las GPU NVIDIA L4.
En el caso de los tipos de máquinas N1 de uso general, puedes conectar las siguientes GPUs:
Las GPU brindan potencia de procesamiento para impulsar tareas de aprendizaje profundo, como reconocimiento de imágenes y procesamiento de lenguaje natural, y otras tareas con gran demanda de procesamiento, como la transcodificación de videos y el procesamiento de imágenes.
Google Cloud proporciona una experiencia sin inconvenientes para que ejecutes tus cargas de trabajo de GPU en contenedores en instancias de VM de Container-Optimized OS, de modo que puedas beneficiarte de otras funciones de Container-Optimized OS, como la seguridad y la confiabilidad.
Para obtener más información sobre los casos de uso de las GPU, consulta GPU de Cloud.
Para obtener información sobre el uso de GPUs en Google Kubernetes Engine (GKE), consulta Cómo ejecutar GPUs en GKE.
Requisitos
Ejecutar GPU en instancias de VM de Container-Optimized OS tiene los siguientes requisitos:
Imágenes de Container-Optimized OS x86: Solo las imágenes de Container-Optimized OS que se basan en x86 admiten la ejecución de GPUs. Las imágenes de Container-Optimized OS basadas en Arm no son compatibles con 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 la cuota de GPU de Compute Engine en la zona que elijas antes de que puedas crear instancias de VM de OS optimizado para contenedores con GPUs. Si deseas asegurarte de que cuentas con la cuota de GPU suficiente para tu proyecto, consulta Cuotas en la consola de Google Cloud.
Si necesitas una cuota de GPU adicional, debes solicitar una 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.
Cree una VM
En las siguientes secciones, se explica cómo ejecutar GPU en las VMs de Container-Optimized OS.
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.
- Para crear una VM de Container-Optimized OS que tenga GPU NVIDIA H100, A100 o L4 conectadas, consulta Crea una VM optimizada para aceleradores.
- Para crear una VM de Container-Optimized OS que tenga GPU NVIDIA T4, P4, P100 o V100, consulta Crea una VM N1 que tenga las GPU conectadas.
También puedes agregar GPUs a instancias de VM existentes de Container-Optimized OS.
Cuando crees VMs, recuerda elegir imágenes o familias de imágenes del 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 de los controladores de GPU
Cada versión de la imagen de Container-Optimized OS tiene una lista de versiones compatibles del controlador de GPU de NVIDIA para cada tipo de GPU, junto con un controlador predeterminado para cada tipo. Para obtener una lista completa de las versiones compatibles, consulta las notas de la versión de los principales eventos importantes de LTS de Container-Optimized OS.
También puedes verificar todas las versiones de controladores de GPU compatibles con la GPU en tu instancia de VM de Container-Optimized OS ejecutando el siguiente comando:
sudo cos-extensions list
Identifica la versión requerida del kit de herramientas CUDA
Si tus aplicaciones usan CUDA, instala el kit de herramientas de CUDA de NVIDIA en tus contenedores. Cada versión de CUDA requiere una versión mínima del controlador de GPU o posterior. Si deseas verificar el controlador de GPU mínimo necesario para tu versión de CUDA, consulta el kit de herramientas CUDA y las 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 GPUs con comandos de shell, secuencias de comandos de inicio o
cloud-init. Los tres métodos usan el comando sudo cos-extensions install gpu
para instalar el controlador de GPU predeterminado de la versión 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 tus aplicaciones de GPU solo se ejecuten después 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 con el SO optimizado para contenedores no cumple con los requisitos mínimos de controladores de tu kit de herramientas CUDA o tu modelo de GPU. Consulta las versiones de controladores NVIDIA necesarias para conocer 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
Reemplaza 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 del SO optimizado para contenedores. Ten en cuenta que esto podría generar cambios de compatibilidad debido a posibles actualizaciones de versiones principales en las versiones de COS.- La versión completa: Úsala para fijar una versión específica para cargas de trabajo sensibles a los cambios de controladores. Por ejemplo, especifica la versión
535.183.01
. - Rama del controlador de NVIDIA: Instala el controlador estable más reciente dentro de una rama específica de NVIDIA para mantenerte al tanto de las actualizaciones de seguridad y las correcciones de errores dentro de esa rama. Por ejemplo, especifica la rama
R535
. Esta opción está disponible a partir decos-gpu-installer:v2.2.1
.
Para ver las versiones disponibles para cada una de esas opciones, ejecuta el comando para identificar las versiones de los controladores de GPU.
Cómo precargar el controlador
Puedes precargar el controlador de GPU en tu instancia de Container-Optimized OS, incluso cuando no hay ningún dispositivo de GPU conectado. Esto es útil para preparar entornos o probar configuraciones antes de conectar hardware de GPU física.
Para precargar el controlador de la GPU, ejecuta el siguiente comando:
sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE
Este comando es compatible 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 instalación.-target-gpu
: Especifica el dispositivo de GPU para garantizar que se cargue previamente el controlador correcto, lo que evita problemas de compatibilidad cuando se conecta el dispositivo de GPU más adelante. ReemplazaGPU_DEVICE
por un modelo de GPU específico (por ejemplo,NVIDIA_L4
) que aparece en la Descripción general. Si no se especifica-target-gpu
, se precargará el controlador de GPU predeterminado.
Verifique la instalación
Puedes ejecutar los siguientes comandos en las instancias de VM de Container-Optimized OS para verificar manualmente la instalación de los controladores de GPU. El resultado del comando muestra la información de 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
Configura contenedores para consumir GPUs
Después de instalar los controladores de GPU, puedes configurar los contenedores para que consuman 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 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 entornoLD_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 la versión milestone 85 de COS LTS de Container-Optimized OS y versiones posteriores admiten la utilidad cos-extensions
que se menciona en la sección Instala controladores de dispositivos de GPU de NVIDIA. Para los eventos importantes de lanzamiento anteriores de Container-Optimized OS, usa la herramienta de código abierto cos-gpu-installer
para instalar de forma manual 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 tiene al menos una versión de controlador de GPU de NVIDIA compatible. 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 del controlador de GPU no se calificarán para 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 los controladores, los usuarios pueden abrir una solicitud con Atención al cliente de Cloud.
¿Qué sigue?
- Obtén más información sobre la ejecución de contenedores en una instancia de VM de Container-Optimized OS.
- Obtén más información sobre las GPU en Compute Engine.
- Obtén más información para solicitar cuota de GPU.