Zpět na domů

Prompt Caching LLM: KV cache 10× levnější

Prompt Caching optimalizuje inference LLM cachováním KV párů attention pro opakující se prefixy promptů. Snižuje cenu vstupních tokenů 10× a latenci až o 85 %. Rozbor architektury transformerů, tokenizace a embeddingů pro middle/senior vývojáře.

Jak Prompt Caching zrychluje LLM 10× levněji
Advertisement 728x90

# Prompt Caching v LLM: optimalizace KV-meše pro snížení nákladů a latence

Prompt Caching umožňuje snížit cenu vstupních tokenů LLM 10krát a snížit latenci až o 85 % pro dlouhé prompty. OpenAI a Anthropic cachují ne odpovědi, ale intermediární výpočty v mechanismu attention transformerů — konkrétně KV-meš. To zachovává výsledky key-value párů pro opakující se prefixy promptů, zrychluje inference bez ztráty kvality generování.

Technologie je aktuální pro úlohy s opakovaným kontextem: RAG, chatboti s historií, vícekrokové pipeline. V testech na API poskytovatelů plné využití meše přináší výrazné zrychlení rychlosti do prvního tokenu.

Architektura LLM a role attention

LLM je posloupnost transformerových bloků, kde každý přijímá embeddings a vydává aktualizovaná reprezentace. Inference funguje v cyklu: prompt se tokenizuje, embeddings procházejí vrstvami attention a feed-forward, generuje se další token, který se přidává do kontextu.

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));

Cachování probíhá v attention. Self-attention pro každý token spočítává váženou součet předchozích na základě podobnosti mezi query (aktuální token) a keys (předchozí). Pro query_i: attention(Q_i, K, V) = softmax(Q_i K^T / sqrt(d)) V.

Při generování každého nového tokenu se KV-meš všech předchozích rozšiřuje, což vede k kvadratické složitosti O(n^2) podle délky posloupnosti.

Tokenizace a embeddings

Tokenizátor rozděluje text na subsložkové jednotky s přiřazením ID. Příklad pro GPT: "Check out ngrok.ai" → [4383, 842, 1657, 17690, 75584]. Je deterministický, citlivý na velikost písmen, používá BPE-podobné algoritmy.

Google AdInline article slot

Embeddings převádějí tokeny na n-rozměrné vektory (n > 10k ve velkých modelech). Matice embeddings je fixní po tréninku:

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

Pozicové kódování přidává informace o pořadí. Více dimenzí — lepší zachycení sémantiky: tón, styl, podobnost.

Mechanismus attention a KV-meš

V multi-head attention:

Google AdInline article slot
  • Projekce: Q = X W_Q, K = X W_K, V = X * W_V (X — matice embeddings).
  • Skóre: attention_scores = Q * K^T / sqrt(d_k).
  • Softmax a vážený součet: attention_output = softmax(scores) * V.

Pro posloupnost délky n je KV-meš tenzory K a V velikosti [n, d_model]. Při generování t-ho tokenu attention používá celý předchozí meš + aktuální.

Prompt Caching zachovává KV-meš prefixu promptu mezi voláními API. Pokud nový prompt začíná zakacheovaným prefixem (hit), výpočty attention pro tyto tokeny se přeskakují — bere se hotový KV. Náklady klesají, protože se přeskakuje ~90 % compute pro dlouhé kontexty.

  • Cache hit: prefix > 1024 tokenů (Anthropic), cena /10.
  • Cache miss: plný recompute.
  • TTL: meš žije ~5-10 min, závisí na poskytovateli.

Výhody a omezení

Zlepšení latence: pro prompty 10k+ tokenů TTFB klesne o 50-85 %.

Úspora: vstupní tokeny v meši — $0.0001/1k vs $0.001/1k (přibližně).

Omezení:

  • Pouze prefixový shoda (ne libovolné podřetězce).
  • Necašuje output embeddings nebo logits.
  • Závisí na tokenizátoru poskytovatele.

V produkci: používejte pro sessionové chaty, kde se historie opakuje.

Co je důležité

  • Prompt Caching cašuje KV-páry attention pro prefixy, snižuje compute o 90 %+ pro dlouhé kontexty.
  • Latence do prvního tokenu klesne o 85 %, cena vstupu /10.
  • Vyžaduje přesnou shodu prefixu a kompatibilní tokenizátor.
  • Ideální pro RAG, chat-historií, víciiteračních úloh.
  • Neovlivňuje kvalitu: generace je stochastická.

— Editorial Team

Advertisement 728x90

Číst dál