Mise à jour d'image Cloud Run GPU - Contournement de quota
Problème
Lors du déploiement d'images de conteneurs mises à jour vers un service Cloud Run existant avec GPU (par exemple NVIDIA L4),
gcloud run deploy échoue avec des erreurs de quota même si le service s'exécute déjà avec un GPU.
La vérification des quotas bloque à la fois les configurations de redondance zonale et non-zonale, rendant impossible
le déploiement du code mis à jour.
Contexte / Conditions de déclenchement
gcloud run deployretourne :metadata.annotations[run.googleapis.com/maxScale]: You do not have quota for using GPUs with zonal redundancy.Suivi de :
metadata.annotations[run.googleapis.com/maxScale]: You do not have quota for using GPUs without zonal redundancy.- Le service GPU existe déjà et dispose d'une révision en cours d'exécution
- Vous essayez de déployer une image de conteneur mise à jour, pas de modifier la configuration du GPU
- Le script de déploiement utilise
gcloud run deployavec les flags--gpu
Solution
Au lieu d'utiliser gcloud run deploy (qui revalide tous les quotas de ressources), utilisez
gcloud run services update qui met à jour uniquement les champs spécifiés sur le service existant :
# Au lieu de ceci (échoue avec erreur de quota) :
gcloud run deploy divine-transcoder \
--image gcr.io/PROJECT/divine-transcoder \
--region us-central1 \
--gpu 1 --gpu-type nvidia-l4 \
--cpu 4 --memory 16Gi \
...
# Utilisez ceci (met à jour l'image sur le service existant) :
gcloud run services update divine-transcoder \
--region us-central1 \
--image gcr.io/PROJECT/divine-transcoder:latest
Différences clés :
gcloud run deploycrée un nouveau service ou remplace la configuration complète, déclenchant des vérifications de quotasgcloud run services update --imagemet à jour uniquement l'image de conteneur sur le service existant, préservant toute la configuration GPU/CPU/mémoire existante sans revalider les quotas
Vérification
# Vérifier que la nouvelle révision est active
gcloud run revisions list --service SERVICE_NAME --region REGION --limit=3
# Vérifier que le service traite le trafic
gcloud run services describe SERVICE_NAME --region REGION --format='value(status.url)'
Exemple
# Construire et pousser l'image mise à jour
docker build --platform linux/amd64 -t gcr.io/my-project/divine-transcoder .
docker push gcr.io/my-project/divine-transcoder
# Mettre à jour uniquement l'image (contourne la revalidation du quota GPU)
gcloud run services update divine-transcoder \
--region us-central1 \
--image gcr.io/my-project/divine-transcoder:latest
# Résultat :
# Deploying...
# Creating Revision...done
# Routing traffic...done
# Service [divine-transcoder] revision [divine-transcoder-00010-vf4] has been deployed
Notes
- Cela ne fonctionne que pour les services existants qui ont déjà un GPU configuré
- Si vous avez besoin de modifier le type de GPU, le CPU, la mémoire ou d'autres paramètres, vous devrez demander un quota supplémentaire via https://g.co/cloudrun/gpu-quota
- Les premiers déploiements GPU dans une région obtiennent un quota automatique de 3 GPUs (non-zonal)
- Les augmentations de quota pour la redondance non-zonale sont accordées plus rapidement que pour la redondance zonale
- Si les scripts de déploiement utilisent
gcloud run deploy, envisagez d'ajouter un fallback versgcloud run services update --imagequand des erreurs de quota sont détectées