🧪 VelsTech Lab दूसरा मापा गया Lab: वही 12GB RX 6800M, वही q8 KV, लेकिन 28 CPU experts और 262K context window वाला 35B MoE। छोटा prompt, विशाल KV reservation।
LLM VRAM Calculator – 262K पर weights + KV आपके quantization के लिए · GPU AI Performance Calculator – offload से पहले tok/s upper bound।
कैलकुलेटर खोलें →हमने क्या टेस्ट किया
- GPU: RX 6800M 12GB (RDNA2, ~384 GB/s) – वही card जैसा Qwen 27B 16K test में, इसलिए MoE vs dense hardware पर apples-to-apples है
- Model:
Ornith-1.5-35B-A3B-AD-Q5_K-Q4_K.gguf– 35B total, 3B active (A3B MoE), Q5_K + Q4_K mixed quant - MoE CPU offload:
--n-cpu-moe 28– 28 experts को CPU पर force किया गया (इसलिएtensor overrides to CPU with mmapwarning) - Context:
-c 262144 -fa on --cache-type-k q8_0 --cache-type-v q8_0,n_slots=1, kv_unified=false– एक slot, 262K KV pool reserved - Other:
-ngl 999 --jinja --reasoning-preserve --parallel 1 --temp 0.6 --top-p 0.95 --top-k 20,n_threads=8 - Builds: Run 1 –
llama.cpp/build/bin/llama-server(ROCm); Run 2 –llama.cpp_vulkan/build-vulkan/bin/llama-server(Vulkan)
हमने इसे कैसे चलाया
llama-server \ -m Ornith-1.5-35B-A3B-AD-Q5_K-Q4_K.gguf \ -ngl 999 --n-cpu-moe 28 \ --cache-type-k q8_0 --cache-type-v q8_0 \ -c 262144 -fa on --jinja --reasoning-preserve \ --parallel 1 --temp 0.6 --top-p 0.95 --top-k 20
दोनों runs में वही 335-token prompt (progress 322→331), ~274 बनाम 307 tokens generate। Server: listening on 127.0.0.1:8080, llama threadpool n_threads=8।
हमने क्या मापा
Run Prompt eval Decode (tg) Total Graphs ───────────────────────────────────────────────────────────────────────────────────────────── ROCm 3995 ms /335 tok = 11.93 ms/tok = 83.84 tok/s 100:25.16 179:25.52 257:25.60 → 25.62 tok/s 14.65s /609 tok 272 Vulkan 4029 ms /335 tok = 12.03 ms/tok = 83.13 tok/s 100:19.65 160:19.66 219:19.65 → 19.66 tok/s 19.59s /642 tok 305
Takeaway: 262K + MoE पर ROCm decode में ~30% तेज़ है (25.62 बनाम 19.66)। Prompt eval लगभग बराबर ~83 tok/s – 335 tokens 262K क्षमता की तुलना में trivial है, इसलिए prefill context को stress नहीं करता। Total wall time decode को दर्शाता है: ~600 tok के लिए ROCm 14.65s बनाम Vulkan 19.59s।
Logs ने वास्तव में क्या कहा – और क्या टूटा
W common_fit_params: failed to fit params to free device memory: n_gpu_layers already set by user to 999, abort(ROCm run) – Qwen जैसा ही: आपने-ngl 999force किया इसलिए--fitignore हो गया। Fix:-ngl 999हटाएँ और fitted layers को log करें, या स्पष्ट रूप से-ngl 60और--n-cpu-moeको साथ सेट करें।W llama_model_loader: tensor overrides to CPU are used with mmap enabled - consider using --load-mode none for better performance–--n-cpu-moe 28के साथ आप tensors को mmap कर रहे हैं जो तुरंत CPU RAM में copy हो जाते हैं। MoE CPU offload के लिए--load-mode noneजोड़ें।kv_unified=false, n_slots=1, n_ctx_slot=262144– एक slot, 262K KV pool reserved है भले ही prompt 335 tokens का हो। यही reservation कारण है कि आपको q8 KV चाहिए – 262K पर f16 ~2× बड़ा होगा और संभवतः OOM हो जाएगा। यहाँ decode speed pool reserved होने के साथ है, भरा होने के साथ नहीं।
यह calculators पर कैसे map होता है
Weights ~35B mixed Q5/Q4 ≈ 13–14 GB (Q5 0.66 + Q4 0.61 averaged)। MoE के लिए 262K पर q8 KV सरल 2×layers×kv_heads×head_dim×2×context नहीं है – MoE प्रति token KV share करता है, इसलिए हमारा VRAM Calculator यदि आप 35B दर्ज करते हैं तो overestimate करता है; 3B active + 28 CPU experts को अलग दर्ज करें या reduced KV के साथ custom model उपयोग करें। 3B active पर भी, 262K q8 ~262K × ~0.5KB → ~130 GB होगा यदि पूरी तरह resident – आप resident नहीं हैं, आप MoE-sparse + q8 + CPU offload हैं, इसलिए 19–25 tok/s plausible है, GPU AI Performance Calculator से 60 tok/s bound नहीं जो पूर्ण VRAM मानता है।
हम कैसे calculate करते हैं – संख्याओं के पीछे के formulas
VRAM: LLM VRAM Calculator
weights = params × bytes_per_weight / GiB kv_per_token = 2 × layers × kv_heads × head_dim × 2 bytes (f16) or ×1 (q8) kv_cache = kv_per_token × context × batch / GiB
262K पर MoE के लिए KV प्रति token के लिए active params का उपयोग करें, total 35B नहीं, या custom model toggle करें।
Speed: GPU AI Performance Calculator
decode_tok/s ≈ (memory_BW × 0.8) / bytes_per_token
MoE प्रति token कम bytes decode करता है (active 3B, 35B नहीं), इसलिए bound 35B dense से अधिक है। आपका 25 tok/s bound का ~40% है – अंतर CPU MoE + PCIe का है।
निष्कर्ष
Ornith 35B MoE 262K पर 12GB पर चलता है q8 KV + 28 CPU experts के साथ, लेकिन आप decode में कीमत चुकाते हैं: ROCm 25.6 tok/s छोटे उत्तरों के लिए usable है, Vulkan 19.6 यहाँ धीमा है (Qwen 16K के विपरीत)। दोनों को optimal के लिए --load-mode none चाहिए और -ngl 999 नहीं। अगला Lab एक ही RX 6800M पर MoE vs dense होगा: यह Ornith 35B-A3B (3B active) बनाम Qwen 27B dense 16K – active params vs context trade, एक ही card, दोनों engines।
हम Ornith 35B MoE (3B active, 262K) की तुलना Qwen 27B dense (27B, 16K) से एक ही RX 6800M पर करेंगे – ROCm बनाम Vulkan, q8 बनाम f16 KV, fitted layers logged के साथ।
Qwen 27B 16K test पढ़ें →