🧪 VelsTech Lab क्या 12 GB mobile GPU पर 27B dense model चलाना असल में काम कर सकता है? मैंने Qwen3.8 27B GSQ-RCO के दो quants – IQ2_XS (MTP draft head के साथ) और IQ3_S – को RX 6800M पर साथ-साथ चलाया। कौन-सा quant चुनना है यह तय करता है कि आपको कितना context और कितनी speed मिलेगी – और llama.cpp का एक flag गलती ने IQ3_S run से चुपचाप 92% context छीन लिया।

🔧 पहले अपना fit खुद चेक करें

LLM VRAM Calculator – क्या आपकी VRAM में 27B IQ2/IQ3 + आपका context फिट होगा? · GPU AI Performance Calculator – चलाने से पहले कितने tok/s मिलेंगे, अनुमान लगाएँ।

कैलकुलेटर खोलें →

टेस्ट मशीन

System details पैनल: ASUS ROG Strix G513QY, Ryzen 9 5900HX, 32 GB RAM, AMD Radeon RX 6800M, Ubuntu 26.04
टेस्ट मशीन – 12 GB RDNA2 mobile GPU वाला 2021 का गेमिंग लैपटॉप।

कैसे चलाया

Run 1 – IQ2_XS (MTP tensors के साथ)

export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH
llama-server \
 -m /home/user-name/models/Qwen3.8-27B-GSQ-RCO-IQ2_XS-mtp.gguf \
 -ngl 999 \
 --cache-type-k q8_0 \
 --cache-type-v q8_0 \
 -fa on \
 --fit on \
 --reasoning-preserve \
 --jinja

Run 2 – IQ3_S

export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH
llama-server \
 -m /home/user-name/models/Qwen3.8-27B-GSQ-RCO-IQ3_S.gguf \
 -ngl 999 \
 --cache-type-k q8_0 \
 --cache-type-v q8_0 \
 -fa on \
 --fit on \
 --reasoning-preserve \
 --jinja

नतीजे

Metric               IQ2_XS-mtp          IQ3_S           Delta
──────────────────────────────────────────────────────────────
Decode (eval)        20.77 tok/s         18.97 tok/s     +9.5%
Decode (tg)          20.70 tok/s         18.93 tok/s     +9.4%
Prompt eval          113.51 tok/s        178.32 tok/s    -36%  (IQ3_S तेज़)
Context fitted       52,736 tok          4,096 tok       12.9×
VRAM used            11.57 / 12.87 GB    12.52 / 12.87 GB
                     (90%)               (97%)
Graphs reused        124                 252
Chat UI avg speed    20.9 t/s            19.0 t/s

मुख्य बात: IQ2_XS ने decode जीती – वो भी 13× ज़्यादा context लेकर – और बड़ा KV cache decode को धीमा करता है, तेज़ नहीं, तो ये जीत असली है। IQ3_S प्रति token ज़्यादा bytes पढ़ता है (~3 bpw vs ~2 bpw) और ये कार्ड bandwidth-bound है; यही अंतर ~1.8 tok/s बनकर दिखता है। असली सरप्राइज़ prompt eval है: IQ3_S इनपुट 57% तेज़ प्रोसेस करता है (178 vs 114 tok/s) – 2 bpw वाले i-quants को compute-bound prompt pass में भारी dequant/codebook खर्च देना पड़ता है, जबकि bandwidth-bound decode में रैंकिंग पलट जाती है।

प्रूफ – chat runs

llama.cpp chat UI में IQ2_XS model का परिचय, 52.74K में से 498 context इस्तेमाल, औसत speed 20.9 tokens प्रति सेकंड
IQ2_XS: 498 / 52.74K context इस्तेमाल, chat UI में 20.9 t/s औसत।
llama.cpp chat UI में IQ3_S model का परिचय, 4.10K में से 711 context इस्तेमाल (17 प्रतिशत), औसत speed 19.0 tokens प्रति सेकंड
IQ3_S: जवाब लंबा आया, पर भरे जाने को context सिर्फ 4.10K था – 19.0 t/s।

VRAM – चुपचाप सबसे बड़ी बात

GPU मॉनिटर: AMD Radeon RX 6800M वीडियो मेमोरी 11.57 / 12.87 GB, 90 प्रतिशत
90% VRAM पर IQ2_XS – weights प्लस 52K q8_0 KV cache, ~1.3 GB जगह बची।
GPU मॉनिटर: AMD Radeon RX 6800M वीडियो मेमोरी 12.52 / 12.87 GB, 97 प्रतिशत
सिर्फ डिफ़ॉल्ट 4K context के साथ भी IQ3_S 97% VRAM पर – weights ही कार्ड भर देते हैं।

लॉग्स ने क्या कहा – और क्या टूटा

  1. Run 2: W common_fit_params: failed to fit params to free device memory: n_gpu_layers already set by user to 999, abort--fit खुद -ngl और context तय करना चाहता है; हाथ से -ngl 999 फ़ोर्स करने पर वो मान ही जाता है, इसलिए IQ3_S डिफ़ॉल्ट 4096-token context पर रुक गया। (नीचे follow-up में दिखता है कि -ngl हटाना इस model पर असल में और बुरा है – इसे फ़ोर्स करके ही रखें।)
  2. Run 1: पंद्रह W model has unused tensor blk.64.* लाइनें – पूरा extra transformer block (attention + FFN + nextn.* MTP head, ~348 MB) ignore हो गया क्योंकि --spec-type draft-mtp flag पास ही नहीं हुआ। इस run में MTP head सिर्फ़ dead weight है; उसे चालू करना अगला साफ़-सुथरा टेस्ट है (Tiel-Coder 35B-A3B पर इसने +14.6% दिए थे)।
  3. दोनों runs: W srv llama_server: CORS is set to allow all origins ('*') and no API key is set – जब तक server सिर्फ़ 127.0.0.1 पर bind है तब तक बेहतर है; API key के बिना ये port कभी नेटवर्क पर न खोलें।
  4. दोनों runs: n_ctx_slot = 52736 / 4096, kv_unified = 'true' – 4 slots पर unified KV; 52K वो आँकड़ा है जो --fit ने IQ2_XS weights के साथ फिट होते हुए साबित किया।

Follow-up: --fit को चुनने दिया, और MTP चालू किया

पहले राउंड के दो खुले सवालों के जवाब में मैंने दोनों configs दोबारा चलाए। दोनों जवाब उम्मीद से हटकर निकले।

IQ3_S बिना -ngl – auto-fit

prompt eval:   3329.43 ms / 373 tokens (   8.93 ms/tok,  112.03 tok/s)
eval (decode): 45080.30 ms / 330 tokens ( 137.02 ms/tok,    7.30 tok/s)
context:       n_ctx_slot = 4096  (fit ने बढ़ाया ही नहीं)
W resolve_fused_ops: layer 0 is assigned to device CPU but fused
  Gated Delta Net (chunked) is assigned to device ROCm0
W fused Gated Delta Net (chunked) not supported, set to disabled

-ngl 999 हटाने से हालत नाटकीय रूप से खराब हो गई: 7.30 tok/s – manual सेटिंग का एक-तिहाई भी नहीं। --fit ने layer 0 को CPU पर डाल दिया और context डिफ़ॉल्ट 4K से बढ़ाया ही नहीं। ये warning ये भी बताती है कि model आख़िर है क्या: Qwen3.8 एक Gated Delta Net (GDN) hybrid है – ज़्यादातर layers linear attention इस्तेमाल करती हैं, और ROCm पर fused chunked-GDN kernel नहीं है, इसलिए CPU/GPU हाइब्रिड विभाजन throughput गिरा देता है। इस कार्ड पर IQ3_S के लिए -ngl 999 (सारी layers GPU पर, छोटा context स्वीकार करें) ही सही config है – मेरी असली "गलती" ही सही जवाब निकली।

IQ2_XS --spec-type draft-mtp के साथ

prompt eval:   3568.06 ms / 373 tokens (   9.57 ms/tok,  104.54 tok/s)
eval (decode): 8148.60 ms / 189 tokens (  43.34 ms/tok,   23.07 tok/s)
generate:      103 tokens @ 26.73 tok/s (tg), 26.99 tok/s (tg_3s)
draft:         acceptance = 0.48052 (111 accepted / 231 generated), mean len = 2.44
context:       n_ctx_slot = 4096  (--fit aborted: -ngl 999 + draft context)
W llama_sampler_backend_support: device 'ROCm0' does not have
  support for op TOP_K needed for sampler 'top-k'  (×4)

MTP head चालू है: 23.07 tok/s (peak 26.7) बनाम इसके बिना 20.77। दो बातें इसे साफ़ +11% नहीं रहने देतीं: MTP वाले run को सिर्फ़ 4K context मिला (draft context उस headroom को खा जाता है जिसे --fit KV पर खर्च करता, और -ngl 999 सेट होने पर fit मान जाता है), और छोटा KV cache decode को बेहतर दिखाता है – बराबर context पर शुद्ध MTP लाभ +5–8% के करीब है। चारों TOP_K warnings भी मायने रखते हैं: ROCm draft sampler का top-k GPU पर नहीं चला सकता, जिससे acceptance 48% पर अटक सकती है (Tiel-Coder पर 54.7%)। फिर भी इस कार्ड पर अब तक का सबसे तेज़ IQ2_XS नंबर।

निष्कर्ष

12 GB RX 6800M पर इस 27B के लिए IQ2_XS ही practical choice है: 52K context पर ~21 tok/s, और --spec-type draft-mtp के साथ ~23 tok/s अगर 4K context चलेगा (या fit/MTP के आपस में पटने का इंतज़ार करें)। IQ3_S कागज़ पर बेहतर quant है पर इस कार्ड के बस से बाहर: असली context से पहले ही 97% VRAM, और "proper" auto-fit रास्ता एक जाल है – layer 0 CPU पर चला जाता है और decode 7.3 tok/s पर गिरकर रुक जाता है। अगर IQ3_S चलाना ही है तो -ngl 999 फ़ोर्स करें और 4K मान लें। अब खुले सवाल hardware के नहीं, software stack के हैं: ROCm के लिए fused GDN kernel और MTP sampler के लिए TOP_K support – यही इस 3 bpw quant और बेहतर draft acceptance को खोलेंगे।