Volver al inicio

Caché de prompt LLM: caché KV 10 veces más barato

El caché de prompt optimiza la inferencia LLM almacenando en caché pares KV de atención para prefijos de prompt repetidos. Reduce el costo de tokens de entrada en 10 veces y la latencia hasta un 85%. Desglose de la arquitectura transformer, tokenización y embeddings para desarrolladores intermedios/senior.

Cómo el caché de prompt acelera LLM 10 veces más barato
Advertisement 728x90

# Caché de prompts en LLMs: Optimizando la caché KV para reducir costos y latencia

El caché de prompts reduce los costos de tokens de entrada de los LLMs en un factor de 10 y disminuye la latencia hasta un 85 % para prompts largos. OpenAI y Anthropic no almacenan en caché las respuestas; almacenan en caché cálculos intermedios en el mecanismo de atención del transformer, específicamente la caché KV. Esto guarda pares clave-valor para prefijos de prompts repetidos, acelerando la inferencia sin sacrificar la calidad de la generación.

La tecnología es ideal para tareas con contexto repetido: RAG, chatbots con historial de conversación, pipelines multinivel. Pruebas en proveedores de API muestran que aprovechar al máximo la caché proporciona un aumento significativo de velocidad para el primer token.

Arquitectura de los LLMs y el rol de la atención

Un LLM es una secuencia de bloques transformer, cada uno que toma embeddings como entrada y produce representaciones actualizadas. La inferencia se ejecuta en un bucle: el prompt se tokeniza, los embeddings pasan por las capas de atención y feed-forward, se genera el siguiente token y se añade al contexto.

Google AdInline article slot
prompt = "What is the meaning of life?";
tokens = tokenizer(prompt);
while (true) {
    embeddings = embed(tokens);
    for ([attention, feedforward] of transformers) {
        embeddings = attention(embeddings);
        embeddings = feedforward(embeddings);
    }
    output_token = output(embeddings);
    if (output_token === END_TOKEN) {
        break;
    }
    tokens.push(output_token);
}
print(decode(tokens));

El almacenamiento en caché ocurre en la atención. La autoatención calcula una suma ponderada de tokens anteriores para cada token en función de la similitud entre la consulta (token actual) y las claves (tokens anteriores). Para query_i: attention(Q_i, K, V) = softmax(Q_i K^T / sqrt(d)) V.

Al generar cada nuevo token, la caché KV para todos los tokens anteriores se expande, lo que lleva a una complejidad cuadrática O(n^2) con respecto a la longitud de la secuencia.

Tokenización y embeddings

El tokenizer divide el texto en unidades subpalabra y asigna IDs. Ejemplo para GPT: "Check out ngrok.ai" → [4383, 842, 1657, 17690, 75584]. Es determinista, sensible a mayúsculas y minúsculas, y usa algoritmos tipo BPE.

Google AdInline article slot

Los embeddings transforman los tokens en vectores n-dimensionales (n > 10k en modelos grandes). La matriz de embeddings es fija después del entrenamiento:

function embed(tokens) {
    return tokens.map((token, i) => {
        const embeddings = EMBEDDINGS[token];
        return encodePosition(embeddings, i);
    });
}

La codificación posicional añade información sobre el orden. Más dimensiones capturan mejor la semántica: tono, estilo, similitud.

Mecanismo de atención y caché KV

En la atención multi-cabeza:

Google AdInline article slot
  • Proyecciones: Q = X W_Q, K = X W_K, V = X * W_V (X — matriz de embeddings).
  • Puntuaciones: attention_scores = Q * K^T / sqrt(d_k).
  • Softmax y suma ponderada: attention_output = softmax(scores) * V.

Para una secuencia de longitud n, la caché KV consiste en tensores K y V de tamaño [n, d_model]. Al generar el t-ésimo token, la atención usa toda la caché pasada más la actual.

El caché de prompts guarda la caché KV del prefijo del prompt a través de llamadas a la API. Si un nuevo prompt comienza con un prefijo almacenado en caché (acierto), se omiten los cálculos de atención para esos tokens: se usa la KV lista en su lugar. Los costos bajan porque se omite ~90 % del cómputo para contextos largos.

  • Acierto de caché: prefijo > 1024 tokens (Anthropic), costo /10.
  • Fallo de caché: recomputo completo.
  • TTL: la caché vive ~5-10 min, depende del proveedor.

Beneficios y limitaciones

Ganancias en latencia: para prompts con 10k+ tokens, TTFB baja un 50-85 %.

Ahorros: tokens de entrada en caché — $0.0001/1k vs $0.001/1k (aprox).

Limitaciones:

  • Emparejamiento solo de prefijo (no subcadenas arbitrarias).
  • No almacena en caché embeddings de salida ni logits.
  • Depende del tokenizer del proveedor.

En producción: úsalo para chats basados en sesiones donde el historial se repite.

Lecciones clave

  • El caché de prompts almacena en caché pares KV de atención para prefijos, reduciendo el cómputo un 90 %+ para contextos largos.
  • El tiempo hasta el primer token baja hasta un 85 %, costos de entrada /10.
  • Requiere emparejamiento exacto de prefijo y tokenizer compatible.
  • Perfecto para RAG, historiales de chat, tareas multiiteración.
  • Sin impacto en la calidad: la generación sigue siendo estocástica.

— Editorial Team

Advertisement 728x90

Leer después