Powrót do strony głównej

Prompt Caching LLM: KV-cache 10 razy tańszy

Prompt Caching optymalizuje inference LLM poprzez cachowanie KV-par attention dla powtarzających się prefiksów promptów. Obniża koszt wejściowych tokenów w 10 razy i latency do 85%. Rozbiór architektury transformerów, tokenizacji i embeddings dla middle/senior deweloperów.

Jak Prompt Caching przyspiesza LLM 10 razy taniej
Advertisement 728x90

# Prompt Caching w LLM: optymalizacja bufora KV w celu zmniejszenia kosztów i opóźnień

Prompt Caching pozwala zmniejszyć koszt tokenów wejściowych LLM nawet 10-krotnie i skrócić opóźnienie do 85% dla długich promptów. OpenAI i Anthropic buforują nie odpowiedzi, lecz pośrednie obliczenia w mechanizmie attention transformerów — konkretnie bufor KV. Dzięki temu zachowuje wyniki par key-value dla powtarzających się prefiksów promptów, przyspieszając inference bez utraty jakości generacji.

Technologia ta jest szczególnie przydatna w zadaniach z powtarzalnym kontekstem: RAG, chatboty z historią, wieloetapowe potoki. W testach na API dostawców pełne wykorzystanie bufora daje zauważalny wzrost prędkości do pierwszego tokena.

Architektura LLM i rola attention

LLM to sekwencja bloków transformatorów, gdzie każdy przyjmuje embeddings i generuje zaktualizowane reprezentacje. Inference działa w pętli: prompt jest tokenizowany, embeddings są przekazywane przez warstwy attention i feed-forward, generowany jest następny token, który jest dodawany do kontekstu.

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

Buforowanie odbywa się w attention. Self-attention oblicza dla każdego tokena ważoną sumę poprzednich na podstawie podobieństwa między query (bieżący token) a keys (poprzednie). Dla query_i: attention(Q_i, K, V) = softmax(Q_i K^T / sqrt(d)) V.

Podczas generowania każdego nowego tokena bufor KV wszystkich poprzednich jest rozszerzany, co prowadzi do kwadratowej złożoności O(n^2) względem długości sekwencji.

Tokenizacja i embeddings

Tokenizator dzieli tekst na podjednostki podsłowne z przypisanymi ID. Przykład dla GPT: "Check out ngrok.ai" → [4383, 842, 1657, 17690, 75584]. Jest deterministyczny, wrażliwy na wielkość liter, wykorzystuje algorytmy podobne do BPE.

Google AdInline article slot

Embeddings przekształcają tokeny w n-wymiarowe wektory (n > 10k w dużych modelach). Macierz embeddings jest stała po treningu:

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

Pozycyjne kodowanie dodaje informacje o kolejności. Więcej wymiarów — lepsze uchwycenie semantyki: tonu, stylu, podobieństwa.

Mechanizm attention i bufor KV

W multi-head attention:

Google AdInline article slot
  • Projekcje: Q = X W_Q, K = X W_K, V = X * W_V (X — macierz embeddings).
  • Scores: attention_scores = Q * K^T / sqrt(d_k).
  • Softmax i ważona suma: attention_output = softmax(scores) * V.

Dla sekwencji długości n bufor KV to tensory K i V o rozmiarze [n, d_model]. Podczas generowania t-tego tokena attention wykorzystuje cały poprzedni bufor + bieżący.

Prompt Caching zachowuje bufor KV prefiksu promptu między wywołaniami API. Jeśli nowy prompt zaczyna się od zbufferingowanego prefiksu (hit), obliczenia attention dla tych tokenów są pomijane — używany jest gotowy KV. Koszt maleje, ponieważ pomijane jest ~90% compute dla długich kontekstów.

  • Cache hit: prefiks > 1024 tokenów (Anthropic), koszt /10.
  • Cache miss: pełne przeliczenie.
  • TTL: bufor żyje ~5-10 min, zależy od dostawcy.

Zalety i ograniczenia

Korzyści w opóźnieniu: dla promptów 10k+ tokenów TTFB spada o 50-85%.

Oszczędności: tokeny wejściowe w buforze — $0.0001/1k vs $0.001/1k (przybliżenie).

Ograniczenia:

  • Tylko dopasowanie prefiksowe (nie dowolne pod ciągi).
  • Nie buforuje embeddings wyjściowych ani logitów.
  • Zależy od tokenizatora dostawcy.

W produkcji: używaj do sesyjnych czatów, gdzie historia się powtarza.

Co ważne

  • Prompt Caching buforuje pary KV attention dla prefiksów, zmniejszając compute o 90%+ dla długich kontekstów.
  • Opóźnienie do pierwszego tokena maleje do 85%, koszt wejścia /10.
  • Wymaga dokładnego dopasowania prefiksu i zgodnego tokenizatora.
  • Idealne dla RAG, historii czatów, wieloiteracyjnych zadań.
  • Nie wpływa na jakość: generacja jest stochastyczna.

— Editorial Team

Advertisement 728x90

Czytaj dalej