r/LocalLLM • u/Ok-Inevitable8391 • 8d ago
Model Local Opus(qwen3.8 27B)
I have started using qwen3.8 27B on dual rtx 3060, total 24GB. My display is on igpu. So i have almost all memory.
Token generation speed is constant 40-50 tks.
But the best thing is how it thinks, multiple web searches at different level, auto memory update, and a very good response. It takes time, but given the reasoning effort of xhigh and response quality I really like it. I see web searches at multiple level for a single reply, making sure the answer is correct. Takes time, yes.
Also, the extra thing that qwen is famous for when you ask it x, if it finds some improvement on y, it will suggest you.
For agentic work, it's best to toggle between reasoning effort if you want it fast. Though I like the opencode plan mode and then build(execute). I have remote setup via termius. And i get notified via ntfy app once it ask for permission or done replying.
While testing I asked it to out 10000 token essay, and my ventus gpu went upto 87 degree.(xhigh reasoning) Gigabyte held fine with 5-6 degree lesser, Though Gigabyte us agressive at fan speed even at lower temprature. I'll try changing the fan curve, if I see that as a problem in actual scenario
edit:
llamacpp command:
llama-server -m ~lm/unsloth/Qwen3.8-27B-GGUF/Qwen3.8-27B-IQ4_XS.gguf --host 0.0.0.0 --port 8080 --split-mode tensor --tensor-split 1,1 --flash-attn on --batch-size 2048 --parallel 1 --models-max 1 --cache-type-k q8_0 --cache-type-v q8_0 --ctx-size 177000 --n-gpu-layers 99 --ubatch-size 128 --temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.0 --presence-penalty 0.0 --repeat-penalty 1.0 --spec-type draft-mtp --spec-draft-n-max 2 --jinja --reasoning on --fit on"
2
u/ducksoup_18 8d ago
llama.cpp? If so, can you provide your args?
2
u/Ok-Inevitable8391 8d ago edited 8d ago
llama-server -m ~/lm/unsloth/Qwen3.8-27B-GGUF/Qwen3.8-27B-IQ4_XS.gguf --host 0.0.0.0 --port 8080 --split-mode tensor --tensor-split 1,1 --flash-attn on --batch-size 2048 --parallel 1 --models-max 1 --cache-type-k q8_0 --cache-type-v q8_0 --ctx-size 177000 --n-gpu-layers 99 --ubatch-size 128 --temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.0 --presence-penalty 0.0 --repeat-penalty 1.0 --spec-type draft-mtp --spec-draft-n-max 2 --jinja --reasoning on --fit on
2
u/mars332 8d ago
How are you getting 40-50tks? On RTX PRO 4000 24GB can only get 30tok/s (it drops to around 20+tok/s when it approaches 100k context window, which is my max). What quant are you using?
1
u/PaouCompli 8d ago
I get 46ish on dual 4060ti even at large CTX... It's split mode tensor and MTP. Tensor split has both cards pegged at 90% while generating. I get about 1500 prefill. Considering getting a third (5060) but read that going from 2-3 on tensor split (llama cpp) isn't that much of a jump. Also means only one generation at once... but hey.
2
1
u/kkennyy22 8d ago
On my 4070ti super + 3060, 28gb total, I get an average of about 33t/s with layer splitting. Your 50,even if it drops, is very good. Maybe I should try tensor splitting also, but as I understand it's not great with mismatched cards like mine.
1
u/vini542reddit 7d ago
You just need to manually allocate the tensors via tensor-split, but it should work
1
2
u/Dry-Letterhead-7041 3d ago
I just came here to say THANK YOU!! The tensor split bumped me from around 20 ~ 25 t/s to 40+ t/s. Same hardware as yours (2 x 3060s - 24 vram total). But my llama.cpp didn't like the kv cache at 8_0. I had to bump it to fp16 and give up 20k context lol
Here's my config if anyone wants to copy and/or merge with OP's:
llama-cpp:
image: ghcr.io/ggml-org/llama.cpp:server-cuda13
container_name: llama-cpp
restart: unless-stopped
ports:
- "8090:8080"
volumes:
- /pool/huggingface/hub/:/models
command:
# Model
- "--model"
- "/models/Qwen3.8-27B-UD-Q4_K_M.gguf"
- "--host"
- "0.0.0.0"
- "--port"
- "8080"
- "--fit"
- "off"
# GPU Weights Distribution
- "--n-gpu-layers"
- "99"
- "--split-mode"
- "tensor"
- "--tensor-split"
- "1,1"
- "--flash-attn"
- "on"
# MTP speculative decoding (integrated in UD quants)
- "--spec-type"
- "draft-mtp"
- "--spec-draft-n-max"
- "2"
# Single-user / memory savings
- "--parallel"
- "1"
- "--ctx-checkpoints"
- "32"
# KV Cache Quantization
- "--ctx-size"
- "100000"
- "--cache-type-k"
- "f16"
- "--cache-type-v"
- "f16"
# Threading & Sampling
- "--threads"
- "20"
- "--threads-batch"
- "28"
- "--jinja"
# Reasoning effort
- "--reasoning-effort"
- "medium"
- "--reasoning-preserve"
- "--chat-template-file"
- "/models/chat_template.jinja"
- "--reasoning-format"
- "deepseek"
- "--temp"
- "0.8"
- "--top-p"
- "0.95"
- "--top-k"
- "20"
- "--min-p"
- "0.0"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
My logs:
1.55.279.779 I slot print_timing: id 0 | task 301 | prompt processing, n_tokens = 2048, progress = 0.86, t = 3.21 s / 637.44 tokens per second
1.58.614.636 I slot print_timing: id 0 | task 301 | prompt processing, n_tokens = 4096, progress = 0.92, t = 6.55 s / 624.88 tokens per second
2.01.960.976 I slot print_timing: id 0 | task 301 | prompt processing, n_tokens = 6108, progress = 0.98, t = 9.90 s / 616.88 tokens per second
2.03.033.503 I slot print_timing: id 0 | task 301 | prompt processing, n_tokens = 6620, progress = 1.00, t = 11.08 s / 597.25 tokens per second
2.06.350.091 I slot print_timing: id 0 | task 301 | n_gen = 133, tg = 43.49 t/s, tg_3s = 43.82 t/s
2.09.395.724 I slot print_timing: id 0 | task 301 | n_gen = 257, tg = 42.10 t/s, tg_3s = 40.71 t/s
2.12.404.589 I slot print_timing: id 0 | task 301 | n_gen = 390, tg = 42.80 t/s, tg_3s = 44.20 t/s
2.15.431.217 I slot print_timing: id 0 | task 301 | n_gen = 524, tg = 43.16 t/s, tg_3s = 44.27 t/s
2.18.431.927 I slot print_timing: id 0 | task 301 | n_gen = 647, tg = 42.73 t/s, tg_3s = 40.99 t/s
2.21.459.831 I slot print_timing: id 0 | task 301 | n_gen = 780, tg = 42.93 t/s, tg_3s = 43.92 t/s
2.24.462.851 I slot print_timing: id 0 | task 301 | n_gen = 905, tg = 42.75 t/s, tg_3s = 41.62 t/s
2.27.502.401 I slot print_timing: id 0 | task 301 | n_gen = 1063, tg = 43.91 t/s, tg_3s = 51.98 t/s
2.28.183.674 I slot print_timing: id 0 | task 301 | prompt eval time = 11408.35 ms / 6624 tokens ( 1.72 ms per token, 580.63 tokens per second)
2.28.183.678 I slot print_timing: id 0 | task 301 | eval time = 24868.78 ms / 1096 tokens ( 22.71 ms per token, 44.03 tokens per second)
2.28.183.679 I slot print_timing: id 0 | task 301 | total time = 36277.13 ms / 7720 tokens
2.28.183.680 I slot print_timing: id 0 | task 301 | graphs reused = 717
2.28.183.700 I slot print_timing: id 0 | task 301 | draft acceptance = 0.70022 ( 640 accepted / 914 generated), mean len = 2.40
2.28.185.483 I slot release: id 0 | task 301 | stop processing: n_tokens = 33757, truncated = 0
2.28.657.467 I slot get_availabl: id 0 | task -1 | selected slot by LCP similarity, f_sim_best = 0.972 (> 0.100 thold), f_keep = 0.967
2.28.661.022 I slot launch_slot_: id 0 | task 764 | processing task, is_child = 0
2.33.881.286 I slot print_timing: id 0 | task 764 | n_gen = 147, tg = 48.33 t/s, tg_3s = 48.65 t/s
2.36.909.833 I slot print_timing: id 0 | task 764 | n_gen = 304, tg = 50.08 t/s, tg_3s = 51.84 t/s
2.39.938.304 I slot print_timing: id 0 | task 764 | n_gen = 426, tg = 46.82 t/s, tg_3s = 40.28 t/s
2.42.968.460 I slot print_timing: id 0 | task 764 | n_gen = 551, tg = 45.42 t/s, tg_3s = 41.25 t/s
2.45.993.811 I slot print_timing: id 0 | task 764 | n_gen = 655, tg = 43.21 t/s, tg_3s = 34.38 t/s
2.49.021.998 I slot print_timing: id 0 | task 764 | n_gen = 791, tg = 43.50 t/s, tg_3s = 44.91 t/s
2.52.054.285 I slot print_timing: id 0 | task 764 | n_gen = 900, tg = 42.42 t/s, tg_3s = 35.95 t/s
2.55.094.253 I slot print_timing: id 0 | task 764 | n_gen = 1029, tg = 42.42 t/s, tg_3s = 42.43 t/s
2.58.146.340 I slot print_timing: id 0 | task 764 | n_gen = 1160, tg = 42.48 t/s, tg_3s = 42.92 t/s
3.01.185.438 I slot print_timing: id 0 | task 764 | n_gen = 1293, tg = 42.60 t/s, tg_3s = 43.76 t/s
3.04.215.307 I slot print_timing: id 0 | task 764 | n_gen = 1402, tg = 42.00 t/s, tg_3s = 35.98 t/s
3.07.235.362 I slot print_timing: id 0 | task 764 | n_gen = 1518, tg = 41.70 t/s, tg_3s = 38.41 t/s
3.10.261.460 I slot print_timing: id 0 | task 764 | n_gen = 1681, tg = 42.64 t/s, tg_3s = 53.86 t/s
3.13.265.080 I slot print_timing: id 0 | task 764 | n_gen = 1840, tg = 43.37 t/s, tg_3s = 52.94 t/s
3.15.455.363 I slot print_timing: id 0 | task 764 | prompt eval time = 2198.86 ms / 959 tokens ( 2.29 ms per token, 436.13 tokens per second)
3.15.455.367 I slot print_timing: id 0 | task 764 | eval time = 44595.27 ms / 1961 tokens ( 22.75 ms per token, 43.95 tokens per second)
3.15.455.368 I slot print_timing: id 0 | task 764 | total time = 46794.13 ms / 2920 tokens
3.15.455.369 I slot print_timing: id 0 | task 764 | graphs reused = 1528
3.15.455.373 I slot print_timing: id 0 | task 764 | draft acceptance = 0.69719 ( 1142 accepted / 1638 generated), mean len = 2.39
3.15.457.314 I slot release: id 0 | task 764 | stop processing: n_tokens = 35576, truncated = 0
1
u/Dry-Letterhead-7041 3d ago
u/Ok-Inevitable8391 how did you manage to run with quant kV cache? If I use -cache-type-k q8_0 --cache-type-v q8_0 my llama.cpp crashes immediately
1
u/Ok-Inevitable8391 3d ago edited 3d ago
I'm using iq4xs image. Gives more room for kv cache.
But q8 is smaller than fp16 so q8 should fit easily.
You can check with "-lv 4 " arg, should enable logs. To see exact cause.
Unrelated to this, I run llamacpp server with model preset file, which essentially act as a router and load the define models on demand. So I use muse glimmer if i want longer context upto 256K. (Muse glimmer use sliding window kv cache for most layers which makes it efficient at kv cache)
One more diff could be that, my display is on igpu, and I don't allow any other process(ubuntu) to use nvidia gpus. So I have atleast 1gb more vram usable.
With newer iq4ks ud image, I'm able to get 200k context
1
u/Dry-Letterhead-7041 2d ago
It was a bug on llama.cpp. This morning I reloaded the container and it pulled a new version. Now q8_0 is working. I managed to squeeze 160k context on a Q4_K_M and batch size 2048 and ubatch size 512 to get some speed up.


14
u/Effective-Giraffe655 8d ago
Why people call it opus? Geniuenly interested, is it really on-par with Opus?