De inferencia estática a dinámica

El sistema anterior tomaba una sola decisión, una vez: cargar los 46 modelos en una GPU fija y dejarlos ahí. Todo lo demás —cuánto cuesta, cuánto escala, qué pasa si un modelo no cabe— era consecuencia de esa decisión. La plataforma nueva decide en tiempo de ejecución: qué modelo vive dónde, cuándo se descarga, cuánta capacidad encender y cuándo apagarla toda. Este informe contrasta ambas infraestructuras contra la factura real de Google Cloud y contra lo medido en producción.

Fuente · Cloud Billing, cuenta 01DB70-652EAE-B4124D Periodo · ene–sep 2026 Proyectos · lucro-recognition-system → hub-gpu-prod
Entra a producción este mes Sistema de inferencia en corte
Pendiente Workers · API Gateway después
Ahorro anualizado proyectado USD 39.288
01 · Resumen ejecutivo

Cuatro resultados de una misma decisión de diseño

Construir un sistema dinámico significó escribir un servicio de control que decide placement, ruteo, carga, descarga y capacidad — triton-controller —, un catálogo declarativo de modelos por entorno, un gate de CI que mide recursos reales antes de dejar entrar un modelo, y la infraestructura que todo eso necesita. El cambio de GPU es uno de los resultados: recién cuando el sistema dejó de necesitar que todos los modelos vivieran juntos en una GPU grande, una GPU chica pasó a ser viable.

Unidad de escalado 46 → 1modelos

Antes, atender un pico significaba encender otra A100 con los 46 modelos. Ahora el controller coloca el modelo pedido y sus dependencias donde ya hay VRAM libre.

Piso de capacidad 1 → 0GPUs

El legacy declaraba minReplicas: 1: la GPU nunca se apagaba. Los tres pools nuevos declaran min_nodes = 0 y levantan capacidad por request.

Ahorro mensual proyectado $3.274/mes

Migrando la carga real de agosto (1.037 horas de GPU) sin cambiar nada más: $4.153$879. A eso se suma el entorno de pruebas, que deja de costar cuando está ocioso.

Lo que costaba no poder apagar $1.800en un mes

El pico de julio — el mes más caro del año — fue en buena parte un entorno de pruebas encendido, no crecimiento de producción. Es el costo que el diseño nuevo elimina por construcción.

Qué está medido y qué está proyectado

El costo por hora de GPU de ambos sistemas está medido en la factura: $4,04/h en lucro-recognition-system durante ocho meses, $0,85/h en hub-gpu-prod desde el corte a L4 del 5 de septiembre.

El ahorro mensual es una proyección: hoy la plataforma nueva todavía no absorbe la producción. La proyección asume que una hora de L4 hace el mismo trabajo que una hora de A100 — supuesto que se sostiene en la medición de latencia de la sección 6, donde L4 resultó más rápida, no más lenta.

La separación entre producción y pruebas es un prorrateo: la factura no trae dimensión de namespace, así que las horas de cada entorno se tomaron de Cloud Monitoring y esa proporción se aplicó al costo. Los totales son de factura; el corte entre ambos entornos, no.

02 · Las dos infraestructuras

Lo que cambia es la unidad que escala

Los dos sistemas sirven los mismos modelos con el mismo motor — NVIDIA Triton Inference Server. La diferencia está en quién decide qué modelo vive en qué GPU. En el legacy nadie lo decide: todos viven juntos, siempre. En el nuevo lo decide un servicio, request por request.

Antes Triton monolítico

lucro-recognition-system · GKE Autopilot

request HPA · duty_cycle > 40% replicas 1 → 6 · nunca 0 a2-highgpu-1g · 1× A100 40GB 1 pod Triton 46 modelos cargados a la vez se cargan todos o no arranca ninguno monta gcsfuse · bucket de modelos
Escalar cuesta una A100 completa. El HPA sólo conoce una métrica (duty_cycle del acelerador) y una palanca (réplicas del Deployment). Si un modelo se satura, la única respuesta posible es encender otra A100 con los 46 modelos otra vez. Y con minReplicas: 1, la GPU nunca se apaga.
  • GPUA100 40GB — el pod factura el nodo entero: 12 vCPU + 85 GB, se usen o no
  • EscalaRéplicas del Deployment, 1 → 6, mínimo 1
  • AislamientoNinguno — prod, dev y pruebas comparten forma y destino

Ahora Placement dinámico

hub-gpu-prod · GKE Standard + triton-controller

request triton-controller ¿hay placement listo para este modelo? sí → proxea · no → lo coloca gpu-prod-l4 g2-standard-8 sólo lo pedido + dependencias gpu-elastic-l4 batch escala a cero nodos gpu-test-l4 test escala a cero nodos señal real de VRAM (DCGM) alimenta: scaler eviction TTL/LRU scale-from-zero estado compartido en Valkey · varias réplicas del controller coordinan
Escalar cuesta un modelo. El controller resuelve el modelo pedido y sus dependencias, lo coloca en un pod con VRAM libre y proxea. Los modelos inactivos se descargan y devuelven memoria; los pools bajan a 0 nodos cuando nadie los usa.
  • GPUL4 24GB dedicada por entorno — 8 vCPU + 32 GB por nodo
  • EscalaPor déficit de VRAM, no por concurrencia HTTP; 0 → 10 nodos
  • AislamientoTres node pools separados por taints — mientras un entorno está activo ocupa una GPU física propia, porque la L4 no se puede particionar; cuando no, no ocupa ninguna
03 · Economía unitaria

Por qué una hora de A100 costaba $4,04

Los pods GPU de Autopilot no facturan lo que el pod pide: facturan el nodo físico completo que hizo falta para alojarlo. El sistema legacy pedía 2 vCPU y 16 GB, y pagaba un a2-highgpu-1g entero — 12 vCPU y 85 GB — más el recargo de Autopilot por acelerador. La GPU es sólo 73% de esa factura.

GPU vCPU del nodo RAM del nodo recargo Autopilot
$0 $1 $2 $3 $4 costo por hora de GPU servida (USD) A100 40GB a2-highgpu-1g 2,93 $4,00 L4 24GB g2-standard-8 $0,85 $3,15 por hora que deja de pagarse
La L4 es más barata en las tres dimensiones a la vez, no sólo en la GPU: chip más barato, nodo más chico y sin recargo de Autopilot. Los colores de la barra L4 siguen el mismo orden (GPU, vCPU, RAM) en la escala cian del sistema nuevo.
Derivación desde la factura · costo ÷ cantidad facturada, ene–sep 2026
ComponenteUSDCantidad$/hora GPU
Nvidia Tesla A100 Nvidia Tesla A100 GPU running in Americas19.0366.488 h2,934
vCPU del nodo A2 Instance Core running in Americas2.46177.859 h0,379
RAM del nodo A2 Instance Ram running in Americas2.337551.502 GiB·h0,360
Recargo Autopilot Autopilot A100 40GB / Accelerator CPU / Memory Premium2.1220,327
A100 sobre Autopilot25.9566.488 h4,00
Lo mismo para L4 · septiembre 2026, desde el corte del día 5
ComponenteUSDCantidad$/hora GPU
Nvidia L4 Nvidia L4 GPU running in Americas58,5105 h0,557
vCPU del nodo G2 Instance Core running in Americas20,9837 h0,199
RAM del nodo G2 Instance Ram running in Americas9,73.317 GiB·h0,092
L4 dedicada89,1105 h0,85

La decisión se tomó con una estimación; la factura la confirmó

La ADR-035 (5 de septiembre) eligió L4 usando precios de lista de terceros y anotó explícitamente que hacía falta «confirmar contra la consola de Cloud Billing antes de comprometer el análisis a una decisión final». Su estimación para g2-standard-8 fue $0,8536/hora. La factura de septiembre dice $0,85. La estimación con la que se decidió era correcta.

04 · Nueve meses de factura

El costo seguía a las horas, y no todas eran de producción

Aislar la capa de inferencia importa: de los $92.389 que lucro-recognition-system gastó en el periodo, la inferencia son $26.207. El resto es BigQuery, AlloyDB, red y las demás piezas del producto. Sobre esa porción, el costo por hora se mantuvo plano en ~$4 durante los nueve meses — lo que subió fueron las horas.

Inferencia legacy · A100 Plataforma nueva · hub-gpu-prod
HORAS DE GPU FACTURADAS POR MES 0 500 1.000 1.500 1.535 448 1.037 105 COSTO MENSUAL DE LA CAPA DE INFERENCIA (USD) 0 2.000 4.000 6.000 $6.070 $4.153 may–ago: A100 de medición y experimento MIG — construcción 5 sep: corte a L4 ene feb mar abr may jun jul ago sep* ene feb mar abr may jun jul ago sep* * septiembre parcial, del 1 al 17
El gasto de la plataforma nueva no es el costo de servir: es el costo de construirla. Entre mayo y agosto hub-gpu-prod pagó A100 para la VM de medición de recursos y para el experimento de consolidación con MIG, que se midió y se descartó. Recién desde el 5 de septiembre la infraestructura tiene su forma de producción.
Capa de inferencia, mes a mes · USD y horas de GPU facturadas
Mes Legacy USD Legacy GPU·h $/h hub-gpu-prod USD
Enero1.8294484,09
Febrero2.0675044,10
Marzo2.2945534,15
Abril2.2755574,097
Mayo2.4986104,10320
Junio3.4838614,05715
Julio6.0701.5353,95637
Agosto4.1531.0374,01408
Septiembre (1–17)1.5383854,00460
Periodo completo26.2076.4884,042.545

Y una parte de esas horas era el entorno de pruebas

La factura no distingue entornos — no trae namespace. Cloud Monitoring sí: dentro del proyecto legacy hay dos namespaces con contenedores GPU, recognition-prod y recognition-dev. Puestos lado a lado, el mes más caro del año deja de ser una historia de crecimiento.

recognition-prod recognition-dev · pruebas
0 800 1.600 2.400 645 h de pruebas 29% del mes ≈ $1.800 ene feb mar abr may jun jul ago sep* horas de contenedor GPU · Cloud Monitoring, por namespace * septiembre parcial, del 1 al 17
En ocho meses el entorno de pruebas consumió 702 horas de GPU — el 9% del total. Prorrateado sobre la factura son del orden de $2.500, de los cuales cerca de $1.800 cayeron en julio. En el legacy ese costo era difícil de evitar: apagar el nodo de pruebas significaba perder los modelos cargados y pagar seis minutos de cold-start al volver, así que quedaba encendido. En la plataforma nueva gpu-test-l4 baja a cero nodos y el controller lo vuelve a levantar cuando llega un request.
05 · Proyección

Cuánto cuesta la misma carga en cada infraestructura

Mové las horas de GPU al mes y compará. Los dos precios por hora son los medidos en la factura: $4,04 para A100 sobre Autopilot y $0,85 para L4 dedicada. La sustitución es hora por hora, que es un supuesto conservador — en la medición de latencia la L4 resultó más rápida.

1.037
A100 · Autopilot $4.190 a $4,04 por hora
L4 · dedicada $880 a $0,85 por hora
Ahorro mensual $3.310 79% menos
Ahorro a 12 meses $39.720 a carga constante
A100 $4.190 L4 $880 $0 $4.190
El punto de equilibrio está lejos. Harían falta más de 4,3 nodos L4 corriendo en simultáneo para igualar el costo de una sola A100 — y hoy existen tres entornos. Incluso con los tres activos al mismo tiempo, el peor caso posible con la topología actual, L4 sigue siendo ~30% más barata.
06 · Escalabilidad

Cuatro cosas que antes no se podían hacer

El costo por hora es la mitad del argumento. La otra mitad es que el sistema nuevo necesita menos horas para la misma carga, porque puede apagar lo que no se usa y mover lo que sí.

Caso 01

Escalar un modelo saturado

Un modelo recibe un pico de tráfico. En el legacy, la única palanca es replicar el Deployment: se enciende otra A100 y se cargan los 46 modelos otra vez, aunque 45 estén ociosos.

En el nuevo, el controller coloca réplicas adicionales de ese modelo — con sus dependencias, en orden topológico — en pods que ya tienen VRAM libre.

Antes
+1 A100 completa · $4,04/h
Ahora
+1 modelo en VRAM libre · $0
Caso 02

No pagar la GPU ociosa — ni la de pruebas

El legacy declara minReplicas: 1. La A100 queda encendida las 24 horas, haya o no tráfico, porque apagarla significaría perder los 46 modelos cargados y pagar el cold-start completo al volver. Eso vale para producción y también para el entorno de pruebas: 702 horas de GPU en el periodo, 645 de ellas en julio.

Los tres pools nuevos declaran min_nodes = 0. El controller levanta capacidad desde cero cuando llega un request sin placement, y el reaper de inactivos devuelve VRAM sin esperar a que haya presión. Un entorno de pruebas que nadie usa no cuesta nada.

Antes
piso de 1 GPU siempre encendida · pruebas también
Ahora
0 nodos · scale-from-zero por request
Caso 03

Que una prueba no tumbe producción

En el legacy, prod y las pruebas compartían la misma forma de despliegue y, en el experimento de consolidación, el mismo nodo físico. Una falla o un mantenimiento afectaba a todo a la vez.

Ahora cada entorno tiene su propia GPU física y su propio catálogo de modelos. gpu-prod-l4 no comparte hardware con gpu-elastic-l4 ni con gpu-test-l4.

Antes
un blast radius para los tres
Ahora
tres pools · tres GPUs físicas
Caso 04

Saber si un modelo cabe antes de desplegarlo

En el legacy, que un modelo entrara en memoria junto a los otros 45 se descubría en producción. No había control automático previo.

Ahora ningún modelo llega a staging sin pasar un gate que lo carga en hardware real, corre una inferencia real con una imagen real y mide CPU, RAM y VRAM. Desde la ADR-0026, ese gate mide sobre L4 — la misma GPU que sirve en producción — y no sobre A100.

Antes
se descubría sirviendo
Ahora
gate obligatorio · medición real

Y la latencia mejoró, no empeoró

Una GPU más barata suele significar un peor servicio. Acá no. La ADR-034 midió, con una comparación de control, que el ~2× de latencia que se había observado venía del particionado MIG de la A100, no de la arquitectura del chip. Sobre L4 dedicada, el pipeline real de alpina_afiches contra el endpoint de producción dio p50 de 224 ms, frente a 323 ms en A100. El cold-start desde nodo apagado quedó igual: 391 s contra ~360 s.

07 · Lo que queda abierto

Dónde este análisis deja de valer

Tres cosas que hay que decir en voz alta

  • Sin MIG, cada réplica necesita una L4 física entera. La L4 no soporta particionado. Hoy el patrón de carga casi nunca pide más de una réplica por entorno, pero si eso cambia, el costo crece lineal por réplica y este análisis hay que rehacerlo contra el tráfico de ese momento.
  • El placement sólo modela memoria de GPU. Ni la RAM del host ni la CPU entran en las decisiones de colocación, escalado o eviction. Medido en vivo: cargar un solo modelo llevó un pod del 22% al 79% de su límite de memoria mientras el indicador de presión marcaba 31%. Está levantado como ADR-042, sin implementar.
  • El ahorro no aparece en la factura hasta que se corte el tráfico. La inferencia entra a producción este mes; workers y gateway siguen en el sistema anterior. Hasta que la carga se mueva, los $3.274/mes son una proyección, no un resultado.

Cómo se construyó este informe

Datos de costo. Exportaciones CSV de la tabla de costos de Cloud Billing (cuenta 01DB70-652EAE-B4124D), un archivo por mes de facturación, enero a septiembre de 2026 — el histórico completo disponible en la cuenta. Cada fila trae proyecto, servicio, SKU, fecha, cantidad y costo sin redondear.

Atribución a la capa de inferencia. Del proyecto legacy se tomaron sólo los SKUs del nodo GPU: Nvidia Tesla A100 GPU running in Americas, A2 Instance Core y Ram running in Americas, y los recargos Autopilot A100 40GB / Accelerator CPU / Memory Premium. La aritmética se verifica sola: 6.488 horas de GPU × 12 vCPU del a2-highgpu-1g = 77.856, y la factura registra 77.859 horas de A2 Instance Core. Del proyecto nuevo, los SKUs equivalentes de L4 y G2.

Separación entre producción y pruebas. La exportación de facturación no trae namespace, así que el corte por entorno viene de Cloud Monitoring: la métrica kubernetes.io/container/accelerator/duty_cycle agregada por hora y agrupada por namespace_name, sobre el cluster autopilot-cluster. Da 6.765 horas de contenedor GPU en recognition-prod y 702 en recognition-dev. Esa proporción se aplicó al costo facturado; es un prorrateo, no una cifra de factura.

Verificación. Los totales por proyecto de cada mes se contrastaron contra lo que muestra la consola de facturación. Agosto: $11.347,08 para lucro-recognition-system y $407,56 para hub-gpu-prod, idénticos en ambas fuentes.

Datos de arquitectura y latencia. Manifiestos de Kubernetes y Terraform de ambos repositorios, configuración viva de los clusters en GCP, y las ADR-021, 026, 034, 035, 039, 040 y 042 de inference-platform y recognition-system-inference.