خرابیوں کا ازالہگائیڈ
llama.cpp پرامپٹ پروسیسنگ 35 گنا سست؟ q5_1 KV کیش ٹھیک کریں
فلیش اٹینشن اور q5_1 KV کیش اٹینشن کو CPU پر دھکیل سکتے ہیں۔ اس کی تصدیق کیسے کریں، q8_0 سے ٹھیک کریں، اور API کب آسان ہے۔

اس صفحہ پر
آپ کا لوکل ماڈل ٹھیک جواب دیتا ہے، لیکن اب ہر لمبا پرامپٹ ڈیڑھ منٹ تک پڑا رہتا ہے جبکہ GPU کچھ نہیں کر رہا۔ اگر آپ llama.cpp کو -fa on اور q5_1 KV کیش کے ساتھ چلا رہے ہیں، تو غالباً یہی وجہ ہے: ڈیفالٹ CUDA بلڈ میں اس کیش قسم کے لیے کوئی فلیش-اٹینشن کرنل نہیں ہے، اس لیے اٹینشن کا مرحلہ خاموشی سے CPU پر چلتا ہے۔ کیش کو q8_0 پر بدلنے سے ایک رپورٹر کی پرامپٹ پروسیسنگ 38 سے 1348 ٹوکنز/سیکنڈ ہو گئی۔
نیچے دیے گئے اعداد llama.cpp ایشو #28455 سے ہیں (5 ستمبر 2026 کو کھولا گیا، بلڈ 10791، 28 اکتوبر 2026 کو چیک کیا گیا)۔ ایک رپورٹر، ایک RTX 4080، ایک 27B ماڈل، اس لیے انہیں ایک مثال سمجھیں، کوئی قانون نہیں۔ ان کی root-cause تجزیہ بھی انہی کی ہے: ایک مینٹینر نے اسے "a known issue" کہا اور اگلے دن ایشو بند کر دیا۔
اسکرین پر یہ کیسا دکھتا ہے#
سیٹ اپ عام تھا۔ کسی کو ایک 16 GB کارڈ پر 131072-ٹوکن کا کانٹیکسٹ چاہیے تھا، اس لیے انہوں نے KV کیش کو q5_1 تک چھوٹا کیا:
llama-server -m model.gguf -ngl 99 -fa on -c 131072 -np 4 \
--cache-type-k q5_1 --cache-type-v q5_1پھر انہوں نے 3.6K-ٹوکن کا پرامپٹ بھیجا۔ پرامپٹ پروسیسنگ 38.4 ٹوکنز/سیکنڈ اور ڈیکوڈنگ 6.5 ٹوکنز/سیکنڈ پر چلی۔ تقسیم کریں: 3,600 ÷ 38.4 = 93.75، یعنی پہلے لفظ سے پہلے تقریباً 94 سیکنڈ۔ q8_0 کے ساتھ وہی پرامپٹ 1348 ٹوکنز/سیکنڈ پر چلا: 3,600 ÷ 1,348 = 2.67، یعنی تین سیکنڈ سے کم۔
اشارہ ٹاسک مینیجر میں ہے۔ سست رنز کے دوران GPU تقریباً 0% پر بیٹھا رہا جبکہ CPU تقریباً 930% دکھا رہا تھا (نو یا دس کور مصروف)۔ جب آپ "GPU پر چلا رہے ہوں" اور GPU بیکار ہو، یہی وہ علامت ہے جسے تلاش کرنا ہے۔

چھوٹا کیش اسے اتنا سست کیوں بناتا ہے#
فلیش اٹینشن ایک فیوزڈ GPU کرنل ہے۔ ڈیفالٹ CUDA بلڈ اسے صرف کچھ KV کیش قسم کے جوڑوں کے لیے فراہم کرتا ہے۔ q4_0، q4_1، q5_0 اور q5_1 کے لیے کوئی کرنل نہیں ہے، اس لیے llama.cpp غلطی دے کر نہیں رکتا۔ یہ وہ آپریشن CPU پر منتقل کر دیتا ہے اور جاری رکھتا ہے۔ سب کچھ کام کرتا رہتا ہے، بس پرامپٹ پروسیسنگ پر تقریباً 35 گنا سست (1348 ÷ 38.4 = 35.1)۔
یہی "خاموشی" پورا مسئلہ ہے۔ جواب میں کچھ بھی آپ کو نہیں بتاتا۔ پرامپٹ پروسیسنگ سب سے زیادہ گرتی ہے (تقریباً 35×)، اور جنریشن بھی سست ہوتی ہے: اسی ایشو میں q8_0 کے ساتھ 30.1 کے مقابلے 6.5 ٹوکنز/سیکنڈ۔
دو منٹ میں چیک کریں#
llama-bench کو انہی کیش قسموں کے ساتھ چلائیں جو آپ سرور میں استعمال کرتے ہیں، ہر ویریئنٹ کے لیے ایک بار، اور دوسرے ٹرمینل میں GPU دیکھیں:
llama-bench -m model.gguf -ngl 99 -fa 1 -ctk q8_0 -ctv q8_0 -p 512 -n 0
llama-bench -m model.gguf -ngl 99 -fa 1 -ctk q5_1 -ctv q5_1 -p 512 -n 0
nvidia-smi -l 1رپورٹر کے pp512 نتائج Qwen 27B Q5_K_XL پر: q8_0/q8_0 کے لیے 1511.92 ٹوکنز/سیکنڈ، ڈیفالٹ بلڈ پر q5_1/q5_1 کے لیے تقریباً 197۔ اگر آپ کی دو لائنوں میں ایسا فرق دکھے اور nvidia-smi دوسری کے دوران GPU بیکار دکھائے، تو آپ نے اسے ڈھونڈ لیا۔
کچھ ٹھیک کرنے سے پہلے، جو آپ دیکھ رہے ہیں اسے ممکنہ وجہ سے ملائیں:
جوڑے ملائیں
ہر علامت کو اس کی وجہ سے ملائیں
بائیں طرف کسی آئٹم پر ٹیپ کریں، پھر اس کا جوڑا
- لمبے پرامپٹ کے دوران GPU ~0%، CPU ~930% پراٹینشن CPU پر چل رہی ہے
- ڈیکوڈنگ
q8_0کے ساتھ 30.1 کے مقابلے ~6.5 ٹوکنز/سیکنڈ پر گر جاتی ہےجنریشن بھی سست ہوتی ہے، صرف پرامپٹ پروسیسنگ نہیں - وہی فلیگز
q8_0کے ساتھ تیز ہیںاس کیش قسم کے جوڑے کے لیے ڈیفالٹ بلڈ میں کوئی GPU فلیش-اٹینشن کرنل نہیں ہے
حل 1: q8_0 استعمال کریں (یا دوبارہ بلڈ کریں)#
سب سے تیز حل دو فلیگز بدلنا اور باقی سب ویسا ہی رکھنا ہے:
llama-server -m model.gguf -ngl 99 -fa on -c 131072 -np 4 \
--cache-type-k q8_0 --cache-type-v q8_0ایشو میں اس نے پرامپٹ پروسیسنگ پر 1348 ٹوکنز/سیکنڈ اور ڈیکوڈنگ پر 30.1 ٹوکنز/سیکنڈ دیا (6.5 سے بڑھ کر)۔ قیمت میموری ہے: q8_0 کیش q5_1 سے بڑا ہے، اس لیے چیک کریں کہ آپ کی کانٹیکسٹ لمبائی اب بھی VRAM میں فٹ ہوتی ہے۔
اگر میموری کی وجوہات سے آپ کو q5_1 رکھنا ہی ہے، تو تمام فلیش-اٹینشن کیش کمبینیشنز کے ساتھ دوبارہ بلڈ کریں:
cmake -B build -DGGML_CUDA=ON -DGGML_CUDA_FA_ALL_QUANTS=ON
cmake --build build --config Release -jاس بلڈ نے q5_1 کو pp512 پر 1509.70 ٹوکنز/سیکنڈ اور 3.6K-ٹوکن پرامپٹ پر 1162 ٹوکنز/سیکنڈ پر چلایا، ڈیکوڈنگ 38.5 ٹوکنز/سیکنڈ پر۔ ایشو پر ایک کمنٹر نے نشاندہی کی کہ بیک اینڈز کے درمیان کام منتقل کرنے سے عددی نتائج تھوڑے بدل سکتے ہیں اور بلڈز کے درمیان پرپلیکسٹی موازنہ تجویز کیا۔ اگر آپ کو درست آؤٹ پٹس کی پرواہ ہے، تو ایک چلائیں۔
موازنہ کریں
کون سا حل آپ کے کارڈ کے لیے موزوں ہے؟
q8_0 کیش
--cache-type-k اور --cache-type-v کو q8_0 پر بدلیں۔ کوئی دوبارہ بلڈ نہیں۔ q5_1 سے زیادہ VRAM استعمال کرتا ہے، اس لیے دوبارہ چیک کریں کہ آپ کتنا کانٹیکسٹ فٹ کر سکتے ہیں۔
FA_ALL_QUANTS کے ساتھ دوبارہ بلڈ کریں
q5_1 رکھیں اور - کے ساتھ بلڈ کریں۔ پہلے جتنی ہی VRAM، لیکن آپ اپنا بلڈ خود برقرار رکھتے ہیں اور کمپائل ہونے میں زیادہ وقت لگتا ہے۔
مینٹینر کا "known issue" جواب یہ نہیں بتاتا کہ موجودہ llama.cpp ورژنز نے اسے بدلا ہے یا نہیں۔ ایماندار چیک اوپر والا llama-bench جوڑا ہے: اگر دونوں لائنیں قریب ہوں، تو آپ ٹھیک ہیں۔
ٹیوننگ کب قابلِ قدر رہنا چھوڑ دیتی ہے#
فرض کریں آپ نے حل کام کر لیا، اور اب اگلے مرحلے پر غور کر رہے ہیں: مزید فلیگز، دوسرا GPU، چھوٹا کوانٹ۔ اگر کام خلاصوں، کوڈ ریویو یا چند ہزار ٹوکنز کے پرامپٹس پر ایکسٹریکشن کا ہے، تو پوچھیں کہ ایک ریکوئسٹ آپ کو وقت اور محنت میں کتنا پڑتی ہے، صرف واٹس میں نہیں۔
یہاں موازنے کے لیے ایک بیان کردہ ورک لوڈ ہے۔ فرض کریں ایک سمرائزیشن جاب 3,600 ان پٹ ٹوکنز بھیجتی ہے اور 500 واپس لیتی ہے، 1,000 بار۔ CheapTokens پر یہ DeepSeek-V4-Flash پر تقریباً $0.104 ہے (380K کانٹیکسٹ، فی جواب زیادہ سے زیادہ 32,768 آؤٹ پٹ ٹوکنز، کسی بھی وقت ایک قیمت) اور GLM-5.3-Flash پر تقریباً $0.092 (390K کانٹیکسٹ)۔ ٹیبل ان پٹ اور آؤٹ پٹ کو ملا کر گنتا ہے، موازنے کے لیے OpenRouter کالم کے ساتھ:
| ماڈل | ان پٹ $/1M | آؤٹ پٹ $/1M | فی درخواست | 1,000 درخواستیں | OpenRouter، 1,000 درخواستیں |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000092 | $0.092 | $0.187 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0001 | $0.104 | $0.249 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00026 | $0.255 | $1.68 |
فی درخواست 3,600 ان پٹ اور 500 آؤٹ پٹ ٹوکنز۔ فی 1M ٹوکنز کی قیمتیں موجودہ ہیں اور ہمارے ٹیرف کے ساتھ تبدیل ہوتی ہیں؛ OpenRouter کالم اسی ورک لوڈ کے لیے حوالہ جاتی قیمتیں دکھاتا ہے۔
API کو آپ کی کیش قسم، آپ کی VRAM یا آپ کے بلڈ فلیگز کی پرواہ نہیں؛ CPU پر گرنے کے لیے کچھ نہیں ہے۔ پہلے اپنے چند اصل پرامپٹس بھیجیں اور جوابات خود پرکھیں۔ قدم چھوٹا ہے: اینڈ پوائنٹ OpenAI Chat Completions فارمیٹ بولتا ہے، اس لیے زیادہ تر لوکل کلائنٹس کو صرف ایک نیا base URL چاہیے۔
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Summarize the text below in 5 bullets: ..."}], "max_tokens": 500}'مکمل سیٹ اپ CheapTokens docs میں ہے، اور موجودہ فی-ماڈل قیمتیں pricing page پر ہیں۔ ہارڈویئر بمقابلہ API پر طویل نظر کے لیے، Run DeepSeek locally or use an API دیکھیں۔ اگر آپ دیکھنا چاہتے ہیں کہ ان پٹ اور آؤٹ پٹ الگ الگ کیسے بل کیے جاتے ہیں، input vs output tokens اس کا احاطہ کرتا ہے۔
کام کرنے کی ترتیب#
ترتیب دیں
ٹربل شوٹنگ کے مراحل کو ترتیب دیں
آئٹمز کو گھسیٹیں یا تیروں کا استعمال کریں
- q8_0 اور q5_1 کے لیے llama-bench چلائیں اور nvidia-smi دیکھیں
- دونوں کیش قسموں کو q8_0 پر بدلیں
- چیک کریں کہ کانٹیکسٹ لمبائی اب بھی VRAM میں فٹ ہوتی ہے
- صرف اس صورت میں GGML_CUDA_FA_ALL_QUANTS=ON کے ساتھ دوبارہ بلڈ کریں جب آپ کو q5_1 چاہیے
- اگر لوکل سیٹ اپ اب بھی محنت کے قابل نہ ہو تو API پر وہی پرامپٹ موازنہ کریں
ذرائع کے بارے میں ایک اور احتیاط: پوری تشخیص ایک عوامی ایشو اور ایک GPU پر ٹکی ہے۔ 1348 اور 38.4 کو وہی سمجھیں جو وہاں ہوا، اور کسی پر بھروسہ کرنے سے پہلے اپنا کارڈ ناپ لیں۔



