1. Introduction
Présentation
Points abordés
- Déployer un modèle Gemma sur un GPU Cloud Run RTX 6000 Pro
- Télécharger un modèle simultanément depuis Cloud Storage lors du démarrage du conteneur
2. Préparation
Définissez les variables d'environnement qui seront utilisées tout au long de cet atelier de programmation :
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=europe-west4
export SERVICE_NAME=gemma-rtx-codelab
# set the project
gcloud config set project $PROJECT_ID
Activer les API nécessaires pour cet atelier de programmation
gcloud services enable artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
compute.googleapis.com
Créer un dossier pour l'atelier de programmation
mkdir codelab-rtx
cd codelab-rtx
Activez l'accès privé à Google pour votre sous-réseau afin d'optimiser le chargement des modèles de ML depuis Cloud Storage. Pour en savoir plus, consultez la section sur le chargement de modèles depuis Cloud Storage dans le document sur les bonnes pratiques concernant les GPU.
gcloud compute networks subnets update default \
--region=europe-west4 \
--enable-private-ip-google-access
3. Configurer Cloud Storage
Commencez par créer un bucket Cloud Storage pour stocker les pondérations du modèle.
Créer un bucket unique
# Generate a unique bucket name
export MODEL_BUCKET="${PROJECT_ID}-rtx-codelab-$(python3 -c 'import uuid; print(str(uuid.uuid4())[:8])')"
echo "Bucket name: $MODEL_BUCKET"
# Create the regional bucket
gcloud storage buckets create gs://$MODEL_BUCKET \
--location=$REGION \
--uniform-bucket-level-access
4. Récupérer les pondérations du modèle
Ensuite, téléchargez le modèle Gemma 3 dans un répertoire local, puis importez-le dans votre bucket Cloud Storage.
Installer Ollama
Vous pouvez exécuter cette commande pour installer Ollama :
curl -fsSL https://ollama.com/install.sh | sh
Télécharger le modèle
Créez un répertoire pour le modèle téléchargé.
mkdir model-weights
Vous utiliserez deux onglets de terminal pour ce processus : l'un pour exécuter le serveur Ollama et l'autre pour récupérer le modèle.
Terminal 1 (serveur) :
Démarrez le serveur en transmettant l'emplacement du modèle téléchargé. Cette commande continuera de s'exécuter.
OLLAMA_MODELS=$(pwd)/model-weights ollama serve
Terminal 2 (client) : ouvrez un nouvel onglet de terminal et téléchargez le modèle. Le client communique automatiquement avec le serveur en cours d'exécution.
# note if you wish to use a larger model, you can change this to gemma3:27b
ollama pull gemma3:1b
Retournez au terminal 1 : une fois le téléchargement terminé dans le terminal 2, revenez au terminal 1 et appuyez sur Ctrl+C pour arrêter le serveur.
Importer des fichiers dans Cloud Storage
Importez maintenant les poids dans votre bucket. gcloud storage gère automatiquement les mises en ligne parallèles pour plus de rapidité.
gcloud storage cp -r ./model-weights/* gs://$MODEL_BUCKET/
(Facultatif) Nettoyer les pondérations locales
Étant donné que le modèle se trouve désormais dans Cloud Storage, supprimez la copie locale.
rm -rf model-weights
5. Créer le service
Commencez par créer un dossier pour le service.
mkdir rtx-service
cd rtx-service
Créez un fichier Dockerfile avec le contenu suivant :
FROM ollama/ollama:latest
# Install Google Cloud CLI
RUN apt-get update && apt-get install -y curl gnupg && \
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
apt-get update && apt-get install -y google-cloud-cli && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# Listen on all interfaces, port 11434
ENV OLLAMA_HOST 0.0.0.0:11434
# 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
# Copy and set up the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Start using the entrypoint script
ENTRYPOINT ["/entrypoint.sh"]
Créez un fichier nommé entrypoint.sh avec le contenu suivant :
#!/bin/bash
set -e
# Ensure OLLAMA_MODELS directory exists
mkdir -p $OLLAMA_MODELS
# Download model weights from GCS if MODEL_BUCKET is set
if [ -n "$MODEL_BUCKET" ]; then
echo "Downloading model weights from gs://$MODEL_BUCKET..."
# gcloud storage handles concurrent downloads automatically
gcloud storage cp -r "gs://$MODEL_BUCKET/*" "$OLLAMA_MODELS/"
else
echo "MODEL_BUCKET not set. Skipping download."
fi
# Start Ollama
exec ollama serve
6. Déployer dans Cloud Run
Dans cette section, vous allez déployer le service à l'aide de gcloud run deploy. Cette commande permet de créer votre conteneur à partir de la source et de le déployer sur Cloud Run avec les configurations GPU et réseau nécessaires.
Créer un compte de service
Créez un compte de service dédié pour cette application et accordez-lui uniquement les autorisations requises.
# Create a dedicated service account
gcloud iam service-accounts create rtx-codelab-identity \
--display-name="RTX Codelab Identity"
# Grant permission to read from the model bucket
gcloud storage buckets add-iam-policy-binding gs://$MODEL_BUCKET \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
# Grant access to the Compute Engine network for the Cloud Run service identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
# Grant access to the Compute Engine network for the default service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')@serverless-robot-prod.iam.gserviceaccount.com" \
--role="roles/compute.networkUser"
Configuration du réseau
Pour des performances optimales lors du téléchargement de modèles volumineux, utilisez la sortie VPC direct. Cela permet au conteneur d'accéder à Cloud Storage via le réseau privé Google, en contournant l'Internet public et les passerelles NAT. Les indicateurs suivants sont utilisés dans la commande gcloud run deploy :
--network: se connecte au VPCdefault(assurez-vous que ce réseau existe et qu'il dispose d'un sous-réseau dans votre région avec l'accès privé à Google activé).--subnet: sous-réseau spécifique dans votre région (généralementdefaultsi vous utilisez le réseau par défaut).--vpc-egress: définissez cette valeur surall-trafficpour forcer tout le trafic sortant à transiter par le VPC.
Commande de déploiement
gcloud beta run deploy $SERVICE_NAME \
--source . \
--region $REGION \
--project $PROJECT_ID \
--no-allow-unauthenticated \
--port 11434 \
--service-account rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--cpu 20 --memory 80Gi \
--gpu 1 \
--gpu-type nvidia-rtx-pro-6000 \
--set-env-vars MODEL_BUCKET=$MODEL_BUCKET \
--network default \
--subnet default \
--vpc-egress all-traffic \
--no-gpu-zonal-redundancy
7. Tester le service
Une fois déployé, vous pouvez interagir avec votre modèle Gemma 3 à l'aide de l'API Ollama.
Obtenir l'URL du service
Récupérez l'URL de votre service Cloud Run déployé.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"
Exécuter une inférence
Envoyez une requête au modèle à l'aide de curl. Vous pouvez définir "stream": false pour obtenir la réponse complète dans un seul objet JSON et utiliser jq pour extraire uniquement le texte.
Remarque : Si vous utilisez un modèle plus grand, par exemple gemma3:27b, vous devrez modifier le nom du modèle dans le fichier JSON ci-dessous.
curl -s "$SERVICE_URL/api/generate" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma3:1b",
"prompt": "Why is the sky blue?",
"stream": false
}' | jq -r '.response'
8. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Nous vous recommandons de consulter la documentation Cloud Run.
Points abordés
- Déployer un modèle Gemma sur un GPU Cloud Run RTX 6000 Pro
- Télécharger un modèle simultanément depuis Cloud Storage lors du démarrage du conteneur
9. Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet ou les ressources individuelles.
Option 1 : Supprimer des ressources
Supprimer le service Cloud Run
gcloud run services delete $SERVICE_NAME \
--region $REGION \
--quiet
Supprimer le compte de service
gcloud iam service-accounts delete \
rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
--quiet
Supprimer le bucket Cloud Storage
gcloud storage rm --recursive gs://$MODEL_BUCKET
Supprimer l'image de conteneur
Cette compilation a créé une image de conteneur dans Artifact Registry. Vous pouvez trouver le nom de l'image et la supprimer.
Listez les images pour trouver le nom exact (généralement gcr.io/PROJECT_ID/SERVICE_NAME).
gcloud container images list --filter="name:$SERVICE_NAME"
Supprimez l'image (remplacez IMAGE_NAME par le résultat ci-dessus).
gcloud container images delete <IMAGE_NAME> --force-delete-tags
Option 2 : Supprimer le projet
Pour supprimer l'intégralité du projet, accédez à Gérer les ressources, sélectionnez le projet que vous avez créé à l'étape 2, puis choisissez "Supprimer". Si vous supprimez le projet, vous devrez changer de projet dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list.