# Ornith 35B MoE at 262K on RX 6800M: ROCm vs Vulkan – VelsTech Lab

> Tested Ornith 1.5 35B-A3B MoE at 262K on RX 6800M – ROCm 25.6 tok/s vs Vulkan 19.6 tok/s decode, 83 tok/s prompt, with 28 CPU experts and q8 KV.

*Source: https://velstech.net/ornith-35b-moe-262k-rocm-vs-vulkan.hi (Hindi translation of https://velstech.net/ornith-35b-moe-262k-rocm-vs-vulkan) · Updated: 2026-08-27*

*Markdown version. [Read the interactive guide](https://velstech.net/ornith-35b-moe-262k-rocm-vs-vulkan.hi). English Markdown: https://velstech.net/ornith-35b-moe-262k-rocm-vs-vulkan.md.*

---

🧪 VelsTech Lab दूसरा मापा गया Lab: वही 12GB RX 6800M, वही q8 KV, लेकिन 28 CPU experts और 262K context window वाला 35B MoE। छोटा prompt, विशाल KV reservation।

🔧 क्या यह आपके GPU में fit होगा?

[LLM VRAM Calculator](https://velstech.net/llm-vram-calculator) – 262K पर weights + KV आपके quantization के लिए · [GPU AI Performance Calculator](https://velstech.net/gpu-ai-calculator) – offload से पहले tok/s upper bound।

[कैलकुलेटर खोलें →](https://velstech.net/llm-vram-calculator)

## हमने क्या टेस्ट किया

- 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 mmap warning)

- 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 999 force किया इसलिए --fit ignore हो गया। 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](https://velstech.net/llm-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](https://velstech.net/gpu-ai-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](https://velstech.net/qwen-27b-ridge-rocm-vs-vulkan) – active params vs context trade, एक ही card, दोनों engines।

🧪 VelsTech Lab – MoE vs dense अगला

हम 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 पढ़ें →](https://velstech.net/qwen-27b-ridge-rocm-vs-vulkan)

---

*VelsTech – https://velstech.net/ornith-35b-moe-262k-rocm-vs-vulkan.hi.md*
