Configura GPUs para trabajos de Cloud Run

En esta página, se describe la configuración de GPU para tus trabajos de Cloud Run. Las GPUs funcionan bien para cargas de trabajo de IA, como el entrenamiento de modelos de lenguaje grandes (LLM) con tus frameworks preferidos, la realización de inferencias por lotes o sin conexión en LLM y el manejo de otras tareas con gran demanda de procesamiento, como el procesamiento de video y la renderización de gráficos como trabajos en segundo plano. Google proporciona GPU NVIDIA L4 con 24 GB de memoria de GPU (VRAM), que es independiente de la memoria de la instancia.

La GPU en Cloud Run está completamente administrada, sin necesidad de controladores ni bibliotecas adicionales. La función de GPU ofrece disponibilidad a pedido sin necesidad de reservas, similar a la forma en que funcionan la CPU y la memoria a pedido en Cloud Run.

Las instancias de Cloud Run con una GPU L4 conectada con controladores preinstalados comienzan en aproximadamente 5 segundos, momento en los que los procesos que se ejecutan en tu contenedor pueden comenzar a usar la GPU.

Puedes configurar una GPU por instancia de Cloud Run. Si usas contenedores secundarios, ten en cuenta que la GPU solo se puede conectar a un contenedor.

Regiones admitidas

  • asia-southeast1 (Singapur)
  • asia-south1 (Bombay) . Esta región solo está disponible por invitación. Comunícate con tu equipo de Cuentas de Google si te interesa esta región.
  • europe-west1 (Bélgica) ícono de hoja Bajo nivel de CO2
  • europe-west4 (Países Bajos) ícono de hoja Bajo nivel de CO2
  • us-central1 (Iowa) ícono de hoja Bajo nivel de CO2
  • us-east4 (Virginia del Norte)

Tipos de GPU compatibles

Puedes usar una GPU L4 por instancia de Cloud Run. Una GPU L4 tiene los siguientes controladores preinstalados:

  • La versión actual del controlador NVIDIA: 535.216.03 (CUDA 12.2)

Impacto en los precios

Consulta los precios de Cloud Run para obtener detalles sobre los precios de las GPU. Ten en cuenta los siguientes requisitos y consideraciones:

  • Las GPU para trabajos siguen los precios sin redundancia zonal (en versión preliminar).
  • Debes usar un mínimo de 4 CPU y 16 GiB de memoria.
  • La GPU se factura por la duración completa del ciclo de vida de la instancia.

Redundancia no zonal de GPU

La función de trabajos de Cloud Run proporciona compatibilidad con la redundancia no zonal (en versión preliminar) solo para las instancias habilitadas para GPU. Con la redundancia no zonal habilitada, Cloud Run intenta realizar la conmutación por error para los trabajos habilitados para GPU según el criterio del mejor esfuerzo. Cloud Run enruta las ejecuciones de trabajos a otras zonas solo si hay capacidad de GPU suficiente en ese momento. Esta opción no garantiza la capacidad reservada para situaciones de conmutación por error, pero genera un costo más bajo por segundo de GPU.

Consulta cómo configurar un trabajo de Cloud Run con GPU para obtener detalles sobre cómo habilitar la redundancia no zonal.

Solicita un aumento de la cuota

Si tu proyecto no tiene cuota de GPU, implementa un servicio de Cloud Run para recibir automáticamente una concesión de 3 cuotas de GPU nvidia-l4 (redundancia zonal desactivada) para esa región. Ten en cuenta que esta concesión automática de cuota está sujeta a disponibilidad según tu capacidad de CPU y memoria. Cuando borras el servicio que no usas, la cuota asignada no cambia.

Si necesitas más GPUs de Cloud Run para trabajos, solicita un aumento de cuota.

La cantidad máxima de instancias de trabajos de GPU (tareas) que se pueden ejecutar en paralelo está limitada por las siguientes cuotas:

El valor de paralelismo debe ser inferior a la cuota de GPU sin redundancia zonal o a la cuota de instancias de GPU de trabajos sin redundancia zonal, según la cuota más restrictiva.

Antes de comenzar

En la siguiente lista, se describen los requisitos y las limitaciones que se aplican cuando se usan GPUs en Cloud Run:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Run API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  7. Consulta Prácticas recomendadas: Trabajos de Cloud Run con GPU para optimizar el rendimiento cuando uses trabajos de Cloud Run con GPU.
  8. Roles requeridos

    Para obtener los permisos que necesitas para configurar los trabajos de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM en los trabajos:

    • Desarrollador de Cloud Run (roles/run.developer): El trabajo de Cloud Run
    • Usuario de la cuenta de servicio (roles/iam.serviceAccountUser): Es la identidad del servicio.

    Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu trabajo de Cloud Run interactúa con las APIs deGoogle Cloud , como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta permisos de implementación y administra el acceso.

    Configura un trabajo de Cloud Run con GPU

    Puedes usar la Google Cloud consola, Google Cloud CLI o YAML para configurar la GPU.

    gcloud

    Para habilitar la redundancia no zonal, debes especificar --no-gpu-zonal-redundancy. Esto es obligatorio para usar la GPU con los trabajos.

    Para crear un trabajo con la GPU habilitada, usa el comando gcloud beta run jobs create:

        gcloud beta run jobs create JOB_NAME \
          --image=IMAGE \
          --gpu=1 \
          --no-gpu-zonal-redundancy

    Reemplaza lo siguiente:

    • JOB_NAME por el nombre del trabajo de Cloud Run.
    • IMAGE_URL: Es una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/job:latest.

    Para actualizar la configuración de GPU de un trabajo, usa el comando gcloud beta run jobs update:

        gcloud beta run jobs update JOB_NAME \
          --image IMAGE_URL \
          --cpu CPU \
          --memory MEMORY \
          --gpu GPU_NUMBER \
          --gpu-type GPU_TYPE \
          --parallelism PARALLELISM \
          --no-gpu-zonal-redundancy

    Reemplaza lo siguiente:

    • JOB_NAME por el nombre del trabajo de Cloud Run.
    • IMAGE_URL: Es una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • CPU con un mínimo de 4 CPU para tu trabajo. El valor recomendado es 8.
    • MEMORY con un mínimo de 16Gi (16 GiB) El valor recomendado es 32Gi.
    • GPU_NUMBER con el valor 1 (uno). Si no se especifica, pero hay un GPU_TYPE presente, el valor predeterminado es 1.
    • GPU_TYPE por el tipo de GPU. Si no se especifica, pero hay un GPU_NUMBER, el valor predeterminado es nvidia-l4 (nvidia L4 con "L" minúscula, no el valor numérico catorce).
    • PARALLELISM con un valor entero inferior al valor más bajo de los límites de cuota aplicables que asignaste a tu proyecto.

    YAML

    Debes establecer la anotación run.googleapis.com/gpu-zonal-redundancy-disabled: en "true". Esto habilita la redundancia no zonal, que es necesaria para las GPUs en los trabajos.

    1. Si creas un trabajo nuevo, omite este paso. Si actualizas un trabajo existente, descarga su configuración de YAML:

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. Actualiza los atributos nvidia.com/gpu, annotations: run.googleapis.com/launch-stage para la etapa de lanzamiento y nodeSelector:
      run.googleapis.com/accelerator
      :

      apiVersion: run.googleapis.com/v1
      kind: Job
      metadata:
        name: JOB_NAME
        labels:
          cloud.googleapis.com/location: REGION
        annotations:
          run.googleapis.com/launch-stage: BETA
      spec:
        template:
          metadata:
            annotations:
              run.googleapis.com/gpu-zonal-redundancy-disabled: 'true'
          spec:
            template:
              spec:
                containers:
                - image: IMAGE_URL
                  limits:
                    cpu: 'CPU'
                    memory: 'MEMORY'
                    nvidia.com/gpu: 'GPU_NUMBER'
                nodeSelector:
                  run.googleapis.com/accelerator: GPU_TYPE

      Reemplaza lo siguiente:

      • JOB_NAME por el nombre del trabajo de Cloud Run.
      • IMAGE_URL: Es una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
      • CPU por la cantidad de CPU. Debes especificar al menos 4 CPU.
      • MEMORY por la cantidad de memoria. Debes especificar al menos 16Gi (16 GiB).
      • GPU_NUMBER por el valor 1 (uno) porque solo se admite adjuntar una GPU por instancia de Cloud Run.
      • GPU_TYPE con el valor nvidia-l4 (nvidia-L4 con "L" minúscula, no el valor numérico catorce).
    3. Crea o actualiza el servicio con el siguiente comando:

      gcloud run jobs replace job.yaml

    Visualiza la configuración de GPU

    Para ver la configuración actual de la GPU de tu trabajo de Cloud Run, sigue estos pasos:

    gcloud

    1. Usa el siguiente comando:

      gcloud run jobs describe JOB_NAME
    2. Busca la configuración de GPU en la configuración mostrada.

    Cómo quitar la GPU

    Puedes quitar la GPU con Google Cloud CLI o YAML.

    gcloud

    Para quitar la GPU, establece la cantidad de GPUs en 0 con el comando gcloud beta run jobs update:

      gcloud beta run jobs update JOB_NAME --gpu 0
      

    Reemplaza JOB_NAME por el nombre de tu trabajo de Cloud Run.

    YAML

    1. Si creas un trabajo nuevo, omite este paso. Si actualizas un trabajo existente, descarga su configuración de YAML:

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. Borra las líneas nvidia.com/gpu:, run.googleapis.com/gpu-zonal-redundancy-disabled: 'true' y nodeSelector: run.googleapis.com/accelerator: nvidia-l4.

    3. Crea o actualiza el servicio con el siguiente comando:

      gcloud run jobs replace job.yaml

    Bibliotecas

    De forma predeterminada, se activan todas las bibliotecas de controladores de NIVIDIA L4 en /usr/local/nvidia/lib64. Cloud Run agrega automáticamente esta ruta de acceso a la variable de entorno LD_LIBRARY_PATH (es decir, ${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64) del contenedor con la GPU. Esto permite que el vinculador dinámico encuentre las bibliotecas de controladores de NVIDIA. El vinculador busca y resuelve rutas de acceso en el orden en que las enumeras en la variable de entorno LD_LIBRARY_PATH. Los valores que especifiques en esta variable tendrán prioridad sobre la ruta de acceso predeterminada de las bibliotecas del controlador de Cloud Run /usr/local/nvidia/lib64.

    Si quieres usar una versión de CUDA superior a 12.2, la forma más fácil es depender de una imagen base de NVIDIA más reciente con paquetes de retrocompatibilidad ya instalados. Otra opción es instalar manualmente los paquetes de compatibilidad con versiones futuras de NVIDIA y agregarlos a LD_LIBRARY_PATH. Consulta la matriz de compatibilidad de NVIDIA para determinar qué versiones de CUDA son compatibles con la versión del controlador NVIDIA proporcionada (535.216.03).

    Acerca de las GPUs y el paralelismo

    Si ejecutas tareas paralelas en la ejecución de un trabajo, determina y establece el valor de paralelismo en un valor inferior al valor más bajo de los límites de cuota aplicables que asignaste a tu proyecto. De forma predeterminada, la cuota de instancias de trabajos de GPU se establece en 5 para las tareas que se ejecutan en paralelo. Para solicitar un aumento de la cuota, consulta Cómo aumentar la cuota. Las tareas de GPU se inician lo más rápido posible y alcanzan un máximo que varía según la cuota de GPU que asignaste al proyecto y la región seleccionada. Las implementaciones de Cloud Run fallan si estableces el paralelismo en un valor superior al límite de la cuota de GPU.

    Para calcular la cuota de GPU que usa tu trabajo por ejecución, multiplica la cantidad de GPUs por tarea del trabajo por el valor de paralelismo. Por ejemplo, si tienes una cuota de GPU de 10 y implementas tu trabajo de Cloud Run con --gpu=1, --parallelism=10, tu trabajo consumirá toda la cuota de GPU de 10. Como alternativa, si realizas la implementación con --gpu=1, --parallelism=20, las implementaciones fallarán.

    Para obtener más información, consulta Prácticas recomendadas: Trabajos de Cloud Run con GPUs.