मैं RX 6800M पर Qwen3.8 27B का benchmark ले रहा था कि तब llama.cpp की एक warning ने 2.6× की speed गिराहट का असली कारण बता दिया, जो वरना समझ नहीं आ रही थी: fused Gated Delta Net (chunked) not supported. ये एक लाइन उस सबसे बड़ी software gap की झलक है जिसका सामना AMD को अगली पीढ़ी के language models के आते हुए करना होगा – और ज़्यादातर लोग ये समझेंगे भी नहीं, क्योंकि model चलता तो है। बस धीमा चलता है।
पूरे test logs और numbers: RX 6800M पर Qwen3.8 27B GSQ-RCO · auto-fit benchmark entry.
Benchmark database खोलें →वो warning जिससे सब शुरू हुआ
मैंने IQ3_S दूसरी बार चलाया, इस बार -ngl 999 फ़ोर्स करने के बजाय GPU/CPU split --fit को सौंप दिया। Decode 19.0 से गिरकर 7.3 tok/s रह गया। लॉग ने कारण बताया:
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
इन दो लाइनों में दो तथ्य छिपे हैं। पहला: Qwen3.8 सादा transformer नहीं है – यह standard attention layers के साथ Gated Delta Net (GDN) layers भी मिलाता है। दूसरा: llama.cpp के पास CUDA के लिए GDN का fast fused kernel है, पर ROCm पर कुछ भी नहीं। ज्यों ही fit algorithm ने GDN layer को छुआ, उसे fallback पर जाना पड़ा – और fallback तबाही से धीमा है।
Gated Delta Net आख़िर है क्या, आसान भाषा में
Standard attention हर नए token की तुलना हर पुराने token से करती है। यही history KV cache है – जो context बढ़ने पर बढ़ता है और आपकी VRAM खा जाता है। Linear attention कहती है: exact history भूल जाओ, उसकी जगह एक fixed-size running summary रखो। प्रति token लागत context के साथ बढ़ना बंद कर देती है; memory constant हो जाती है।
GDN उस summary का अभी का सबसे अच्छा नुस्खा है। दो ideas एक के ऊपर एक:
- Delta rule – नई जानकारी आने पर उसे memory में जोड़ो मत; summary का वो हिस्सा overwrite करो जिससे वह टकराती है – append log की जगह diff की तरह।
- Gating – एक सीखा हुआ per-channel volume knob जो तय करता है कि update का कितना हिस्सा लागू हो – ताकि layer तब state होल्ड भी कर सके जब कुछ बदल नहीं रहा।
अकेले चलने पर linear attention details भूल जाती है। इसलिए गंभीर नए models सब hybrid हैं: हर एक full-attention layer के करीब तीन GDN layers। Attention layers exact recall रखती हैं; GDN layers सस्ते दाम में सीक्वेंस mixing का भारी-भरकम काम करती हैं। Qwen3-Next ने ये design साबित किया; Qwen3.8 इसे 27B size class में लाता है; Kimi Linear, MiniMax की lightning attention, Falcon-H1 और Nemotron-H (Mamba-2, यही family का idea) सब इसी दिशा में दौड़ रहे हैं।
ये AMD users को क्यों काटता है
GDN layer एक recurrent state update है। बिना optimize किए, token-by-token चलाने पर यह sequential है – और GPUs को sequential चीज़ें भाती नहीं। "chunked" fused kernel का पूरा मकसद इस recurrence को दोबारा लिखना है ताकि वह parallel blocks में चले। NVIDIA users को ये kernel जल्दी मिला। ROCm पर llama.cpp का fused-op table इसे अभी नहीं रखता – इसलिए layer या तो unfused fallback पर चलती है या, मेरे run की तरह, CPU पर चली जाती है।
इसकी कीमत, same model, same card, बस एक flag का फ़र्क:
Config Layers on GPU Decode Context ────────────────────────────────────────────────────────────── -ngl 999 (forced) all 18.97 tok/s 4K --fit (auto) all but layer 0 7.30 tok/s 4K
एक hybrid layer CPU पर जाने की कीमत 62% penalty – उसके बाद GPU हर token पर उसका इंतज़ार करते हुए stall हो जाता है। सबक बुरी तरह generalise होता है: आज ROCm पर, कोई भी hybrid model उतना ही तेज़ है जितना उसकी सबसे ख़राब जगह रखी गई linear-attention layer।
आपका model प्रभावित है? तीन जाँचें
- Startup log पढ़ें। कोई भी
resolve_fused_opsया "not supported, set to disabled" लाइन जिसमें GDN, Mamba, SSM या "recurrent" हो – मतलब आपके पास hybrid है और ROCm के पास उसका fast रास्ता नहीं। - Architecture चेक करें।
llama-gguf --metadata model.gguf(या कोई भी GGUF reader) मेंgeneral.architectureदेखें –qwen3next-type keys,linear_attentionlayer types, याssm*fields बताते हैं। - दोनों configs का benchmark लें।
-ngl 999फ़ोर्स करें और auto-fit से तुलना करें। अगर forcing जीते, तो fit algorithm hybrid layer को ऐसी जगह रख रहा है जहाँ आपका backend उसे तेज़ नहीं चला सकता।
आज क्या करें
- AMD पर hybrid models के लिए
-ngl 999फ़ोर्स करें और छोटा context स्वीकार करें – मेरे टेस्ट में इसने auto-fit को 2.6× से हराया। - VRAM headroom context से नहीं, quant से ख़रीदें। IQ2_XS ने 52K tokens की जगह छोड़ी; IQ3_S ने लगभग कुछ नहीं। 12 GB कार्ड पर 2 bpw quant ही hybrid-वाला दोस्त है।
- ROCm पर अभी full-attention models ही सुरक्षित चयन हैं। fused kernels आने तक dense 27B predictable बर्ताव करता है; hybrid 27B में क़ल्लू छिपा है।
- llama.cpp का ROCm backend नज़र में रखें। Fused-op table बढ़ रहा है; ये gap "कब" का सवाल है, "क्या" का नहीं। बड़े merges के बाद दोबारा टेस्ट करें।
निष्कर्ष
LLM stack का architecture परत "और बड़ा KV cache" से हटकर "स्मार्टर fixed-size state" की ओर बढ़ रही है, और Gated Delta Net अभी का विजेता है। AMD का hardware ठीक है – इन नए ops के लिए उसकी kernel coverage नहीं है, और llama.cpp आपको इसकी ख़बर सिर्फ़ startup की एक चुप-सी warning लाइन से देता है। अगर आप Radeon पर local AI चलाते हैं, तो आज से वो लाइन पढ़ना शुरू करें: 2026 के models hybrid हैं – चाहे आप तैयार हों या नहीं।
LLM आख़िर है क्या? – KV cache कहाँ फिट होता है · KV cache explained – वही चीज़ जिसे GDN replace करता है · LLM के लिए कितनी VRAM चाहिए?
AI पर वापस →