Każdy, kto próbował uruchomić duży model językowy na zwykłym laptopie, wie, że generowanie tekstu potrafi być boleśnie powolne. Problem nie zawsze tkwi w samej sieci neuronowej, ale w gigantycznej macierzy wyjściowej, która dla każdego tokena przeszukuje cały słownik. Martin Loretz i Sepp Hochreiter z Instytutu Bioinformatyki w Linzu pokazali, że można to zrobić sprytniej. Zastąpili mnożenie macierzy szybkim indeksem wektorowym.
Dlaczego macierz wyjściowa jest problemem
W typowym modelu językowym warstwa wyjściowa to macierz o wymiarach [liczba tokenów w słowniku] na [wymiar ukryty]. Dla Gemma 3 270M to około 256 tysięcy tokenów razy 2048, czyli ponad 500 milionów parametrów. Przy każdym wygenerowanym słowie model musi pomnożyć wektor stanu ukrytego przez tę macierz, żeby dostać logity dla całego słownika. Na procesorze, gdzie przepustowość pamięci jest ograniczona, to mnożenie staje się wąskim gardłem. Można to porównać do sytuacji, w której bibliotekarz za każdym razem, gdy ktoś pyta o książkę, przegląda cały katalog zamiast skorzystać z indeksu.
Problem narasta w modelach z dużymi, wielojęzycznymi słownikami. Im więcej tokenów, tym większa macierz i więcej czasu potrzeba na jej przetworzenie. W przypadku małych modeli uruchamianych na CPU, projekcja wyjściowa potrafi zająć nawet połowę całego czasu generowania. Autorzy nowej pracy postanowili to zmienić.
Jak działa indeks HNSW zamiast mnożenia
Autorzy zauważyli, że mnożenie wektora stanu przez macierz osadzeń to nic innego jak szukanie tokenów, których osadzenia mają największy iloczyn skalarny z tym wektorem. Zamiast liczyć wszystkie iloczyny, można potraktować to jako problem wyszukiwania najbliższych sąsiadów. Do tego użyli algorytmu HNSW (Hierarchical Navigable Small World). HNSW buduje wielowarstwowy graf, w którym podobne wektory są połączone. Wyszukiwanie zaczyna się od ogólnego przeglądu na wysokim poziomie, a potem schodzi do szczegółów, szybko znajdując kilkadziesiąt najlepszych kandydatów.
Dla zapytania wystarczy sprawdzić tylko te tokeny, a logity dla reszty słownika ustawić na zero. W ten sposób powstaje rzadki tensor, który można bezproblemowo podać do standardowego próbkowania. Integracja z istniejącym potokiem dekodowania jest prosta: wystarczy podmienić warstwę wyjściową. Nie trzeba zmieniać reszty modelu ani procesu treningu.
Duże macierze osadzeń wyjściowych tworzą istotne wąskie gardło przepustowości pamięci podczas dekodowania autoregresyjnego, szczególnie w przypadku kompaktowych LLM-ów z dużymi wielojęzycznymi słownikami.
Martin Loretz, Sepp Hochreiter
Accelerating LLM Inference via Vector Index Based Output Embeddings, arXiv:2608.27460
Ile można zyskać?
Testy przeprowadzono na procesorze, używając modeli Gemma 3 270M, Llama 3.2 1B i Qwen 3 0.5B. Dla Gemma 3 270M przy generowaniu po jednym tokenie na raz (batch size 1) przepustowość wzrosła o 82 procent. To znaczy, że ten sam sprzęt jest w stanie wygenerować prawie dwa razy więcej tekstu w tym samym czasie. W przypadku większych modeli zysk był mniejszy, bo u nich projekcja wyjściowa stanowi mniejszą część całkowitego czasu wnioskowania. Mimo to, dla wszystkich testowanych modeli odnotowano przyspieszenie.
Co ciekawe, metoda nie wymaga GPU. Działa na zwykłym CPU, co ma znaczenie dla urządzeń mobilnych i serwerów bez akceleratorów. Autorzy podkreślają, że to podejście jest szczególnie przydatne w scenariuszach, gdzie liczy się niskie opóźnienie, a nie masowe przetwarzanie równoległe.

Jakość tekstu bez uszczerbku
Naturalne pytanie: czy przybliżone wyszukiwanie nie psuje generowanego tekstu? Autorzy sprawdzili to przy pomocy AlpacaEval, automatycznego testu porównującego odpowiedzi modelu z referencyjnymi. Jakość generowania pozostała na tym samym poziomie. Okazuje się, że nawet jeśli indeks pominie kilka tokenów z topu, to proces próbkowania i tak wybiera sensowne kontynuacje.
Sam byłem sceptyczny. Myślałem, że oszczędność na precyzji odbije się na spójności zdań. Ale liczby mówią same za siebie. Dla zastosowań, gdzie liczy się szybkość, a nie aptekarska dokładność, to świetna wiadomość. Nie trzeba wybierać między tempem a sensownością odpowiedzi.
Gdzie to się sprawdzi?
Opisana metoda to nie tylko ciekawostka akademicka. Może znaleźć zastosowanie wszędzie tam, gdzie modele działają na procesorach: w asystentach głosowych na smartfonach, chatbotach obsługiwanych na tanich serwerach, systemach tłumaczenia maszynowego na urządzeniach brzegowych. Dzięki temu, że nie trzeba już trzymać w pamięci i przeliczać całej macierzy wyjściowej, można używać większych słowników bez proporcjonalnego wzrostu kosztów. To otwiera drogę do modeli wielojęzycznych, które szybko reagują nawet na słabszym sprzęcie.
A czy podobne podejście da się zastosować do innych warstw? To już materiał na kolejne badania.
- Macierz wyjściowa jest głównym wąskim gardłem na CPU, zwłaszcza dla małych modeli.
- Zastąpienie mnożenia macierzy indeksem HNSW redukuje koszt obliczeniowy projekcji wyjściowej.
- Przyspieszenie sięga 82% dla Gemma 3 270M przy zachowaniu jakości generowania.
- Metoda jest praktyczna dla scenariuszy z małym opóźnieniem i urządzeń bez GPU.
Praktyczne zastosowania
Aby lepiej zrozumieć opisywaną innowację, przygotowaliśmy cztery przykłady praktycznego zastosowania tej technologii w różnych branżach:
Podsumowanie
Technologia opisana w artykule może przyspieszyć działanie modeli językowych na procesorach. To ważne dla asystentów głosowych w telefonach, chatbotów na tanich serwerach i systemów tłumaczeniowych na urządzeniach bez GPU. Zastąpienie mnożenia macierzy indeksem wektorowym pozwala obsługiwać większe słowniki przy niższych kosztach, co w biznesie przekłada się na szybsze odpowiedzi i mniejsze rachunki za serwery.
Metryka artykułu źródłowego
Tytuł oryginalny: Accelerating LLM Inference via Vector Index Based Output Embeddings
Autorzy: Martin Loretz, Sepp Hochreiter
Data publikacji: 31 sierpnia 2026
arXiv: arxiv.org/abs/2608.27460
Napisanie tego artykułu zostało wspomagane przez sztuczną inteligencję. Treść opiera się na oryginalnym artykule naukowym, a jej dokładność została zweryfikowana automatycznie.
