p-value
p-value · valor p
Si no hubiera ningún efecto, la probabilidad de ver una diferencia al menos tan grande como la que viste, solo por azar. Chico quiere decir «esto sería raro si no pasara nada».
Se calcula suponiendo que la hipótesis nula es cierta. No es la probabilidad de que el tratamiento funcione, ni la de que H0 sea cierta, y no dice qué tan grande es el efecto. Si no hay efecto, los p-values se reparten parejo entre 0 y 1: por eso, con un corte de 0.05, 1 de cada 20 pruebas sin efecto sale «significativa» por azar.
Ejemplo. Una diferencia de 1 punto con un error estándar de 0.355 puntos está a 2.8 errores estándar: p ≈ 0.005. La misma diferencia con 5,000 por brazo (error de 0.91) da p ≈ 0.27.
p99
p99 · 99th percentile
El percentil 99: el valor que deja abajo al 99 % de las requests. «p99 ≤ 200 ms» quiere decir que a lo más 1 de cada 100 tarda más de 200 ms.
Es una de las formas más comunes de prometer latencia, porque mira la cola: lo que viven las requests más lentas, las que vencen el timeout y las que la gente recuerda. A diferencia del promedio, brinca de golpe cuando la fracción de lentas pasa del 1 %. Necesita muchas muestras: con menos de 100, el p99 es simplemente la más lenta. Su primo, el p99.9, deja arriba a 1 de cada 1,000.
Ejemplo. C01 promete p99 ≤ 200 ms del lado del servidor. Con 10 millones de requests al día, ese 1 % permitido son 100,000 requests lentas al día.
Padding
padding · relleno
Un marco de ceros alrededor de la entrada de una convolución, para que el filtro también se centre en las orillas y la salida no se encoja.
Con un filtro de k × k (k impar), padding (k − 1) ÷ 2 y stride 1, la salida mide lo mismo que la entrada: por eso casi todas las convoluciones de 3 × 3 llevan padding 1. Cerca de la orilla el filtro ve ceros en vez de imagen, así que las respuestas de la orilla suelen ser peores.
Ejemplo. Una entrada de 5 × 5 con un filtro de 3 × 3: sin padding sale de 3 × 3; con padding 1, (5 + 2 − 3) ÷ 1 + 1 = 5, del mismo tamaño.
Page cache
page cache · file cache · buff/cache
La copia de los archivos leídos que el sistema operativo guarda en la RAM que nadie está usando. La segunda vez que se lee un archivo, sale de la RAM en vez del disco; si un programa necesita esa memoria, el sistema la suelta.
En Linux, el comando free la muestra como buff/cache: por eso la memoria «libre» casi siempre se ve baja, y lo que importa es la columna available. Las escrituras también pasan primero por ahí y llegan al disco un poco después, y por eso una USB se «expulsa» antes de sacarla. Con mmap, un proceso usa directo las páginas de la page cache, sin hacer otra copia, y varios procesos comparten las mismas. En un servidor, la page cache es la diferencia entre un reinicio de segundos y uno de minutos, y medir un arranque con ella llena engaña.
Ejemplo. C07 sirve desde la page cache 51.2 GB de vectores por máquina: si no estuvieran ahí, cada máquina le pediría ≈ 175,000 lecturas al azar por segundo a un disco de red que da 40,000.
Paralelismo
parallelism
Que varias tareas avancen en el mismo instante, cada una en su propio núcleo de la CPU (o en una GPU). Necesita hardware: con un solo núcleo, dos tareas nunca avanzan en el mismo instante.
Es lo único que acelera el trabajo de pura CPU: cuatro fotos de 40 ms de CPU tardan 160 ms en un núcleo y 40 ms en cuatro. Puede ir dentro de una tarea (4 hilos sobre la misma foto: menos latencia) o entre tareas (4 procesos, cada uno con su foto: más throughput). En CPython, los hilos no corren Python en paralelo por el GIL; sí lo hacen los procesos aparte y las librerías en C que lo sueltan. Una GPU es paralelismo en grande: miles de cuentas a la vez.
Ejemplo. La Ronda (M08) midió una ResNet-50 en 4 núcleos: 1 proceso con 4 hilos da ≈ 61 fotos por segundo, a ≈ 16.5 ms cada una; 4 procesos con 1 hilo, ≈ 86 fotos por segundo, a ≈ 46 ms.
Parámetro
parameter · weight
Cada uno de los números internos de un modelo que el entrenamiento ajusta. Son sus «perillas».
Una combinación de valores de los parámetros hace que el modelo responda de una forma, y otra combinación, de otra. Entrenar es buscar la combinación con la que el modelo se equivoca menos. En inglés también se les dice weights (pesos).
Ejemplo. La ResNet-50 de C01 tiene unos 24.5 millones de parámetros con sus 500 categorías (25.6 millones en la versión original, de 1000).
Paso
step · iteration · iteración
Una vuelta del ciclo de entrenamiento con un batch: pasar las fotos por el modelo, medir la pérdida, calcular el gradiente y ajustar los parámetros.
Es la unidad con la que se cuenta el entrenamiento: el scheduler y el warmup se definen en pasos, y el checkpoint anota en qué paso iba. Pasos por época = ejemplos ÷ tamaño del batch, redondeado hacia arriba (o hacia abajo, si se tira el último batch incompleto).
Ejemplo. C01: 1,840,211 fotos ÷ 64 = 28,753.3, redondeado hacia arriba son 28,754 pasos por época; por 8 épocas, 230,032 pasos.
PCIe
PCI Express
La conexión (el bus) por donde la CPU habla con las tarjetas de la máquina, como la GPU. Va por carriles, y cada generación duplica la velocidad: una GPU con 16 carriles Gen3, como la T4, recibe ≈ 16 GB/s en cada sentido.
Cada carril tiene cables para ir y otros para volver, así que las dos direcciones van a la vez: Gen3 da ≈ 1 GB/s por carril en cada sentido, Gen4 ≈ 2 y Gen5 ≈ 4. NVIDIA suele anunciar las dos direcciones sumadas (64 GB/s para la Gen4 x16 de la L4). La copia la hace la GPU leyendo directo de la RAM (DMA), desde memoria fijada (pinned). Para una foto, PCIe casi no cuenta; importa con lo grande o lo repetido: cargar los pesos de un LLM, video sin comprimir o tensores que van y vienen entre la CPU y la GPU en cada request. Entre GPUs se usa NVLink, mucho más rápido.
Ejemplo. El tensor de Ana, 602,112 bytes en float32, cruza PCIe Gen3 x16 en ≈ 38 µs: ≈ 1 % del cálculo de la GPU y nada contra los 2 a 4 ms de la red. Los ≈ 49 MB de pesos de la ResNet-50 de C01 en FP16, una sola vez al arrancar: ≈ 3 ms.
Peeking
peeking · mirar antes de tiempo
Revisar un A/B cada rato y pararlo en cuanto sale «significativo». Cada mirada es otra oportunidad de que el ruido cruce la raya: mirando 14 días, las falsas alarmas pasan del 5 % a más del 20 %.
El 0.05 de un p-value vale para un análisis al final, con la muestra que se fijó antes. Hay dos salidas: fijar duración y muestra antes y decidir solo al final (los guardrails sí pueden parar un daño, pero no declarar victoria), o usar una prueba secuencial, diseñada para mirar muchas veces sin inflar el error.
Ejemplo. En 2,000 A/A simulados de 14 días: decidiendo solo el día 14, 5.2 % de falsas alarmas; parando el primer día que p < 0.05, 22.9 %. La Ronda, con 20,000 A/A, da 21.5 %.
Percentil
percentile · quantile
El percentil p es el valor que deja en él o abajo de él al p % de los datos. El p50 es la mediana; el p99 solo deja arriba a 1 de cada 100.
Se calcula ordenando los datos. Con el método del rango más cercano, la posición es p ÷ 100 × n, redondeada hacia arriba (redondear hacia arriba (ceil)). Otros métodos interpolan entre dos vecinos, y con pocos datos dan números distintos en la cola: importa usar siempre el mismo. Las herramientas de monitoreo los llaman cuantiles y los escriben como fracción (0.99). No se suman ni se promedian: el p99 de varios servidores se saca sumando sus buckets y calculando al final.
Ejemplo. Con 20 latencias ordenadas, el p95 es la 19.ª (0.95 × 20 = 19), 160 ms, y el p99 es la 20.ª (19.8 se redondea a 20), la más lenta, 900 ms.
Perceptrón
perceptron
Una de las primeras neuronas artificiales que aprendían solas (Frank Rosenblatt, 1958): suma sus entradas con pesos y responde 1 si la suma pasa de 0. Solo puede separar lo que se separa con una recta.
Su regla de aprendizaje es corregirse solo cuando se equivoca: si dijo 0 y era 1, le suma cada entrada a su peso; si dijo 1 y era 0, se la resta. Aprende el AND en unas cuantas vueltas, pero nunca el XOR, porque su frontera es una recta y los casos del XOR no se separan con una. Minsky y Papert convirtieron ese límite en teorema en 1969; se resolvió con capas ocultas, el MLP.
Ejemplo. Con w₁ = 2, w₂ = 1 y b = −2 calcula el AND: solo la entrada (1, 1) da una suma positiva, 2 + 1 − 2 = 1.
Pérdida
loss · loss function · función de pérdida
Un número que mide qué tan equivocado está el modelo: 0 si acierta con total seguridad, y más grande mientras peor le va. Entrenar es hacer que baje.
La fórmula depende de la tarea. Para clasificar, la más usada es la entropía cruzada: −ln de la probabilidad que el modelo le dio a la respuesta correcta. Para predecir un número, el error cuadrático medio. Para un batch se promedian las de todos sus ejemplos. A diferencia de contar aciertos, cambia un poquito con cada cambio pequeño de las perillas, y por eso dice hacia dónde mejorar.
Ejemplo. El modelo le da 94 % a «Tenis» y eran tenis: −ln(0.94) ≈ 0.062. Si le diera 10 %: −ln(0.10) ≈ 2.30. Un modelo que reparte parejo entre 500 categorías: −ln(1/500) ≈ 6.21.
Permisos
file permissions · rwx · chmod
Lo que cada usuario puede hacer con un archivo: leerlo (r), escribirlo (w) o ejecutarlo (x), en tres juegos: para el dueño, para su grupo y para los demás. Se escriben en letras (rwxr-x---) o en octal (750).
Cada proceso corre como un usuario, que el kernel conoce por un número, el UID, y que pertenece a grupos (GID). Cada archivo tiene un dueño, un grupo y 9 bits de permiso. Cada juego de 3 bits es un número del 0 al 7 (r = 4, w = 2, x = 1): por eso rwxr-x--- es 750. En una carpeta, r deja ver los nombres, w crear y borrar adentro, y x entrar: para leer un archivo hace falta x en todas las carpetas de su ruta. Se cambian con chmod (los bits) y chown (el dueño). Cuando no alcanzan, el kernel responde «Permission denied» (errno 13). Root se los salta.
Ejemplo. 644 (rw-r--r--) para el código, 755 (rwxr-xr-x) para un programa o una carpeta, 600 (rw-------) para una llave privada. En C02, la configuración con la contraseña de las cámaras se guarda con 0600. Nunca 777: cualquiera podría cambiarlo.
PID
process ID
El número con el que el sistema operativo identifica a un proceso (un programa corriendo) mientras vive. Con él se le habla; por ejemplo, para pedirle que termine.
Lo asigna el kernel al crear el proceso, en orden; al llegar al tope vuelve a empezar y reusa los de procesos que ya terminaron. Por eso cambia en cada corrida. Cada proceso conoce también el PID de su padre (el PPID), y así los procesos forman un árbol. El PID 1 es el primero que arranca: en Linux suele ser systemd; en una Mac, launchd. Un contenedor tiene su propia numeración: adentro, el PID 1 es el programa principal (por fuera, la máquina le da otro número), y tiene una regla especial: el kernel no le aplica la acción por omisión de una señal (salvo la de un SIGKILL que llegue de afuera), así que si no maneja SIGTERM, la señal se ignora.
Ejemplo. kill 4821 le manda SIGTERM al proceso con PID 4821. En la imagen del gateway de C01, el CMD en forma exec hace que uvicorn sea el PID 1 y reciba el SIGTERM de cada deploy.
Pipeline
pipeline
Una cadena de pasos donde lo que sale de uno es lo que entra al siguiente, y que se puede volver a correr igual.
Lo importante es que se pueda volver a correr igual: si cada paso lee una versión fija de lo que le entra y guarda lo que sale, cualquiera puede repetir el resultado o encontrar en qué paso se rompió. En producción casi todo es un pipeline: el de datos, el de entrenamiento y el de despliegue.
Analogía. Una línea de ensamblaje: cada estación hace una cosa y le pasa la pieza a la siguiente.
Ejemplo. El camino de C01 es un pipeline: datos → modelo → API → contenedor → orquestación → monitoreo.
Píxel
pixel
Cada cuadrito de un solo color en que se divide una imagen digital. En una foto a color, cada píxel son tres números: cuánto rojo, cuánto verde y cuánto azul.
Una foto es una cuadrícula de píxeles: tantos de ancho por tantos de alto. Por eso, para un modelo, una foto no es un dibujo sino una tabla de números.
Ejemplo. Un píxel naranja: R 236, G 106, B 63.
PNG
PNG
Un formato de imagen que comprime sin pérdida: al decodificar salen exactamente los mismos píxeles. Puede tener transparencia.
Es bueno para capturas de pantalla, logos y dibujos; para fotos ocupa bastante más que un JPEG. Puede venir con 4 canales (RGBA), en blanco y negro, con 16 bits por canal o con una paleta de colores: hay que convertirlo a RGB antes del modelo, y antes de achicarlo.
Ejemplo. Un PNG de 40 MP con transparencia y 16 bits por canal ocupa 40 M × 4 × 2 B = 320 MB al decodificarse.
Población
population
Todo el conjunto del que quieres saber algo: todas las fotos que el modelo va a ver, todos los vendedores, todos los votantes. Casi nunca se mide completa; se estima con una muestra.
El número de la población (la accuracy «de verdad», la tasa de aceptación real) es fijo pero desconocido. La muestra da una estimación con su ruido. Ojo: la población de producción cambia con el tiempo (drift), así que un examen de hace 8 meses describe a la población de hace 8 meses.
Ejemplo. Si el modelo de C01 acierta el 85 % de todas las fotos que suben los vendedores este mes, ese 85 % es un número de la población. Nadie lo ve completo: se estima con exámenes de miles de fotos.
Pooling
pooling · max pooling · average pooling
Resumir cada cuadrito de un mapa en un solo número (el mayor, o el promedio) para achicarlo. No tiene parámetros: no aprende nada.
Un max pooling de 2 × 2 con stride 2 deja los mapas con la cuarta parte de los números; su tamaño sale de la misma fórmula que el de una convolución. Se pierde exactamente dónde estaba algo dentro del cuadrito, pero se conserva que sí estaba. Al final de la ResNet-50, un pooling global promedia cada mapa entero en un número.
Ejemplo. El cuadrito 5, 6, 7, 3 con max pooling da 7.
Potencia
statistical power
La probabilidad de que una prueba detecte un efecto que sí existe, de un tamaño dado. Lo normal es pedir 80 %: de cada 5 efectos reales de ese tamaño, se ven 4.
El 20 % que falta (β, beta) son efectos que se escapan: un error tipo II. La potencia sube con más muestra, con un efecto más grande y con una significancia menos estricta. Una prueba sin potencia no dice nada cuando sale «no significativa»: no vio, pero tampoco podía ver.
Ejemplo. En C01, con 32,647 publicaciones por brazo, un efecto real de 1 punto sobre 70 % se detecta el 80 % de las veces. Con 5,000 por brazo, solo ≈ 20 % de las veces.
Precision
precision · precisión
De todas las veces que el modelo dijo «sí», qué fracción era verdad. Mide qué tanta basura hay en lo que el modelo señala.
Se calcula como verdaderos positivos / (verdaderos positivos + falsos positivos). Se puede inflar diciendo «sí» muy pocas veces, por eso se mira junto con el recall. Cuando los positivos son rarísimos, puede ser muy baja aunque la curva ROC se vea excelente: ahí se mira la curva PR.
Ejemplo. El modelo dijo «tenis» 120 veces y acertó 80: precision = 80 / 120 ≈ 66.7 %.
Precisión mixta
mixed precision · AMP (automatic mixed precision)
Entrenar con las cuentas pesadas en 16 bits (FP16 o BF16) y lo delicado en FP32: una copia maestra de los pesos en FP32 y, con FP16, una escala de la pérdida para que los gradientes chicos no se vuelvan 0.
Tres ideas: (1) los pesos de verdad viven en FP32 y cada paso usa una copia en 16 bits, para que los cambios chicos no se pierdan; (2) convoluciones y multiplicaciones de matrices en 16 bits en los tensor cores, acumulando en FP32, y softmax, pérdida y normalizaciones en FP32 (en PyTorch lo decide torch.autocast); (3) con FP16, la pérdida se multiplica por una escala (al principio, 65,536) antes de la backpropagation y los gradientes se dividen después. El GradScaler salta los pasos con inf o NaN y ajusta la escala. Con BF16 no hace falta la escala. Con Adam ocupa ≈ 16 bytes por parámetro: no ahorra memoria fija, pero baja las activaciones a la mitad y acelera mucho.
Ejemplo. C01 hace su fine-tune mensual con AMP. Un gradiente de 10⁻⁸ se vuelve 0 en FP16; con la pérdida multiplicada por 65,536 queda en ≈ 0.000655, que sí cabe, y al dividirlo vuelve como ≈ 10⁻⁸.
Predicción
prediction
La respuesta que da un modelo para un caso. No es una certeza: suele venir con qué tan seguro está, como una probabilidad.
Sale de la inferencia: el modelo calcula un número para cada respuesta posible y los convierte en probabilidades. La predicción es la respuesta más probable, o las primeras de la lista. Que diga 94 % no garantiza que acierte: qué tanto se le puede creer a ese número se ve en la lección «Qué es un modelo».
Ejemplo. «Calzado › Tenis, 94 %» es una predicción: el modelo cree que es eso, con una confianza de 94 %. Se lee como una probabilidad, aunque no siempre es exacta.
Preentrenamiento
pretraining
La primera y más cara etapa de un LLM: aprender a adivinar el siguiente token con enormes cantidades de texto. De ahí sale un modelo base, que continúa textos pero todavía no conversa.
No necesita etiquetas hechas por personas: el token que sigue ya está escrito en el texto, y esa es la respuesta de cada ejercicio. La pérdida es la entropía cruzada de cada predicción. Cuesta semanas o meses de miles de GPUs, así que casi nadie lo hace: se parte del modelo base que publicó alguien más y se le hacen las etapas siguientes (ajuste con instrucciones y ajuste por preferencias).
Ejemplo. Llama 3 se preentrenó con más de 15 billones (15 × 10¹²) de tokens. La frase «Ana vende sus tenis blancos.» (8 tokens) da 7 ejercicios: adivinar cada token a partir de los que tiene antes.
Prefijo binario (KiB, MiB, GiB)
binary prefix · kibi, mebi, gibi
Los múltiplos de 1,024 en vez de 1,000: 1 KiB = 1,024 bytes, 1 MiB = 1,024 KiB, 1 GiB = 1,024 MiB. Llevan una i: KiB, MiB, GiB, TiB.
Las computadoras cuentan en potencias de 2, y 2¹⁰ = 1,024 se parece a mil, así que por décadas «kilobyte» quiso decir las dos cosas. En 1998 la IEC separó los nombres: KB son 1,000 bytes (decimal) y KiB, 1,024 (binario). La diferencia crece con cada prefijo: 2.4 % en kilo, 7.4 % en giga, 10 % en tera. Los discos y las redes usan decimal; la RAM, Windows, nvidia-smi y PyTorch, binario. En una misma cuenta se usa una sola regla.
Ejemplo. Un disco de 1 TB tiene 10¹² bytes; Windows los divide entre 2³⁰ y muestra ≈ 931 «GB», que en realidad son GiB. No falta nada: es otra regla.
Prefill
prefill
La primera fase de cada request a un LLM: leer todo el prompt de una sola pasada, en paralelo, y guardar su K y su V en el KV cache. Termina con el primer token de la respuesta.
Como todos los tokens del prompt ya existen, se procesan juntos: cada peso que llega de la memoria se usa para miles de tokens a la vez, así que lo que manda es la velocidad de cálculo de la GPU (compute-bound). Su duración crece con el largo del prompt y, junto con la espera en la cola, forma el TTFT. El prefix caching se salta la parte del prompt que ya se calculó antes.
Ejemplo. En C10 de la Ronda, el prefill de un prompt de 2,000 tokens ocupa ≈ 150 ms de una réplica de 2 H100.
Prefix caching
prefix caching
Reutilizar el KV cache del inicio de un prompt que ya se calculó en un request anterior, para no repetir su prefill. Solo sirve si los tokens son idénticos desde el principio.
Muchos requests de un producto empiezan igual: el system prompt, los ejemplos few-shot (ejemplos en el prompt), las políticas. El servidor guarda el KV cache de esos tokens y, si el siguiente prompt empieza exactamente igual, se salta esa parte del prefill: baja el TTFT y el cómputo. Basta un token distinto al principio (la fecha, el nombre de la persona) para que ya no sirva: lo fijo va primero y lo variable al final.
Ejemplo. En C10 de la Ronda, la mitad de un prompt de 2,000 tokens es el prefijo fijo del producto: con prefix caching, el prefill solo calcula los ≈ 1,000 tokens restantes.
Preprocesamiento
preprocessing
Todos los pasos que convierten la entrada cruda (una foto) en la tabla de números exacta que el modelo espera: decodificar, girar, redimensionar, recortar y normalizar.
Tiene que ser idéntico al entrenar y al servir. Si cambia aunque sea un detalle (el orden de los colores, cómo se redimensiona), nada falla con error: el modelo simplemente acierta menos. A eso se le llama training-serving skew, y se evita con un solo código para los dos lados y una prueba de paridad.
Ejemplo. C01: decodificar → EXIF → RGB → resize 256 → crop 224 → ÷ 255 → normalizar → CHW float32.
Presupuesto de error
error budget
Lo que un SLO te deja fallar: 1 − SLO. Con 99.9 % en 30 días son 43.2 minutos, o 1 de cada 1,000 requests. Es un presupuesto para gastarlo en cambios y experimentos, no para guardarlo.
La idea viene de la ingeniería de confiabilidad de Google (SRE). Se convierte en una política escrita antes de los problemas y acordada con producto: con presupuesto de sobra se lanza normal; con poco, con más cuidado; agotado, se congela lo que no sea para mejorar la confiabilidad. Las alertas se arman con la velocidad a la que se gasta (burn rate): con 5 % de errores contra un SLO de 99.9 % se gasta 50 veces más rápido de lo permitido, y el presupuesto del mes dura 14.4 horas.
Ejemplo. C01: 0.001 × 10 millones de requests al día × 30 días = 300,000 requests fallidos permitidos al mes. Un deploy que hace fallar el 5 % durante 2 horas se come ≈ 41,667, el 14 % del mes.
Probabilidad
probability
Un número de 0 a 1 (o de 0 % a 100 %) que dice qué tan posible es algo. 0.25 es una de cada cuatro veces.
Las probabilidades de todas las opciones posibles suman 1. En un clasificador, las que salen de softmax o de la sigmoide son la estimación del modelo, no una verdad medida: qué tan buenas son se revisa con datos.
Ejemplo. Si de 1,000 fotos a las que el modelo les dio 0.9, aciertan 900, sus probabilidades de 0.9 están bien calibradas.
Proceso
process
Un programa corriendo. El sistema operativo le da memoria propia, un número que lo identifica (el PID) y al menos un hilo, una línea de ejecución, y lo turna en la CPU con los demás procesos.
Es la unidad con la que el kernel reparte la máquina. Cada proceso tiene su memoria, que los otros no pueden tocar; su PID y el de su padre; uno o más hilos; los archivos y conexiones que abrió; sus variables de entorno y el usuario con el que corre. Termina con un código de salida, porque acabó o porque lo mató una señal, y al terminar el kernel recupera toda su memoria. Un contenedor es, por dentro, uno o más procesos con una vista propia de la máquina.
Analogía. Cocinar la receta ahora, en una cocina con su mesa (la memoria), sus ingredientes (los datos) y su número de orden (el PID). Se rompe en que, al terminar, la cocina se borra completa en un instante: nada de lo que había en la mesa sobrevive.
Ejemplo. uvicorn --workers 4 arranca 4 procesos que atienden requests, más uno que los vigila. Si cargan un modelo en la GPU, son 4 copias de los pesos y 4 contextos de CUDA.
Producción
production · prod
Cuando el sistema ya lo usa gente real, todos los días, y si falla alguien lo nota.
Lo contrario es desarrollo: tu laptop o un notebook, donde puedes romper cosas sin que nadie se entere. Pasar algo de uno a otro, o cambiar la versión que responde por una nueva, es un deploy.
Ejemplo. El modelo de C01 está en producción: cada foto que alguien sube al marketplace pasa por él, de día y de noche. Si deja de responder, miles de personas tienen que buscar la categoría a mano.
Producto punto
dot product · inner product
Multiplicar dos vectores coordenada por coordenada y sumar todo. Da un solo número: positivo si apuntan hacia el mismo lado, cero si son perpendiculares y negativo si apuntan hacia lados opuestos.
Es igual a (largo de a) × (largo de b) × el coseno del ángulo entre ellos, así que mezcla dirección y largo: una flecha más larga saca productos punto más grandes con todo. Visto en el dibujo, es la «sombra» de una flecha sobre la dirección de la otra, multiplicada por el largo de la otra. Con vectores normalizados es exactamente la similitud coseno. Es la cuenta más repetida de ML: una neurona es un producto punto más un sesgo, la última capa de un clasificador hace uno por clase, la atención compara vectores con productos punto y una búsqueda exacta hace uno por cada vector del catálogo.
Analogía. Un ticket de compra: las cantidades (2, 1, 3) por los precios (50, 120, 15), sumadas, dan el total, 265. Se rompe en que en un ticket casi nunca hay cantidades negativas, y en un embedding los números negativos son normales: por eso el producto punto puede salir negativo.
Ejemplo. (4, 3) · (3, 4) = 4 × 3 + 3 × 4 = 24. (4, 3) · (−3, 4) = −12 + 12 = 0: son perpendiculares. Con 512 números son 512 multiplicaciones y 511 sumas.
Programa
program
Un archivo, o un grupo de archivos, con instrucciones para una computadora. En el disco no hace nada; cuando lo arrancas, a ese programa corriendo se le llama proceso.
Puede ser código fuente, texto que escribe una persona y que un intérprete lee al correr (como los archivos .py del gateway de C01), o un binario ejecutable ya compilado a instrucciones de máquina (como tritonserver). Del mismo programa pueden correr muchos procesos a la vez, cada uno con su propia memoria. La imagen de un contenedor es al contenedor lo que el programa al proceso: la plantilla quieta.
Analogía. La receta escrita: dice qué hacer, pero no cocina nada. Se rompe en que a una receta la sigue alguien que improvisa; a un programa, la CPU lo sigue al pie de la letra.
Ejemplo. El gateway de C01 es un programa: una carpeta con app.py y sus librerías. Con 3 pods, ese único programa corre como 3 procesos.
Promedio
mean · average
La suma de todos los valores dividida entre cuántos son. Es lo que le tocaría a cada uno si el total se repartiera parejo.
Es el número correcto para los totales: con el promedio y la cantidad sabes el total, como cuánto cuesta servir un día o cuántas requests hay dentro del sistema a la vez. Pero un solo valor muy lejano lo jala mucho. En latencia engaña de otra forma: si las lentas son pocas, lo suben solo un poco (98 requests de 30 ms y 2 de 3 s promedian 89.4 ms, abajo de 200) y no dice cuántas personas esperaron de más; por eso las promesas usan percentiles. La pérdida de un batch y la accuracy son promedios.
Analogía. El punto donde apoyarías con un dedo una regla con monedas puestas en la marca de cada valor, para que no se caiga. Una moneda muy lejos obliga a mover mucho el dedo.
Ejemplo. 30, 32, 35, 38 y 45 ms suman 180, y el promedio es 180 ÷ 5 = 36 ms. Con 98 requests de 30 ms y 2 de 3 s, el promedio es 89.4 ms, aunque 2 de cada 100 personas esperaron 3 segundos.
Prompt
prompt
El texto que se le da al modelo de lenguaje para que continúe: la pregunta, las instrucciones y, a veces, documentos o ejemplos.
El modelo lo lee completo antes de escribir el primer token de la respuesta (el prefill). En una app suele tener partes: el system prompt, ejemplos few-shot (ejemplos en el prompt), documentos y la pregunta. Un prompt largo cuesta más dinero, ocupa más KV cache y tarda más en dar el primer token.
Ejemplo. En C10 de la Ronda, un prompt típico tiene ≈ 2,000 tokens y la respuesta ≈ 250.
Prueba A/B
A/B test · experimento controlado
Repartir al azar a la gente en dos grupos, al mismo tiempo: uno con lo de siempre (A, el control) y otro con el cambio (B, el tratamiento), y comparar una métrica. Es la forma de saber si el cambio causa una mejora.
El azar reparte por igual todo lo demás (la temporada, el tipo de usuario, el celular), así que la única diferencia sistemática entre los brazos es el cambio. Antes de empezar se fijan la métrica primaria, los guardrails (métricas que no tienen que mejorar, pero no pueden empeorar), la unidad de aleatorización, el efecto mínimo, el tamaño de muestra y la duración. Se analiza con una prueba de hipótesis nula y su p-value.
Ejemplo. En C01, los vendedores se reparten 50/50 con un hash de su id: A ve las sugerencias del modelo actual y B las del nuevo. Con 33,000 publicaciones por brazo, 70.0 % contra 71.0 % de aceptación da p ≈ 0.005.
Prueba chi-cuadrado
chi-square test · χ²
Compara conteos de categorías contra los que esperabas: suma (observado − esperado)² ÷ esperado. Si el total pasa un valor crítico, la diferencia es «significativa».
Los esperados salen de la referencia: el total de hoy por la proporción de cada categoría en la referencia. El valor crítico depende de cuántas categorías hay: con K categorías se usan K − 1 «grados de libertad» (con 5 categorías, 4, y el corte al 5 % es 9.49). Para cambios chicos, chi-cuadrado ≈ n × PSI: con las mismas proporciones, cien veces más datos dan un chi-cuadrado cien veces más grande. Por eso, con millones de predicciones al día, casi cualquier cambio sale significativo: sirve para saber si hay evidencia de un cambio, y el PSI para saber si el cambio importa.
Ejemplo. Mezcla de 5 categorías padre de C01, con 1 punto de diferencia en dos de ellas: con 1,000 predicciones, chi-cuadrado ≈ 1.33 (nada); con 100,000, ≈ 133 (p ≈ 8 × 10⁻²⁸). El PSI es 0.0013 en los dos casos.
Prueba de paridad
parity test
Una prueba que pasa las mismas entradas por dos caminos que deberían dar lo mismo y compara las salidas número por número. Si no coinciden, algo cambió.
En imágenes vigila el preprocesamiento: en cada cambio de código, unas fotos fijas pasan por el camino del entrenamiento y por el del servicio real, y los tensores se comparan entre sí y con unos guardados, con la diferencia absoluta máxima. Con el mismo código y las mismas versiones, debe ser 0. La misma idea compara el modelo original con el que se sirve (por ejemplo, PyTorch en float32 contra TensorRT en float16), contando cuántas veces coinciden sus predicciones.
Ejemplo. C01 corre 20 fotos de referencia en cada cambio. Si alguien pasa el gateway a OpenCV, el canal R del naranja cambia de 1.92 a −1.04 y la prueba falla antes de llegar a producción.
Prueba KS
Kolmogorov–Smirnov test · KS test
Compara dos muestras de un número midiendo la distancia vertical más grande, D, entre sus curvas acumuladas. D va de 0 (iguales) a 1 (todos los datos de una quedan antes que todos los de la otra).
La curva acumulada de una muestra dice, para cada valor x, qué fracción de los datos es menor o igual a x: sube de 0 a 1 en escalones, uno por dato. La prueba pone las dos curvas juntas y busca dónde se separan más: eso es D. No necesita bins. También da un p-value: qué tan raro sería un D así de grande si las dos muestras salieran de la misma distribución. En monitoreo ese p-value engaña: el D que ya cuenta como «significativo» es ≈ 1.36 × √(2 ÷ n), con n datos por lado, así que con millones de datos cualquier cambio minúsculo lo es. Se usa D como tamaño del cambio, con un umbral calibrado, o la prueba sobre muestras chicas.
Ejemplo. Con 1 millón de datos por lado y una media corrida 0.02 desviaciones estándar (nada que importe), D ≈ 0.008 y el umbral es 0.0019: p ≈ 8 × 10⁻²⁹. Con 5 fotos por lado, el umbral es ≈ 0.86.
Prueba pareada
paired test · McNemar
Comparar dos modelos sobre exactamente los mismos ejemplos, uno por uno, en vez de comparar sus dos promedios por separado. Es mucho más sensible, porque el ruido de qué ejemplos tocaron se cancela.
Donde los dos aciertan, o los dos fallan, no hay información sobre quién es mejor; todo está en los ejemplos donde discrepan. Si fueran igual de buenos, cada discrepancia sería un volado: con b a favor de uno y c a favor del otro, z = (b − c) ÷ √(b + c). Esa es la prueba de McNemar (su χ² es z²). El gate de C01 la usa sobre el golden set.
Ejemplo. 50,000 fotos; solo el modelo nuevo acierta en 1,050 y solo el actual en 950. z = 100 ÷ √2,000 ≈ 2.24, p ≈ 0.025. Comparando las dos accuracies (85.2 % y 85.0 %) por separado: p ≈ 0.38.
PSI
Population Stability Index · índice de estabilidad de la población
Un número que dice cuánto se movió un histograma respecto a su referencia: la suma, bin por bin, de (actual − esperado) × ln(actual ÷ esperado). Menos de 0.1 es estable; más de 0.25, un cambio grande.
Se arma con los mismos bins en los dos lados, en proporciones que suman 1. Cada bin aporta un número mayor o igual a 0, porque la diferencia y el logaritmo del cociente siempre tienen el mismo signo. Es la divergencia KL en las dos direcciones, sumadas. A diferencia de un p-value, no crece con la cantidad de datos, así que sirve como tamaño del cambio. Los cortes 0.1 y 0.25 vienen de los bancos (credit scoring) y son costumbre, no ley: se calibran mirando cuánto se mueve en semanas normales. Como guía, en una variable con forma de campana, una media que se corre δ desviaciones estándar da un PSI de ≈ δ². Un bin vacío hace ln(0): se usan bins por cuantiles de la referencia y un piso fijo (epsilon).
Ejemplo. Brillo de las fotos de C01 en 5 bins: referencia 10, 20, 40, 20 y 10 %; una semana de noviembre con muchas fotos de noche, 22, 30, 30, 12 y 6 %. PSI ≈ 0.23: cambio moderado, arriba del 0.2 desde el que actúa C01.
Punto flotante
floating point · float
La forma en que la computadora guarda números con decimales: como notación científica en base 2, con un bit de signo, un exponente que dice dónde va el punto y una mantisa con los dígitos.
El valor es (−1)^signo × 1.mantisa × 2^(exponente − sesgo). Los bits de exponente dan el rango; los de mantisa, la precisión. Entre cada potencia de 2 y la siguiente cabe la misma cantidad de números, así que la separación crece con el tamaño y el error de redondeo es relativo. Hay valores especiales: infinito (inf) y NaN (not a number), que contagia a toda cuenta en la que entra. Los formatos que vas a oír: FP64, FP32, FP16, BF16 y FP8.
Analogía. La notación científica de toda la vida, 1.50528 × 10⁵, pero con potencias de 2 y un número fijo de dígitos. Se rompe en que casi ningún decimal, como 0.1, tiene una escritura exacta en base 2: se guarda redondeado.
Ejemplo. 6.5 = 110.1₂ = 1.101₂ × 2². En FP32: signo 0, exponente 2 + 127 = 129 (1000 0001) y mantisa 101 seguida de 20 ceros.
Punto porcentual
percentage point · pp
La resta entre dos porcentajes: de 85 % a 87 % son 2 puntos porcentuales, aunque el cambio relativo sea de 2.4 %.
«Subió 2 %» y «subió 2 puntos» son cosas distintas: lo primero es multiplicar por 1.02; lo segundo, sumarle 2 al porcentaje. Con métricas y disponibilidad conviene decir los dos. Pasar de 99.9 % a 99.99 % son solo 0.09 puntos, pero la caída permitida se divide entre 10: de ≈ 43 a ≈ 4.3 minutos al mes.
Ejemplo. El gate de C01 no deja pasar un modelo que quede más de 0.3 puntos abajo del actual: si el actual saca 96 % de top-5, el nuevo pasa con 95.7 % y no con 95.6 %.