Lokalni AI na FreeBSD-u: Analiza

Posle godina korišćenja onlajn AI alata i stalnog gubljenja vremena na ograničenja, kojekakve kvote i zavisnost od tuđih servera, odlučio sam da pokrenem manje lokalne LLM modele na svom računaru i testiram koliko vrede. Ovde ću čuvati beleške na tu temu.

Hardver #

Moja mašina je Dell Optiplex 3050 Micro sa Intel i5-7500T procesorom. Radi u "eko" režimu bez Intel Speed Shift na oko 1600 MHz ("performance" režim je na oko 3300 MHz), ima 32 GB RAM-a @2133MHz i Samsung 990 PRO NVMe disk. GPU je integrisani Intel HD Graphics 630 sa Vulkan podrškom. Nije čudo od tehnike, ali radi posao. Pored toga, ovaj test je rađen krajem februara, temperatura je bila nešto niža od 20°C u kući što mi je išlo u korist sa obzirom na to da je ovo kućište vrlo malo i zamišljam kako je lako spržiti procesor dok kažete keks.

Imam Libreboot umesto originalnog firmvera, što donosi neka ograničenja verovatno? Iz nekog razloga mislim da ovo moram da naglasim zato što ne mogu lako da menjam, na primer, memoriju dodeljenu grafičkoj kartici, možda nemam poslednji mikrokod.

Softver #

Na FreeBSD-u imam instalirana dva alata: llama.cpp (koji dolazi sa llama-cli, llama-bench itd.) i ollama. Oba koriste Vulkan za GPU ubrzanje na FreeBSD-u. ollama ima više tih "cloud" stvari stoga sam taj alat koristio vrlo malo i fokusirao se pretežno na llama.cpp. ollama je svakako jedna lepa i zgodna školjka za llama.cpp ali pošto nisam ljubitelj oblaka gledam da izbegavam takve alate kada god mogu.

Modeli koje testiram #

Preuzeo sam nekoliko manjih GGUF modela različitih veličina:

Benchmark rezultati #

Pokretanje benchmarka sa llama-bench:

llama-bench -m model.gguf -t 3 --cpu-strict 1

Opciono dodajem -ngl 0 za CPU tj. -ngl 99 za GPU usmeravanje.

Sumirani rezultati:

tg128 tokeni/s ECO GPU ECO CPU PERF GPU PERF CPU 4 8 12 16 TinyLlama 1.1B 15.02 3.68 15.23 7.59 E P SmolLM2 1.7B 9.19 2.31 9.48 4.76 E P Qwen 3B Q4 5.86 1.32 5.87 2.67 E P SmolLM3 3B 5.44 1.27 5.59 2.51 E P Phi-3 3.8B 5.03 1.10 5.02 2.19 E P Qwen 3B Q6 4.51 1.25 4.51 2.64 E P BioMistral 7B 2.12 0.51 2.17 1.08 E P
Uporedni pregled rezultata svih modela u svim režimima rada

Zaključak je zanimljiv i meni lično se dopada: na mom računaru, koji je po današnjim standardima kofa verovatno, Vulkan GPU je brži od procesora bez obzira na to da li imate Intel Speed Shift omogućen ili ne. Sa druge strane, reperi (eng. benchmarks) koje vidite na netu sa RTX 4090 nisu realnost većine ljudi i klasa računara kakvu ja imam je realnost.

Ja koristim termine "ECO" i "PERFORMANCE" ali logika je prosta: ako sistemu zatreba brzina, Intel Speed Shift omogućava da CPU brzo pređe iz stanja mirovanja sa 1200MHz na 3300MHz u jednoj sekundi. Naravno, OS igra ulogu u ovome ali je kod mene to konzervativno podešeno da radi na što nižoj frekvenciji:

sudo sysctl dev.hwpstate_intel.0.epp=100 \
            dev.hwpstate_intel.1.epp=100 \
            dev.hwpstate_intel.2.epp=100 \
            dev.hwpstate_intel.3.epp=100

Ja računar koristim za malo stvari stoga meni to odgovara a pored toga, u malom je kućištu pa želim da troši manje struje da bi bio stabilniji rad a ne da gledam kako zimi se kuva kućište na 60°C.

ASCII tabela rezultata za ljubitelje teksta
| Model                | Veličina    | ECO GPU | ECO CPU | PERF GPU | PERF CPU |
| -------------------- | ----------- | ------- | ------- | -------- | -------- |
| TinyLlama 1.1B Q4    | 636.18 MiB  | 15.02   | 3.68    | 15.23    | 7.59     |
| SmolLM2 1.7B Q4      | 1005.01 MiB | 9.19    | 2.31    | 9.48     | 4.76     |
| Qwen Coder 3B Q4     | 1.95 GiB    | 5.86    | 1.32    | 5.87     | 2.67     |
| SmolLM3 3B Q5        | 2.06 GiB    | 5.44    | 1.27    | 5.59     | 2.51     |
| Phi-3 Mini 3.8B Q4   | 2.23 GiB    | 5.03    | 1.10    | 5.02     | 2.19     |
| Qwen Coder 3B Q6     | 2.60 GiB    | 4.51    | 1.25    | 4.51     | 2.64     |
| BioMistral 7B Q3     | 3.56 GiB    | 2.12    | 0.51    | 2.17     | 1.08     |

Pre nego što ostavim stotine redova detaljnijih rezultata, evo zapažanja:

GPU offload pomaže čak i na integrisanoj grafici. Probajte i -ngl 0 (samo CPU) da uporedite zato što je razlika očigledna čak i na manjim modelima.

Opet ponavljam da je Vulkan GPU brži od procesora bez obzira na to da li imate Intel Speed Shift omogućen ili ne tako da u "eko" režimu em imate niže temperature uređaja em ne gubite brzinu. Nisam merio potrošnju električne energije, to bih mogao nekom prilikom da dopunim.

Manji modeli su praktičniji na ovakvom hardveru. TinyLlama i SmolLM2 daju pristojnu brzinu za vrlo jednostavne zadatke. Qwen Coder na 3B je dobar kompromis za pomoć sa kodom. Sve zavisi od zahteva i vaše želje da čekate.

7B modeli su spori ali upotrebljivi ako vam ne smeta čekanje. BioMistral na Q3 kvantizaciji radi, ali ne očekujte brzinu.

Q4 vs Q6 kvantizacija - Q4 je brži i troši manje memorije, Q6 daje nešto bolje odgovore. Na 32 GB RAM-a mi je svejedno.

Što je duža interakcija i što je kontekst veći, modeli postaju sporiji i zato sve rezultate treba uzeti sa dozom rezerve. Brzina sa početka neće biti ista nakon 20, 30 ili 190 poruka zato što kontekst raste i vaša mreža se širi, više podataka postoji i sve to treba da bude vezano.

Poprilično mnogo sam naučio što i ne čudi mnogo sa obzirom na to da je ovo nova oblast za mene!

Detaljni rezultati modela koje sam testirao #

Detaljni rezultati su ispod:

BioMistral-7B-Q3_K_L.gguf

ECO režim (bez Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m BioMistral-7B-Q3_K_L.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.51 ± 0.05 |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |  99 |       3 |          1 |           tg128 |          2.12 ± 0.03 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m BioMistral-7B-Q3_K_L.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |   0 |       3 |          1 |           pp512 |          7.26 ± 0.00 |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |   0 |       3 |          1 |           tg128 |          0.51 ± 0.03 |

build: unknown (7709)

PERFORMANCE režim (sa Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m BioMistral-7B-Q3_K_L.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.41 ± 0.01 |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |  99 |       3 |          1 |           tg128 |          2.17 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m BioMistral-7B-Q3_K_L.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |   0 |       3 |          1 |           pp512 |          7.30 ± 0.00 |
| llama 7B Q3_K - Large          |   3.56 GiB |     7.24 B | Vulkan     |   0 |       3 |          1 |           tg128 |          1.08 ± 0.01 |

build: unknown (7709)
Phi-3-mini-4k-instruct-q4.gguf

ECO režim (bez Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m Phi-3-mini-4k-instruct-q4.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.54 ± 0.01 |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |  99 |       3 |          1 |           tg128 |          5.03 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m Phi-3-mini-4k-instruct-q4.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |   0 |       3 |          1 |           pp512 |         14.34 ± 0.02 |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |   0 |       3 |          1 |           tg128 |          1.10 ± 0.01 |

build: unknown (7709)

PERFORMANCE režim (sa Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m Phi-3-mini-4k-instruct-q4.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.45 ± 0.05 |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |  99 |       3 |          1 |           tg128 |          5.02 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m Phi-3-mini-4k-instruct-q4.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |   0 |       3 |          1 |           pp512 |         14.45 ± 0.00 |
| phi3 3B Q4_K - Medium          |   2.23 GiB |     3.82 B | Vulkan     |   0 |       3 |          1 |           tg128 |          2.19 ± 0.00 |

build: unknown (7709)
SmolLM2-1.7B-Instruct-Q4_K_M.gguf

ECO režim (bez Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m SmolLM2-1.7B-Instruct-Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |        size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ----------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |  99 |       3 |          1 |           pp512 |         33.55 ± 0.04 |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |  99 |       3 |          1 |           tg128 |          9.19 ± 0.12 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m SmolLM2-1.7B-Instruct-Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |        size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ----------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |   0 |       3 |          1 |           pp512 |         31.70 ± 0.13 |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |   0 |       3 |          1 |           tg128 |          2.31 ± 0.02 |

build: unknown (7709)

PERFORMANCE režim (sa Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m SmolLM2-1.7B-Instruct-Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |  99 |       3 |          1 |           pp512 |         33.24 ± 0.01 |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |  99 |       3 |          1 |           tg128 |          9.48 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m SmolLM2-1.7B-Instruct-Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |   0 |       3 |          1 |           pp512 |         32.39 ± 0.01 |
| llama ?B Q4_K - Medium         | 1005.01 MiB |     1.71 B | Vulkan     |   0 |       3 |          1 |           tg128 |          4.76 ± 0.00 |

build: unknown (7709)
SmolLM3-3B-128K-UD-Q5_K_XL.gguf

ECO režim (bez Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m SmolLM3-3B-128K-UD-Q5_K_XL.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.41 ± 0.12 |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |  99 |       3 |          1 |           tg128 |          5.44 ± 0.07 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m SmolLM3-3B-128K-UD-Q5_K_XL.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |   0 |       3 |          1 |           pp512 |         18.34 ± 0.06 |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |   0 |       3 |          1 |           tg128 |          1.27 ± 0.00 |

build: unknown (7709)

PERFORMANCE režim (sa Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m SmolLM3-3B-128K-UD-Q5_K_XL.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.39 ± 0.01 |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |  99 |       3 |          1 |           tg128 |          5.59 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m SmolLM3-3B-128K-UD-Q5_K_XL.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |   0 |       3 |          1 |           pp512 |         18.50 ± 0.01 |
| smollm3 3B Q5_K - Medium       |   2.06 GiB |     3.08 B | Vulkan     |   0 |       3 |          1 |           tg128 |          2.51 ± 0.00 |

build: unknown (7709)
qwen2.5-coder-3b-instruct-q4_k_m.gguf

ECO režim (bez Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q4_k_m.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.48 ± 0.05 |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           tg128 |          5.86 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q4_k_m.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           pp512 |         19.03 ± 0.01 |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           tg128 |          1.32 ± 0.04 |

build: unknown (7709)

PERFORMANCE režim (sa Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q4_k_m.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.48 ± 0.02 |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           tg128 |          5.87 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q4_k_m.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           pp512 |         19.13 ± 0.01 |
| qwen2 3B Q4_K - Medium         |   1.95 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           tg128 |          2.67 ± 0.00 |

build: unknown (7709)
qwen2.5-coder-3b-instruct-q6_k.gguf

ECO režim (bez Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q6_k.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.31 ± 0.11 |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           tg128 |          4.51 ± 0.01 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q6_k.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           pp512 |         17.84 ± 0.04 |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           tg128 |          1.25 ± 0.03 |

build: unknown (7709)

PERFORMANCE režim (sa Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q6_k.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           pp512 |         25.50 ± 0.04 |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |  99 |       3 |          1 |           tg128 |          4.51 ± 0.00 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m qwen2.5-coder-3b-instruct-q6_k.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           pp512 |         17.96 ± 0.03 |
| qwen2 3B Q6_K                  |   2.60 GiB |     3.40 B | Vulkan     |   0 |       3 |          1 |           tg128 |          2.64 ± 0.00 |

build: unknown (7709)
tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf

ECO režim (bez Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |  99 |       3 |          1 |           pp512 |         55.09 ± 0.16 |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |  99 |       3 |          1 |           tg128 |         15.02 ± 0.19 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |   0 |       3 |          1 |           pp512 |         52.98 ± 0.28 |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |   0 |       3 |          1 |           tg128 |          3.68 ± 0.09 |

build: unknown (7709)

PERFORMANCE režim (sa Intel Speed Shift) #

GPU (-ngl 99) #

$ llama-bench -m tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 99
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |  99 |       3 |          1 |           pp512 |         54.70 ± 0.03 |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |  99 |       3 |          1 |           tg128 |         15.23 ± 0.01 |

build: unknown (7709)

CPU (-ngl 0) #

$ llama-bench -m tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf -t 3 --cpu-strict 1 -ngl 0
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) HD Graphics 630 (KBL GT2) (Intel open-source Mesa driver) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 65536 | int dot: 0 | matrix cores: none
| model                          |       size |     params | backend    | ngl | threads | cpu_strict |            test |                  t/s |
| ------------------------------ | ---------: | ---------: | ---------- | --: | ------: | ---------: | --------------: | -------------------: |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |   0 |       3 |          1 |           pp512 |         53.57 ± 0.01 |
| llama 1B Q4_K - Medium         | 636.18 MiB |     1.10 B | Vulkan     |   0 |       3 |          1 |           tg128 |          7.59 ± 0.00 |

build: unknown (7709)

llama-cli ili ollama? #

Oba rade, ali preporučujem direktno korišćenje llama-cli.

llama-cli je direktan i nema daemon procesa, nema "telefoniranja" kući, nema "auto-update" gluposti, nema "cloud". Pokreneš kad ti treba, ugasiš kad završiš.

Osnovna komanda za razgovor:

llama-cli -m model.gguf -t 3 --cpu-strict 1 -ngl 99 -c 4096 --temp 0.7 -cnv

Objašnjenje parametara:

Kao i uvek, najbolje je da pročitate detalje na zvaničnoj strani projekta

Ako ipak želite da probate ollama, prvo ugasite proveru ažuriranja:

export OLLAMA_UPDATE_CHECK=false
export OLLAMA_NOPRUNE=1
export OLLAMA_NO_CLOUD=1

I onda:

Na FreeBSD-u ollama ne može sama sebe da ažurira (to kontrolišete preko pkg) ali i dalje proverava a to mi ne treba. Takođe, korisno je imati i /set parameter num_thread 3 da koristi 3 jezgra računara zato što želite da jedno jezgro uvek bude slobodno za sistem.

I za kraj, preporučujem i --verbose zato što daje detalje i brzinu izvršavanja u ollama programu. Primer:

$ ollama run --verbose qwen2.5-coder:3b
>>> Koliko je 7 * 8 - 3 * 2?
7 * 8 - 3 * 2 = 56 - 6 = 40

total duration:       5.963946493s
load duration:        234.733453ms
prompt eval count:    45 token(s)
prompt eval duration: 3.182062697s
prompt eval rate:     14.14 tokens/s
eval count:           22 token(s)
eval duration:        2.463999971s
eval rate:            8.93 tokens/s
>>> Send a message (/? for help)

Nisam baš očekivao da ću ovo lajv da uhvatim ali mi je drago da jesam!

Mislim, okej: ume da računa ali nije baš pametan. Ovo je i nešto što bih očekivao zato što mi se čini da sam čitao da manji modeli imaju solidan rezon ali im činjenice nisu baš na mestu pa tako pokida matematiku i vi vidite kako je tačno izračunao rezultat (50) ali je na kraju odlučio da su 56 - 6 zapravo 40 a ne 50 zato što eto, cena banana u Mirijevu pala 7% danas pa je model hteo da prati trendove. Biće bolje u novijoj verziji zar ne?

Korisni saveti #

Testirajte sve modele sa llama-bench pre nego što ih pokušate koristiti. Probajte različite vrednosti za -ngl - ne mora sve na GPU, ponekad je mešoviti pristup bolji, barem po onome što čitam na internetu. Napominjem da testovi često traju vrlo vrlo vrlooooooooooooooooooooo dugo.

Lokalni AI neće zameniti Claude ili Gemini za kompleksne zadatke, ali za svakodnevne stvari poput generisanja koda, objašnjenja, brze provere? Potpuno je dovoljan. Verovatno ovi modeli mogu da se koriste kao primitivni agenti na računaru kroz neki VSCode OSS ili helix (koristim oba programa trenutno pa njih pratim)?

p.s. Kuku vama ako krenete da koristite Claude Opus 4.6 za kodiranje i programiranje. Nisam ga koristio pre tako da je taj model prvi dodir sa proizvodima te kompanije. Toliko je dobar da sam trošio tokene u prvih 15-20 minuta i onda bih čekao satima da dobijem nove u okviru pretplate koju sam mogao da priuštim. Claude Opus 4.6 je razlog zašto sam odlučio da napravim ovaj eksperiment. Ironično, testirao sam taj i Sonnet 4.6 model time što su mi proveravali ovaj članak (gutam slova non-stop, AI mi baš pomaže da proveravam tekstove,). Toliko je dobar da sam zabrinut pomalo za sve nas =)

Za sam kraj #

Zabavan eksperiment. Nastaviću da istražujem ali nisam siguran koliko na mom hardveru ima smisla da zamenim klasičnu pretragu sa ovakvim modelima sve dok imam pristup internetu. Bez interneta je potpuno druga priča.

Na primer, još uvek nisam kvantifikovao koliko je i da li bolje da koristite preuzetu Wikipedia bazu osnovnih članaka ili neki od ovih manjih modela. Verujem da u kategoriji ovako malih modela, Wikipedija je za činjenice a LLM za razmišljanje. Po ovim testovima mi deluje kao da su oni jedan novčić: Wikipedia je jedna strana sa činjenicama, LLM modeli su druga strana medalje sa halucinacijama ali imaju pravi tok razmišljanja. Npr. ako vas interesuje bash onda na Wikipedia stranama naučite sve što možete a LLM vam pomaže u pisanju skripti.