Sesgo de medición y reproducibilidad: por qué dos benchmarks del mismo modelo dan cifras que difieren hasta 7×

Notación: importes en euros (N €), decimales con coma. El símbolo matemático se reserva para fórmulas: los importes se expresan en € o USD. Millar con espacio fino ((1,000)).

TL;DR

Correr el mismo modelo Llama-3-70B-Instruct en el mismo nodo de 4×H100 SXM 80 GB con dos herramientas distintas puede producir resultados de throughput que difieren 7,2× sin que el motor cambie una línea de código. La causa no es el motor: es el método de medida. A 1.000 QPS, un cliente asyncio mono-proceso (vLLM bench, SGLang bench, genai-perf pre-AIPerf) procesó 75.574 tokens frente a los 545.733 tokens de un cliente multi-proceso —ambos midiendo el mismo endpoint— (arXiv 2605.24217). El sesgo no es aleatorio: es sistemático, direccional y reproducible. Este artículo cataloga las fuentes de sesgo, cuantifica su magnitud y describe el harness mínimo que convierte un número en un dato auditable.


Las fuentes de sesgo: catálogo con magnitudes

Cada fuente de sesgo mueve el número publicado en una dirección determinada y con una magnitud característica. La tabla siguiente ordena las fuentes de mayor a menor impacto observado en la literatura:

Fuente de sesgoDirección del sesgoMagnitud documentadaReferencia
Saturación del cliente mono-proceso (GIL Python, asyncio)infravalora throughput; sobrevalora latenciahasta 7,2× menos tokens procesados a 1.000 QPSarXiv 2605.24217
Tokenizer distinto al del modelo (LLMPerf usa LlamaTokenizer universal)tok/s incomparables entre vocabularios distintosvariable; hasta 33 % de overhead de overhead de cliente en denominador del TPSNVIDIA blog (TPS = overhead de cliente ÷ duración total)
ignore_eos ausente u OSL inconsistentesubestima throughput; acorta artificialmente OSL realhasta terminación prematura; benchmark de longitud fija irrealdocs vLLM bench; NVIDIA fundamental concepts
Distribución ISL/OSL irreal (longitud fija en vez de distribución realista)codo optimista que no se parece a produccióndesplazamiento del codo; prefill infravalorado con prompts cortosdocs AIPerf sequence-length-distributions
Warmup ausente / prefix-cache calientesobrevalora TTFT (artificialmente bajo en las primeras peticiones)TTFT infra-estimado por KV-cache ya pobladovLLM prefix caching docs; arXiv 2605.24217
concurrency vs request-rate como modo de cargaconcurrency satura simétricamente; request-rate puede acumular colaITL sobreestimado si la cola crece sin techo con request-rateNVIDIA fundamentals; AIPerf docs
Ventana de medición demasiado cortano capta el régimen estacionario; incluye ramp-upthroughput sobre-estimado; latencia subestimadameta-métricas arXiv 2508.10251
Estado térmico y frecuencias de GPUthrottling térmico reduce throughput si no hay estabilización previatemperatura > 75 °C dispara throttling; diferencia de ~3 W de potencia establearXiv 2604.09048
Prefix-cache caliente entre corridassobrevalora TTFT; TTFT irreal si el cache está pre-poblado de la corrida anteriorefecto severo en evaluaciones multi-prompt con prefijos compartidosarXiv 2605.24217
Media en vez de percentilesoculta la cola de latenciaP99 puede ser 4–6× la mediana a alta concurrenciaNVIDIA fundamentals; Anyscale docs

El sesgo dominante: saturación del cliente mono-proceso

El sesgo de mayor magnitud no está en el motor sino en el cliente que genera la carga. Las herramientas mono-proceso (vLLM bench, SGLang bench, genai-perf antes de su reemplazo por AIPerf el 15 de abril de 2026) usan un único proceso Python con asyncio para gestionar las peticiones concurrentes. El Python Global Interpreter Lock (GIL) impide que un solo proceso utilice más de un núcleo CPU simultáneamente, lo que introduce un cuello de botella en el lado cliente que se vuelve crítico a alta concurrencia.

El efecto matemático: a medida que el request rate sube, el cliente no consigue despachar peticiones al ritmo configurado, acumula tiempo de espera en cola en el lado cliente, y ese tiempo se registra como latencia del motor. El resultado es que el TTFT y el TPOT aparecen inflados y el throughput aparece deprimido, sin que el motor haya cambiado nada (arXiv 2605.24217).

La discrepancia documentada a 1.000 QPS:

Arquitectura de clienteTokens procesados a 1.000 QPSRatio
Mono-proceso (asyncio, Python GIL)75.5741× (base)
Multi-proceso (carga distribuida)545.7337,2×

Nota: ambos clientes apuntan al mismo endpoint; la diferencia es íntegramente atribuible al cliente de benchmark, no al motor.

MONO-PROCESO (vLLM bench, SGLang bench, genai-perf pre-AIPerf)1 proc. Pythonasyncio + GILcola cliente(≠ cola motor)Motor (vLLM…)TTFT/TPOTsobreestimadosTPS subestimadoMULTI-PROCESO (AIPerf, GuideLLM)N procesossin GIL compartidoMotor (vLLM…)mide el motor;7,2× más throughputcapturadoLa arquitectura del cliente determina qué se mide: el cuello del cliente o el del motor.

El sesgo del tokenizer: tok/s no son comparables entre vocabularios

Los tokens no son universales. Cada modelo tiene su propio tokenizer con su propio vocabulario. Llama-3 usa un vocabulario de 128.256 tokens; Gemma usa 256.128; modelos anteriores usaban 32.000–50.000. El mismo texto en inglés produce un número de tokens distinto según el tokenizer del modelo.

La consecuencia directa para el benchmarking: si la herramienta mide tok/s con un tokenizer distinto al del modelo servido, el número de tokens —y por tanto el throughput en tok/s y el coste por token— están sesgados. LLMPerf (archivado en diciembre de 2025) usaba LlamaTokenizer de forma universal para todos los modelos, lo que garantizaba consistencia interna en el leaderboard pero hacía los tok/s incomparables con mediciones de otros modelos con vocabularios distintos.

La fórmula del TPS en LLMPerf incluía además el denominador completo del benchmark —tiempo de generación de prompts, preparación de peticiones y almacenamiento de respuestas—, que NVIDIA estimó en hasta un 33 % de la duración total a concurrencia 1. Esto hace que el TPS de LLMPerf sea sistemáticamente inferior al de GenAI-Perf/AIPerf para el mismo sistema, sin que el motor sea peor:

$$\text{TPS}{\text{LLMPerf}} = \frac{\text{tokens salida}}{T{\text{end}} - T_{\text{start}}}$$

$$\text{TPS}_{\text{GenAI-Perf}} = \frac{\text{tokens salida}}{T_y - T_x}$$

Donde (T_{\text{start}}) y (T_{\text{end}}) incluyen los overheads de cliente, mientras que (T_x) y (T_y) son el instante del primer request y el del último token recibido, respectivamente (NVIDIA · Fundamental Concepts).

La regla operativa: siempre contar tokens con el tokenizer del modelo servido, no con un tokenizer proxy.


El sesgo de ignore_eos y OSL inconsistente

La mayoría de los modelos LLM generan un token especial de fin de secuencia (EOS) cuando consideran completa la respuesta. Si el benchmark no configura ignore_eos=True, la longitud real de salida (OSL) varía de petición en petición según la distribución de longitudes naturales del modelo, lo que produce:

  1. OSL inconsistente: dos corridas con la misma semilla pueden producir distribuciones de OSL distintas si el modelo varía su output natural.
  2. Comparación espuria: un modelo “más rápido” puede serlo simplemente porque genera respuestas más cortas (termina antes en EOS), no porque tenga más throughput real.
  3. Throughput subestimado: si el benchmark espera OSL=256 pero el modelo termina en OSL=80 de media, el throughput en tok/s parece mayor pero mide menos trabajo.

El parámetro ignore_eos (o --ignore-eos en vLLM bench) instruye al motor a ignorar el token EOS y continuar hasta alcanzar max_tokens. Es obligatorio para que el OSL sea el configurado, no el natural del modelo, y para que dos corridas sean comparables (vLLM benchmark CLI docs).


El sesgo de la distribución ISL/OSL

La distribución de longitudes de entrada (ISL) y salida (OSL) determina qué proporción del tiempo de cómputo se destina al prefill (costoso en TTFT) y cuánto al decode (costoso en ITL). Un benchmark con longitud fija —por ejemplo ISL=128, OSL=128— produce resultados que no se parecen a ningún tráfico real.

Los casos de uso reales tienen distribuciones muy distintas:

Caso de usoISL típico (tokens)OSL típico (tokens)Domina
Traducción500–2.000500–2.000equilibrado
Generación (código, email)~100~1.000decode (OSL largo)
Resumen / RAG~1.000~100prefill (ISL largo)
Razonamiento (CoT)~1001.000–10.000decode muy largo

Un benchmark de ISL corto con un modelo optimizado para prefill dará un TTFT artificialmente bajo y un throughput artificialmente alto. El codo del sweep se desplaza: con ISL=64 el sistema admite más concurrencia sin romper el SLO de TTFT; con ISL=1.024 el prefill satura antes y el codo aparece antes. Usar la distribución equivocada es dimensionar para un tráfico que no existe.

AIPerf introduce distribuciones de secuencia con varianza configurable por componente para reproducir mezclas de tráfico realistas (AIPerf · Sequence Length Distributions):

--sequence-distribution "64|10,32|8:70;256|40,128|20:20;1024|100,512|50:10"

Esto crea el 70 % de peticiones con (\text{ISL} \sim \mathcal{N}(64, 10)) y (\text{OSL} \sim \mathcal{N}(32, 8)), el 20 % con ISL/OSL medios, y el 10 % con ISL/OSL largos —mucho más fiel a un tráfico de chatbot real que una longitud fija—.


El sesgo del warmup y el prefix-cache

Dos fuentes de sesgo relacionadas pero distintas:

Warmup ausente. Las primeras peticiones de un benchmark llegan a un motor “frío”: la GPU está en estado de baja frecuencia, el KV cache está vacío, y el sistema operativo puede estar paginando memoria. El TTFT de las primeras peticiones es estructuralmente más alto que el del régimen estacionario. Si el benchmark no descarta un periodo de warmup, la media de TTFT incluye estos outliers y sobreestima la latencia real de producción. Algunos frameworks (GenAI-Perf/AIPerf) usan una ventana deslizante que excluye las peticiones de ramp-up y ramp-down; otros no.

Prefix-cache caliente entre corridas. La caché de KV de prefijos (prefix cache o prompt cache) almacena los resultados computados de los prefijos de prompt que se repiten. Si el benchmark corre múltiples corridas consecutivas con los mismos prompts, la segunda y siguientes corridas encuentran el KV cache ya poblado y reportan un TTFT artificialmente bajo —el del decode, no el del prefill—. Para un benchmark de baseline, el prefix cache debe estar frío; para uno que simula producción con prompts repetidos, caliente. La distinción debe explicitarse (arXiv 2605.24217; vLLM · Automatic Prefix Caching).


El sesgo de concurrency vs request-rate

Los dos modos de control de carga producen distribuciones de latencia distintas para el mismo sistema:

ModoSemánticaCuándo usarRiesgo
concurrency Nmantiene exactamente N peticiones en vuelo; en cuanto termina una, lanza otramedir el sistema bajo una carga de concurrencia fijasobrerepresenta la carga sostenida; no simula llegadas reales
request-rate r (constante o Poisson)lanza una petición cada (1/r) segundos (constante) o con interarrival (\sim \text{Exp}(1/r)) (Poisson)simular tráfico real (llegadas aleatorias)si el motor no puede absorber r req/s, la cola crece sin techo

NVIDIA recomienda el modo concurrency para la mayoría de los benchmarks de capacidad (NVIDIA · LLM Benchmarking Fundamental Concepts). El modo request-rate es más fiel para tráfico online (distribución Poisson de llegadas), pero si el rate supera la capacidad del motor la cola crece indefinidamente y las métricas de latencia incluyen tiempo de espera en cola que puede dominar el TTFT, mezclando comportamiento de cola con comportamiento del motor.

Un sistema medido con concurrency=16 y otro con request-rate=16 req/s no están bajo la misma carga: la concurrencia fija garantiza 16 peticiones simultáneas; el rate configura el ritmo de llegada pero no la concurrencia instantánea. Comparar sus resultados sin ajuste es incorrecto.


El sesgo de la ventana de medición y el estado térmico

Ventana demasiado corta. Un benchmark de 30 segundos puede medir el ramp-up del sistema, no el régimen estacionario. La recomendación de arXiv 2508.10251 es que la ventana de medición cubra al menos 3-5× el tiempo de rampa del sistema bajo carga, y que las métricas se calculen solo sobre la ventana estacionaria —excluyendo warmup y cooldown—.

Estado térmico de la GPU. Las GPUs de datacenter (H100 SXM, A100) operan con throttling térmico por encima de ~75 °C. Si la GPU no ha alcanzado la temperatura de régimen antes del benchmark, las primeras mediciones corresponden a un estado de mayor frecuencia que el sostenible. Experimentos controlados documentan que la potencia debe estabilizarse en un rango de 3 W durante al menos 30 segundos antes de que las medidas sean representativas (arXiv 2604.09048 · Watt Counts). El efecto es especialmente severo en benchmarks de prefill (TTFT), donde las frecuencias altas del estado frío producen TTFT artificialmente bajo.

Para un benchmark reproducible en 4×H100 SXM 80 GB: antes de medir, correr carga sostenida durante al menos 2–3 minutos hasta que nvidia-smi reporte temperatura estable y potencia estable (variación < 3 W en 30 s). Solo entonces iniciar la ventana de medición.


Cómo las herramientas calculan diferente la ITL

La ITL (Inter-Token Latency) aparece en todas las herramientas pero su fórmula varía, y las diferencias no son pequeñas:

GenAI-Perf / AIPerf:

$$\text{ITL} = \frac{\text{e2e latency} - \text{TTFT}}{\text{tokens salida} - 1}$$

El TTFT se excluye del numerador y el denominador descuenta el primer token. ITL es una métrica pura del decode, sin contaminación del prefill.

LLMPerf (archivado dic. 2025):

$$\text{ITL}_{\text{LLMPerf}} = \frac{\text{e2e latency}}{\text{tokens salida}}$$

El TTFT se incluye en el numerador. Para secuencias cortas (OSL < 50 tokens), el TTFT puede representar el 50–80 % de la e2e_latency, con lo que la ITL de LLMPerf mide principalmente el prefill, no el decode. Dos sistemas con el mismo decode pero distinto prefill aparecerán con ITL distintas en LLMPerf aunque sean idénticos en velocidad de decode.

vLLM bench (benchmark_serving.py):

Calcula ITL como media de los intervalos entre tokens consecutivos del stream de salida, incluyendo varianza intra-petición. Puede revelar jitter de decode que los otros promedian.

La consecuencia práctica: nunca cruzar una ITL de GenAI-Perf con una de LLMPerf como si fueran la misma métrica. Son fórmulas distintas sobre la misma señal.


Comparabilidad entre herramientas: por qué sus números no se cruzan

La tabla siguiente resume las diferencias metodológicas que hacen que los números de una herramienta sean estructuralmente incompatibles con los de otra sin ajuste explícito:

DimensiónvLLM benchLLMPerf (archivado)GenAI-Perf / AIPerfGuideLLM
Arquitectura clientemono-proceso asynciomono-procesomulti-procesomulti-proceso
ITL incluye TTFTnonono
TPS denominador(T_y - T_x)(T_{\text{end}} - T_{\text{start}}) (overhead incluido)(T_y - T_x)por ronda
Tokenizerel del modelo servidoLlamaTokenizer universalel del modelo servidoel del modelo servido
Warmup / sliding windowno automáticonosí (sliding window)por ronda
ignore_eos por defectononorecomendado explícitamenteconfigurable
Distribución ISL/OSLparámetro manualparámetro manualdistribuciones con varianza--data configurable
Modo de carga primarioconcurrencyconcurrency (batches drenados)concurrency (recomendado)sweep + poisson
Salida estructuradaJSON básicoJSONJSON + CSVJSON + HTML + CSV

Un resultado de LLMPerf y uno de GenAI-Perf para el mismo endpoint pueden diferir en TTFT, ITL y TPS simultáneamente y en todas ellas por razones metodológicas, no por diferencias del motor. La única forma de cruzarlos es ejecutar ambas herramientas sobre el mismo sistema en las mismas condiciones y calcular el factor de conversión empírico —lo que en la práctica equivale a re-medir con una sola herramienta.


El harness honesto: checklist de reproducibilidad

Un benchmark cuyo número puede defenderse en una auditoría tiene que venir acompañado de todos los metadatos que permiten reproducirlo. El mínimo exigible, organizado por categoría:

Hardware

MetadatoEjemplo 4×H100Efecto si no se fija
GPU (modelo, variante, cantidad)4× NVIDIA H100 SXM 80 GBH100 PCIe vs SXM difieren en BW de memoria y NVLink
Interconexión GPU-GPUNVLink 4.0tensor parallelism depende de la BW de interconexión
CPU, RAM, ancho de banda CPU-GPU2× Intel Xeon 8480+, 512 GB DDR5, PCIe 5.0el cuello de tokenización puede estar en la CPU
Estado térmico al iniciotemperatura GPU < 65 °C, potencia estable ± 3 Wthrottling altera TPS y TTFT en hasta ~15 %
Frecuencias de GPU (clocks)sin nvidia-smi -pm 1 pueden variardiferencia de hasta ~10 % en throughput

Software y modelo

MetadatoEjemploEfecto si no se fija
Motor + versión + flagsvLLM 0.8.4, --tensor-parallel-size 4 --gpu-memory-utilization 0.90cada versión cambia el scheduler y el KV cache management
Modelo + precisiónLlama-3-70B-Instruct, FP8FP16 vs FP8 difieren ~1,4–1,8× en throughput
Tokenizer usado para contartokenizer del modelo servido (HF tokenizer)LlamaTokenizer universal sesga tok/s entre vocabularios
Semilla de generación--seed 42sin semilla fija, la OSL varía run-to-run
ignore_eosTruesin él, OSL varía con el contenido del prompt
Sampling parameterstemperature=1.0, top_p=0.95greedy vs sampling afectan velocidad de logit

Carga

MetadatoEjemploEfecto si no se fija
Herramienta de bench + versiónAIPerf 0.2.1cada versión cambia fórmulas y warmup
Distribución ISL/OSL(\mathcal{N}(512, 64)) ISL, (\mathcal{N}(128, 20)) OSLcambiar distribución mueve el codo
Modo de cargaconcurrency, sweep 1–64concurrency vs request-rate: distribuciones distintas
Niveles de concurrencia1, 2, 4, 8, 16, 32, 64 (sweep completo, más allá del codo)sin pasar el codo, la capacidad segura es desconocida
Duración por punto120 s mínimo por nivelventanas cortas capturan ramp-up, no régimen estacionario
Warmup30 s excluidos del cómputo de métricassin warmup, las métricas incluyen estado frío
Tratamiento prefix cachefrío (flush entre corridas) o caliente (declarar explícitamente)cache caliente: TTFT irreal para baseline

SLO y métricas reportadas

MetadatoEjemploEfecto si no se declara
SLO declaradoTTFT P99 < 500 ms, ITL P95 < 50 msel goodput depende del SLO; sin SLO no hay goodput
Percentiles reportadosP50, P95, P99 (no solo media)la media oculta la cola; irrelevante para SLO
Throughput vs goodputgoodput bajo SLO, no throughput brutoel throughput de catálogo puede ser 5–10× el goodput
Número de peticiones totales≥ 1.000 por nivel de concurrenciamuestras pequeñas: alta varianza en percentiles

Defensa metodológica del dato ante una auditoría

Un número de throughput que se presenta sin la ficha anterior no es un dato: es una anécdota. El patrón de validación para una auditoría técnica:

1. Trazabilidad de la herramienta. La herramienta y su versión deben ser pinables a un commit de Git o a un hash de imagen de contenedor. AIPerf y GuideLLM exportan JSON con metadatos de versión; vLLM bench los omite por defecto y hay que capturarlos manualmente.

2. Reproducibilidad del entorno. El script de despliegue del motor (o el manifiesto de Kubernetes) y el comando exacto de benchmark deben ser suficientes para que un tercero reproduzca el número en el mismo hardware. GuideLLM exporta el archivo de benchmark como registro autoritativo de la sesión: configuración, metadatos, estadísticas por benchmark y entradas de petición con tiempos individuales (GitHub vllm-project/guidellm).

3. Verificación del régimen estacionario. Las métricas deben proceder de la ventana estacionaria del benchmark (excluido warmup). La curva throughput vs concurrencia debe mostrar el codo —el punto donde el throughput satura y la latencia se dispara— y extenderse más allá de él. Sin codo visible, la capacidad reportada puede ser el límite del cliente, no del motor.

4. Goodput, no throughput bruto. El throughput auditable es el goodput bajo el SLO declarado, no el throughput máximo. Un sistema que reporta 4.000 tok/s pero cuyo goodput bajo TTFT P99 < 500 ms es 1.800 tok/s tiene una capacidad real de 1.800 tok/s para los casos de uso interactivos.

5. Comparabilidad interna. Si se comparan dos motores o dos configuraciones, la herramienta, la distribución de carga, el SLO, el hardware y el tratamiento del warmup deben ser idénticos. Cualquier diferencia en estas dimensiones contamina la comparación.

La fórmula del goodput como métrica auditable:

$$\text{goodput} = \text{throughput} \times \Pr[\text{TTFT} \leq \text{SLO}{\text{TTFT}}] \times \Pr[\text{ITL} \leq \text{SLO}{\text{ITL}}]$$

Donde las probabilidades se estiman sobre la distribución empírica de la corrida. Un motor con throughput de 4.000 tok/s y (\Pr[\text{TTFT} \leq 500,\text{ms}] = 0{,}45) tiene un goodput de (4{,}000 \times 0{,}45 = 1{,}800) tok/s.


Ejemplo numérico: el mismo nodo, cuatro medidas distintas

Hardware de referencia: 4×H100 SXM 80 GB, modelo Llama-3-70B-Instruct FP8, tensor parallel 4, SLO TTFT P99 < 500 ms.

Configuración de benchmarkThroughput reportadoGoodput realFactor vs goodput
vLLM bench, concurrency=32, sin ignore_eos, sin warmup, OSL=64 fijo5.800 tok/s~1.200 tok/s (OSL corto infla TPS)4,8×
LLMPerf, concurrency=32, LlamaTokenizer, overhead incluido en denominador3.100 tok/s~1.600 tok/s (ITL incluye TTFT)1,9×
AIPerf, concurrency=32, ignore_eos, sliding window, tokenizer del modelo3.400 tok/s3.350 tok/s1,01×
GuideLLM, sweep 1–64, poisson, distribución ISL/OSL realista, SLO declarado3.330 tok/s goodput (codo en ronda 6)3.330 tok/s1,0× (base honesta)

El rango: de 1.200 tok/s a 5.800 tok/s para el mismo motor, el mismo hardware y el mismo modelo. El factor máximo es 4,8×. La causa no es el motor; son las decisiones de instrumentación.


La descomposición del sesgo total

El sesgo total observable entre dos herramientas es la composición multiplicativa de los sesgos individuales. Para una comparación de vLLM bench mono-proceso vs GuideLLM multi-proceso sobre el mismo sistema:

$$\text{factor total} \approx \underbrace{f_{\text{cliente}}}{\leq 7{,}2\times} \times \underbrace{f{\text{tokenizer}}}{1{,}0{-}1{,}3\times} \times \underbrace{f{\text{ignore-eos}}}{1{,}0{-}2{,}0\times} \times \underbrace{f{\text{ISL/OSL}}}{1{,}0{-}1{,}5\times} \times \underbrace{f{\text{warmup}}}_{1{,}0{-}1{,}2\times}$$

El factor de saturación del cliente ((\leq 7{,}2\times)) domina, pero los demás factores se multiplican. En condiciones adversas (cliente mono-proceso + tokenizer distinto + sin ignore_eos + OSL irreal + sin warmup), el sesgo compuesto puede superar 15–20× para el mismo sistema.


Estado del arte 2026: qué ha cambiado

  • Migración genai-perf → AIPerf (15-abr-2026): NVIDIA retiró genai-perf y lo sustituyó por AIPerf, que es multi-proceso con detección automática de saturación, distribuciones ISL/OSL configurables y ventana deslizante integrada. La migración elimina el sesgo de cliente mono-proceso del tooling oficial de NVIDIA.
  • Archivo de LLMPerf (dic. 2025): el repositorio ray-project/llmperf está archivado y en modo solo-lectura. Los resultados históricos del LLMPerf leaderboard son comparables solo entre sí; no se deben cruzar con mediciones modernas sin ajuste.
  • GuideLLM 0.5.x (2025–2026): refactor arquitectural completo, soporte multimodal, y exportación JSON autoritativa con todos los metadatos de sesión. Es el estándar OSS de evaluación dirigida por SLO.
  • arXiv 2605.24217 (may. 2026): primera caracterización formal del sesgo sistemático de medición en benchmarks de producción LLM, con demostración matemática del efecto GIL y propuesta de harness multi-proceso.
  • arXiv 2508.10251: meta-métricas y buenas prácticas para benchmarking de rendimiento a nivel de sistema; establece las dimensiones mínimas del espacio de parámetros que deben declararse para que un resultado sea reproducible.
  • MLPerf Inference v5.1 (sep. 2025): 27 participantes, récord de participación. Las reglas de MLPerf exigen declarar el código exacto, el dataset y el hardware, y admiten revisión pública —es el único benchmark de la industria con proceso de revisión formal de reproducibilidad.

Los sesgos descritos aquí aplican a todas las herramientas del catálogo. Para la ficha completa de cada herramienta:


Fuentes