Ronda de Diseño ML · Parte 2 · estimaciones de C01
Las seis etapasLas nueve cuentas de la sección de estimaciones, cada una con su fórmula en variables, qué significa cada símbolo, el ejemplo de C01 paso a paso, una figura y un truco para recordarla. En la versión web, al final hay una calculadora para cambiar los supuestos.
Cómo recordarlaTrampa típicaValores de C01 en verde
Lo que conviene saberse de memoria antes de cualquier cuenta.
Tiempo
Mes
costos:
SLO:
predicciones al mes = diarias × 30.4
Bits y bytes
Bytes por valor
FP32 4 · FP16/BF16 2 · INT8 1 · INT4 ½
imagen 224 × 224 × 3 = 150,528 valores
Utilización objetivo
GPU online:
HPA de CPU:
batch offline: cerca de 100 %
Colas (M/M/1) y Little
·
(requests en vuelo)
Instancias (aprox., us-east-1)
g4dn.xlarge (T4) US$0.526/h · g4dn.2xlarge 0.752 · c6i.xlarge (4 vCPU) 0.17 (≈ 0.0425 por vCPU-h)
Por uso (aprox.)
entre AZs US$0.01/GB por sentido · S3 GET US$0.0004 por 1,000 · ALB ≈ US$0.008 por GB procesado
Cada número sale del anterior. Si aprendes el orden, las fórmulas se acomodan solas.
¿Cuántos requests por segundo tienes que aguantar?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| requests (o imágenes) por día | req/día | 10 M | |
| tasa promedio | req/s | ≈ 116 | |
| factor de pico diurno (2–5×) | — | 3 | |
| fracción del día en la hora pico | — | 12.5 % → 3× | |
| margen por spikes y crecimiento (1.3–1.5) | — | ≈ 1.4 | |
| tasa para la que dimensionas | req/s | 500 |
Cómo recordarla
Divide por el día, multiplica por el pico, súmale margen. Atajo: . Con s por día subestimas ≈ 14 %.
Trampa
Dimensionar con el promedio. El pico decide cuántas máquinas pones; el promedio decide cuánto pagas, porque la mayor parte del día el sistema trabaja muy por debajo de su capacidad.
¿Cuántos milisegundos le tocan a cada tramo?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| objetivo de latencia server-side | ms | 200 | |
| presupuesto p99 del tramo i | ms | ver la barra | |
| lo que no está en la tabla: fotos gigantes, GC, throttling | ms | ≈ 48 | |
| tiempo máximo hacia el tramo siguiente | ms | 150 (gateway → Triton) |
Cómo recordarla
Reparte el SLO antes de elegir tecnología. Primero la cuenta y después el stack: así sabes dónde puedes gastar (2 ms de cola de batching) y dónde no (decodificar un JPEG de 12 MP sin cuidado).
Trampa
Los percentiles no se suman. La suma de p99 suele sobrestimar el p99 total, pero no es una cota garantizada: úsala para repartir y mide el p99 de punta a punta. Y la subida de la foto no entra: el SLO es server-side.
¿Cuántas GPUs pones y qué tan cargadas van?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| máximo medido por GPU (perf_analyzer) | img/s | ≈ 1,200 (T4) | |
| utilización objetivo (50–70 %) | — | 0.5 | |
| GPUs por throughput | GPU | 1 | |
| una por zona (disponibilidad) | GPU | 2 | |
| carga real sobre el máximo | % | 5–42 % | |
| tiempo en el sistema y de servicio | s | — | |
| requests en vuelo (Little) | — | — |
Cómo recordarla
Mide, baja a ρ, redondea hacia arriba, suma una. El orden importa: primero el máximo medido, luego la utilización objetivo, luego el techo, al final N+1. Y con Little, : 500 req/s × 50 ms = 25 requests en vuelo.
Trampa
Planear al 90 %: con el tiempo en el sistema es 10× el de servicio. Y nv_gpu_utilization no mide capacidad usada: marca tiempo con kernels corriendo.
¿Cuántos vCPU harían el mismo trabajo y cuánto cuestan?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| segundos de CPU por imagen por vCPU | s | FP32 0.04–0.08 · INT8 0.008–0.025 | |
| vCPU ocupados (Little con S = t) | vCPU | — | |
| objetivo de CPU del autoscaler | — | 0.6 | |
| promedio que pagas (sigue la curva + mínimos) | vCPU | ≈ 4–8 | |
| precio por vCPU-hora | US$ | ≈ 0.0425 |
Cómo recordarla
vCPU ocupados = tráfico × segundos de CPU por imagen. Es Little otra vez: cada vCPU es un “servidor” y su tiempo de servicio.
Trampa
Comparar pico contra pico. La diferencia está en el promedio: la CPU escala con la curva y la GPU con N+1 se queda encendida. Y lo mides la primera semana: latencia por vCPU y pérdida de INT8 en el golden set.
¿Cabe el modelo en la GPU, y cuánto sobra?
Para LLMs, lo que domina es el KV cache: (Llama 3 8B en BF16: por token).
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| parámetros del modelo | — | 24.5 M (ResNet-50 de 500 clases) | |
| bytes por parámetro: FP32 4 · FP16 2 · INT8 1 | B | 2 (FP16) | |
| tamaño del batch | — | 32 | |
| canales × alto × ancho de la entrada | — | 3 × 224 × 224 | |
| instancias del modelo en la GPU | — | 2 | |
| contexto CUDA + librerías | GB | ≈ 0.3–0.8 |
Cómo recordarla
Parámetros × bytes es el piso, no el total. Súmale el contexto CUDA, las activaciones del batch y una copia por instancia.
Trampa
Creer que solo pesan los pesos. En visión casi siempre sobra memoria; en LLMs el KV cache crece con los tokens en vuelo y es lo que decide cuántas conversaciones caben.
¿Cuántos vCPU necesita el gateway que decodifica y prepara la imagen?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| fracción del tráfico de cada tipo de imagen | — | 85 % móvil · 15 % web | |
| CPU por imagen de ese tipo | ms | ≈ 5 · ≈ 60 (originales) | |
| CPU promedio por imagen (con draft mode) | ms | ≈ 6 | |
| objetivo de CPU del HPA | — | 0.6 | |
| tamaño del nodo | vCPU | 4 (c6i.xlarge) |
Cómo recordarla
La CPU se cuenta igual que la GPU: tráfico × tiempo ÷ utilización, y al final redondeas a nodos enteros con uno por zona.
Trampa
Quedarte con el promedio: la cola de fotos gigantes manda (por eso el draft mode no es micro-optimización). Y la VM de la GPU solo tiene 4 vCPU: el preprocesamiento va en su propio tier.
¿Cuántos Gb/s viajan del gateway al model server, y cuánto cuestan?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| bytes por request que cruzan la red | B | 602,112 (FP32) | |
| ancho de banda | Gb/s | ≈ 2.4 | |
| red sostenida de la instancia (no el “hasta”) | Gb/s | 1.56 (c6i.xlarge) | |
| fracción que cruza de zona | — | 0.5 si balanceas al azar | |
| precio entre AZs (ida y vuelta) | US$/GB | 0.02 |
Cómo recordarla
Bytes × requests × 8 = bits por segundo. Y la tabla de bytes por valor: FP32 4, FP16 2, UINT8 1 (÷ 2 y ÷ 4 del tensor).
Trampa
Olvidar el × 8, usar el ancho de banda “hasta” en vez del baseline sostenido, y balancear al azar entre zonas: la transferencia entre AZs costaría más que las dos GPUs. Ruteo por zona desde el día 1.
¿Cuánto guardas, cuánto pagas al mes y cuánto cuesta cada predicción?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| bytes por log de predicción | B | ≈ 300 | |
| Parquet comprimido (5–10×) | — | 5–10 | |
| instancias de cada tipo y su precio por hora | US$/h | T4 0.526 · c6i 0.17 | |
| lo que se cobra por uso (GB, requests) y su precio | — | ALB 0.008/GB | |
| costo por 1,000 predicciones | US$ | ≈ 0.006 |
Cómo recordarla
Mes de costos = 730 h. Precio por hora × horas × instancias, y después lo que se cobra por uso (GB procesados, requests a S3, transferencia). Para SLOs el mes es de 30 días = 720 h.
Trampa
Olvidar lo que se cobra por uso: aquí el ALB pesa ≈ 30 % de la infra. El almacenamiento casi nunca es lo caro; lo caro es la privacidad de lo que guardas.
¿Cuánto tarda y cuánto cuesta procesar el catálogo existente?
| Símbolo | Qué es | Unidad | En C01 |
|---|---|---|---|
| imágenes por procesar | — | 200 M | |
| throughput por GPU en batch (IO + decode) | img/s | ≈ 1,000 | |
| máquinas en paralelo | — | 4 | |
| CPU por thumbnail | s | ≈ 0.002 | |
| precio de la instancia | US$/h | 0.752 (g4dn.2xlarge) | |
| precio por GET de S3 | US$ | 0.0004 / 1,000 |
Cómo recordarla
Más máquinas = menos horas, mismo costo. es constante: el número de máquinas lo decide tu fecha límite, no tu presupuesto.
Trampa
Correrlo contra el Triton online. Es un job aparte, reanudable por shards. El cuello de botella es IO + decode, no la GPU, y los thumbnails se recomprimieron: valida en una muestra que las predicciones coinciden con las de los originales.
Viene cargada con C01. Cambia un supuesto y mira qué se mueve en la cadena.
Tráfico
116 → 347 → 500
req/s: promedio → pico → diseño (sin redondeo: 486)
GPUs
2 GPUs
por throughput 1 (0.83 → techo) + 1, mínimo 2
Carga por GPU
21 %
promedio 5 % · si cae una 42 %
CPU del gateway
5.0 vCPU
3.0 ocupados → 2 nodos de 4 vCPU
Red a Triton
2.41 Gb/s
77 % del baseline por nodo · 181 TB/mes
Costo mensual (infra)
US$1,692
GPUs 768 · gateway 248 · ALB 503 · fijos 173
Costo por 1,000
US$0.0056
infra ÷ predicciones del mes × 1,000
Backfill
13.9 h
55.6 GPU-h → US$42
Mismas fórmulas que arriba. El pico de diseño se redondea hacia arriba al múltiplo de 50, como en C01. El costo incluye EKS (≈ US$73) y logs (≈ US$100) fijos.