Inferencia

Prefill procesa el input y decode genera la salida token a token; sampling, streaming y TTFT ayudan a interpretar el comportamiento y el rendimiento.
Actualizado 11 oct 2026

La inferencia es la ejecución de un modelo ya entrenado sobre un nuevo input. En un LLM generativo, el recorrido práctico tiene dos fases que conviene separar: prefill, donde se procesa la entrada, y decode, donde se genera la salida token a token.

Prefill y decode Prefill procesa el input existente antes del primer token de salida. Decode genera después la respuesta token a token. TTFT · espera hasta el primer token Tokens de input Prompt + contexto Prefill Procesa el input existente Primer token Empieza la respuesta Decode Genera un token cada vez 23n El output continúa token a token Prefill y decode Prefill procesa el input existente antes del primer token de salida. Decode genera después la respuesta token a token. Tokens de input Prompt + contexto Prefill Procesa el input existente Primer token Empieza la respuesta Decode Genera un token cada vez TTFT · espera hasta el primer token 23n El output continúa token a token
Figura 1. Prefill procesa el input; después decode genera la respuesta token a token.

Prefill

Durante prefill, el modelo procesa los tokens de entrada antes de empezar a responder. Si una request contiene 20K tokens entre instrucciones, historial y documentos, ese input debe procesarse antes de que aparezca el primer token de salida.

Cuanto mayor es el input, más trabajo inicial suele haber. Desde el cliente, el tiempo hasta el primer token también puede incluir red, colas y preparación de la request, así que TTFT no mide únicamente cómputo del modelo.

En runtimes con KV cache, prefill prepara además el estado que se reutilizará durante la generación. En inferencia local esto se nota tanto en latencia como en memoria: más contexto implica más trabajo inicial y una cache mayor.

Decode

Después empieza decode. El modelo obtiene candidatos para el siguiente token, la configuración de generación selecciona uno y ese token se añade a la secuencia antes de repetir el proceso. Esa generación paso a paso es autoregresiva.

La generación termina al producir un token de fin, alcanzar el límite de output o encontrar una secuencia de parada configurada. El máximo de output actúa como límite, no como una longitud que deba rellenarse.

Sampling

Sampling controla cómo se selecciona el siguiente token entre los candidatos del modelo. Una selección greedy toma el de mayor puntuación; con sampling se elige a partir de una distribución y distintas ejecuciones pueden variar.

Temperature

Temperature modifica cuánto peso reciben las alternativas menos probables. Valores bajos concentran la selección en los candidatos principales; valores mayores permiten más variación.

Actúa durante decode sobre la selección de tokens. Subir temperature no añade inteligencia ni más profundidad de reasoning.

Top-p

Top-p limita la selección al conjunto de candidatos que acumula una determinada masa de probabilidad y realiza sampling dentro de ese grupo.

Temperature y top-p pueden combinarse, pero sus valores no son directamente portables entre modelos. Los defaults y recomendaciones dependen del modelo y del runtime. temperature = 0 tampoco garantiza reproducibilidad exacta si cambian versión, backend o hardware.

Streaming

Con streaming, la aplicación recibe fragmentos a medida que se generan y puede mostrarlos o empezar a procesar una tool call antes de tener toda la respuesta.

Streaming cambia cuándo recibe el cliente el output; por sí mismo no acelera decode.

Velocidad y latencia

Las dos medidas que más utilizo para interpretar inferencia local son:

  • Time to First Token (TTFT): tiempo hasta recibir el primer token, incluyendo prefill y, según la medición, otros overheads de la request.
  • Tokens/s de generación: velocidad del output durante decode.

Una cifra de tokens/s solo es comparable si las herramientas están midiendo el mismo intervalo. Algunas separan prefill y decode; otras calculan una media más amplia.

Las pruebas con Qwen3.8-27B y OpenCode mostraron bien la diferencia. Una request corta con el modelo completamente en GPU rondaba 40–45 tokens/s, mientras una prueba con unas 50K tokens de input tardaba mucho más en procesar el prompt y generaba alrededor de 21 tokens/s. El tamaño del input y la presión sobre el runtime formaban parte de la diferencia observada.

Referencias