۳۷ توکن در ثانیه؛ این سرعتی است که یک مدل ۴۸ گیگابایتی اکنون روی لپتاپی با تنها ۳۲ گیگابایت رم به آن دست مییابد. این جهش مدیون Janas-LLM است؛ موتور استنتاجی جدیدی که با زبان C خالص نوشته شده و حافظه SSD NVMe را به عنوان امتداد رم میبیند تا تنها بخشهای ضروری مدلهای ترکیب خبرهها (Mixture-of-Experts یا MoE) را در لحظه و بهصورت استریمینگ فراخوانی کند.
سالهاست که «دیوار رم» (RAM wall) بزرگترین مانع برای اجرای محلی هوش مصنوعی است. اگر حجم وزنهای یک مدل از حافظه در دسترس شما بیشتر باشد، اکثر موتورهای استنتاج یا بهطور کامل کرش میکنند یا سرعتشان به شدت افت کرده و به حالت لاکپشتی در میآیند. در حالی که ما پیشتر بررسی کردیم که چگونه S-Space در Meta AI مختصات را از مدلهای منجمد استخراج میکند تا وظایف چندوجهی را بهینه کند، اما مشکل بنیادین اندازه خام مدلها همچنان یک گلوگاه سختافزاری برای اکثر کاربران باقی مانده است.
مائوریتزو کامالری (Maurizio Cammalleri) پروژه Janas-LLM را به عنوان یک آزمایش برای شکستن این دیوار منتشر کرد. برخلاف لودرهای سنتی، Janas وزنها را روی دیسک نگه میدارد و از یک حافظه پنهان (Cache) تخصصی برای خبرهها استفاده میکند تا دادههای پرتکرار را در رم ذخیره کند. این سازوکار اجازه میدهد دستگاهی با ۳۲ گیگابایت حافظه، مدلی مانند Qwen3-Next-80B را که به ۴۸.۴ گیگابایت فضا نیاز دارد، بدون مشکل اجرا کند.
ماهیت آزمایشی Janas
باید بدانید که Janas هنوز یک محصول صیقلخورده نیست و بیشتر شبیه به یک آزمایش در مراحل اولیه است. طبق گزارش توسعهدهنده، API عمومی و خط فرمان (Command Line) این ابزار ناپایدار است و اغلب چندین بار در هفته تغییر میکند. با این حال، فایلهای مدل با پسوند .jns که در Hugging Face (نسخه فرمت ۲) منتشر شدهاند، برای سازگاری بلندمدت طراحی شدهاند و توسط تمام نسخههای آینده این موتور خوانده خواهند شد.
این موتور بهطور عمدی تهاجمی عمل میکند؛ تمام حافظه آزاد سیستم را با کش خبرههای خود پر میکند و برای خواندن دیسک با حداکثر سرعت ممکن، از دستور O_DIRECT استفاده میکند. در دستگاههایی که فضای رم محدودی دارند، این رفتار میتواند سیستمعامل را به وضعیت Swap ببرد و باعث شود دسکتاپ کاملاً غیرپاسخگو (Unresponsive) شود. در برخی موارد، فشار شدید روی GPU منجر به ریست شدن درایورها شده که باعث کرش کامل محیط دسکتاپ گشته است.
برای کاهش این ریسکها، توسعهدهنده کنترلهای خاصی را فراهم کرده است. پرچم --cache <GiB> به کاربران اجازه میدهد یک سقف سخت برای مصرف حافظه تعیین کنند. علاوه بر این، با تنظیم متغیر محیطی JANAS_GPU=0 میتوان شتابدهنده گرافیکی را بهطور کامل غیرفعال کرد تا تمام فرآیند استنتاج روی CPU باقی بماند.
بنچمارکهای عملکرد
بر اساس دادههای منتشر شده در گیتهاب در ۱۲ اکتبر ۲۰۲۶، Janas-LLM روی یک سیستم لینوکس (Debian 13) با پردازنده Intel Core Ultra 9 185H (شامل ۶ هسته Performance، ۸ هسته Efficiency و ۲ هسته Low-power) و گرافیک مجتمع Arc تست شده است. این دستگاه دارای ۳۲ گیگابایت رم DDR5 و یک SSD NVMe با سرعت خواندن تقریبی ۵.۷ گیگابایت بر ثانیه بود.
نتایج نشاندهنده یک برتری عظیم نسبت به لاماسیپلاسپلاس (llama.cpp - build 2b18470) در ۱۳ مدل مختلف است. تستها که بین ۹ تا ۱۱ اکتبر ۲۰۲۶ انجام شد، سرعت خواندن پرامپت (۱۰۲۴ توکن) و نوشتن (۱۶ توکن) را اندازهگیری کردند:
- Qwen3-Next-80B-A3B (۴۸.۴ گیگابایت): موتور Janas به سرعت ۶۲ توکن در ثانیه برای خواندن و ۲۴ توکن برای نوشتن (بدون استفاده از Drafts) رسید. در مقابل، llama.cpp تنها ۱۶ توکن در ثانیه برای خواندن و ۲.۸ توکن برای نوشتن ثبت کرد. دلیل این ضعف در llama.cpp این است که بکاِند CPU آن وزنها را برای بستهبندی مجدد کپی میکند و بکاِند Vulkan آن از بافرهایی استفاده میکند که سیستم نمیتواند آنها را بازپس گیرد، که در نهایت منجر به اتمام حافظه میشود.
- Qwen3-Coder-Next (۴۸.۴ گیگابایت): سرعت Janas در خواندن ۶۶ و در نوشتن ۲۲ توکن بر ثانیه بود، در حالی که llama.cpp با سرعتهای ۱۴ و ۲.۲ توکن در ثانیه عقب ماند.
- Qwen3.6-35B-A3B (۲۲.۳ گیگابایت): Janas به ۱۰۴ توکن (خواندن) و ۱۹ توکن (نوشتن) رسید؛ در حالی که llama.cpp روی ۷۹ و ۱۲ توکن بود.
- Qwen3-30B-A3B (۱۸.۶ گیگابایت): ثبت سرعت ۱۳۵ توکن برای خواندن و ۳۲ توکن برای نوشتن توسط Janas، در مقابل ۱۲۲ و ۱۵ توکن برای llama.cpp.
- Gemma-4-26B-A4B-it (۱۸.۳ گیگابایت): Janas با ۸۴ توکن (خواندن) و ۱۸ توکن (نوشتن) در برابر ۷۶ و ۱۲ توکن llama.cpp پیروز شد.
- Gemma-4-12B-it (۷.۱ گیگابایت): سرعت ۶۵ توکن برای خواندن و ۹.۹ توکن برای نوشتن در Janas، در مقابل ۴۶ و ۷.۱ توکن در llama.cpp.
- Qwen3.5-9B (۵.۷ گیگابایت): Janas به ۱۱۱ توکن (خواندن) و ۱۴ توکن (نوشتن) رسید، در حالی که رقیبش روی ۷۸ و ۸.۷ توکن بود.
- Gemma-4-E4B-it (۵.۰ گیگابایت): سرعت ۱۲۲ توکن برای خواندن و ۲۰ توکن برای نوشتن در Janas، در مقابل ۱۰۹ و ۱۵ توکن llama.cpp.
- Qwen3-4B (۲.۵ گیگابایت): Janas با ۱۹۳ توکن (خواندن) و ۲۷ توکن (نوشتن) در برابر ۱۶۴ و ۱۸ توکن llama.cpp.
- Gemma-4-E2B-it (۳.۱ گیگابایت): سرعت ۱۹۱ توکن برای خواندن و ۳۸ توکن برای نوشتن در Janas، در مقابل ۱۵۰ و ۱۹ توکن llama.cpp.
- Qwen3.5-2B (۱.۳ گیگابایت): Janas به ۴۴۱ توکن (خواندن) و ۵۲ توکن (نوشتن) رسید، در حالی که llama.cpp روی ۳۲۳ و ۲۸ توکن بود.
- Qwen3.5-0.8B: سرعت ۷۹۹ توکن برای خواندن و ۱۰۹ توکن برای نوشتن در Janas، در مقابل ۵۱۹ و ۳۲ توکن llama.cpp.
- Qwen3-0.6B: Janas با ۹۳۹ توکن (خواندن) و ۱۳۰ توکن (نوشتن) در برابر ۶۷۰ و ۴۵ توکن llama.cpp به برتری رسید.
جزئیات فنی و متغیرها
کوانتیزاسیون و مدلهای شخص ثالث
تستها روی مدلهای منابع دیگر نیز انجام شد تا ثبات عملکرد بررسی شود:
- Qwen3-30B-A3B (نسخه Q4_K_M از bartowski): سرعت خواندن ۱۳۱ و نوشتن ۳۲ توکن بر ثانیه.
- Qwen3-30B-A3B (نسخه ۳ بیتی UD-Q3_K_XL از unsloth): این تنها مورد استثنایی بود که llama.cpp در خواندن سریعتر بود (۱۱۲ در مقابل ۱۰۰)، زیرا وزنهای Q3_K هنوز از قابلیت پرامپت سریع GPU استفاده نمیکنند. اما Janas در نوشتن سه برابر سریعتر بود (۳۶ در مقابل ۱۱).
- Qwen3-4B (نسخه Q4_K_M از bartowski): سرعت خواندن ۱۹۱ و نوشتن ۲۶ توکن بر ثانیه.
نقش رمزگشایی گمانهزنانه (Speculative Drafting)
موتور Janas-LLM یک مکانیزم پیشبینی یا Drafting (از طریق گزینه --mtp) دارد که توکنهای بعدی را حدس میزند تا خروجی را تسریع کند. با فعال کردن این قابلیت، سرعت Qwen3-Next-80B از ۲۴ به ۳۷ توکن در ثانیه میپرد.
- عملکرد پیشبینی: در پرامپتهای انگلیسی (مانند «توضیح دهید نان در خانه چگونه درست میشود»)، نرخ بقای پیشبینیها در مدلهای Qwen و مدلهای بزرگتر Gemma بین ۷۴٪ تا ۸۹٪ بود. در مدلهای E2B و E4B گما، این عدد به ۶۳ تا ۷۲٪ کاهش یافت.
- تفاوت زبانی: در متون نثر ایتالیایی، مدل Qwen3.5-2B تنها حدود یکسوم پیشبینیهایش را حفظ کرد که منجر به افزایش سرعت ناچیزی شد.
- پشتیبانی: این قابلیت از طریق بلوکهای پیشبینی Qwen3.5، Qwen3.6 و Qwen3-Next و همچنین یک مدل دستیار اختصاصی برای Gemma 4 پشتیبانی میشود. مدلهای Dense Qwen3 فاقد این بلوک هستند، هرچند مدلهای Dense Qwen3.5 را میتوان با استفاده از ابزار
hf2jns_mtpتبدیل کرد.
سازگاری با سیستمعامل و سختافزار
اگرچه این موتور روی دبیان ۱۳ (کرنل 6.12.107 و GCC 14.2) توسعه یافته، اما کاملاً چندپلتفرمی است:
- ویندوز ۱۱: در تستهای ۱۲ اکتبر ۲۰۲۶ (build 26300)، سرعت نوشتن مشابه لینوکس بود (Qwen3-4B روی ۲۵.۶ و Qwen3-30B-A3B روی ۳۴.۲ توکن بر ثانیه). اما سرعت خواندن پرامپت برای مدلهای Dense بیشتر شد؛ مثلاً Qwen3-4B به ۳۴۶ توکن رسید (۱.۸ برابر سریعتر از لینوکس) زیرا بلوکهای کامل از طریق درایور ویندوز اینتل به GPU منتقل میشوند.
- بهینهسازی CPU: موتور بهطور پویا تعداد رشتهها (Threads) را انتخاب میکند. روی Ultra 9، برای پرامپتها از ۱۲ رشته و برای تولید چند-توکنی از تمام هستههای موجود (Performance و Efficiency) استفاده کرد. در تست روی i9-14900HX، مشخص شد که هر رشته تکبهتک، کمتر از نصف سرعت ۱۶ رشته هستههای Performance است.
- تأثیر منابع: اجرای موتور همزمان با باز بودن مرورگر و ویرایشگر کد، سرعت را به حدود ۷۵٪ کاهش داد و زمان انتظار دیسک (Disk wait times) را ۵ برابر کرد.
ابزارها و یکپارچهسازی
Janas فراتر از یک محیط چت ساده، مجموعهای از ابزارها را برای توسعهدهندگان ارائه میدهد. این پروژه با زبان C و بدون هیچ وابستگی خارجی به جز کتابخانه استاندارد C نوشته شده است، هرچند janas-server از GNU libmicrohttpd 1.0.10 و yyjson 0.13.0 استفاده میکند.
- janas-server: یک API HTTP سازگار با OpenAI و یک صفحه چت تحت وب ارائه میدهد. این سرور برای تکمیل کد در VSCodium و VS Code از طریق
llama.vscodeیا Continue استفاده میشود. - janas-mcp: به عنوان یک سرور پروتکل زمینهٔ مدل (Model Context Protocol) عمل میکند و اجازه میدهد مدل به عنوان ابزاری برای Claude Code و سایر کلاینتهای MCP استفاده شود. این بخش برای HTTPS از Mbed TLS 4.2.0 استفاده میکند.
- تکمیل کد: با ثابت نگه داشتن پنجره ارسالی بهگونهای که ضربات کلید تنها محتوای تغییر یافته را بخوانند، Janas پیشنهادها را در ۱.۵ تا ۲.۲ ثانیه روی لپتاپ ارائه میدهد. در مقابل، روشهای پنجره لغزان (Sliding-window) ۱۷ ثانیه زمان میبردند.
- janas-bench: ابزاری برای اندازهگیری سختافزار کاربران است تا گزارشها را به توسعهدهنده ارسال کنند و به انطباق موتور با CPUهای مختلف (مانند AMD) یا GPUهای مجزا کمک کنند.
تحلیل: تغییر پارادایم هوش مصنوعی محلی
این پیشرفت فرض بنیادی را که عملکرد مدلهای محلی صرفاً به ظرفیت VRAM یا RAM وابسته است، تغییر میدهد. Janas-LLM با بهینهسازی خط لوله بین SSDهای NVMe و GPU، در واقع حافظه ذخیرهسازی سریع را به یک سیستم حافظه لایهبندی شده (Tiered Memory System) تبدیل کرده است.
برای کاربر عادی، این یعنی اندازه مدلهای «قابل استفاده» محلی دیگر توسط رم سختافزار محدود نمیشود. اکنون میتوان یک مدل ۸۰ میلیارد پارامتری را روی یک لپتاپ استاندارد ۳۲ گیگابایتی با سرعتی اجرا کرد که برای تعامل در لحظه کاملاً کاربردی است، نه آن سرعت طاقتفرسایی که در روشهای سنتی Offloading میدیدیم.
با این حال، ماهیت «آزمایشی» پروژه یک هشدار است. مصرف تهاجمی حافظه و دیسک میتواند منجر به ناپایداری سیستم یا ریست شدن درایورها شود. این ابزار در حال حاضر برای کاربران حرفهای (Power Users) و توسعهدهندگانی است که حاضرند پایداری سیستم را فدای توان عملیاتی خام استنتاج کنند.
گام بعدی شما
- اگر لپتاپی با SSD سریع دارید، Janas-LLM را برای اجرای مدلهای Qwen3-Next تست کنید تا تفاوت سرعت با llama.cpp را ببینید.
- برای جلوگیری از هنگ کردن سیستم، حتماً از پرچم
--cacheبرای محدود کردن مصرف رم استفاده کنید. - توسعهدهندگان میتوانند از
janas-mcpبرای تبدیل مدلهای محلی حجیم به ابزارهای کاربردی در Claude Code استفاده کنند.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما درباره تراشههای Blackwell و مدیریت حافظه در مقیاس صنعتی مراجعه کنید.




گفتگو