Nie startuje albo nie widzi GPUWindowsLinuxmacOSOstatnia aktualizacja 22 czerwca 2026

Brak pamięci przy długim kontekście (winny jest cache KV, nie wagi)

Ładuje się bez problemu, a potem pada, gdy rozmowa się wydłuża

Autor Jakub Rusinowski

Błąd

llama_new_context_with_model: failed to allocate KV cache

Kiedy się pojawia

Model ładuje się bez słowa skargi i odpowiada na krótkie prompty — a potem wywraca się, gdy podasz mu długi dokument albo długą historię rozmowy. Awaria przychodzi przy *generowaniu* dużych wejść, a nie przy ładowaniu, i to właśnie najbardziej myli: wagi wyraźnie się mieszczą, a pamięci mimo to brakuje.

Co się właściwie dzieje

Z twojego VRAM-u czerpią dwie różne rzeczy: wagi modelu (stałe) i cache KV (rosnący wraz z długością kontekstu). Cache KV przechowuje klucze i wartości dla każdego tokenu w oknie, więc zużycie pamięci rośnie mniej więcej liniowo z liczbą trzymanych tokenów. Model, który wygodnie mieści się przy kontekście 4K, przy 32K czy 128K może potrzebować kilku gigabajtów więcej — i to właśnie ta nadwyżka wypycha na OOM kartę, na której wcześniej „ledwo się mieściło”. To klasyczny ciasny przypadek: na papierze w porządku, bez zapasu na kontekst.

Jak to naprawić

  1. 1

    Zostaw zapas VRAM-u — licz wagi I kontekst razemNajczęstsze rozwiązanie

    Błąd polega na budżetowaniu samych wag. Potrzebujesz miejsca na wagi plus cache KV przy długości kontekstu, z której faktycznie korzystasz. Pewny sposób, żeby tego uniknąć, to wybrać model i kwantyzację zostawiające na karcie zapas na potrzebny kontekst — „ciasne” dopasowanie bez miejsca na cache KV to dokładnie to, co pada przy długich wejściach. Sprawdzaj, co się mieści *razem z* docelowym kontekstem, a nie same wagi.

    Sprawdź, co pasuje do Twojego sprzętusprawdź, co się mieści przy twojej docelowej długości kontekstu, a nie tylko wagiOtwórz kalkulator VRAM →
  2. 2

    Ogranicz długość kontekstu do tego, czego potrzebujesz

    Jeśli nie potrzebujesz okna 128K, nie alokuj go. Ustawienie kontekstu na rozmiar rzeczywistych wejść wprost zmniejsza cache KV. To najskuteczniejsze pokrętło, jakie masz.

    bash
    # llama.cpp: cap the context
    ./llama-cli -m model.gguf -c 8192
    
    # Ollama:
    OLLAMA_CONTEXT_LENGTH=8192 ollama run <model>
  3. 3

    Skwantyzuj cache KV

    llama.cpp potrafi przechowywać cache KV w niższej precyzji (na przykład q8_0 zamiast f16), zmniejszając jego zużycie pamięci mniej więcej o połowę przy niewielkim koszcie jakości. Przydaje się, gdy naprawdę potrzebujesz długiego kontekstu na ciasnej karcie.

    bash
    ./llama-cli -m model.gguf -c 32768 \
      --cache-type-k q8_0 --cache-type-v q8_0
  4. 4

    Weź model o mniejszych wagach, żeby zrobić miejsce na kontekst

    Jeśli długi kontekst jest nie do negocjacji, mniejszy albo mocniej skwantyzowany model uwolni VRAM potrzebny cache'owi KV. Oddanie odrobiny precyzji wag za dużo użytecznego kontekstu to przy pracy z dokumentami zwykle właściwy wybór.

Dotyczy także: Linux · Apple

Powiązane

Najczęściej zadawane pytania

Dlaczego model pada tylko przy długich promptach?

Bo cache KV rośnie wraz z długością kontekstu. Krótkie prompty zużywają go niewiele; długie dokumenty i rozmowy potrzebują znacznie więcej, a właśnie ta dodatkowa pamięć wypycha ciasno mieszczący się model poza limit VRAM-u.

Ile VRAM-u zajmuje kontekst?

To zależy od modelu, ale skaluje się mniej więcej liniowo z liczbą tokenów i przy bardzo długich kontekstach potrafi sięgnąć kilku gigabajtów. Dlatego budżet trzeba planować na wagi i kontekst razem, a nie na same wagi.

Czy kwantyzacja cache'u KV pogarsza jakość?

Cache KV w Q8 jest w praktyce niemal bezstratny i zmniejsza zużycie pamięci mniej więcej o połowę. Ostrzejsza kwantyzacja cache'u potrafi zaszkodzić spójności przy długim kontekście, dlatego q8_0 to zwykle złoty środek.