Exécuter l'inférence LLM sur des GPU avec Gemma 4 et Ollama

Objectifs

Gemma 4 est la famille de modèles ouverts la plus efficace de Google, offrant de solides capacités de raisonnement et d'agent. Le contexte long, la multimodalité, le raisonnement et l'appel d'outils permettent à Gemma 4 de gérer une logique complexe, une planification en plusieurs étapes, le codage et les workflows agentifs.

Ce guide explique comment exécuter l'inférence LLM sur les GPU Cloud Run avec Gemma et Ollama, et poursuit les objectifs suivants :

  • Déployer Ollama avec le Gemma 4 sur un service Cloud Run compatible GPU.
  • Envoyer des invites au service Ollama sur son point de terminaison privé.

Pour découvrir une autre façon de déployer des modèles ouverts Gemma 4 sur Cloud Run à l'aide d'un conteneur vLLM, consultez Exécuter des modèles Gemma 4 sur Cloud Run.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud:

Obtenez une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.

Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai sans frais.

Avant de commencer

  1. 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

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

  3. Activer l'API Cloud Run

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation via le rôle Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    Activer l'API

  4. Installez et initialisez gcloud CLI.
  5. Demandez le quota Total Nvidia RTX Pro 6000 GPU allocation, in milli GPU, without zonal redundancy, per project per region sous l'API Cloud Run Admin sur la page Quotas et limites du système pour suivre ce tutoriel.

Rôles requis

Pour obtenir les autorisations nécessaires pour suivre le tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Attribuer les rôles

Console

  1. Dans la console Google Cloud , accédez à la page IAM.

    Accéder à IAM
  2. Sélectionnez le projet.
  3. Cliquez sur Accorder l'accès.
  4. Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail utilisée pour déployer le service Cloud Run.

  5. Dans la liste Sélectionner un rôle, sélectionnez un rôle.
  6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
  7. Cliquez sur Enregistrer.

gcloud

Pour attribuer les rôles IAM requis à votre compte sur votre projet :

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

Remplacez :

  • PROJECT_NUMBER par votre Google Cloud numéro de projet.
  • PROJECT_ID par l'ID de votre Google Cloud projet.
  • PRINCIPAL par le compte pour lequel vous ajoutez la liaison. Il s'agit généralement de l'adresse e-mail qui est utilisée pour déployer le service Cloud Run.
  • ROLE par le rôle que vous ajoutez au compte du déployeur.

Déployer le service Ollama pour l'inférence LLM

Déployez le service dans 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"

Remplacez :

  • SERVICE-NAME par un nom unique pour le service Cloud Run.
  • PROJECT par l'ID de votre Google Cloud projet.
  • REGION par une Google Cloud région où les GPU nvidia-rtx-pro-6000 sont compatibles avec Cloud Run, par exemple us-central1. Pour obtenir la liste complète des régions compatibles avec les déploiements compatibles GPU, consultez la section Configuration des GPU.

  • MODEL_NAME par le nom complet d'une variante de Gemma 4.

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

Gemma 4 26B et 31B nécessitent une configuration plus avancée de Cloud Run et de vLLM avec une sortie VPC directe et Run:ai Model Streamer.

Notez les options importantes suivantes dans cette commande :

Paramètres de simultanéité pour des performances optimales

Cette section fournit le contexte des paramètres de simultanéité recommandés. Pour une latence des requêtes optimale, assurez-vous que le paramètre --concurrency est égal à la variable d'environnement OLLAMA_NUM_PARALLEL d'Ollama.

  • OLLAMA_NUM_PARALLEL détermine le nombre d'emplacements de requêtes disponibles par modèle pour gérer les requêtes d'inférence simultanément.
  • --concurrency détermine le nombre de requêtes que Cloud Run envoie simultanément à une instance Ollama.

Si --concurrency dépasse OLLAMA_NUM_PARALLEL, Cloud Run peut envoyer plus de requêtes à un modèle dans Ollama que le nombre d'emplacements de requêtes disponibles. Cela entraîne une mise en file d'attente des requêtes dans Ollama, ce qui augmente la latence des requêtes mises en file d'attente. Cela entraîne également un autoscaling moins réactif, car les requêtes mises en file d'attente n'incitent pas Cloud Run à effectuer un scaling horizontal et à démarrer de nouvelles instances.

Ollama permet également de diffuser plusieurs modèles à partir d'un seul GPU. Pour éviter la mise en file d'attente des requêtes sur l'instance Ollama, définissez --concurrency pour qu'il corresponde à OLLAMA_NUM_PARALLEL.

L'augmentation de OLLAMA_NUM_PARALLEL allonge également la durée des requêtes parallèles.

Optimiser l'utilisation du GPU

Pour une utilisation optimale du GPU, augmentez --concurrency, en le maintenant dans la limite du double de la valeur de OLLAMA_NUM_PARALLEL. Bien que cela entraîne une mise en file d'attente des requêtes dans Ollama, cela peut contribuer à améliorer l'utilisation : les instances Ollama peuvent traiter immédiatement les requêtes de leur file d'attente, et les files d'attente permettent d'absorber les pics de trafic.

Tester le service Ollama déployé avec curl

Maintenant que vous avez déployé le service Ollama, vous pouvez lui envoyer des requêtes. Toutefois, si vous envoyez une requête directement, Cloud Run répond avec HTTP 401 Unauthorized. Ce comportement est intentionnel, car une API d'inférence LLM est destinée à être appelée par d'autres services, tels qu'une application frontend. Pour en savoir plus sur l'authentification de service à service sur Cloud Run, consultez Authentifier de service à service.

Pour envoyer des requêtes au service Ollama, ajoutez un en-tête avec un jeton OIDC valide aux requêtes, par exemple à l'aide du proxy de développement Cloud Run developer proxy :

  1. Démarrez le proxy et, lorsque vous êtes invité à installer le composant cloud-run-proxy, choisissez Y :

    gcloud run services proxy SERVICE-NAME \
       --project PROJECT_ID \
       --region REGION \
       --port=9090
  2. Envoyez-lui une requête dans un onglet de terminal distinct, en laissant le proxy en cours d'exécution. Notez que le proxy s'exécute sur localhost:9090 :

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

    Cette commande devrait fournir un résultat de streaming semblable à celui-ci :

    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**.
    ...
    

Libérer de l'espace

Pour éviter des frais supplémentaires sur votre Google Cloud compte, supprimez toutes les ressources que vous avez déployées avec ce tutoriel.

Supprimer le projet

Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous devez le conserver sans les modifications que vous avez ajoutées dans ce tutoriel, supprimez les ressources que vous avez créées pour ce tutoriel.

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans la Google Cloud console, accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez Arrêter pour supprimer le projet.

Supprimer les ressources du tutoriel

  1. Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel. Les services Cloud Run n'entraînent pas de coûts tant qu'ils ne reçoivent pas de requêtes.

    Pour supprimer votre service Cloud Run, exécutez la commande suivante :

    gcloud run services delete SERVICE-NAME

    Remplacez SERVICE-NAME par le nom de votre service.

    Vous pouvez également supprimer des services Cloud Run à partir de la Google Cloud console.

  2. Supprimez la configuration régionale gcloud par défaut que vous avez ajoutée lors de la configuration du tutoriel :

     gcloud config unset run/region
    
  3. Supprimez la configuration du projet :

     gcloud config unset project
    

Étape suivante