Inference Latency
La latencia de inferencia es el tiempo que tarda un modelo en convertir una entrada en una predicción. Qué factores la aumentan, cómo medirla y cómo se relaciona con el rendimiento.
La latencia de inferencia es el tiempo que tarda un modelo de aprendizaje automático entrenado en convertir una entrada —como un fotograma de cámara o una instrucción de texto— en una predicción. Suele expresarse en milisegundos (ms) y determina la rapidez de reacción de un sistema: una cámara que funciona a 30 fotogramas por segundo produce un nuevo fotograma cada 33,3 ms, así que un detector que tarde más se queda rezagado respecto al flujo y deja de admitir inferencias en tiempo real. La latencia se indica solo para el paso hacia delante o de extremo a extremo, desde la entrada sin procesar hasta la salida utilizable. En los sistemas de producción se siguen percentiles como la mediana (p50) y el percentil 99 (p99), porque unas pocas respuestas lentas pueden importar tanto como el promedio.
Qué contribuye a la latencia de inferencia#
Cada predicción pasa por varias etapas. El preprocesamiento decodifica, cambia el tamaño y normaliza la entrada. El paso hacia delante ejecuta la red; su coste aumenta con los FLOPs del modelo, la resolución de entrada y la precisión numérica, mientras que su velocidad depende del procesador, ya sea una CPU, una GPU o una unidad de procesamiento neuronal (NPU). El posprocesamiento convierte las salidas sin procesar en resultados; en un detector, decodifica las cajas y aplica la supresión no máxima (NMS). Una API en la nube añade el tiempo de ida y vuelta de la red y la espera de la solicitud en una cola. Por eso la IA en el borde ejecuta los modelos en el dispositivo que captura los datos. La primera llamada también tarda más que las siguientes, porque los frameworks asignan memoria, cargan los pesos en las cachés y seleccionan los núcleos durante el primer uso.
El hardware y el entorno de ejecución pueden cambiar la pasada hacia delante en un orden de magnitud o más: Ultralytics YOLO26 nano tarda de media 38,9 ms por imagen COCO de 640 píxeles con ONNX en una CPU y 1,7 ms con TensorRT en una GPU NVIDIA T4. Ultralytics YOLO registra los tiempos de cada etapa de cada predicción en el atributo speed del resultado, y el modo de benchmark repite la medición para cada formato de exportación:
from ultralytics import YOLO
# Load the smallest YOLO26 detection model
model = YOLO("yolo26n.pt")
# Predict on one image
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Per-image time in milliseconds for each stage of the pipeline
for stage, ms in result.speed.items():
print(f"{stage}: {ms:.1f} ms")El bucle imprime los tiempos de preprocesamiento, inferencia y posprocesamiento; su suma es la latencia del modelo para esa imagen en el dispositivo actual.
Medición precisa de la latencia#
Las cifras de latencia solo se pueden comparar si se miden del mismo modo. Para obtener mediciones fiables, descarta algunas ejecuciones de calentamiento, cronometra muchas ejecuciones e informa de la mediana y de un percentil de cola, no de una sola ejecución. En las GPU, el temporizador debe esperar a que el dispositivo termine, por ejemplo, con torch.cuda.synchronize(), porque los núcleos se ejecutan de forma asíncrona y una lectura demasiado temprana del reloj se detiene antes de que finalice el trabajo. El tamaño de entrada, el tamaño del lote, la precisión y el dispositivo deben coincidir con el despliegue, ya que la latencia de un modelo en una GPU de centro de datos dice poco sobre la que tendrá en un teléfono. Los FLOPs estiman el coste sin tener en cuenta el hardware, pero dos modelos con los mismos FLOPs pueden ejecutarse a velocidades muy distintas en el mismo dispositivo.
Latencia de inferencia y rendimiento#
El rendimiento es el número de entradas que procesa un sistema por unidad de tiempo, por ejemplo, imágenes por segundo o tokens por segundo, y a menudo varía en sentido contrario a la latencia. Un lote más grande mantiene el hardware más ocupado y aumenta el rendimiento, pero cada entrada del lote espera a que termine todo el lote, así que también aumenta el tiempo de respuesta de cada solicitud:
import time
import torch
import torchvision
# A ResNet-18 image classifier in inference mode on the CPU
model = torchvision.models.resnet18().eval()
for batch in [1, 2, 4, 8]:
x = torch.randn(batch, 3, 224, 224)
with torch.inference_mode():
model(x) # warmup run, not timed
times = []
for _ in range(20):
start = time.perf_counter()
model(x)
times.append(time.perf_counter() - start)
latency = sorted(times)[len(times) // 2] # median seconds per batch
print(f"batch {batch}: {latency * 1e3:5.1f} ms per batch, {batch / latency:4.0f} images/s")En la CPU de un portátil, pasar del lote 1 al lote 8 aumentó el rendimiento de 168 a 220 imágenes por segundo, mientras que el tiempo de respuesta de un lote pasó de 6 ms a 36 ms. Por eso, los sistemas interactivos, como la asistencia a la conducción y los asistentes de voz, funcionan con un tamaño de lote de 1, mientras que los trabajos sin conexión, como la indexación de un archivo de vídeo, procesan lotes grandes. Los servidores de LLM usan el procesamiento continuo por lotes, que añade y elimina solicitudes de un lote en ejecución para mantener un alto rendimiento sin hacer que cada usuario espere a que termine un lote completo.
Reducción de la latencia de inferencia#
Las mayores mejoras suelen venir de reducir los cálculos: usar una variante de modelo más pequeña, una resolución de entrada menor o menos pesos mediante la poda de modelos. La cuantización de modelos a FP16 o INT8 abarata cada operación restante en el hardware con unidades rápidas de baja precisión. Exportar a un motor de inferencia optimizado, como TensorRT, OpenVINO u ONNX Runtime, fusiona capas y elige los núcleos más rápidos para el dispositivo. Ejecutar el modelo en el propio dispositivo elimina el tiempo de ida y vuelta de la red, que a menudo cuesta decenas de milisegundos con una conexión móvil.
Cuándo importa la latencia#
- Modelos de lenguaje grandes (LLM): los servicios de chat miden el tiempo hasta el primer token, que los usuarios perciben como capacidad de respuesta, y el tiempo por token generado, que determina la velocidad de transmisión. La decodificación especulativa reduce el segundo al verificar varios tokens propuestos en una sola pasada hacia delante.
- Inspección industrial: Una cámara sobre una cinta transportadora debe clasificar cada pieza antes de que llegue a la compuerta de rechazo, así que la latencia determina la velocidad máxima de la línea.
- Vehículos autónomos: La percepción, la planificación y el control comparten un margen de tiempo reducido; a 100 km/h, un coche recorre 2,8 metros durante cada retraso de 100 ms.










