Objectifs
Ce guide explique comment exécuter l'inférence LLM sur les GPU Cloud Run avec Gemma 3 et Ollama. Il a les objectifs suivants :
- Déployez Ollama avec le modèle Gemma 3 sur un service Cloud Run compatible avec les GPU.
- Envoyez des requêtes au service Ollama sur son point de terminaison privé.
Pour découvrir une autre façon de déployer des modèles ouverts Gemma 3 sur Cloud Run à l'aide d'un conteneur prédéfini, consultez Exécuter des modèles Gemma 3 sur Cloud Run.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.
Avant de commencer
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Installez et initialisez gcloud CLI.
- Demandez le quota
Total Nvidia L4 GPU allocation, per project per region
sous l'API Cloud Run Admin sur la page Quotas et limites du système pour suivre ce tutoriel. -
Administrateur Artifact Registry (
roles/artifactregistry.admin
) -
Éditeur Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrateur Cloud Run (
roles/run.admin
) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) -
Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Administrateur de l'espace de stockage (
roles/storage.admin
) -
Dans la console Google Cloud , accédez à la page IAM.
Accéder à IAM - Sélectionnez le projet.
- Cliquez sur Accorder l'accès.
-
Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail du compte Google utilisé pour déployer le service Cloud Run.
- Dans la liste Sélectionner un rôle, sélectionnez un rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
- Cliquez sur Enregistrer.
- PROJECT_NUMBER par le numéro de votre projet Google Cloud .
- PROJECT_ID par l'ID de votre projet Google Cloud .
- PRINCIPAL par le compte pour lequel vous ajoutez la liaison. Il s'agit généralement de l'adresse e-mail du compte Google utilisé pour déployer le service Cloud Run.
- ROLE par le rôle que vous ajoutez au compte déployeur.
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 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
gcloud
Pour attribuer les rôles IAM requis à votre compte dans votre projet :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Remplacez :
Configurer gcloud
Pour configurer Google Cloud CLI pour votre service Cloud Run :
Définissez le projet par défaut :
gcloud config set project PROJECT_ID
Cliquez sur l'icône pour remplacer la variable PROJECT_ID par le nom du projet que vous avez créé pour ce tutoriel. Cela permet de s'assurer que toutes les fiches de cette page qui font référence à PROJECT_ID ont déjà la valeur correcte.
Configurez Google Cloud CLI pour utiliser la région
europe-west1
pour les commandes Cloud Run.gcloud config set run/region europe-west1
Utiliser Docker pour créer une image de conteneur avec Ollama et Gemma
Créez un répertoire pour le service Ollama et définissez votre répertoire de travail sur ce nouveau répertoire :
mkdir ollama-backend cd ollama-backend
Créez un fichier
Dockerfile
avec le contenu suivant :FROM ollama/ollama:latest # Listen on all interfaces, port 8080 ENV OLLAMA_HOST 0.0.0.0:8080 # Store model weight files in /models ENV OLLAMA_MODELS /models # Reduce logging verbosity ENV OLLAMA_DEBUG false # Never unload model weights from the GPU ENV OLLAMA_KEEP_ALIVE -1 # Store the model weights in the container image ENV MODEL gemma3:4b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
Stocker les pondérations du modèle dans l'image de conteneur pour accélérer le démarrage des instances
Google recommande de stocker les poids du modèle pour Gemma 3 (4B) et les modèles de taille similaire directement dans l'image du conteneur.
Les pondérations du modèle sont les paramètres numériques qui définissent le comportement d'un LLM. Ollama doit lire entièrement ces fichiers et charger les pondérations dans la mémoire GPU (VRAM) lors du démarrage de l'instance de conteneur, avant de pouvoir commencer à traiter les requêtes d'inférence.
Sur Cloud Run, il est important que les instances de conteneur démarrent rapidement pour minimiser la latence des requêtes. Si le temps de démarrage de votre instance de conteneur est lent, le service met plus de temps à passer de zéro à une instance et a besoin de plus de temps pour effectuer un scaling horizontal lors d'un pic de trafic.
Pour garantir un démarrage rapide, stockez les fichiers de modèle dans l'image de conteneur elle-même. Cette méthode est plus rapide et plus fiable que le téléchargement des fichiers depuis un emplacement distant au démarrage. Le stockage interne des images de conteneur de Cloud Run est optimisé pour gérer les pics de trafic, ce qui lui permet de configurer rapidement le système de fichiers du conteneur lorsqu'une instance démarre.
Notez que les pondérations du modèle Gemma 3 (4B) occupent 8 Go d'espace de stockage. Les modèles plus volumineux ont des fichiers de pondération plus volumineux, qui peuvent être difficiles à stocker dans l'image de conteneur. Pour obtenir une vue d'ensemble des compromis, consultez Bonnes pratiques : inférence de l'IA sur Cloud Run avec des GPU.
Créer et déployer le service Cloud Run
Créez et déployez le service sur Cloud Run :
gcloud run deploy ollama-gemma \
--source . \
--concurrency 4 \
--cpu 8 \
--set-env-vars OLLAMA_NUM_PARALLEL=4 \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 1 \
--memory 32Gi \
--no-allow-unauthenticated \
--no-cpu-throttling \
--no-gpu-zonal-redundancy \
--timeout=600
Notez les indicateurs importants suivants dans cette commande :
--concurrency 4
est défini pour correspondre à la valeur de la variable d'environnementOLLAMA_NUM_PARALLEL
.--gpu 1
avec--gpu-type nvidia-l4
attribue un GPU NVIDIA L4 à chaque instance Cloud Run du service.--max-instances 1
spécifie le nombre maximal d'instances à mettre à l'échelle. Elle doit être inférieure ou égale au quota de GPU NVIDIA L4 (Total Nvidia L4 GPU allocation, per project per region
) de votre projet.--no-allow-unauthenticated
limite l'accès non authentifié au service. En gardant le service privé, vous pouvez vous appuyer sur l'authentification Identity and Access Management (IAM) intégrée à Cloud Run pour la communication de service à service. Consultez Gérer les accès à l'aide d'IAM.--no-cpu-throttling
est nécessaire pour activer le GPU.--no-gpu-zonal-redundancy
Définissez les options de redondance zonale en fonction de vos exigences de basculement zonal et du quota disponible. Pour en savoir plus, consultez Options de redondance zonale des GPU.
Définir la simultanéité pour des performances optimales
Cette section fournit des informations sur les 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ête disponibles pour chaque modèle afin de 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 la mise en file d'attente des requêtes dans Ollama, ce qui augmente la latence des requêtes en file d'attente. Cela entraîne également un autoscaling moins réactif, car les requêtes mises en file d'attente ne déclenchent pas le effectuer un scaling horizontal de Cloud Run ni le démarrage de nouvelles instances.
Ollama permet également de diffuser plusieurs modèles à partir d'un seul GPU. Pour éviter complètement la mise en file d'attente des requêtes sur l'instance Ollama, vous devez toujours définir --concurrency
pour qu'il corresponde à OLLAMA_NUM_PARALLEL
.
Il est important de noter que l'augmentation de OLLAMA_NUM_PARALLEL
allonge également la durée des requêtes parallèles.
Optimiser l'utilisation
Pour une utilisation optimale du GPU, augmentez --concurrency
, en veillant à ce qu'il reste 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 aident à 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
.
C'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 Authentification 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 :
Démarrez le proxy et, lorsque vous êtes invité à installer le composant
cloud-run-proxy
, sélectionnezY
:gcloud run services proxy ollama-gemma --port=9090
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": "gemma3:4b", "prompt": "Why is the sky blue?" }'
Cette commande devrait fournir un flux de sortie semblable à celui-ci :
{"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.641492408Z","response":"That","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.687529153Z","response":"'","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.753284927Z","response":"s","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.812957381Z","response":" a","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.889102649Z","response":" fantastic","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.925748116Z","response":",","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.958391572Z","response":" decept","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.971035028Z","response":"ively","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.989678484Z","response":" tricky","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.999321940Z","response":" question","done":false} ...
Effectuer un nettoyage
Supprimez les ressources Google Cloud créées dans ce tutoriel :