CPU inferencija naspram GPU inferencije
Pitanje „može li ovo bez grafičke kartice" ima kratak odgovor: može, i to na svakom serveru koji imaš. Duži odgovor je da razlika u brzini nije nekoliko procenata nego red veličine, i da to menja spisak zadataka za koje je model upotrebljiv.
Ovaj tekst objašnjava odakle razlika dolazi, gde je granica upotrebljivosti i kako se prepoznaje najgori slučaj — postavka u kojoj model radi delom na kartici, a delom na procesoru, i to bez tvog znanja.
Odakle razlika
Uobičajeno objašnjenje je da kartica ima više jezgara. Tačno je, ali nije glavni razlog. Inferencija je ograničena propusnošću memorije, ne računom.
Da bi model izbacio jedan token, mora da pročita sve svoje težine iz memorije. Model od 16 GB znači šesnaest gigabajta pročitanih po tokenu. Sa dvadeset tokena u sekundi to je preko trista gigabajta u sekundi, samo za čitanje.
| Tip memorije | Okvirna propusnost |
|---|---|
| DDR4, dvokanalno | 40 – 50 GB/s |
| DDR5, dvokanalno | 70 – 90 GB/s |
| DDR5, serverski, osam kanala | 300 – 400 GB/s |
| GDDR6X, potrošačka kartica | 900 – 1000 GB/s |
| HBM, serverska kartica | 2000 – 3000 GB/s |
Odnos je dvadeset prema jedan i to je ceo odgovor. Brži procesor ti neće pomoći — usko grlo je magistrala, ne jezgra. Zato serverski procesor sa osam memorijskih kanala radi znatno bolje od jačeg desktop procesora sa dva.
Gruba procena brzine: propusnost podeljena veličinom modela.
Model 5 GB (8B, Q4_K_M) DDR4 dvokanalno: 45 GB/s ÷ 5 GB = oko 9 t/s DDR5 dvokanalno: 80 GB/s ÷ 5 GB = oko 16 t/s RTX 3090: 936 GB/s ÷ 5 GB = oko 90 t/s (realno 50-70)
Realan broj je uvek niži od teorijskog, ali odnos ostaje.
Šta znači koja brzina
| Tokena u sekundi | Doživljaj | Upotrebljivo za |
|---|---|---|
| ispod 3 | Mučno | Noćna obrada, ništa interaktivno |
| 3 – 10 | Sporije od čitanja | Skripte, kratki odgovori, obrada u pozadini |
| 10 – 20 | Prati čitanje | Razgovor, granica udobnosti |
| 20 – 50 | Brzo | Sve, uključujući pomoć pri pisanju koda |
| preko 50 | Brže nego što stižeš | Agenti, paralelni korisnici |
Petnaest tokena u sekundi je granica ispod koje čekaš mašinu. Iznad nje ona čeka tebe.
Prefill i decode se ponašaju različito
Ovo se lako previdi, a objašnjava zašto CPU nekad razočara više nego što tabela nagoveštava.
Decode — generisanje odgovora, token po token — ograničen je memorijom i tu je odnos onaj iz tabele iznad.
Prefill — čitanje celog prompta odjednom — ograničen je računom, jer se svi tokeni obrađuju paralelno. Tu kartica dobija dodatno, često i stostruko.
Posledica je konkretna: na procesoru je slanje dugačkog dokumenta modelu skuplje od dobijanja dugačkog odgovora. Sažimanje fajla od deset hiljada tokena ume da traje minutima pre nego što se pojavi prvi znak, iako je sam odgovor kratak. Na kartici je to nekoliko sekundi.
Delimični offloading
Između čistog CPU i čistog GPU rada postoji sredina: deo slojeva na kartici, ostatak u sistemskoj memoriji. Alati to rade automatski kada model ne staje, i to je najčešći uzrok pritužbe „model radi, ali užasno sporo".
Problem je što se brzina ne deli srazmerno. Onih dvadeset procenata slojeva koji su ostali na procesoru trošiće većinu vremena.
Model 27B, Q4_K_M (16 GB), kartica od 12 GB Slojeva ukupno: 48 Na kartici: 34 Na procesoru: 14 Rezultat: oko 4 t/s Isti model, kartica od 24 GB: Na kartici: 48 Rezultat: oko 35 t/s
Provera:
$ ollama ps NAME ID SIZE PROCESSOR UNTIL qwen3:27b a1b2c3d4 18 GB 58%/42% CPU/GPU 4 minutes from now
Ako kolona PROCESSOR ne pokazuje sto posto GPU, to je tvoj problem sa brzinom. Uzmi manji model ili nižu kvantizaciju — model koji ceo stane skoro uvek pobeđuje veći koji se preliva. Računicu daje tekst o proceni VRAM-a.
Kada je CPU sasvim dovoljan
Ne treba svaki zadatak da bude interaktivan.
- Obrada u pozadini. Cron koji noću klasifikuje tikete ili sažima dnevne logove ne mari da li mu treba minut ili deset.
- Kratki, strukturirani odgovori. Klasifikacija, izvlačenje podataka iz teksta, prevođenje jedne rečenice — odgovor od trideset tokena je gotov i na osam t/s.
- Mali modeli. Klasa 1B do 4B na pristojnom procesoru daje petnaest do trideset t/s. To je upotrebljivo i za razgovor.
- Retki upiti. Nekoliko poziva dnevno ne opravdava karticu.
- Serverski procesor sa mnogo kanala. Osmokanalni sistem dostiže propusnost slabije kartice, uz mnogo više memorije za veće modele.
Ta poslednja stavka je zanimljiva za MoE modele. Pošto oni po tokenu čitaju samo aktivni deo težina, model označen kao 122B-A10B na procesoru sa mnogo memorije radi iznenađujuće pristojno — u memoriju mora ceo, ali se po tokenu čita desetina.
Podešavanje CPU inferencije
Ako ostaješ na procesoru, dve stvari donose najviše.
Broj niti. Podrazumevana vrednost je često pogrešna. Postavi na broj fizičkih jezgara, ne logičkih:
$ lscpu | grep -E '^CPU\(s\)|Core|Socket|Thread' CPU(s): 16 Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 1 $ OLLAMA_NUM_THREAD=8 ollama serve
Hyper-threading ovde ne pomaže jer niti dele istu memorijsku magistralu. Podizanje broja niti iznad broja jezgara zna i da uspori.
Memorija u svim kanalima. Dva modula u pravilnim slotovima daju dvokanalni rad; jedan modul iste ukupne veličine daje polovinu propusnosti, a time i polovinu brzine.
$ sudo dmidecode -t memory | grep -E 'Size|Locator|Speed' | head -20
Ovo je najjeftinije ubrzanje koje postoji — često je dovoljno prerasporediti module koje već imaš.
Praktični scenariji
Scenario 1: VPS bez kartice, treba klasifikacija tiketa
Model klase 4B na procesoru, kratki odgovori, obrada u paketima. Radi sasvim dobro i ne treba ti ništa više.
Scenario 2: kartica postoji, ali je sve i dalje sporo
Prvo ollama ps. Ako nije sto posto GPU, uzrok je offloading, ne kartica.
Scenario 3: odgovor kreće tek posle dva minuta
Dugačak prompt na procesoru. Prefill je faza koja tu boli. Skrati ulaz ili prebaci na karticu.
Scenario 4: biranje između boljeg procesora i kartice
Kartica, bez razmišljanja, ako je interaktivan rad cilj. Procesor od šest stotina evra ne dostiže polovnu karticu od tri stotine.
Scenario 5: model od 70B, a kartice nema
Na dvokanalnom sistemu računaj oko jedan token u sekundi. Tehnički radi, praktično ne. Uzmi manji model ili idi na API.
Kratka referenca
- Usko grlo — propusnost memorije, ne broj jezgara
- Gruba procena — propusnost podeljena veličinom modela
- DDR5 dvokanalno — oko 80 GB/s
- Potrošačka kartica — oko 900 GB/s
- 15 t/s — granica udobnosti za razgovor
- Prefill — ograničen računom, na procesoru posebno spor
- Decode — ograničen memorijom, prati odnos propusnosti
- Offloading — mali deo na procesoru uzima najveći deo vremena
- ollama ps — kolona PROCESSOR mora pokazati 100% GPU
- OLLAMA_NUM_THREAD — broj fizičkih jezgara, ne logičkih
- Memorijski kanali — popunjeni slotovi udvostručuju brzinu
- MoE na procesoru — bolji nego što veličina nagoveštava
Vežba
- Utvrdi tip i broj kanala svoje memorije, pa proceni propusnost sistema.
- Za model klase 8B u Q4_K_M izračunaj očekivanu brzinu na procesoru po formuli iz teksta.
- Pokreni isti model na procesoru i na kartici i uporedi izmerene vrednosti sa procenom.
- Postavi
OLLAMA_NUM_THREADna broj fizičkih jezgara, pa na dvostruko više. Izmeri obe vrednosti. - Nabroj tri zadatka sa svog posla koja bi radila i na osam tokena u sekundi.
Sledeći tekst u serijalu: Instalacija NVIDIA drajvera i CUDA toolkit-a na Linux serveru
Povezano:
- AI na Linux serveru — pregled celog serijala
- Koliko VRAM-a ti stvarno treba — prethodni tekst
- Benchmark lokalnog modela — kako se ove brzine mere
Comments
Post a Comment