Krótka odpowiedź: tani VRAM nie znaczy „szybko". Zmierzyliśmy Bielika i PLLuM na używanych Teslach — i różnice są duże. Generacja tokenów na P40 jest znośna (~28 tok/s), ale prefill (przetworzenie promptu, zanim padnie pierwsze słowo) jest wolny w liczbach bezwzględnych: P40 robi ~590 tok/s prompt eval, a V100 (Volta) ~1960 — ponad trzykrotnie szybciej. P100 w naszym teście nie pokazuje przewagi nad P40 mimo szybszej pamięci HBM2. Poniżej masz nasze zmierzone liczby wraz z warunkami, plus gotowy szablon, żebyś zweryfikował je na własnej karcie.
Piszę to z perspektywy kogoś, kto sprzedaje te karty i jednocześnie ma dość benchmarków, które pokazują tylko jedną liczbę: „ile tokenów na sekundę generuje". To jest połowa prawdy i to ta ładniejsza połowa. Klient kupuje Tesla P40 24GB, odpala Bielika, wrzuca krótkie „cześć, jak się masz" i widzi znośną prędkość. Potem wkleja stronę tekstu do streszczenia albo buduje RAG-a z długim kontekstem — i nagle czeka dłużej, zanim model w ogóle zacznie pisać. To nie jest awaria. To jest prefill. I o tym większość poradników milczy.
Dwie fazy, które musisz rozróżnić
Każde zapytanie do LLM ma dwie fazy o zupełnie różnej charakterystyce wydajnościowej.
Prefill (prompt processing / prompt eval). Model musi przeliczyć cały Twój prompt — wszystkie tokeny wejściowe — zanim wygeneruje pierwszy token odpowiedzi. W typowym interaktywnym scenariuszu (batch = 1) ta faza jest znacznie bardziej compute-bound: obciąża jednostki obliczeniowe (mnożenie macierzy). Tu przewagę daje surowa moc obliczeniowa GPU — a na Volcie dodatkowo Tensor Cores, o ile ścieżka obliczeniowa backendu z nich korzysta. Im dłuższy kontekst (system prompt + dokumenty + historia rozmowy), tym dłużej trwa prefill. W llama.cpp zobaczysz to jako prompt eval time i metrykę w tok/s (pp).
Generacja (decode / eval / token generation). Po prefillu model produkuje odpowiedź token po tokenie. W tym samym scenariuszu batch = 1 ta faza jest zwykle ograniczona przepustowością pamięci: liczy się, jak szybko karta czyta wagi modelu z VRAM. Tu HBM2 w V100/P100 (wysoka przepustowość) daje przewagę, a GDDR5 w P40 wystarcza do sensownych prędkości na modelach 7-13B.
Kluczowy wniosek: VRAM decyduje, czy model się ZMIEŚCI. Przepustowość pamięci decyduje, jak szybko GENERUJE. Moc obliczeniowa decyduje, jak szybko przetwarza PROMPT (a na Volcie pomagają w tym Tensor Cores). P40 wygrywa pojemnością (24 GB), przegrywa prefillem. To nie jest wada ukryta — to fizyka architektury Pascal, która nie ma Tensor Cores w ogóle.
Dlaczego akurat te karty tak się różnią
Krótkie, pewne fakty:
- P40 (Pascal): 24 GB GDDR5, brak Tensor Cores, słaby FP16 (natywnie liczy w FP32/INT8). Najwięcej VRAM za najmniej pieniędzy. Prefill w naszym teście wyraźnie wolniejszy; P40 nie ma Tensor Cores ani sprzętowego przyspieszenia macierzy dostępnego w Volcie.
- P100 (Pascal): 16 GB HBM2, brak Tensor Cores, ale ma pełnoprawny FP16. Lepsza przepustowość niż P40, generacja porównywalna, a prefill — o dziwo — u nas wyszedł nawet niższy niż na P40. Składa się na to kilka czynników: mniej rdzeni CUDA w GP100 niż w GP102, ale też architektura, zegary i konkretna ścieżka obliczeniowa backendu. HBM2 tego nie nadrabia — prompt eval zależy tu od mocy obliczeniowej, nie przepustowości pamięci.
- V100 (Volta): 16 lub 32 GB HBM2, Tensor Cores 1. generacji. To jest ta karta, która w naszym teście realnie przyspiesza prefill względem Pascali — ~3,3× względem P40 i ~4,7× względem P100. Ile z tej przewagi daje sama architektura Volta, a ile Tensor Cores — benchmark nie rozstrzyga; pokazuje wynik, nie jego rozbicie. Droższa, ale jeśli boli Cię długi kontekst albo czas do pierwszego tokena — to różnica jakościowa, nie kosmetyczna.
Tabela wyników — nasze pomiary
Poniżej realne liczby z naszego stanowiska. Traktuj je jako punkt odniesienia, nie wyrocznię — i koniecznie zmierz własną konfigurację: sterownik i build llama.cpp potrafią ruszyć wynik, więc najlepszy benchmark to ten na Twojej karcie. Gotową procedurę i komendę masz niżej, w sekcji „Jak zmierzyć samemu".
| Karta | VRAM | Model / quant | Prefill (pp512, tok/s) |
Generacja (tg128, tok/s) |
|---|---|---|---|---|
| P40 24GB | 24 GB GDDR5 | Bielik 11B Q4_K_M | 593,6 | 28,5 |
| P40 24GB | 24 GB GDDR5 | PLLuM 12B Q4_K_M | 612,2 | 27,1 |
| P100 16GB | 16 GB HBM2 | Bielik 11B Q4_K_M | 419,0 | 27,2 |
| V100 16GB | 16 GB HBM2 | Bielik 11B Q4_K_M | 1963,0 | 77,7 |
| V100 32GB | 32 GB HBM2 | Bielik 11B Q4_K_M | 1963,0 | 77,7 |
| V100 32GB | 32 GB HBM2 | Bielik 11B Q5_K_M | 1986,1 | 70,0 |
Warunki pomiaru (trzymaj je stałe, jeśli porównujesz): llama.cpp llama-bench, GGUF, cały model na GPU (-ngl 99); prefill mierzony przy 512 tokenach (-ub 512), generacja 128 tokenów, 3 powtórzenia. Każda karta na maksymalnym power limicie (P40/P100 = 250 W — na niższym, zdławionym limicie prefill potrafi spaść o kilkadziesiąt procent). Sterownik NVIDIA 580.173.02, CUDA 12.0, karty na PCIe Gen3. V100 16 GB i 32 GB to ten sam układ GV100 — na tym samym quancie Q4_K_M dają identyczny wynik (1963 / 77,7), więc o prędkości decyduje krzem, nie pojemność; różni je tylko to, jak duży model się zmieści (32 GB mieści większe modele). Uwaga: trzeci wiersz V100 (Q5_K_M) to inny quant — nie porównuj go wprost z wierszami Q4; wyższy quant czyta więcej danych z VRAM, stąd niższa generacja (70,0 vs 77,7). Bielik-11B-v2.3-Instruct oraz PLLuM-12B-instruct (wariant komercyjny).
Dwie rzeczy, które te liczby pokazują wbrew popularnym mitom:
- Wąskim gardłem jest bezwzględna przepustowość prompt evalu, nie „załamanie" na długim kontekście. Sam czas przetwarzania 512-tokenowego promptu można przybliżyć jako
długość_promptu ÷ pp: P40 ~0,86 s (512 ÷ 594), V100 ~0,26 s (512 ÷ 1963) — to główny składnik czasu do pierwszego tokena, choć nie całość pipeline'u. Im dłuższy kontekst (system prompt + dokumenty RAG), tym proporcjonalnie dłużej — i właśnie tę różnicę czujesz, gdy wkleisz stronę tekstu zamiast krótkiego pytania. - Generacja na V100 to inna liga — ~78 tok/s vs ~28 na P40/P100. V100 łączy znacznie nowszą architekturę Volta z HBM2 i Tensor Cores. Przy interaktywnym czacie 28 tok/s jest w pełni komfortowe; przy obsłudze wielu użytkowników albo długich odpowiedzi różnica robi się odczuwalna.
Linki: V100 16GB, V100 32GB, P100 16GB.
Werdykt
Na podstawie zmierzonych liczb, nie przeczuć:
- P40 24GB — budżet i pojemność. Najlepszy stosunek VRAM do ceny. Model 13B wejdzie z zapasem, 70B w niższym quancie zmieści się na dwóch kartach. Generacja ~28 tok/s jest komfortowa do czatu. Kompromis: prompt eval ~590 tok/s to ~3× mniej niż V100 — przy długim kontekście poczujesz to jako dłuższe „time to first token". Jeśli robisz krótkie prompty i cenisz duży VRAM za małe pieniądze — świetny wybór. Więcej o P40 w praktyce: Tesla P40 + Ollama.
- P100 16GB — najsłabszy wynik w naszym teście LLM. HBM2 nie przełożyło się u nas na przewagę: prefill ~419 tok/s (niżej niż P40), generacja ~27 tok/s (jak P40), a 16 GB ogranicza większe modele. Ma sens tylko przy naprawdę dobrej cenie.
- V100 16/32GB — moc, gdy boli prefill lub generacja. V100 z architekturą Volta i Tensor Cores osiągnęła w naszym teście ~1960 tok/s prompt eval i ~78 tok/s generacji. Jeśli budujesz RAG, wrzucasz długie dokumenty albo obsługujesz wielu użytkowników — tu różnica jest odczuwalna. Płacisz więcej, dostajesz szybszy „time to first token" i wyższy przerób. Jeżeli V100 ma pracować jako część platformy wielokartowej, oferujemy również serwery Dell R740 z 1–3× Tesla V100 32 GB.
Ile VRAM realnie potrzebujesz pod dany model, rozkładam w osobnym wpisie: ile VRAM na LLaMA 7B/13B/70B.
Jak zmierzyć samemu — krok po kroku
Nie wierz nam na słowo — zweryfikuj na swojej maszynie. To jedyny sposób, żeby wiedzieć, czy Twój przypadek użycia utknie na prefillu.
- Zbuduj llama.cpp z obsługą CUDA (
GGML_CUDA=ON/ odpowiedni cmake pod architekturę karty). - Pobierz GGUF Bielika i PLLuM w Q4_K_M i Q5_K_M.
- Ustaw kartę na maksymalny power limit (
sudo nvidia-smi -pm 1 && sudo nvidia-smi -pl <max>) — inaczej zaniżysz prefill. - Uruchom
llama-bench(przykład niżej), zapiszppitgdla każdej kombinacji. - Powtórz przy obciążonej karcie (drugi proces), jeśli planujesz produkcję wielousługową.
- Zanotuj wersję CUDA, buildu i sterownika — bez tego nie porównasz wyników między maszynami.
llama-bench -m bielik-11b-Q4_K_M.gguf -p 512,2048 -n 128 -ngl 99 -r 3
-p to długości promptu (prefill), -n to liczba generowanych tokenów. Wynik dostaniesz rozbity na pp (prompt processing) i tg (token generation). To są dwie liczby, o które chodzi.
Źródła
- Bielik — SpeakLeash (wagi i warianty na HuggingFace) — https://huggingface.co/speakleash
- PLLuM — CYFRAGOVPL (wagi i warianty na HuggingFace) — https://huggingface.co/CYFRAGOVPL
Tak, sprzedajemy te karty — P40 24GB, V100 16GB, V100 32GB, P100 16GB — więc traktuj ten wpis z odpowiednim dystansem. Ale właśnie dlatego podajemy warunki pomiaru i szablon do samodzielnej weryfikacji: mniej zwrotów, mniej rozczarowań. Każdą kartę przechodzimy przez test wygrzewający (burn-in) i wystawiamy certyfikat. Masz nietypowy scenariusz albo chcesz, żebyśmy pomogli dobrać kartę pod Twój kontekst? Napisz do nas.
FAQ
- Czemu mój model „myśli" chwilę, zanim zacznie pisać?
- To prefill. Im dłuższy prompt/kontekst, tym dłużej — a na kartach bez Tensor Cores (P40/P100) prompt eval jest bezwzględnie wolniejszy. Skróć system prompt, ogranicz kontekst RAG albo weź kartę z Tensor Cores (V100).
- P40 czy V100 do Bielika?
- Krótkie prompty i budżet → P40 (generacja ~28 tok/s w zupełności wystarcza). Długi kontekst, RAG, wielu userów → V100 (prefill ~3× szybszy, generacja ~2,7×). Zmierz oba wg powyższej metodyki, jeśli możesz.
- Skąd te konkretne liczby?
- Zmierzyliśmy je sami na naszym stanowisku (warunki pod tabelą: llama-bench, GGUF,
-ngl 99, pełny power limit). To nie są dane z datasheetu ani z cudzego posta — to nasz pomiar. Twoja konfiguracja (sterownik, build) może dać nieco inne wartości, dlatego dajemy też szablon do samodzielnej weryfikacji. - Czy quant Q4 vs Q5 wpływa na prędkość?
- Tak — mniejszy quant to mniej danych do czytania z VRAM, więc zwykle szybsza generacja i mniejsze zużycie pamięci, kosztem odrobiny jakości. U nas na V100 Bielik Q4 generował ~78 tok/s, Q5 ~70. Testuj oba.
- Czy dwie P40 przyspieszą prefill?
- Nie. Rozłożą model i VRAM (odpalisz większy model), ale w naszym teście split warstwowy na dwóch P40 zwiększył dostępną pamięć, a nie przełożył się na proporcjonalny wzrost wydajności prefillu — pojemność rośnie, prędkość prompt processingu nie. Więcej VRAM ≠ szybszy prompt processing.
