Ejecuta la inferencia de LLM en GPUs con Gemma 4 y Ollama

Objetivos

Gemma 4 es la familia de modelos abiertos más eficiente de Google, que ofrece sólidas capacidades de razonamiento y de agente. El contexto largo, la multimodalidad, el razonamiento y la llamada a herramientas permiten que Gemma 4 controle la lógica compleja, la planificación de varios pasos, la codificación y los flujos de trabajo de agente.

En esta guía, se muestra cómo ejecutar la inferencia de LLM en GPUs de Cloud Run con Gemma y Ollama, y tiene los siguientes objetivos:

  • Implementa Ollama con el Gemma 4 en un servicio de Cloud Run habilitado para GPU.
  • Envía instrucciones al servicio de Ollama en su extremo privado.

Para aprender una forma alternativa de implementar modelos abiertos de Gemma 4 en Cloud Run con un contenedor vLLM, consulta Ejecuta modelos de Gemma 4 en Cloud Run.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Es posible que los usuarios Google Cloud nuevos decumplan con los requisitos para acceder a una prueba gratuita.

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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 role (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 role (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. Habilitar la API de Cloud Run

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    Habilitar la API

  7. Instala e inicializa gcloud CLI.
  8. Solicita una cuota de Total Nvidia RTX Pro 6000 GPU allocation, in milli GPU, without zonal redundancy, per project per region en la API de Cloud Run Admin en la página Cuotas y límites del sistema para completar este instructivo.

Roles obligatorios

Si quieres obtener los permisos que necesitas para completar el instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Otorga los roles

Console

  1. En la Google Cloud consola de, dirígete a la página IAM.

    Ir a IAM
  2. Selecciona el proyecto.
  3. Haz clic en Grant access.
  4. En el campo Principales nuevas, ingresa tu identificador de usuario. Por lo general, es la dirección de correo electrónico que se usa para implementar el servicio de Cloud Run.

  5. En la lista Seleccionar un rol, elige uno.
  6. Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
  7. Haz clic en Guardar.

gcloud

Para otorgar los roles de IAM necesarios a tu cuenta en tu proyecto, haz lo siguiente:

     gcloud projects add-iam-policy-binding PROJECT_ID \
         --member=PRINCIPAL \
         --role=ROLE
     

Reemplaza lo siguiente:

  • PROJECT_NUMBER por el número de tu Google Cloud proyecto
  • PROJECT_ID por el ID del Google Cloud proyecto.
  • PRINCIPAL por la cuenta a la que agregarás la vinculación. Por lo general, es la dirección de correo electrónico que se usa para implementar el servicio de Cloud Run.
  • ROLE por el rol que agregas a la cuenta del implementador.

Implementa el servicio de Ollama para la inferencia de LLM

Implementa el servicio en Cloud Run:

gcloud beta run deploy SERVICE-NAME \
    --image "ollama/ollama:latest" \
    --project PROJECT_ID \
    --region REGION \
    --no-allow-unauthenticated \
    --cpu 20 \
    --memory 80Gi \
    --gpu 1 \
    --gpu-type nvidia-rtx-pro-6000 \
    --no-gpu-zonal-redundancy \
    --max-instances 1 \
    --concurrency 16 \
    --timeout 600 \
    --set-env-vars=OLLAMA_NUM_PARALLEL=16 \
    --set-env-vars=OLLAMA_HOST=0.0.0.0:8080 \
    --set-env-vars=OLLAMA_DEBUG=false \
    --set-env-vars=OLLAMA_KEEP_ALIVE=-1 \
    --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240 \
    --command "bash" \
    --args="-c,(sleep 15 && ollama pull MODEL_NAME) & ollama serve"

Reemplaza lo siguiente:

  • SERVICE-NAME por un nombre único para el servicio de Cloud Run.
  • PROJECT por el ID de tu Google Cloud proyecto.
  • REGION por una Google Cloud región en la que se admitan las GPUs nvidia-rtx-pro-6000 para Cloud Run, como us-central1. Para obtener una lista completa de las regiones admitidas para implementaciones habilitadas para GPU, consulta Configuración de GPU.

  • MODEL_NAME por el nombre completo de una variante de Gemma 4.

    • Gemma 4 E2B: gemma4:e2b
    • Gemma 4 E4B: gemma4:e4b

Gemma 4 26B y 31B requieren una configuración más avanzada de Cloud Run y vLLM con salida directa de VPC y Run:ai Model Streamer.

Ten en cuenta las siguientes marcas importantes en este comando:

  • --concurrency 16 se configura para que coincida con el valor de la variable de entorno OLLAMA_NUM_PARALLEL.
  • --gpu 1 con --gpu-type nvidia-rtx-pro-6000 asigna 1 GPU NVIDIA RTX PRO 6000 Blackwell a cada instancia de Cloud Run en el servicio.
  • --max-instances 1 especifica la cantidad máxima de instancias para escalar. Debe ser igual o inferior a la cuota de GPU NVIDIA RTX Pro 6000 de tu proyecto (Total NVIDIA RTX Pro 6000 GPU allocation, in milli GPU, without zonal redundancy, per project per region).
  • --no-allow-unauthenticated restringe el acceso no autenticado al servicio. Si mantienes el servicio privado, puedes confiar en la autenticación integrada de Identity and Access Management (IAM) de Cloud Run para la comunicación entre servicios. Consulta Administra el acceso mediante IAM.
  • Se requiere --no-cpu-throttling para habilitar la GPU.
  • --no-gpu-zonal-redundancy establece opciones de redundancia zonal según tus requisitos de conmutación por error zonal y la cuota disponible. Consulta las opciones de redundancia zonal de GPU para obtener más detalles.

Configuración de simultaneidad para un rendimiento óptimo

En esta sección, se proporciona contexto sobre la configuración de simultaneidad recomendada. Para obtener una latencia de solicitud óptima, asegúrate de que la configuración --concurrency sea igual a la variable de entorno OLLAMA_NUM_PARALLEL de Ollama.

  • OLLAMA_NUM_PARALLEL determina cuántos espacios de solicitud están disponibles por cada modelo para controlar las solicitudes de inferencia de forma simultánea.
  • --concurrency determina cuántas solicitudes envía Cloud Run a una instancia de Ollama al mismo tiempo.

Si --concurrency excede OLLAMA_NUM_PARALLEL, Cloud Run puede enviar más solicitudes a un modelo en Ollama que para las ranuras de solicitud disponibles. Esto lleva a que se pongan en cola las solicitudes dentro de Ollama, lo que aumenta la latencia de las solicitudes en cola. También genera un ajuste de escala automático menos responsivo, ya que las solicitudes en fila no activan Cloud Run para escalar horizontalmente y comenzar instancias nuevas.

Ollama también admite la entrega de varios modelos desde una GPU. Para evitar que las solicitudes se pongan en cola en la instancia de Ollama, configura --concurrency para que coincida con OLLAMA_NUM_PARALLEL.

Aumentar OLLAMA_NUM_PARALLEL también hace que las solicitudes paralelas tarden más.

Optimiza la utilización de GPU

Para obtener un uso de GPU óptimo, aumenta --concurrency y mantenlo dentro del doble del valor de OLLAMA_NUM_PARALLEL. Si bien esto genera colas de solicitudes en Ollama, puede ayudar a mejorar la utilización: las instancias de Ollama pueden procesar inmediatamente las solicitudes de su cola, y las colas ayudan a absorber los aumentos repentinos del tráfico.

Prueba el servicio de Ollama implementado con curl

Ahora que implementaste el servicio de Ollama, puedes enviarle solicitudes. Sin embargo, si envías una solicitud directamente, Cloud Run responde con HTTP 401 Unauthorized. Esto es intencional, ya que una API de inferencia de LLM está diseñada para que otros servicios la llamen, como una aplicación de frontend. Para obtener más información sobre la autenticación de servicio a servicio en Cloud Run, consulta Autenticación de servicio a servicio.

Para enviar solicitudes al servicio de Ollama, agrega un encabezado con un token de OIDC válido a las solicitudes, por ejemplo, mediante el proxy de desarrollador de Cloud Run:

  1. Inicia el proxy y, cuando se te solicite instalar el componente cloud-run-proxy, elige Y:

    gcloud run services proxy SERVICE-NAME \
       --project PROJECT_ID \
       --region REGION \
       --port=9090
  2. Envía una solicitud a él en una pestaña separada de la terminal para dejar el proxy en ejecución. Ten en cuenta que el proxy se ejecuta en localhost:9090:

    curl http://localhost:9090/api/generate -d '{
       "model": "MODEL_NAME",
       "prompt": "Why is the sky blue?",
       "stream": false
    }' | jq -r '.response'

    Este comando debe proporcionar un resultado de transmisión similar al siguiente:

    This is one of the most beautiful and fundamental questions in physics! The reason the sky appears blue is due to a phenomenon called **Rayleigh Scattering**.
    ...
    

Limpia

Para evitar cargos adicionales en tu Google Cloud cuenta, borra todos los recursos que implementaste con este instructivo.

Borra el proyecto

Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y necesitas conservarlo sin los cambios que agregaste en este instructivo, borra los recursos que creaste para el instructivo.

La manera más fácil de eliminar la facturación es borrar el proyecto que tú creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que tú quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Elimina recursos de instructivos

  1. Borra el servicio de Cloud Run que implementaste en este instructivo. Los servicios de Cloud Run no generan costos hasta que reciben solicitudes.

    Para borrar tu servicio de Cloud Run, ejecuta el siguiente comando:

    gcloud run services delete SERVICE-NAME

    Reemplaza SERVICE-NAME por el nombre del servicio

    También puedes borrar los servicios de Cloud Run desde la Google Cloud consola.

  2. Quita la configuración de región predeterminada de gcloud que agregaste durante la configuración en el instructivo:

     gcloud config unset run/region
    
  3. Quita la configuración del proyecto:

     gcloud config unset project
    

¿Qué sigue?