اگر توسعهدهندهای هستید که میخواهید حداکثر توان سختافزاری لپتاپهای جدید اینتل را استخراج کنید، دیگر مجبور نیستید به ابزارهای محدود شرکت سازنده بسنده کنید. اکنون میتوان با دور زدن لایههای نرمافزاری سختگیرانه، کدهای سفارشی C را مستقیماً روی سختافزار واحد پردازش عصبی (NPU) — شبیه به یک موتور توربوشارژ که حالا اجازه دارید تنظیمات داخلیاش را برای سرعت بیشتر تغییر دهید — اجرا کرد.
به نقل از مخزن گیتهاب پروژه npunlock که در ۲۲ سپتامبر ۲۰۲۶ بهروزرسانی شد، این ابزار مسیر گمشده میان کدهای سطح بالای C و هستههای قابل اجرا در NPU را بازسازی میکند. اینتل هستههای برنامهپذیر SHAVE را درون NPUهای خود قرار داده است، اما در حالت عادی تنها اجازه برنامهنویسی در سطح گراف (Graph-level) را میدهد. این محدودیت به این معناست که توسعهدهندگان معمولاً به عملیاتی محدود میشوند که کامپایلر اینتل از پیش از آنها پشتیبانی میکند. این محدودیت شبیه به این است که بخواهید خانهای سفارشی بسازید اما فقط اجازه داشته باشید از اتاقهای پیشساخته استفاده کنید؛ شما میتوانید جای اتاقها را عوض کنید، اما حق ندارید دیوارهای آنها را جابهجا کنید.
همانطور که در تحلیلهای پیشین ما دربارهی محدودیتهای سختافزارهای لبه اشاره کردیم، دسترسی مستقیم به هستهها کلید بهینهسازی واقعی است. npunlock با ایجاد عملیاتهای سفارشی در گراف و استفاده از درایورهای موجود اینتل برای اجرای سختافزاری، این سد را میشکند. طبق مستندات پروژه، این زنجیره ابزار روی سیستمهای ویندوز x64 مجهز به تراشههای Meteor Lake و مدل NPU3720 تأیید شده است.
معماری و سازوکار فنی
به گزارش توسعهدهندگان این پروژه، نرمافزار استاندارد NPU اینتل تنها گرافهایی را میپذیرد که از عملیاتهای مورد حمایت کامپایلر آن ساخته شده باشند؛ در واقع اینتل هیچ گردشکار عمومی برای ارائه یک پیادهسازی C برای یک عملیات خاص در اختیار کاربران قرار نداده است. با این حال، پردازندههای ACT-SHAVE در ذات خود برنامهپذیر هستند و دقیقاً برای اجرای هستههای نرمافزاری طراحی شدهاند.
پروژه npunlock این شکاف را پر میکند. این ابزار اجازه میدهد پردازندهها برای عملیاتهای سفارشی سازگار به کار گرفته شوند، در حالی که کامپایلر و درایور اینتل همچنان مدیریت کلی گراف و اجرای سختافزاری را بر عهده دارند. این تغییر، NPU را از یک شتابدهنده با عملکرد ثابت (Fixed-function) به یک پردازنده برنامهپذیر برای پژوهشگران هوش مصنوعی تبدیل میکند. این رویکرد در بهینهسازی لایههای پایین سختافزار، شباهتهایی به معماری x-algorithm در مدیریت تعادل میان سرعت و حریم خصوصی دارد که بر بازنگری در ساختارهای پردازشی متمرکز است.
الزامات و پیادهسازی
این سامانه با تبدیل کد C نوشته شده توسط کاربر به کد ماشین ACT-SHAVE عمل میکند. برای دستیابی به این هدف، پروژه به مجموعهای از پیشنیازهای خارجی وابسته است:
- MoviTools: یک زنجیره ابزار اختصاصی که از بستههای درایور قدیمی لنوو (به طور مشخص نسخه ۳۱.۰.۱۰۰.۱۶۸۸) استخراج شده است. کاربران باید محموله
MVC_DEPENDرا استخراج کنند اما به شدت هشدار داده شده که هرگز این درایور قدیمی را نصب یا جایگزین درایور فعلی خود نکنند. - Python 3.10+: برای ساخت و اجرای گرافها.
- CMake 3.24+: برای نصب منبع از طریق ابزار MSVC.
- درایور NPU اینتل: نصب بودن آخرین درایور فعال برای دستگاه الزامی است.
نکته مهم این است که برای اجرای این ابزار نیازی به OpenVINO به عنوان محیط اجرا (Runtime)، بسته پایتونی یا کامپایلر فرانت-اند نیست، هرچند npunlock خروجیهایی در قالب IR مربوط به OpenVINO تولید میکند تا درایور نصب شده اینتل آنها را شناسایی و اجرا کند.
یک پیشرفت کلیدی که در ۲۳ سپتامبر ۲۰۲۶ گزارش شد، توانایی یک گراف بومی برای اجرای شاخههای سفارشی مستقل FP32-unary و FP16-binary است. پروژه برای مدیریت بازآرایی شاخهها توسط کامپایلر (که در حالت عادی باعث شکست جریان اجرا میشد)، از یک پیشپرواز صریح ACT-group استفاده میکند تا ترتیب اجرای صحیح حفظ شود.
قابلیتهای تأیید شده
پیادهسازی فعلی از چندین عملیات حیاتی پشتیبانی میکند که پیش از این در لایههای بسته و اختصاصی اینتل محبوس بودند:
- هستههای متراکم استاتیک: پشتیبانی از هستههای سفارشی FP16 تک-ورودی (unary) و دو-ورودی.
- مسیر FP32: یک مسیر تأیید شده برای عملیاتهای تک-ورودی FP32.
- ریاضیات غیرخطی: توانایی اجرای توابع پیچیده ریاضی مانند GELU و tanhf.
- دقت ترکیبی: پشتیبانی از گرافهایی که شامل شاخههای سفارشی مستقل FP32-unary و FP16-binary هستند.
در یک نمونه ارائه شده، یک هسته GELU مبتنی بر C در پایتون جاسازی شده و صحت نتایج آن با NumPy بررسی شده است. این هسته از هدر npunlock/npu3720_kernel.h برای فراخوانی NPU3720 و استفاده از کمککنندههای آدرسدهی تنسور استفاده میکند. همچنین ابزار MoviTools باعث میشود اکثر توابع استاندارد libm از طریق موجودی نمادهای mlibm.a در دسترس باشند و امکان فراخوانی مستقیم tanhf بدون نیاز به گنجاندن <math.h> فراهم شود.
این تحول، فرض بنیادین درباره «جعبه سیاه» بودن NPUهای اینتل برای توسعهدهنده نهایی را تغییر میدهد. با باز کردن دسترسی به هستههای SHAVE، npunlock این سختافزار را به ابزاری منعطف تبدیل میکند. برای یک توسعهدهنده معمولی، این یعنی توانایی بهینهسازی گلوگاههای خاص در یک مدل که ممکن است کامپایلر استاندارد اینتل آنها را به صورت ناکارآمد مدیریت کند. در واقع، ما از «استفاده از آنچه اینتل فراهم میکند» به «ساخت آنچه سختافزار واقعاً قادر به انجام آن است» رسیدهایم.
محدودیتها و چشمانداز
این پروژه همچنان در مرحله آزمایشی است. در حال حاضر محدود به سیستمهای ویندوز x64، تراشههای Meteor Lake / NPU3720، اشکال استاتیک (Static shapes)، حاملهای ACT سازگار و چیدمانهای تنسوری شناخته شده است. نکته قابل توجه این است که گروههای تبدیل دقت ترکیبی متصل (Connected mixed-precision conversion groups) هنوز قابل شناسایی نیستند؛ بنابراین نمونههای تأیید شده دقت ترکیبی باید از شاخههای مستقل استفاده کنند.
نویسنده پروژه از جامعه توسعهدهندگان خواسته تا ابزار را روی لینوکس و نسلهای جدیدتر NPU آزمایش کنند. دو مسیر امیدوارکننده اما تستنشده عبارتند از:
- پورت به لینوکس: از آنجا که فریمور NPU کد ماشین را مستقیماً اجرا میکند، یک گراف اصلاحشده NPU3720 که در ویندوز تولید شده است، احتمالاً روی لینوکس نیز اجرا شود. این امر مستلزم یافتن راهی برای بارگذاری DLLهای MoviTools ویندوزی در محیط لینوکس است.
- NPUهای جدیدتر: احتمال دارد سختافزارهای جدیدتر بتوانند تصویر SHAVE مدل ۳۷۲۰ را اجرا کنند، یا اینکه بستههای درایور OEM قدیمی برای آن نسلها، اجزای مشابه MoviTools را فراهم کنند.
هر دو مسیر نیازمند اعتبارسنجی سختافزاری، ثبت نسخههای درایور/فریمور و مقایسه خروجی با یک مرجع (Oracle) در میزبان هستند. اگر سیستمی با Meteor Lake دارید، میتوانید با استخراج محموله MoviTools از درایور قدیمی ذکر شده، نوشتن هستههای سفارشی خود را آغاز کنید.
گام بعدی شما
- اگر از لپتاپهای سری Core Ultra (Meteor Lake) استفاده میکنید، مخزن گیتهاب npunlock را بررسی کنید تا محدودیتهای کامپایلر اینتل را دور بزنید.
- برای بهینهسازی مدلهای محلی، توابع ریاضی غیرخطی (مانند GELU) را که در حال حاضر گلوگاه استنتاج شما هستند، به صورت هستههای C بازنویسی کنید.
- در صورت داشتن دسترسی به نسلهای جدیدتر NPU، نتایج اجرای کدهای ۳۷۲۰ را تست کرده و به توسعهدهنده گزارش دهید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی معماری تراشههای Blackwell مراجعه کنید.




گفتگو