Robocikowo>ROBOCIKOWO
Wnioskowanie

Offloading warstw

2021AktywnyOpublikowano: 29 września 2026Aktualizacja: 29 września 2026Opublikowany
Offloading warstw to technika inferencji, która przenosi część warstw modelu do pamięci CPU lub na dysk i sprowadza je do GPU na czas obliczeń, umożliwiając uruchamianie modeli przekraczających dostępny VRAM.
Kluczowa innowacja
Rozmieszczenie warstw (lub ich fragmentów i KV cache) modelu między pamięcią GPU a wolniejszą, ale większą pamięcią CPU (RAM) lub dyskiem NVMe, co pozwala uruchomić model większy niż VRAM kosztem transferu danych przez magistralę PCIe.
Kategoria
Wnioskowanie
Poziom abstrakcji
Wzorzec
Poziom operacji
InferencjaUdostępnianieWdrożenie
Zastosowania
Uruchamianie modeli większych niż VRAM na jednym GPUInferencja LLM na laptopach i kartach o małej pamięci (llama.cpp n-gpu-layers)Hybrydowa inferencja GPU+CPU dla modeli MoETrening/fine-tuning z offloadem stanów optymalizatora (ZeRO-Offload, ZeRO-Infinity)Redukcja kosztów przez użycie tańszej pamięci CPU/NVMe zamiast dodatkowych GPU

Jak działa

Model dzieli się na warstwy (bloki transformera). Część warstw pozostaje na stałe w VRAM, a pozostałe przechowywane są w RAM CPU lub na dysku NVMe. Podczas przebiegu forward, gdy potrzebna jest warstwa spoza GPU, jej wagi kopiuje się przez PCIe do VRAM, wykonuje obliczenia i zwalnia miejsce dla następnej warstwy; aktywacje przechodzą przez kolejne warstwy sekwencyjnie. Aby ukryć opóźnienia transferu, stosuje się prefetching (asynchroniczne wczytywanie kolejnej warstwy podczas liczenia bieżącej) i nakładanie transferu na obliczenia. Offloadować można nie tylko wagi warstw, ale i KV cache oraz stany optymalizatora (w treningu, np. ZeRO-Offload). Liczba warstw trzymanych na GPU (np. parametr n-gpu-layers w llama.cpp) steruje kompromisem między zużyciem VRAM a prędkością.

Rozwiązany problem

Duże modele nie mieszczą się w całości w pamięci VRAM pojedynczego GPU, a zakup większej liczby akceleratorów bywa niemożliwy lub nieopłacalny. Offloading warstw rozwiązuje to, trzymając w VRAM tylko część modelu i przechowując resztę w tańszej, obfitszej pamięci CPU lub na dysku NVMe; warstwy są sprowadzane do GPU tuż przed użyciem. Umożliwia to inferencję (a częściowo trening) modeli większych niż VRAM, kosztem spadku prędkości wynikającego z transferu przez PCIe.

Kluczowe mechanizmy

Podział warstw między VRAM a RAM CPU / dysk NVMe
Transfer wag przez PCIe tuż przed obliczeniami
Prefetching kolejnej warstwy podczas liczenia bieżącej
Nakładanie transferu na obliczenia
Offload KV cache i stanów optymalizatora (trening)

Mocne strony i ograniczenia

Mocne strony
✓Umożliwia uruchomienie modelu większego niż VRAM
✓Wykorzystuje tanią, obfitą pamięć CPU/NVMe zamiast dodatkowych GPU
✓Sterowany kompromis VRAM vs prędkość (np. n-gpu-layers)
✓Prefetching i nakładanie transferu łagodzą narzut
✓Wspiera zarówno inferencję, jak i trening (ZeRO-Offload/Infinity)
Ograniczenia
✗Transfer przez PCIe jest wielokrotnie wolniejszy niż odczyt z VRAM
✗Nadmierny offload drastycznie obniża tokeny/s
✗KV cache przy długim kontekście może i tak przekroczyć VRAM
✗Zysk zależy od szybkiej magistrali (PCIe 4.0/5.0, NVLink)
✗Złożoność harmonogramowania transferu i obliczeń

Komponenty

Podział warstw między urządzeniaRozdział modelu na szybką i wolną pamięć

Decyzja, które warstwy (lub tensory) trzymać w VRAM, a które w RAM CPU lub na dysku, sterowana budżetem pamięci.

Transfer przez PCIeDostarczenie danych do jednostki obliczeniowej

Kopiowanie wag warstwy z pamięci CPU/dysku do VRAM tuż przed obliczeniami i ich zwolnienie po użyciu.

Prefetching i nakładanie transferuOgraniczenie spadku wydajności

Asynchroniczne wczytywanie kolejnej warstwy podczas liczenia bieżącej, aby ukryć opóźnienia transferu za obliczeniami.

Implementacja

Pułapki implementacyjne
Wąskie gardło PCIeWysoka

Transfer wag przez PCIe jest wielokrotnie wolniejszy niż odczyt z VRAM; nadmierny offload dramatycznie obniża liczbę tokenów na sekundę.

Rozwiązanie:Trzymaj na GPU jak najwięcej warstw mieszczących się w VRAM; wykorzystaj prefetching i nakładanie transferu na obliczenia.
Pominięcie offloadu KV cacheŚrednia

Przy długim kontekście KV cache może przekroczyć VRAM, nawet gdy wagi zostały zoffloadowane, powodując błąd braku pamięci.

Rozwiązanie:Offloaduj lub kwantyzuj KV cache, ogranicz długość kontekstu lub użyj uwagi grupowej (GQA/MQA).

Ewolucja

Oryginalny paper · 2021 · USENIX ATC 2021 · Jie Ren
ZeRO-Offload: Democratizing Billion-Scale Model Training
Jie Ren, Samyam Rajbhandari, Reza Yazdani Aminabadi, Olatunji Ruwase, Yuxiong He
2021
ZeRO-Offload i ZeRO-Infinity
Punkt przełomowy

Microsoft DeepSpeed wprowadza offload stanów optymalizatora i parametrów do CPU/NVMe, umożliwiając trening modeli wielokrotnie większych niż VRAM.

2023
Offloading warstw w lokalnej inferencji LLM

llama.cpp (n-gpu-layers), Hugging Face Accelerate (device_map) i FlexGen upowszechniają offload warstw w inferencji na sprzęcie konsumenckim.

Hiperparametry (konfigurowalne osie)

Liczba warstw na GPUKrytyczna

Ile warstw trzymać w VRAM; reszta jest offloadowana do CPU/dysku.

0Pełna inferencja na CPU.
35Część warstw na GPU (hybryda).
allCały model w VRAM, bez offloadu.
Cel offloaduWysoka

Gdzie przechowywane są offloadowane dane: pamięć CPU lub dysk NVMe.

CPU RAMSzybszy niż dysk, ograniczony pojemnością RAM.
NVMeNajwiększa pojemność, najwolniejszy transfer.

Złożoność obliczeniowa

Charakterystyki obliczeniowe
→Zajętość VRAM proporcjonalna do liczby warstw na GPU
→Ograniczenie: łączna pamięć CPU/NVMe, nie tylko VRAM
→Prędkość silnie zależna od przepustowości PCIe
→Prefetching redukuje widoczne opóźnienia transferu
→Tryb hybrydowy: część warstw liczona na CPU

Złożoność czasowa: t ~ t_compute + (bajty offloadowanych warstw) / przepustowosc PCIe. Złożoność przestrzenna: VRAM ~ (warstwy na GPU / wszystkie warstwy) x rozmiar modelu.

Uwagi do benchmarku

Przepustowość PCIe 4.0 x16 to ~32 GB/s, wobec ~1-3 TB/s przepustowości VRAM nowoczesnych GPU — stąd każda offloadowana warstwa znacząco spowalnia generację. W praktyce llama.cpp pozwala płynnie regulować n-gpu-layers: im więcej warstw mieści się w VRAM, tym wyższa liczba tokenów/s; pełny offload na CPU redukuje prędkość do poziomu inferencji CPU.

Wąskie gardło obliczeniowe

Transfer przez PCIe

Wąskim gardłem jest przepustowość magistrali PCIe między CPU/dyskiem a GPU; to ona, a nie moc obliczeniowa, ogranicza prędkość przy offloadzie.

Zależy od
Liczba offloadowanych warstwGeneracja PCIe / NVLink

Paradygmat wykonania

Tryb główny
Gęsty

Wszystkie warstwy są wykonywane; różnica dotyczy lokalizacji pamięci wag.

Wzorzec aktywacji
Wszystkie ścieżki aktywne
Mechanizm routingu

Offloading nie zmienia grafu obliczeń ani nie wprowadza routingu; steruje jedynie miejscem przechowywania i transferem wag.

Równoległość

Poziom równoległości
Warunkowo równoległy

Transfer i obliczenia można nakładać (prefetching), ale zależność między warstwami wymusza sekwencyjny przepływ aktywacji; równoległość między urządzeniami warunkowa względem magistrali.

Zakres
InferencjaPomiędzy urządzeniamiPomiędzy warstwami

Wymagania sprzętowe

Podstawowe

GPU wykonuje obliczenia warstw, ale korzyść z offloadu zależy od szybkiej magistrali (PCIe 4.0/5.0, NVLink) i dużej, szybkiej pamięci CPU.

Dobry fit

Warstwy offloadowane mogą być liczone bezpośrednio na CPU (np. hybryda w llama.cpp), gdy transfer do GPU nie opłaca się dla danej warstwy.