Ile kontekstu naprawdę zmieści się w 32 GB
Kontekst to pamięć rozmowy — wszystko, co model ma przed oczami, gdy formułuje odpowiedź. Jest drugim po wagach modelu konsumentem pamięci karty i zwykle to on decyduje, czy konfiguracja w ogóle wstanie. Sprawdziliśmy, gdzie leży granica przy 32 GB. Odpowiedź okazała się zaskakująca: najczęściej nie po stronie sprzętu.
Dziewięć na dziesięć profili nie ogranicza pamięć, tylko sam model
Nasza maszyna wystawia dziesięć gotowych profili pracy. Dziewięć z nich stoi na 262 144 tokenach kontekstu — a to nie jest granica kart, tylko maksimum, na jakim te modele były trenowane. Powyżej tej wartości nie da się wejść niezależnie od tego, ile pamięci by się dołożyło.
To najważniejszy wniosek z całej serii pomiarów: przy 32 GB współczesne modele klasy 26–35 miliardów parametrów mieszczą się na pełnym kontekście, na jaki je zaprojektowano. Więcej pamięci nie kupiłoby tu ani jednego tokena więcej.
Jedyny profil ograniczony pamięcią to model 31-miliardowy z obsługą obrazu i wideo — moduł widzenia oraz osobny plik podpowiadacza zjadają miejsce, więc kontekst kończy się na 167 936 tokenach. To najciaśniejsza konfiguracja w całym zestawie: po pełnym obciążeniu zostaje na kartach 464 i 144 MB wolnego. Kolejny krok w górę już się nie ładuje.
Ile kosztuje kontekst
Rachunek jest liniowy i łatwy do zapamiętania: około 200–320 MB na każdej karcie za każde 8192 tokeny kontekstu. Rozrzut bierze się z budowy modelu — przy obsłudze obrazu dochodzi jeszcze pamięć podpowiadacza. A dlaczego pamięć liczy się osobno na każdej z dwóch kart, tłumaczymy w artykule o podziale modelu między karty.
Rozpiętość między modelami potrafi być duża. Model o hybrydowej budowie uwagi zużywa około 35 kB na token, a model klasyczny — około 51 kB. Ten drugi z tego powodu kończy na 208 tysiącach tokenów zamiast 262 tysięcy, mimo że sam byłby gotów pracować dalej. Budowa modelu decyduje więc o pojemności kontekstu równie mocno jak ilość pamięci.
Jak mierzyliśmy — i dlaczego oczywisty sposób kłamie
Trzy rzeczy okazały się kluczowe, a każda z nich to pułapka, w którą łatwo wpaść.
Wolną pamięć trzeba odczytać po pracy, nie po załadowaniu. Biblioteka obliczeniowa rezerwuje swój bufor roboczy leniwie — dopiero przy pierwszym prawdziwym mnożeniu macierzy. Model potrafi więc „załadować się” z pozornym zapasem i wywrócić przy pierwszym pytaniu.
Wolną pamięć trzeba czytać wprost, nie liczyć. Sterownik karty trzyma dla siebie około 423 MB, których nie da się zaalokować. Popularne odejmowanie „całość minus zajęte” zawyża wynik dokładnie o tę wartość — pokazuje 528 MB wolnego tam, gdzie realnie zostało 106.
Zapas okazał się statyczny. Rzuciliśmy w konfiguracje długimi zapytaniami — od tysiąca do 227 tysięcy tokenów, z przeładowaniami modelu i wielokrotnym przetwarzaniem pełnego kontekstu. Próbka co pół sekundy, 14 771 pomiarów. Wahanie wolnej pamięci: najwyżej 2 MB, a na dwóch konfiguracjach dokładnie zero. Pamięć rezerwuje się z góry i się nie rusza.
Dlatego nasz próg dopuszczenia to skromne 100 MB wolnego na każdej karcie. Gdyby zajętość skakała w czasie pracy, potrzebowalibyśmy zapasu liczonego w gigabajtach. Ona nie skacze.
Niespodzianka: mniejszy kontekst potrafi zostawić mniej pamięci
Najbardziej kontrintuicyjny wynik całej serii. Na jednym z modeli zmierzyliśmy wolną pamięć przy trzech ustawieniach kontekstu:
| Kontekst | Wolne na karcie 1 | Wolne na karcie 2 |
|---|---|---|
| 262 144 | 1372 MB | 416 MB |
| 212 992 | 536 MB | 60 MB |
| 180 224 | 1026 MB | 870 MB |
Zejście z kontekstu pogorszyło sytuację. Wyjaśnienie: przy niektórych wartościach bufory obliczeniowe nie mieszczą się i serwer cofa się do prostszego trybu pracy, który oszczędza więcej, niż kosztuje większa pamięć rozmowy. Każdy z tych wyników odtwarza się co do megabajta przy kolejnych ładowaniach.
Praktyczny wniosek: kontekst dobiera się pomiarem na siatce wartości, nie ekstrapolacją. Zasada „mniej znaczy bezpieczniej” tutaj nie obowiązuje.
Dwie rzeczy, które oddały pamięć za darmo
Jeden slot zamiast czterech. Serwer domyślnie przygotowuje się na czterech równoczesnych użytkowników i rezerwuje na to bufory — także wtedy, gdy użytkownik jest jeden. Ograniczenie do jednego slotu oddało 240–770 MB na kartę, bez zmiany kontekstu i bez zmiany prędkości. Ceną jest kolejka: drugie zapytanie czeka na pierwsze. W domu to uczciwa zamiana.
Oszczędniejszy zapis pamięci rozmowy. Kontekst można trzymać w pełnej precyzji albo w skompresowanej. Kompresja kosztuje około 12% dokładności tego bufora, a daje wyraźnie więcej miejsca — używamy jej wszędzie tam, gdzie walczymy o kontekst. Mocniejszą kompresję odrzuciliśmy: psuje jakość odpowiedzi w sposób odczuwalny.
Ile to jest 262 tysiące tokenów
Trudno to sobie wyobrazić, więc dwa punkty odniesienia. Taki kontekst mieści kilkaset stron tekstu naraz — całą dokumentację średniego projektu albo komplet umów do porównania. W teście programistycznym, gdzie model sam pisał wielomodułowe projekty, szczyt zajętości kontekstu wynosił średnio 107–175 tysięcy tokenów. Czyli: nawet przy intensywnej pracy zostawał zapas.
Dla porównania — jedyny testowany przez nas model polski kończy się na 32 768 tokenach. Nie z powodu kart, tylko dlatego, że tak został zaprojektowany.
Pomiary na 2 × RTX 5070 Ti 16 GB. Wolna pamięć odczytywana po pełnym obciążeniu, próg dopuszczenia 100 MB na kartę.