LLM Serving Bench
Medición de inferencia CPU por HTTP/SSE: llegadas por token, TTFT, TPOT, latencia y memoria. Ocho configuraciones de SmolLM2 con evidencia cruda y replay offline.
Problema y utilidad para agentes
Un contador de tokens por segundo no explica cuánto espera el usuario ni dónde se forma la cola. Este banco registra cada token generado y recibido para separar el tiempo al primer token, la decodificación y la latencia total.
Permite presupuestar la espera de un agente con mediciones del servidor real. Los resultados identifican modelo, precisión, hardware, concurrencia y longitud de entrada, las condiciones necesarias para interpretar una cifra de rendimiento.
Arquitectura
- Servidor medido. SmolLM2-135M-Instruct en FP32 sobre CPU, con un único slot de generación y un evento SSE por ID de token. Los clientes usan HTTP sobre loopback.
- Matriz controlada. Uno o dos hilos de CPU, concurrencia uno o dos y entradas de 64 o 256 tokens exactos. Cada configuración procesa seis prompts después de un calentamiento excluido.
- Evidencia reconstruible. Conserva solicitudes, IDs, tiempos de llegada, errores, muestras RSS y hashes del modelo. Un verificador sin dependencias recalcula las métricas del informe.
Qué demuestra
- Instrumentación por token y definición explícita de los límites de cada métrica.
- Comparación de configuraciones con solicitudes registradas y control de concurrencia.
- Separación entre consumo observado, costos supuestos y variables no medidas.
Resultados publicados
Medición publicada en Intel Xeon W-3223, macOS, Python 3.11.13 y PyTorch 2.2.2. Las 48 solicitudes terminaron correctamente y generaron 1.152 tokens de salida. Los ocho calentamientos se excluyen.
TTFT incluye conexión, tokenización, cola y prefill. TPOT es el intervalo entre el primer y el último token dividido por los intervalos de generación. Los percentiles interpolan seis solicitudes por configuración; el throughput usa la duración completa de esa configuración.
Ocho configuraciones medidas
| Hilos / entrada / concurrencia | TTFT p50 (s) | TPOT p50 (ms) | Latencia p95 (s) | Tokens de salida/s |
|---|---|---|---|---|
| 1 / 64 / 1 | 0.196 | 62.92 | 1.704 | 14.49 |
| 1 / 64 / 2 | 1.871 | 63.74 | 3.355 | 14.35 |
| 1 / 256 / 1 | 0.654 | 72.02 | 2.415 | 10.28 |
| 1 / 256 / 2 | 3.002 | 72.84 | 4.691 | 10.24 |
| 2 / 64 / 1 | 0.128 | 42.89 | 1.143 | 21.50 |
| 2 / 64 / 2 | 1.256 | 43.24 | 2.460 | 20.80 |
| 2 / 256 / 1 | 0.414 | 48.94 | 1.601 | 15.51 |
| 2 / 256 / 2 | 2.041 | 50.61 | 3.234 | 14.93 |
Dos hilos dieron mayor throughput en esta muestra. Duplicar clientes agregó principalmente espera porque el servidor conserva un único slot. Seis solicitudes por configuración no establecen un SLA ni un ranking general de servidores.
El RSS máximo muestreado varió de 838,7 a 1.023,5 MiB. La energía permanece sin medir. El costo del informe usa una asignación ilustrativa de USD 0,10 por máquina-hora; no es una factura ni un gasto observado. Evidencia original.
Reproducir
El replay requiere Python 3.11 y biblioteca estándar. Repetir la inferencia requiere las dependencias del modelo y descargar sus pesos públicos; la ejecución posterior usa archivos locales.
Los comandos de entorno son para shell POSIX. Usá una salida nueva y ejecutá una sola medición intensiva a la vez. El lock publicado describe Intel macOS; otros sistemas pueden necesitar otra distribución de PyTorch.
Revisar la evidencia guardada
git clone https://github.com/lucioduran/llm-serving-bench.git
cd llm-serving-bench
git checkout f291bbe0e3fbd377438b56f4cbf4a7a808720d98
python -m serving_bench verify results/reference/report.jsonRepetir la medición local
python -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements-models.txt
python -m serving_bench download
python -m serving_bench run --output work/reproduction --hourly-usd 0.10
python -m serving_bench verify work/reproduction/report.jsonAlcance y límites
- Un único modelo, equipo y orden fijo de ejecución. Cliente y servidor comparten CPU.
- Carga de circuito cerrado sin batching continuo, GPU, saturación por tasa de llegada ni evaluación de calidad de respuestas.
- RSS muestreado puede perder picos. El replay comprueba consistencia; no vuelve a medir tiempos ni autentica el hardware.
Fuentes y revisión
Los valores de esta ficha provienen del informe enlazado. No son una medición en vivo. El informe conserva la revisión ejecutada; la revisión consultada incluye la publicación posterior de ese informe.
- Revisión consultada:
f291bbe0e3fbd377438b56f4cbf4a7a808720d98 - Revisión registrada por el experimento:
1f78bb2b7926840bbec088c289d56285daac807c - Fecha del informe (UTC):
- Release publicada: v0.1.0 ·
- SHA-256 del corpus:
39e2b0383320350aef0ae9fbde0f4c81ff9c35991c36148808c834fb34466e5a