Deepseek V cztery jeden Flash zajmuje w pamięci ponad czterysta razy mniej miejsca niż pierwsza generacja tego modelu, a wynikami dorównuje modelom z czołówki. Lab, który to zrobił, nie ma najlepszych kart Nvidii, nie ma wielkiego centrum danych i jest kilkadziesiąt razy mniejszy od OpenAI. Rozwiązanie nie polega na mocniejszym sprzęcie, tylko na serii decyzji projektowych, które na pierwszy rzut oka wyglądają na błędy: połowa modelu nie czyta promptu, większość warstw nie robi własnych notatek, a pamięć krótkotrwała jest po każdej odpowiedzi kasowana. AI Search rozkłada raport techniczny na części i pokazuje, dlaczego każda z tych decyzji ma sens.
Dwie fazy i notatki, które się nie mieszczą
Praca modelu dzieli się na dwie fazy. Pierwsza to prefill, czyli czytanie. Model przyjmuje prompt razem z dokumentami i kontekstem, rozbija tekst na tokeny i przepuszcza je przez swoje warstwy. Każda warstwa liczy dla każdego tokenu dwa zestawy liczb: klucze i wartości. Trafiają one do czegoś, co nazywa się K V cache.
Druga faza to decode, czyli pisanie. Model generuje odpowiedź token po tokenie i przy każdym kolejnym musi spojrzeć na wszystko, co było wcześniej, żeby ustalić najbardziej prawdopodobne następne słowo. Zamiast przeliczać całą rozmowę od zera, sięga do K V cache.
Dobra analogia: model to student oglądający bardzo długi wykład i robiący notatki. Kiedy później pada pytanie, student nie odtwarza całego wykładu — zagląda do notatek. K V cache to właśnie te notatki.
Przy krótkim promptcie wszystko działa. Notatki są małe i mieszczą się w pamięci podręcznej. Problem zaczyna się tam, gdzie branża właśnie idzie: agenty pracujące samodzielnie godzinami albo dniami, całe bazy kodu, stosy dokumentów. Wtedy K V cache robi się ogromny.
W analogii student nie ogląda już jednego wykładu, tylko tygodnie wykładów. Notatki przestają mieścić się na biurku, zalewają pokój, a w końcu trzeba je wynieść do szafek w innym pomieszczeniu na końcu korytarza. Każde pytanie oznacza bieganie po nie.
Dokładnie to dzieje się w sprzęcie. W G P U jest pamięć o wysokiej przepustowości, czyli H B M, tuż obok układu przetwarzającego. Szybka, łatwo dostępna — i tego jest mało oraz drogo. To blat biurka. Kiedy K V cache się nie mieści, dane lądują na dyskach S S D poza G P U. Tam miejsca jest dużo, ale opóźnienie jest zabójcze: przy każdym przewidywanym słowie dane muszą wędrować z S S D przez płytę główną do pamięci G P U i dopiero do procesora. Transfer staje się wąskim gardłem, a procesor czeka bezczynnie.
Stąd dwa problemy naraz. Pierwszy to obliczenia — student tonie we własnych notatkach i nie umie w nich nic znaleźć. Drugi to szybkość — część notatek leży w innym pokoju i trzeba po nie biegać.
Połowa modelu nie czyta promptu
Zwykły model to transformer: wiele warstw, przez które płynie prompt, a na wyjściu pojawia się kolejne najbardziej prawdopodobne słowo. Słowo wraca na wejście, całość leci przez model jeszcze raz i tak w pętli aż do końca odpowiedzi. Każda warstwa po drodze generuje własne notatki, czyli własny K V cache. Wszystko to musi gdzieś leżeć, zapycha H B M i przelewa się na S S D.
Nowa architektura Deepseeka też ma wiele warstw, ale dzieli je na dwie połowy: komponent zwany causal encoder i komponent dekodera. Podczas fazy czytania druga połowa jest po prostu wyłączona. Nie robi nic. Cała robota spada na pierwszą połowę — to ona czyta wszystko, buduje rozumienie kontekstu i wytwarza globalny K V cache.
Potem pisze druga połowa. Żeby przewidzieć następne słowo, też potrzebuje kontekstu. Nie liczy go jednak sama, tylko patrzy na wyjście ostatniej warstwy enkodera i pożycza gotowy globalny K V cache.
To projekt zaskakujący, bo połowa mózgu modelu pominęła etap czytania. Zwykle oznaczałoby to gorsze odpowiedzi — i to jest realne ryzyko tej architektury, które trzeba było wyważyć inżyniersko. Sztuczka polega na tym, że dekoder nie rezygnuje z czytania w całości. Rezygnuje tylko z liczenia kontekstu globalnego, a kontekst lokalny nadal liczy sobie sam.
Kontekst globalny to wszystko, co model dostał: prompt i wszystkie załączniki. Notatki z tygodni wykładów. Kontekst lokalny to najbliższe otoczenie zdania, które model właśnie pisze — to, co bezpośrednio decyduje o następnym słowie. Dekoder nie liczy żadnego globalnego K V cache, za to używa mechanizmu sliding window attention, żeby bardzo uważnie patrzeć wyłącznie na najświeższe tokeny.
Analogia z firmy analitycznej: tysiące stron raportów finansowych czytają młodsi analitycy. Przeliczają liczby i piszą gęste, dokładne streszczenie zarządcze. To pierwsza połowa modelu i jej wyjście. Streszczenie trafia do dyrektorów, czyli do warstw dekodera. Dyrektorzy nie czytają tysięcy stron oryginału. Opierają się na streszczeniu, ale kiedy przychodzi moment podpisu, zakładają okulary i wczytują się w dokładne brzmienie tej jednej strony przed sobą. Streszczenie daje kierunek, strona przed nosem — wykonanie.
Tym samym połowa modelu w ogóle nie musi produkować własnych wielkich notatek. Obliczenia potrzebne do czytania spadają o połowę.
Notatki mniejsze czterysta trzydzieści siedem razy
Redukcja obliczeń to jedno, pamięć to drugie. Notatki nadal powstają i nadal się przelewają. Tu wchodzi najciekawsza część projektu.
Najpierw wynik. Globalny K V cache na jeden token w Deepseeku V jeden ważył prawie trzysta dziewięćdziesiąt tysięcy bajtów. W najnowszym V cztery jeden Flash to osiemset dziewięćdziesiąt bajtów na token. To około czterystu trzydziestu siedmiu razy mniej. Nawet poprzedni V cztery Flash potrzebował jeszcze około trzech i pół tysiąca bajtów na token, więc nowa wersja jest blisko czterokrotnie mniejsza od bezpośredniego poprzednika.
Pytanie brzmi, jak tak ścisnąć notatki i nie stracić sensu. Odpowiedź to mechanizm compressed sparse attention dwa, w skrócie C S A dwa.
W zwykłym transformerze każda warstwa liczy własny K V cache. Można myśleć o warstwach jako skupionych na różnych rzeczach: jedne na wzorcach, inne na gramatyce, jeszcze inne na relacjach między ideami albo na szerszym sensie tekstu. Przy tylu warstwach robiących własne notatki całość puchnie, a spora część pracy się dubluje.
C S A dwa rozbija tę redundancję przez skrajne współdzielenie. Warstwa może pracować w jednym z trzech trybów.
- Full. Warstwa robi całą robotę: tworzy kompletny K V cache od zera. Dodatkowo buduje indeks, czyli coś w rodzaju spisu treści, po którym kolejne warstwy mogą szukać w tych notatkach zamiast czytać je od deski do deski.
- Reindex. Warstwa nie tworzy własnych notatek — korzysta z notatek warstwy w trybie full. Tworzy za to nowy indeks od zera. To ten sam materiał z zupełnie innym spisem treści. Przy historii świata warstwa full może zbudować indeks chronologiczny, a warstwa reindex z tych samych notatek wyciągnie na przykład motywy przewijające się przez epoki albo przełomy technologiczne. To wytyczanie różnych ścieżek przez ten sam materiał.
- Reuse. Tryb maksymalnej oszczędności. Warstwa nie zapisuje nic: bierze notatki z warstwy full oraz indeksy z warstw full albo reindex. Żadnych nowych notatek, żadnych nowych spisów treści.
Suma notatek spada mocno, bo część warstw w ogóle ich nie tworzy.
Bramkarz na wejściu do pisania
Deepseek idzie krok dalej i dokłada hierarchical sparse indexer. W drugiej połowie modelu, czyli w dekoderze, pierwsza warstwa działa jak bramkarz. Skanuje wszystkie globalne notatki z poprzedniej warstwy i wytwarza pulę kandydatów, czyli krótką listę najbardziej istotnych pojęć.
Konkretnie: z miliona tokenów wybiera około szesnastu tysięcy. Reszta jest ignorowana, a wszystkim kolejnym warstwom nie wolno szukać w notatkach niczego poza tym wyborem. Przestrzeń możliwych odpowiedzi zawęża się drastycznie już na starcie fazy pisania.
Naturalna obawa jest taka, że model zacznie halucynować albo gubić istotne szczegóły. Deepseek rozwiązał to treningiem: model buduje tę listę kandydatów z taką celnością, że późniejsze warstwy nie zauważają braku reszty.
Warto się na chwilę zatrzymać nad tym, co tu zrobiono. Ten lab nie ma najlepszych G P U, nie ma największego centrum danych i jest głodny mocy obliczeniowej. Zamiast walczyć o sprzęt, zoptymalizował oprogramowanie tak, żeby sprzęt miał mniej do roboty.
Skasowana pamięć krótkotrwała
Ta sama optymalizacja wygenerowała nowy problem. Sliding window attention to hiperlokalna pamięć krótkotrwała modelu — dyrektor, który wczytuje się w stronę przed sobą. Według raportu ta pamięć robiła poważny kłopot ze składowaniem.
Kiedy użytkownik prowadzi rozmowę na wiele tur, model musi zapisywać lokalny kontekst każdej tury na S S D, żeby nie zgubić wątku. To ciągłe zapisywanie zapychało dyski. W analogii: wszystkie szafki w pokoju na końcu korytarza są pełne, a po każdą notatkę trzeba tam biec.
Odpowiedź Deepseeka nazywa się S W A bounded replay i jest najbardziej nieoczekiwaną decyzją w całym projekcie. Lokalna pamięć po prostu znika. Kiedy model kończy generować odpowiedź, jego pamięć krótkotrwała wyparowuje.
Wydawałoby się, że model musi się przez to pogubić. Zamiast tego Deepseek każe mu błyskawicznie przeliczyć ostatni fragment rozmowy od nowa — konkretnie ostatnie sto dwadzieścia osiem tokenów. Najświeższe notatki powstają na miejscu, za każdym razem od zera.
Brzmi to sprzecznie z resztą, bo cały wysiłek szedł w stronę mniejszej liczby obliczeń. Rachunek wygląda jednak tak. Wariant pierwszy: dane jadą z G P U przez płytę główną na dysk, a potem trzeba ich szukać i ciągnąć tą samą drogą z powrotem. To wolne, bo fizycznie przenosi się dane na dystans. Wariant drugi: nowoczesny G P U przelicza sto dwadzieścia osiem tokenów w mikrosekundy, praktycznie bez kosztu czasu i energii.
Liczenie okazuje się szybsze niż transfer. Zapisywanie pamięci krótkotrwałej na dysk było marnowaniem najwolniejszego zasobu w systemie. Usunięcie tego kroku przyspieszyło całość i uwolniło mnóstwo miejsca.
Dwa dodatki: M H C i engram
Poza główną architekturą doszły komponenty wspierające.
Pierwszy to single pass M H C. Praca modelu to nie tylko liczenie, ale też nieustanne przesuwanie danych. Jedna część modelu produkuje wartości pośrednie, których potrzebuje następna. Normalnie trzeba je zapisać do pamięci G P U i za chwilę wczytać z powrotem. Przy długim zadaniu dzieje się to miliardy razy. Pojedynczy ruch trwa ułamek chwili, ale pomnożony przez miliardy staje się wąskim gardłem. Single pass M H C eliminuje część tych podróży: matematycznie zestraja wiele operacji tak, żeby mogły zachodzić jednocześnie zamiast po kolei. Ruch w pamięci G P U spada, a całość przyspiesza.
Drugi to engram — osobny moduł pamięci. Ma sto sześćdziesiąt osiem miliardów parametrów i zamiast siedzieć w drogiej pamięci G P U, mieszka w zwykłym R A M serwera, fizycznie odseparowany od G P U. Odpowiada za fakty statyczne: daty historyczne, stolice, rzeczy niezmienne.
Sens jest taki, żeby G P U zajmował się wyłącznie rozumowaniem. Drogą pamięć trzeba uwolnić pod myślenie, a nad faktami, których nie trzeba przemyśliwać, może czuwać tańsza pamięć poza układem. Model sięga do engramu dopiero wtedy, kiedy potrzebuje konkretnego faktu.
To jak dobry starszy prawnik prowadzący sprawę. Nie musi pamiętać każdej klauzuli, bo odpowiada za strategię. Obok siedzi asystent, który natychmiast poda datę albo dokładny cytat. Engram to ten asystent.
Trzeci dodatek to D Spark, opisany osobno przy premierze. Zwykłe modele generują odpowiedź słowo po słowie, co jest wolne. D Spark pozwala wypuszczać kilka słów naraz.
Płaska krzywa i pozycja w czołówce
Złóżmy to razem. Sliding window attention skupia uwagę na tym, co najbliższe. Podział modelu na dwie połowy ścina obliczenia. C S A dwa z trybami reindex i reuse ogranicza ilość powstających notatek. Bounded replay kasuje pamięć krótkotrwałą i odzyskuje miejsce na dysku. M H C usprawnia przepływ obliczeń, engram zdejmuje z G P U twarde fakty, a D Spark przyspiesza generowanie. Żaden z tych elementów osobno nie jest całą odpowiedzią — dopiero razem dają ten efekt.
Najmocniejszy dowód to wykres numer dwa z raportu. Na osi pionowej flopsy, czyli surowa moc obliczeniowa potrzebna do wygenerowania odpowiedzi. Na osi poziomej rozmiar okna kontekstowego. Przy rozciąganiu okna od standardowych czterech tysięcy tokenów aż do miliona — czyli mniej więcej siedmiuset tysięcy słów albo średniej bazy kodu — krzywa dekodowania nowego modelu pozostaje niemal całkiem płaska.
Znaczy to, że jednostronicowy dokument i tysiące stron kosztują model mniej więcej tyle samo energii na słowo. Normalnie skalowanie kontekstu podnosi koszt obliczeń, co widać na poprzednich generacjach Deepseeka. Tutaj krzywa została spłaszczona.
Wyniki też są z górnej półki. W Deep Su jeden jeden model osiąga siedemdziesiąt cztery i dwie dziesiąte, co bije pozostałe modele otwarte i jest praktycznie na równi z G P T sześć Astra, które ma siedemdziesiąt cztery. W Cyberjim wynik jest zbliżony do najlepszego w branży, podobnie w Automation Bench, gdzie model wyprzedza G P T sześć Astro Max. W rankingu LiveBench to numer jeden wśród modeli otwartych. W indeksie Vals, mierzącym wykonywanie zadań umysłowych, również pierwsze miejsce.
Do tego koszt. Drugie i trzecie miejsce w zestawieniu są ponad dwadzieścia razy droższe. Na wykresie kosztu na zadanie nowy Deepseek leży daleko poniżej G P T sześć Astra i bardzo drogich modeli Claude. Przez API model osiąga ponad dwieście tokenów na sekundę, czyli około cztery razy szybciej niż G P T sześć, a czas do pierwszej odpowiedzi jest najniższy w branży.
Model jest otwarty i można go pobrać lokalnie. Raport zawiera jeszcze sporo szczegółów technicznych, które nie zmieściły się w materiale — link do oryginału jest w opisie wideo.
Koniec artykułu.