🧪 VelsTech Lab ஒரே கார்டு, ஒரே என்ஜின்கள், அளவிடுவதற்கு இரண்டு எதிர் வழிகள்: 16K-ல் Qwen 27B dense vs 262K-ல் Ornith 35B-A3B MoE (3B active), இரண்டும் 12GB RX 6800M-ல் q8 KV. யார் வெல்கிறார் என்பது நீங்கள் கேட்பதையும் எவ்வளவு உருவாக்குகிறீர்கள் என்பதையும் பொறுத்தது.
MoE: active அளவுருக்களை (3B, 35B அல்ல) + தனிப்பயன் KV-ஐ உள்ளிடவும். Dense: முழு அளவுருக்களை உள்ளிடவும். q8_0 vs f16-ஐ நேர்மையாக வைத்திருங்கள்.
இரண்டு ரன்களும் பக்கவாட்டில்
ஒரே GPU RX 6800M 12GB (~384 GB/s), ஒரே q8_0 KV, ஒரே n_threads=8, ஒரே 335-373 prompt டோக்கன்கள். மாடல் + context + MoE offload மட்டுமே வேறுபடுகின்றன.
Model Params Context KV type Offload Build Prompt eval Decode tg Total ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Qwen 27B Ridge 27B dense 16K q8_0 -ngl 999 (+fit abort) ROCm 1713 ms /373 = 217.6 tok/s 18.12 tok/s 14.23s /601 tok 3.7bpw Ridge Vulkan 2493 ms /373 = 149.6 tok/s 21.84 tok/s 13.57s /616 tok Ornith 35B-A3B MoE 35B/3B* 262K q8_0 --n-cpu-moe 28 ROCm 3995 ms /335 = 83.8 tok/s 25.62 tok/s 14.65s /609 tok Q5_K/Q4_K mix kv_unified=false Vulkan 4029 ms /335 = 83.1 tok/s 19.66 tok/s 19.59s /642 tok * 35B total, 3B active – MoE decodes 3B, not 35B.
முதல் இரண்டு வரிசைகள்: Qwen 27B 16K முழு அறிக்கை; கடைசி இரண்டு: Ornith 35B 262K முழு அறிக்கை. அனைத்தும் -c ஒதுக்கப்பட்ட KV, fa on, 373/335 prompt டோக்கன்கள், ~600 gen டோக்கன்கள்.
உண்மையில் என்ன நடக்கிறது
- Decode என்பது MoE-வின் வெற்றி, ஆனால் எல்லா இடங்களிலும் அல்ல. 16K dense-ல் Vulkan +20% வெல்லும் (21.84 vs 18.12). 262K MoE-ல் ROCm +30% வெல்லும் (25.62 vs 19.66). ஒரே கார்டு, எதிர் என்ஜின் வெற்றி – 262K-ல் bottleneck தூய VRAM BW (dense 27B) இலிருந்து CPU-MoE + PCIe (CPU-ல் 28 experts) ஆக மாறுகிறது.
- Prompt eval prompt அளவால் அல்ல, context ஒதுக்கீட்டால் சரிகிறது. Qwen 16K prompt 217 tok/s vs Ornith 262K prompt 83 tok/s – ஒரே 335 டோக்கன்கள், ஆனால் Ornith ஒரு 262K KV pool-ஐ (
kv_unified=false, n_slots=1) ஒதுக்குகிறது, அது prefill bookkeeping-க்கு செலவாகிறது. Prompt குறுகியதாக இருந்தாலும்-c-க்கு நீங்கள் பணம் செலுத்துகிறீர்கள். - MoE ஒவ்வொரு டோக்கனுக்கும் மிகக் குறைவான பைட்டுகளை decode செய்கிறது. Dense ஒவ்வொரு டோக்கனுக்கும் 27B எடைகளை decode செய்கிறது; MoE ~3B active-ஐ decode செய்கிறது. அதனால்தான் 262K-ல் Ornith 12GB-ல் 25.6 tok/s செய்ய முடிகிறது, அதேசமயம் Qwen 16K-ல் 18-21 செய்கிறது – மொத்தம் அல்ல, active தான் முக்கியம். எங்கள் GPU calculator bound
decode ≈ BW×0.8 / bytes_per_tokenஅனைத்தும் resident ஆக இருந்தால் ~30 tok/s கணிக்கிறது; 25.6-க்கான இடைவெளி CPU MoE + offload ஆகும். - இரண்டும்
-ngl 999-ஐ கட்டாயப்படுத்தியது →failed to fit params... abort.--fit onபுறக்கணிக்கப்பட்டது. அடுத்த Lab-ngl-ஐ நீக்கி fitted layers-ஐ log செய்யும், மேலும் MoE-க்கு--load-mode none-ஐ சேர்க்கும் (மேலும்tensor overrides to CPU with mmap-ஐ சரிசெய்கிறது).
VRAM கணக்கீடு – 12GB ஏன் இன்னும் இயங்குகிறது
Qwen 27B 3.7bpw: 27B ×0.4625 ≈12.5 GB எடைகள் + q8 KV 16K ≈2.2 GB + 6% overhead → ~15.6 GB (VRAM Calculator-இலிருந்து) – 12GB-க்கு அதிகமாக, எனவே partial offload 18-21 tok/s vs 30 tok/s bound-ஐ விளக்குகிறது.
Ornith 35B MoE 3B active: 35B ஆக எண்ணினால் Q5/Q4 கலவை ≈13-14 GB, ஆனால் ஒவ்வொரு டோக்கனுக்கான KV active 3B-உடன் அளவிடப்படுகிறது, எனவே naive ஆக dense என எண்ணினால் 262K q8 ≈262K×0.5KB ≈131 GB ஆகும். அதனால்தான் 28 experts-ஐ CPU-க்கு கட்டாயப்படுத்துகிறோம் – நீங்கள் resident அல்ல, நீங்கள் sparse. கால்குலேட்டரில் 35B அல்ல, 3B active + custom layers 48 / kv 4 / hd 128-ஐ உள்ளிடவும், அல்லது Custom model…-ஐ மாற்றவும்.
எப்படி கணக்கிடுகிறோம் – எண்களுக்குப் பின்னால் உள்ள சூத்திரங்கள்
VRAM
weights = params × bytes_per_weight / GiB kv_per_token = 2 × layers × kv_heads × head_dim × bytes kv_cache = kv_per_token × context × batch / GiB total = weights + kv_cache + (weights+kv)×0.06+0.25
MoE-க்கு, KV-க்கு மொத்த அளவுருக்கள் அல்ல, active அளவுருக்களைப் பயன்படுத்தவும். LLM VRAM Calculator → Custom model-ஐப் பார்க்கவும்.
வேக வரம்பு
decode_tok/s ≈ (memory_BW ×0.8) / bytes_per_token (weights + KV per token)
MoE bytes_per_token ≈ active 3B, dense ≈27B – எனவே பெரிய மொத்தம் இருந்தாலும் Ornith Qwen-ஐ விட வேகமாக இருக்க முடியும்.
எனவே 12GB கார்டில் எதைத் தேர்ந்தெடுக்க வேண்டும்?
- குறுகிய prompts + நீண்ட பதில்கள் (chat, 16K சாளரம்): Vulkan-ல் Qwen 27B dense (21.8 tok/s) சிறந்த chat அனுபவத்தை அளிக்கிறது.
- பெரிய context + MoE (262K சாளரம், 28 CPU experts): ROCm-ல் Ornith 35B MoE (25.6 tok/s) சாளரம் இருந்தாலும் decode-ல் வெல்லும், ஆனால்
--load-mode noneமற்றும் முதல் prompt-ல் பொறுமை (83 tok/s) தேவை. - அடுத்த மேம்படுத்தல்: இரண்டுக்கும்
-ngl 999இல்லாமை, fitted layers-ஐ log செய்வது, மற்றும் ஒவ்வொரு context-லும் q8 vs f16 KV-ஐ சோதிப்பது தேவை. அதுவே Lab #4.
முழு logs, கட்டளைகள் மற்றும் எச்சரிக்கைகள் இரண்டு மூல Labs-களிலும் உள்ளன – Qwen 16K-லிருந்து தொடங்கவும், பிறகு Ornith 262K, பிறகு இங்கே ஒப்பிடவும்.
Qwen 27B 16K → Ornith 35B 262K →