تصور کنید یک مدل زبانی ۲۷ میلیارد پارامتری را با پنجره متنی عظیم ۲۵۶ هزار توکنی روی یک کارت گرافیک مصرفی اجرا کنید و همچنان سرعت پاسخدهی خیرهکنندهای داشته باشید. این دیگر یک رویای سختافزاری نیست، بلکه نتیجهی مهندسی دقیق در لایههای کوانتش و حافظه است.
طبق گزارش منتشر شده در ۱۷ اوت ۲۰۲۶ توسط میخال پیشچک (Michał Piszczek)، دستیابی به سرعت ۵۰.۴۴ توکن بر ثانیه روی یک GPU ۲۴ گیگابایتی، ثابت میکند که عملکرد استنتاج محلی بیش از آنکه به قدرت خام سختافزار وابسته باشد، به همافزایی میان کوانتش، کرنلها و چیدمان حافظه بستگی دارد. این دستاورد در واقع تایید میکند که حافظه ۲۴ گیگابایتی اکنون به نقطه ورود واقعی برای اجرای محلی مدل Qwen 3.8 27B تبدیل شده است.
بسیاری از کاربران مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن کتابها جواب میدهد — با تضاد میان اندازه مدل و پنجره متنی دستوپنجه نرم میکنند. معمولاً بارگذاری یک مدل 27B با حافظه پنهان (KV Cache) ۲۵۶ هزار توکنی، منجر به خطای کمبود حافظه (OOM) در سختافزارهای معمولی میشود. پیشچک با نگاهی پویا به حافظه VRAM، این محدودیت را دور زد. او VRAM را نه به عنوان یک مخزن استاتیک، بلکه به عنوان محیطی پویا دید که در آن هر مگابایت باید بر اساس حجم کاری خاص کالیبره شود. این آزمایش بر اساس این فرضیه بود که عملیات دقیق ممکن است به اندازه مهاجرت به یک مدل بزرگتر اهمیت داشته باشد.
زیرساخت سختافزاری و نرمافزاری
این سیستم از یک پیکربندی دو-GPU نامتقارن اما موثر استفاده میکند تا پردازشهای سنگین را از سرویسهای جانبی جدا کند:
- GPU0: مدل NVIDIA RTX PRO 4000 Blackwell SFF. این کارت دارای ۲۴ گیگابایت حافظه GDDR7 با قابلیت ECC، رابط حافظه ۱۹۲ بیتی و پهنای باند پیک ۴۳۲ گیگابایت بر ثانیه است. ظرفیت گزارش شده آن ۲۴,۴۶۷ میبایت است و از معماری sm120a استفاده میکند. این کارت مسئول اجرای مدل هدف، MTP داخلی، حالت بازگشتی (Recurrent State)، گرافها و حافظه پنهان ۲۵۶ هزار توکنی KV است.
- GPU1: مدل RTX 2000 Ada. این کارت دارای ۱۵,۹۹۶ میبایت VRAM است و از sm89 استفاده میکند. این کارت میزبان پروژکتور چندوجهی F16 (که ۹۸۲ میبایت اشغال میکند) و سایر سرویسهای کمکی است.
- محیط اجرا: سیستمعامل Debian 13، درایور CUDA 12.9.86 و کامپایلر GCC 14.2، با استفاده از یک بیلد CUDA با معماری دوگانه.
معماری مدل و مکانیک حافظه
مدل Qwen3.8 27B یک مدل متراکم ۶۴ لایه است که از الگوی تکرارشوندهای متشکل از سه لایه Gated DeltaNet و یک لایه توجه (Attention) کامل استفاده میکند. این ساختار باعث میشود ۴۸ لایه بازگشتی و ۱۶ لایه توجه سنتی داشته باشیم. این مدل شامل یک پنجره متنی بومی ۲۶۲,۱۴۴ توکنی، یک هد MTP تک لایه و یک رمزگذار بینایی (Vision Encoder) مجزای ۲۷ لایه است.
از آنجایی که تنها ۱۶ لایه توجه کامل هستند که حافظه پنهان KV را با افزایش طول توالی رشد میدهند، مدیریت پنجره ۲۵۶ هزار توکنی سادهتر از آن چیزی است که به نظر میرسد. با استفاده از کوانتش Q4 برای K و V، هزینه این حافظه پنهان پیش از در نظر گرفتن سربار تخصیصدهنده (Allocator)، حدود ۴.۲۵ گیگابایت است. DeltaNet به جای حافظه پنهان در حال رشد، از حالت بازگشتی و نقاط بازرسی (Checkpoints) استفاده میکند. پیشچک دریافت که ۴ نقطه بازرسی حداقل مقدار مفید است؛ در حالی که مقدار پیشفرض ۳۲، حافظه حیاتی را در جاهای دیگر مصرف میکرد.
معمای کوانتش و بهینهسازی
کوانتش (Quantization) — شبیه به فشردهسازی یک عکس با کیفیت بالا برای اشغال فضای کمتر بدون تغییر زیاد در ظاهر آن — در این پروژه نقش کلیدی داشت. پیشچک متوجه شد برچسبهای استاندارد کوانتش گمراهکننده هستند. در تستهای اولیه با استفاده از فایلهای GGUF عمومی در پنجره ۴۰ هزار توکنی، مدل Q4_0 به طور غافلگیرکنندهای قوی بود و به سرعت ۲۲.۴۰ توکن بر ثانیه برای رمزگشایی هدف و ۴۴.۹۵ توکن بر ثانیه با MTP (در حالت n_max=3) رسید. این مدل از نسخههای کوچکتر Q3_K_M و نسخههای بهظاهر هوشمندتر Q4_K_M پیشی گرفت، زیرا اندازه فایل و برچسبها، کرنل CUDA واقعی در حال اجرا را توصیف نمیکنند.
مقایسه عملکرد کوانتش (پنجره ۴۰ هزار توکنی):
- Q3_K_M: ۱۷.۰۰ توکن/ثانیه (هدف) / ۳۱.۳۴ توکن/ثانیه (MTP n=3) / نرخ پذیرش ۸۳.۹۸٪
- IQ4_XS (iMatrix): ۲۰.۶۳ توکن/ثانیه (هدف) / ۳۴.۴۰ توکن/ثانیه (MTP n=3) / نرخ پذیرش ۶۴.۸۷٪
- Q4_0: ۲۲.۴۰ توکن/ثانیه (هدف) / ۴۴.۹۵ توکن/ثانیه (MTP n=3) / نرخ پذیرش ۸۰.۴۰٪
- Q4_K_M: ۱۷.۵۷ توکن/ثانیه (هدف) / ۲۶.۱۵ توکن/ثانیه (MTP n=3) / نرخ پذیرش ۶۶.۸۶٪
با این حال، تستهای کیفیت شکافی را آشکار کرد. در تست کنترل WikiText-2، مدل IQ4_XS امتیاز ۶.۱۱۷۵ در Perplexity (PPL) کسب کرد، در حالی که Q4_0 امتیاز ۶.۳۷۹۸ گرفت. اگرچه Q4_0 در سرعت پیشتاز بود، اما افت کیفیت برای کارهای ایجنتی (Agentic) بسیار گران بود. پیشچک اشاره کرد که در این صورت از یک مدل 27B صرفاً به عنوان یک «تکمیلکننده خودکار بیش از حد بزرگ» استفاده میکرد. در مقابل، Q4_1 به PPL ۶.۱۱۲۷ رسید اما ردپای حافظه آن باعث شد پنجره ۲۵۶ هزار توکنی و پروژکتور بینایی F16 با مشکل مواجه شوند.
استراتژی کوانتش ترکیبی سفارشی
برای یافتن تعادل، پیشچک یک استراتژی کوانتش ترکیبی ابداع کرد. او ابتدا مدل را با مجموعهای از ۵,۴۷۲ پیام از ۲۹۶ جلسه Hermes (شامل ۱۵۳,۶۰۰ توکن پردازش شده) که شامل کدنویسی، مکالمات لهستانی و انگلیسی و فراخوانی ابزارها بود، کالیبره کرد. پس از یک اسکن امنیتی برای اطمینان از نبود کلیدهای PEM، توکنهای ارائهدهنده، توکنهای گیتهاب، اسلک یا آدرسهای ایمیل، او از llama-imatrix برای جمعآوری دادههای اهمیت برای ۴۹۷ وزن هدف استفاده کرد.
او یک فایل GGUF آماده از نوع NVFP4-MEDIUM را رد کرد زیرا PPL آن ۶.۴۹۴۹ بود که بدتر از Q4_0 بود. مشکل در دستورالعمل تبدیل بود: وزنهای Attention و DeltaNet از چکپوینت FP8 منبع، گسترش یافته و به همراه ماتریسهای بزرگ و منعطف به NVFP4 باز-کوانتش شده بودند. محاسبات بومی باعث سرعت فایل شد، اما دقت پایین بیرویه به بخشهای حساس مدل آسیب زد. پشتیبانی سختافزاری از یک فرمت، به شما نمیگوید که بیتها را کجا هزینه کنید.
در عوض، او یک نقشه سفارشی ساخت:
- ماتریسهای حجیم: NVFP4 بومی (FP4 بومی Blackwell).
- تنسورهای حساس: تنسورهای منتخب Attention، DeltaNet و FFN بر اساس رتبهبندی iMatrix مدل Hermes به Q5_K یا Q6_K منتقل شدند.
- بردار معنایی (Embedding) — مثل کارت معرفی عددی برای هر واژه که میگوید این کلمه همسایهی چه کلمات دیگری است — در حالت Q6_K قرار گرفت.
- لایه خروجی: در حالت Q8_0 تنظیم شد.
نتیجه این تلاش، مدل Qwen3.8-27B-Hermes-iMatrix-NVFP4-Balanced.gguf بود که با ۵.۰۱ بیت بر وزن (BPW) و حجم ۱۶,۳۲۱.۳۸ میبایت، به PPL ۶.۱۱۹۷ دست یافت. این نتیجه با اختلاف ناچیز ۰.۱۱٪ با مرجع Q4_1 مطابقت داشت و در عین حال فضای کافی برای استک سرویسدهی باقی گذاشت.
شتابدهی با پیشبینی چند-توکنی (MTP)
بزرگترین جهش سرعت از طریق پیشبینی چند-توکنی (MTP) حاصل شد. MTP داخلی توان عملیاتی را از ۲۱.۱۹ توکن بر ثانیه (در حالت Greedy) به ۵۹.۴۶ توکن بر ثانیه رساند؛ یعنی افزایشی ۲.۸۱ برابری. این بهینهسازی یادآور پیشرفتهای مشابه در مدلهای قبلی است، جایی که استفاده از MTP و DFlash توانست سرعت استنتاج Qwen3.5 را روی سیستمهای DGX به ۷۸ توکن بر ثانیه برساند.
یافتن پیکربندی درست MTP نیازمند تنظیم دقیق پارامتر n_max بود. نتایج نوسانی بود:
- n=3: ۴۴.۹۵ توکن/ثانیه (تستهای اولیه).
- n=4 تا 7: کندتر شدند زیرا حجم کارهای پیشنویس رد شده انباشته میشد.
- n=8: اوج مطلق در ۴۹.۳۱ توکن بر ثانیه، که به یک شکل مطلوب از بچ (Batch) و کرنل برخورد کرد.
- n=9 و بالاتر: عملکرد افت کرد یا سیستم کرش کرد. مقدار N=9 روی یک بافر گراف CUDA ۱۶۲ میبایتی شکست خورد؛ N=10 روی یک بافر ۸۱ میبایتی دیگر شکست خورد. حتی یک استخر زمانبندی (Scheduler Pool) آزمایشی نیز در برابر یک تخصیص ۳۱ میبایتی شکست خورد.
دادههای تنظیم MTP:
- n=3: ۴۳.۱۱ توکن/ثانیه | ۷۸.۷۳٪ پذیرش | ۱۸,۳۵۲ میبایت VRAM
- n=4: ۳۷.۷۹ توکن/ثانیه | ۶۲.۲۲٪ پذیرش | ۱۸,۵۰۲ میبایت VRAM
- n=7: ۲۹.۱۰ توکن/ثانیه | ۴۲.۹۵٪ پذیرش | ۱۸,۹۵۰ میبایت VRAM
- n=8: ۴۹.۳۱ توکن/ثانیه | ۴۸.۳۳٪ پذیرش | ۱۹,۱۰۰ میبایت VRAM
- n=12: ۴۳.۳۱ توکن/ثانیه | ۳۴.۳۴٪ پذیرش | ۱۹,۷۰۰ میبایت VRAM
- n=20: ۳۰.۶۰ توکن/ثانیه | ۱۹.۹۷٪ پذیرش | ۲۰,۹۰۰ میبایت VRAM
تله دقت: پیشبین در برابر هدف
پیشچک تست کرد که آیا یک پیشبین MTP دقیقتر نتایج را بهبود میبخشد یا خیر. او ۶۹.۲ میبایت دقت به وزنهای MTP اضافه کرد (انتقال از NVFP4 به ترکیبی از Q5_K و Q6_K). نتیجه ضدشهودی بود: توان عملیاتی از ۵۰.۴۴ به ۳۷.۰۲ توکن بر ثانیه کاهش یافت.
مقایسه دقت MTP:
- NVFP4 تولیدی: ۵۰.۴۴ توکن/ثانیه | ۴۸.۳۲٪ پذیرش (پایه)
- iMatrix Q5_K: ۵۰.۶۲ توکن/ثانیه | ۴۶.۷۵٪ پذیرش (افزایش ۵۰.۶۲ میبایت حجم)
- Q5_K با Q6_K حیاتی: ۳۷.۰۲ توکن/ثانیه | ۳۳.۰۶٪ پذیرش (افزایش ۶۹.۲۱ میبایت حجم)
او نتیجه گرفت که خطاهای NVFP4 در هد MTP بهتر با مدل هدف (که عمدتاً NVFP4 است) همراستا میشوند. پیشبین و هدف یک سیستم کوانتش شده واحد را تشکیل میدهند؛ دقت مستقل کمتر از همراستایی بین این دو اهمیت دارد. این موضوع با تست Qwen3.8-27B-DSpark (یک پیشبین دیفیوژن ۱.۳۶ میلیارد پارامتری) بیشتر ثابت شد. حتی با GPU دوم، بهترین نسخه Q8_0 مدل DSpark تنها به ۲۶.۴۹ توکن بر ثانیه رسید که ۴۶.۶٪ کندتر از MTP داخلی بود. دلیل این افت، آموزش DSpark روی هدف FP8 در حالی بود که این سیستم از هدف ترکیبی NVFP4/Q5/Q6 استفاده میکرد. همچنین ترافیک PCIe و کارت ضعیفتر Ada در این کاهش نقش داشتند.
واقعیت استنتاج در پنجرههای متنی بلند
پیشچک هشدار میدهد که «بارگذاری» یک پنجره متنی ۲۵۶ هزار توکنی با «استفاده» از آن متفاوت است. او عبارت «۲۶۲ هزار بارگذاری شده» را از نتایج خود حذف کرد و خواستار معیارهای واقعی پر کردن توکن و رمزگشایی گرم (Hot Decode) شد. او جایگاه را با ۲۶۱,۵۰۰ توکن ورودی پر کرد و ۲۵۶ توکن دیگر را بدون قطع شدن یا خطای OOM تولید کرد. خروجیهای سرد و گرم هر دو دارای هش (Hash) یکسانی بودند.
در حالی که مدل در وظایف تولیدی به طور متوسط ۵۰ توکن بر ثانیه سرعت داشت، در انتهای حافظه پنهان ۲۶۱.۵ هزار توکنی، سرعت به ۱۲.۶۱ توکن بر ثانیه کاهش یافت. دلیل این است که رمزگشایی خودبازگشتی (Autoregressive) باید وزنهای کوانتش شده را استریم کند و ۱۶ لایه توجه کامل باید یک حافظه پنهان KV عظیم اشغال شده را بخوانند، که باعث برخورد با سقف سختافزاری پهنای باند حافظه ۴۳۲ گیگابایت بر ثانیه میشود. در این مرحله، استفاده از GPU روی ۹۹-۱۰۰٪ بود که تایید میکند گلوگاه پهنای باند VRAM است، نه بازگشت به CPU.
بهینهسازی لایه نرمافزاری
لایه نرمافزاری افزایشی ۲۱.۹۷ درصدی نسبت به شاخه master تمیز llama.cpp ایجاد کرد (۵۵.۴۰ در مقابل ۴۵.۴۲ توکن بر ثانیه). پیشچک هشهای کامیت خاصی را برای فعالسازی موارد زیر پین کرد:
- پچهای هسته: #26001، #26048، #26705 و #27173 (زنجیره MTP).
- بهینهسازیها: Gated DeltaNet، توزیع CUDA و تاییدیه گمانهزنی سریعتر Q4/Q5.
- توجه برقآسا (Flash Attention): یک پچ خاص سرعت پیشپُرکردن (Prefill) را از ۷۵۹.۳۸ به ۸۱۵.۶۴ توکن بر ثانیه (+۷.۴۱٪) و رمزگشایی گرم را از ۳۷.۲۶ به ۳۸.۲۳ (+۲.۶۱٪) در پنجره ۳۲ هزار توکنی رساند. این پچ در جایی که حجم کاری توجه به اندازه کافی بزرگ بود تا تاثیر بگذارد، کمک کرد.
پروفایل نهایی تولید
سیستم فعال از پیکربندی زیر استفاده میکند:
- مدل: Qwen3.8-27B-Hermes-iMatrix-NVFP4-Balanced.gguf
- تنظیمات:
--ctx-size 262144,--ctx-checkpoints 4,--spec-draft-n-max 8,--cache-type-k q4_0,--cache-type-v q4_0. - حاشیه VRAM: اجرای کامل-متن از ۲۳,۹۵۲ از ۲۴,۴۶۷ میبایت در GPU0 استفاده کرد و حاشیه فیزیکی حدود ۵۱۵ میبایت را برای جلوگیری از کرش در هنگام ایجاد گراف یا درخواستهای بینایی باقی گذاشت. او اشاره کرد که اجرای سیستم با ۷۶ میبایت فضای خالی در هنگام تنظیمات، زمانی که یک تخصیص ۳۱ میبایتی زمانبند رخ داد، با شکست مواجه شد.
خلاصه معیارهای کلیدی
- تولید (۱۰ اجرا): میانگین ۵۰.۴۴۱ توکن/ثانیه (بازه: ۴۹.۴۲۰ تا ۵۱.۳۹۷)
- تست A/B محیط اجرا: ۴۵.۴۲۲ به ۵۵.۴۰۲ توکن/ثانیه (+۲۱.۹۷٪)
- Greedy در برابر MTP: ۲۱.۱۸۹ به ۵۹.۴۵۶ توکن/ثانیه (۲.۸۱ برابر)
- حافظه پنهان کامل ۲۶۱.۵ هزار: ۱۲.۶۰۶ توکن/ثانیه
- پیشپُرکردن کامل-متن: ۲۲۶.۷۵۰ توکن/ثانیه (۲۶۱,۵۰۰ توکن)
اعتبارسنجی ایجنتی در دنیای واقعی
برای فراتر رفتن از بنچمارکهای مصنوعی، این سیستم از طریق Cursor Agent Local در ده وظیفه مرورگر تک-مرحلهای تست شد. مدل با موفقیت آرتیفکتهای پیچیدهای را بدون دخالت انسان تولید کرد، از جمله:
- FPS تاکتیکی رویهای: یک بازی الهام گرفته از Counter-Strike در یک فایل واحد با سلاحها، لگد (Recoil)، باتها، منطق بمب و HUD کامل (۱,۷۳۲ خط، ۷۳,۱۲۸ بایت). زمان: ۶۰ دقیقه.
- جهان ذرات: یک صحنه GPU با ۱۰۰,۰۰۰ ذره، شش هدف مورفینگ و کنترلهای دست از طریق وبکم (۹۶۶ خط، ۳۶,۵۰۴ بایت). زمان: ۶۰ دقیقه.
- دنیای سبک Animal Crossing: یک جزیره رویهای با NPCها، اشیاء جمعکردنی و آب متحرک (۱,۰۴۹ خط، ۴۲,۹۹۲ بایت). زمان: ۵۶ دقیقه و ۱۹ ثانیه.
- باغ پاگودای وکسلی: یک باغ ژاپنی با پاگودای چند طبقه و کنترلهای چرخش (۶۸۶ خط، ۲۶,۳۵۹ بایت). زمان: ۳۱ دقیقه و ۱ ثانیه.
- تتریس سه بعدی: یک برد حجمی با چرخش سه محوره و صفحات ناپدید شونده (۷۲۴ خط، ۲۷,۶۸۵ بایت). زمان: ۴۸ دقیقه و ۵۱ ثانیه.
تحلیل: تغییر به سمت تنظیمات سطح سیستم
این آزمایش بنچمارک هوش مصنوعی محلی را از «کدام مدل بزرگتر است» به «استک چقدر خوب فیت شده است» تغییر میدهد. این واقعیت که یک مدل 27B میتواند با سرعت ۵۰ توکن بر ثانیه و پنجره ۲۵۶ هزار توکنی روی ۲۴ گیگابایت VRAM اجرا شود، نشان میدهد که ما وارد عصر بهینهسازی شدید شدهایم.
برای متخصصان، نکته کلیدی این است که دقت مستقل کمتر از همراستایی بین پیشبین و هدف اهمیت دارد. وقتی این دو به طور مشابه کوانتش شوند، بیشتر با هم «توافق» میکنند و این همان چیزی است که سرعت واقعی توکن بر ثانیه را برای کاربر افزایش میدهد. علاوه بر این، ادعای پنجره متنی «فقط بارگذاری شده» ناقص است؛ عملکرد واقعی باید در انتهای یک حافظه پنهان پر شده اندازهگیری شود. یک نکته درباره صحت باقی میماند: حالت Greedy هدف-تنها و MTP n=8 تداومهای متفاوتی را روی یک هدف کوانتش شده تولید میکنند که با مشکل عدم تغییرناپذیری بچ (batch-invariance) در llama.cpp (شماره ۲۵۶۱۸) مطابقت دارد. تنظیم N=1 امنترین حالت بدون اتلاف است، زمانی که حفظ توزیع بیت-به-بیت مورد نیاز باشد.




گفتگو