Cloud Intelligence™
No pierdas tus GPUs durante el mantenimiento en Google Cloud
Asegura la capacidad con reservas de GCP
Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.
Continuación de este artículo para AWS
About Joshua Fox
Senior Cloud Architect II
Joshua Fox has been a software architect in innovative technology companies for 20 years. Now, he advises tech startups and growth companies on architecture and cost optimization for Google Cloud Platform and Amazon Web Services; also publishing articles, and speaking to cloud engineers.
He has a PhD from Harvard University and a BA in math from Brandeis.
My personal pageLa demanda global de GPUs es astronómica. Conseguir recursos NVIDIA L4, A100 o H100 en Google Cloud Platform (GCP) suele sentirse como un gran logro para tu equipo de Engineering. Sin embargo, puedes perder esa capacidad cuando se realiza mantenimiento del hardware subyacente o cuando detienes manualmente tu instancia para ejecutar tareas de rutina.
Detener tu VM libera tus recursos, ya sea por un evento de mantenimiento programado de Google Cloud o por una detención iniciada por el usuario para parchear un driver, rotar una imagen o modificar los scopes de la instancia. Esto devuelve tu GPU al pool público y deja varados tus entrenamientos críticos de ML o tus workloads de inferencia. Aquí te mostramos cómo asegurar tus GPUs y garantizar que sobrevivan a las actualizaciones de infraestructura.
El problema: el modelo de mantenimiento de GCP para GPUs
Una de las mejores funciones de GCP es Live Migration, que mueve las VMs en ejecución a hosts en buen estado durante el mantenimiento de la infraestructura con una interrupción mínima. Sin embargo, Live Migration no es compatible con VMs que tienen GPUs conectadas.
Como la GPU está conectada físicamente al host mediante PCIe, GCP no puede migrar el estado de la memoria de la GPU a través de la red. Por eso, Compute Engine usa la política de mantenimiento del host TERMINATE (onHostMaintenance) para las VMs con GPUs conectadas.
Cuando Google necesita parchear o reemplazar el hardware físico que aloja tu instancia:
- Compute Engine avisa con anticipación sobre los eventos de host programados, normalmente con una hora (el mantenimiento de emergencia puede avisar con menos tiempo).
- La VM recibe una señal de apagado ACPI y se detiene de manera forzada.
- Si tu VM está configurada con
automaticRestart: true(el valor predeterminado), GCP intenta automáticamente volver a levantar la VM en otro host en buen estado.
Advertencia sobre almacenamiento: Los datos en discos Local SSD son efímeros y pueden perderse durante una terminación, una detención manual o una recuperación fallida tras un evento de host. Guarda el estado persistente en Persistent Disk, Hyperdisk o Cloud Storage, y usa Local SSD solo para cachés y datos temporales.
Riesgos del mantenimiento iniciado por el usuario
Más allá de los eventos de host programados, muchas tareas administrativas de rutina requieren detener y volver a iniciar la VM por completo, en lugar de un simple reinicio. Algunos ejemplos:
- Actualizar drivers de NVIDIA o toolkits de CUDA que requieren un estado offline.
- Modificar atributos centrales de la instancia (como cambiar las cuentas de servicio o los scopes de acceso).
- Migrar a una nueva imagen de máquina o aplicar parches de SO de forma escalonada en un clúster.
Ejecutar un gcloud compute instances stop estándar entrega de inmediato tu hardware de vuelta al pool de capacidad compartida.
El riesgo: la lotería de la capacidad
Cuando GCP intenta reiniciar tu VM detenida (o cuando la inicias manualmente), vuelve al pool de recursos de la zona y solicita una nueva GPU.
Como las GPUs se encuentran en un estado de escasez casi permanente, un inicio posterior puede fallar si no hay capacidad disponible. En lugar de reiniciarse, tu VM arrojará un error ZONE_RESOURCE_POOL_EXHAUSTED o ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS.
Tu VM permanecerá en estado TERMINATED. Oficialmente, perdiste tu GPU y tendrás que hacer fila con todos los demás, intentando iniciar la instancia una y otra vez hasta que se libere capacidad. Tener suficiente cuota en el proyecto no te servirá de nada: no equivale a que exista capacidad física disponible en una zona específica. La cuota es un límite máximo impuesto por Google, mientras que la capacidad depende de si otros usuarios están ocupando en este momento los recursos existentes.
La solución: reservas zonales con coincidencia exacta de hardware
La solución que evita que tu GPU regrese al pool público durante un reinicio son las reservas de Compute Engine.
Una reserva en GCP ofrece un nivel de garantía de capacidad. Cuando tu VM se detiene por mantenimiento, libera el hardware físico que ocupaba, pero tu reserva de capacidad captura de inmediato ese "espacio vacío" y mantiene la asignación reservada para tu proyecto. Cuando Compute Engine reinicia automáticamente la VM o la inicias de nuevo de forma manual, tu VM simplemente consume tu reserva dedicada.
Las reservas de GCP son muy específicas:
- Restricción zonal: Las reservas están vinculadas a una zona específica (p. ej., us-central1-c), no a una región más amplia.
- Requisito de coincidencia exacta: Tu VM debe coincidir perfectamente con los parámetros de la reserva para consumirla. El tipo de máquina, el tipo y la cantidad de GPUs, el Local SSD y otras propiedades deben ser idénticos.
- Sin requisito de SO: A diferencia de las reservas de capacidad de AWS, que exigen coincidencia de sistema operativo (plataforma), GCP no requiere que el sistema operativo ni la imagen de arranque coincidan, lo que te da flexibilidad para rotar imágenes sin romper el bloqueo de la reserva.
En este escenario, la reserva sirve para retener tus recursos existentes. Si todavía no estás ejecutando la GPU, la creación de la reserva podría fallar; solo cuando el recurso esté disponible se creará la reserva con éxito.
Cloud bill shouldn't be a mystery
One platform for AI and Cloud optimization.
Restricciones importantes y casos especiales
Aunque las reservas son la defensa estándar contra la pérdida de capacidad, debes tener en cuenta ciertas reglas de arquitectura de GCP:
- Configuraciones de GPU restringidas: Debido a las restricciones extremas de suministro, algunas configuraciones de GPU más nuevas o muy demandadas no se pueden reservar con reservas de capacidad bajo demanda estándar. Por ejemplo, las configuraciones A4X Max, A3 Ultra y A3 High con menos de ocho GPUs actualmente tienen restricciones. Verifica siempre la elegibilidad de la reserva en la documentación de GCP.
- Spot VMs vs. CUD: Las reservas protegen los workloads de VMs estándar. No protegen las Spot VMs, que no pueden consumir reservas y son interrumpibles por diseño.
- CUD: Los descuentos por uso comprometido (CUD) afectan los precios; por sí mismos no reservan capacidad. Ten en cuenta que los CUD se cobran por las VMs, pero también por las reservas inactivas.
- Integración con GKE: Las reservas de Compute Engine pueden proteger la capacidad de GPU que usa Google Kubernetes Engine (GKE). En GKE Standard, configura el node pool con afinidad de reserva. En GKE Autopilot, debes seleccionar explícitamente una reserva o configurar una ComputeClass personalizada compatible.
Cómo implementar reservas de GPU para el mantenimiento del usuario
El enfoque más seguro para evitar que la configuración se desvíe es definir la VM una sola vez en una plantilla de instancias y crear la reserva a partir de esa plantilla. De forma predeterminada, las reservas se configuran como "Consumir automáticamente". Cualquier VM creada en tu proyecto que coincida exactamente con las especificaciones de la reserva la consumirá de forma automática.
1. Crea la reserva
Si estás realizando mantenimiento escalonado en un clúster (como aplicar parches de SO nodo por nodo), no necesitas reservar capacidad para toda la flota. Dimensiona tu reserva según el número exacto de instancias que planeas detener de forma simultánea. Por ejemplo, si drenas y actualizas dos nodos a la vez, configura tu --vm-count en 2 para capturar esas instancias específicas mientras se reinician.
Puedes aprovisionar la reserva usando una plantilla de instancias para garantizar la coincidencia exacta, desde la línea de comandos:
gcloud compute reservations create gpu-maintenance-reservation \ --project=my-project-id \ --source-instance-template=projects/my-project-id/global/instanceTemplates/my-gpu-template \ --vm-count=1 \ --zone=us-central1-cComo alternativa, puedes definir la reserva directamente:
gcloud compute reservations create reservation-v100 \ --project=joshua-playground \ --zone=us-east1-c \ --machine-type=n1-standard-1 \ --accelerator=count=1,type=nvidia-tesla-v100 \ --vm-count=1 \ --require-specific-reservation=falseY, por supuesto, también puedes hacerlo desde la Google Cloud Console.

2. Despliega tu VM y verifica el consumo
Como --require-specific-reservation está en false, no necesitas cambiar tus scripts de despliegue de VMs. Siempre que lances una VM con una coincidencia exacta en la misma zona, GCP la asignará automáticamente a tu capacidad reservada.
Para confirmar que la cantidad esperada de instancias está consumiendo los slots reservados, revisa las métricas de la reserva en la Google Cloud Console. Puedes ver las reservas actuales en Compute Engine > Reservations, o consultar el uso histórico en Google Cloud Monitoring, con las métricas compute.googleapis.com/reservation/used y compute.googleapis.com/reservation/reserved.
3. Elimina tu reserva
A diferencia de las VMs estándar, las reservas de capacidad deben eliminarse de forma explícita cuando ya no las necesitas. Si retiras tu workload de forma permanente y eliminas la VM, pero olvidas eliminar la reserva, seguirás pagando por la capacidad de GPU vacía al precio completo bajo demanda; y los CUD también se facturarán.
Cuando termines con la reserva, elimínala desde la línea de comandos:
gcloud compute reservations delete gpu-maintenance-reservation \ --project=my-project-id \ --zone=us-central1-c \ --quietLos números
Las reservas en GCP no tienen costo adicional, aunque pagas por los recursos reservados tanto si están conectados a una VM en ejecución como si están inactivos. Como ya estás pagando por la VM con GPU activa, protegerla con una reserva no altera tus costos. Solo incurres en costos por inactividad durante los breves minutos en que la VM se reinicia durante el mantenimiento, lo que la convierte en un seguro muy barato contra la pérdida de tu hardware.
Para verificar exactamente cuánto pagaste por la capacidad reservada mientras tus instancias estaban detenidas, puedes usar DoiT Cloud Analytics. Filtra tus reportes por el SKU compute.googleapis.com/reservation para auditar el costo exacto de la capacidad garantizada durante tu tiempo de inactividad.
Al usar las reservas de GCP, conviertes la disponibilidad de hardware de un juego de azar en una garantía predecible. Como las reservas no cuestan nada adicional sobre tu cómputo subyacente, no proteger tus instancias críticas de GPU con una reserva es un riesgo innecesario. Aprovisiona la capacidad exacta que necesitas en tu zona de destino, despliega desde una plantilla de instancias coincidente y asegúrate de que los reinicios de rutina o los mantenimientos inevitables de Google nunca dejen tus workloads varados.