Bare-metal GPU dla firm · 96 GB VRAM · Katowice

TESTY I PORADNIKI

RAM i cache: ile pamięci naprawdę potrzebuje serwer LLM?

RAM procesu, pamięć podręczna Linuxa i VRAM to różne rzeczy. Jak ocenić zapas pamięci serwera LLM, mapowanie modelu i wpływ ciepłego cache.

Poglądowe moduły pamięci z półprzezroczystymi warstwami.
Ilustracja AI.

Duży plik modelu na dysku, pamięć zajęta przez proces i odczyt „used” w systemie nie oznaczają tego samego. Linux może przechowywać odczytane dane w pamięci podręcznej, aplikacja może mapować plik modelu, a jego warstwy mogą jednocześnie znajdować się w VRAM.

Żeby dobrać RAM, warto więc śledzić zapas dostępny dla systemu i pamięć procesu, a nie tylko rozmiar pliku GGUF. Pojemność samej karty opisujemy osobno w poradniku modeli mieszczących się w 96 GB VRAM.

Nasz pomiar pamięci z Qwen3-8B

W krótkich próbach z modelem na GPU najwyższy zarejestrowany PSS procesu wyniósł 813,20 MiB. To pamięć przypisana procesowi według konkretnego licznika, nie całkowite zapotrzebowanie serwera na RAM. Obok pozostają system, cache plików i pozostałe usługi.

Etap Najwyższy odczyt PSS procesu Najniższy MemAvailable systemu Liczba próbek
Gotowy model, 10 s bez zapytań tuż po załadowaniu 750,02 MiB 89,41 GiB 5
Wejście 2048 tokenów, 1 zapytanie naraz 782,44 MiB 89,39 GiB 3
Wejście 8192 tokeny, 4 zapytania naraz 813,20 MiB 89,35 GiB 10

MiB i GiB są jednostkami binarnymi: 1 GiB = 1024 MiB. Wykres pokazuje te same maksymalne odczyty PSS w GiB. W próbkach tych etapów użycie swapu wynosiło zero. System przechowywał również cache plików z wcześniejszych zadań — nie przypisujemy całego tego cache modelowi Qwen3-8B.

Sprzęt i sposób pomiaru

Element Konfiguracja pomiaru
RAM systemowy 96 GB
CPU AMD EPYC 4565P, 16 rdzeni / 32 wątki
GPU RTX PRO 6000 Blackwell Max-Q Workstation Edition, 96 GB VRAM
System i sterownik Rocky Linux 10.2, NVIDIA 595.91.07
Model i silnik Qwen3-8B Q4_K_M, llama.cpp b11146, model na GPU

Każdy scenariusz obejmował rozgrzewkę i trzy mierzone rundy, z 256 nowymi tokenami na odpowiedź. API działało lokalnie, miało cztery sloty po 8704 tokeny, KV cache F16 i Flash Attention; cache promptu był wyłączony. Przed scenariuszem GPU schładzało się do najwyżej 40°C.

RSS i PSS procesu oraz pamięć hosta odczytywaliśmy przez /proc co około dwie sekundy. Do tabeli weszły próbki gotowości oraz ukończonych mierzonych rund, bez rozgrzewki i przerw. Zarejestrowane maksima mogą ominąć krótsze skoki. Faza ładowania miała tylko jedną próbkę, dlatego nie używamy jej do określania szczytu pamięci.

Pomiar miał ciepły cache systemu po sprawdzeniu sumy modelu. Nie ograniczaliśmy dostępnego RAM, więc nie jest to test minimalnej wymaganej pojemności. CSV zawiera również maksymalne odczyty RSS, a JSON — zakresy i definicje liczników. Narzut tej telemetrii odróżnia badanie od wcześniejszego testu szybkości API.

Trzy odczyty, trzy różne pytania

Odczyt Na jakie pytanie odpowiada?
MemAvailable Ile pamięci system może udostępnić nowym aplikacjom bez swapowania?
RSS procesu Ile pamięci z mapowań procesu jest obecnie w RAM?
PSS procesu Ile pamięci przypada na proces po proporcjonalnym podziale współdzielonych stron?

MemAvailable uwzględnia część pamięci, którą system może odzyskać, dlatego nie jest tym samym co MemFree. RSS współdzielonych danych może być widoczny w kilku procesach; PSS dzieli ten udział. Definicje opisuje dokumentacja pamięci w /proc.

Nie dodawaj bezpośrednio RSS procesu i całego systemowego cache jako dwóch niezależnych kosztów modelu. Te odczyty mogą częściowo opisywać te same strony pamięci.

Dlaczego drugi start może być inny

Po odczytaniu pliku modelu część danych może zostać w cache systemu. Następne uruchomienie może więc korzystać z pamięci zamiast ponownie odczytywać cały plik z dysku. To ciepły start, który różni się od startu bez tych danych w cache.

Nawet sprawdzenie sumy kontrolnej czyta cały plik i może rozgrzać cache przed pomiarem. Dlatego czas od uruchomienia programu do gotowości API trzeba opisywać wraz z warunkami, w których go uzyskano. Szybki drugi start nie jest sam w sobie testem szybkości NVMe.

llama.cpp udostępnia różne tryby ładowania modelu, w tym mapowanie pliku. Nie zakładaj, że rozmiar pliku oznacza identyczną ilość prywatnej pamięci procesu w każdym trybie.

Jak ustalić potrzebny zapas RAM

Sprawdź oddzielnie ładowanie modelu, oczekiwanie na zapytanie i pracę pod ruchem. Dodaj usługi, które rzeczywiście mają działać obok: bazę dokumentów, indeks, API, kolejkę zadań czy przetwarzanie plików.

Najbardziej przydatny jest najmniejszy zaobserwowany MemAvailable podczas reprezentatywnego zadania, zestawiony ze swapem i czasem odpowiedzi. Zapas powinien uwzględniać również aktualizację modelu, dodatkowe procesy i krótkie skoki obciążenia. Jedna krótka próba nie wyznacza minimalnej pamięci dla każdej aplikacji korzystającej z tego samego modelu.

Kiedy więcej RAM może pomóc

Większa pamięć systemowa daje przestrzeń dla dodatkowych usług i cache, a przy konfiguracji częściowo korzystającej z CPU także dla danych modelu po stronie hosta. Nie zamienia się jednak automatycznie w VRAM i nie gwarantuje większej liczby tokenów na sekundę, gdy ograniczenie leży gdzie indziej.

Przed rozbudową sprawdź, czego faktycznie brakuje: pamięci hosta, miejsca na GPU, czasu CPU czy szybkości odczytu danych. To pozwala dobrać konfigurację pod zadanie, zamiast kierować się jedną liczbą w specyfikacji.

Zobacz również rolę CPU w pracy z LLM i wybór dystrybucji Linux.

Sprawdź konfigurację serwera lub opisz modele i usługi, które mają działać równocześnie.

Pamięć procesu modelu: zarejestrowany szczyt PSS
  1. 10 s po załadowaniu, bez zapytań0,730,73 GiB
  2. 2048 tokenów · 1 zapytanie0,760,76 GiB
  3. 8192 tokeny · 4 zapytania0,790,79 GiB

Próbki co 2 s. PSS nie jest minimalnym wymaganiem RAM; nie dodajemy go do cache systemu.

Dane do pobrania

Publiczne zestawienie wyników i ustawień testu, bez danych dostępowych i identyfikatorów administracyjnych.