برای اجرای یک مدل هوش مصنوعی روی دستگاه لبه، همیشه پرسش «کدام تراشه سریعتر است؟» پرسش اول خوبی نیست. شکل ورودی، تأخیر مجاز، انرژی، تعداد مدلهای قابل پشتیبانی و زمان توسعه مشخص میکند که NPU آماده مناسبتر است یا FPGA قابلپیکربندی. این دو گزینه هم همیشه جدا از هم نیستند: در بعضی سامانهها، NPU خودش از منطق قابلبرنامهریزی FPGA و بلوکهای محاسباتی اختصاصی کنار هم استفاده میکند.
NPU و FPGA چه تفاوتی دارند؟
NPU یک شتابدهنده برای الگوهای رایج شبکهٔ عصبی است. سازنده معمولاً ابزار تبدیل مدل، کامپایلر، runtime و مجموعهای از عملگرها یا قالبهای عددی پشتیبانیشده ارائه میکند. اگر مدل در محدودهٔ این پشته باشد، مسیر پیادهسازی اغلب کوتاهتر از طراحی datapath اختصاصی است؛ اما محدودیت اپراتورها و وابستگی به SDK همان پلتفرم باید از ابتدا بررسی شود.
FPGA تراشهای با منطق قابلپیکربندی است. طراح میتواند مسیرهای داده و رابطهای لازم را برای مسئلهٔ مشخص پیاده کند و پیشپردازش حسگر، انتقال داده و بخشهایی از inference را در یک pipeline ترکیب کند. این انعطاف، هزینهٔ مهندسی دارد: آشنایی با HDL یا HLS، کامپایل و زمانبندی، مصرف منابع منطقی، طراحی حافظه و اعتبارسنجی زمانبندی مدار. بنابراین FPGA را نباید صرفاً «NPU سریعتر» فرض کرد.
مرز این دو در محصولات واقعی میتواند ترکیبی باشد. برای نمونه، پشتهٔ AMD Vitis AI از NPU IP برای inference روی Adaptive SoC و FPGA استفاده میکند و اجزای آن میتوانند منطق قابلبرنامهریزی و AI Engine را کنار هم قرار دهند. این نمونه نشان میدهد که مقایسه باید بر اساس معماری دقیق برد و ابزارهای همان قطعه انجام شود، نه فقط نام دستهٔ تراشه.
مقایسهٔ کاربردی برای انتخاب اولیه
| معیار | NPU آماده | FPGA قابلپیکربندی |
|---|---|---|
| زمان رسیدن به نمونهٔ اولیه | معمولاً کوتاهتر، اگر مدل و اپراتورها پشتیبانی شوند | معمولاً طولانیتر؛ طراحی، ساخت و زمانبندی سختافزار لازم است |
| انعطافپذیری datapath و I/O | وابسته به قابلیتهای SoC و API سازنده | بالا؛ منطق و رابطهای خاص پروژه قابل پیادهسازیاند |
| مدل و اپراتورهای پشتیبانیشده | محدود به کامپایلر و معماری NPU | وابسته به IP، ابزار و منابعی که برای مدل فراهم میشود |
| پیشپردازش همزمان با inference | ممکن است بخشی روی CPU یا واحدهای دیگر انجام شود | قابل ترکیب با pipeline اختصاصی، در صورت داشتن منابع و زمانبندی مناسب |
| ریسک اصلی پروژه | سازگاری مدل، محدودیت ابزار و وابستگی به پلتفرم | پیچیدگی طراحی، زمان توسعه، مصرف منابع و بستهشدن timing |
چه زمانی NPU انتخاب مناسبتری است؟
- مدل از خانوادهٔ رایج است و ابزار رسمی، اپراتورها و نوع دادهٔ آن را پشتیبانی میکنند.
- تیم میخواهد زودتر نمونهٔ محصول بسازد و توان طراحی منطق سفارشی محدود است.
- پردازش ورودی و خروجی را CPU یا peripheralهای موجود میتوانند با نرخ لازم انجام دهند.
- چرخهٔ تغییر مدل و انتشار firmware سریع است و SDK پلتفرم برای آن مسیر مناسبی دارد.
برای MCUs و دستگاههای محدود، شتابدهندههایی مثل Arm Ethos-U کنار Cortex-M طراحی شدهاند و ابزارهایی مانند Vela مدل را برای همان NPU آماده میکنند. با این حال، «وجود NPU» بهتنهایی تضمین نمیکند کل گراف روی آن اجرا شود؛ بررسی قالب مدل، اپراتورهای مجاز و نتیجهٔ کامپایل بخشی از کار انتخاب است.
چه زمانی FPGA ارزش بررسی دارد؟
- داده به شکل جریانی یا از رابط خاص میرسد و تأخیر کل سامانه از حسگر تا تصمیم مهم است.
- به پیشپردازش اختصاصی، چند کانال موازی یا اتصال به رابطهای صنعتی خاص نیاز دارید.
- مدل یا الگوریتم بخشی دارد که شتابدهندهٔ آماده بهخوبی پوشش نمیدهد و ارزش ساخت IP سفارشی وجود دارد.
- تیم تجربهٔ FPGA دارد و حجم تولید یا عمر پلتفرم، هزینهٔ توسعه و اعتبارسنجی سختافزار را توجیه میکند.
حتی در FPGA هم هیچ تضمین عمومی برای سرعت یا انرژی بهتر وجود ندارد. نتیجه به حجم محاسبات، نوع داده، پهنای باند حافظه، موازیسازی، نرخ کلاک و میزان استفاده از منابع وابسته است. ابزارهای AMD و Intel هر دو مسیرهای مدلمحور برای تبدیل، کامپایل و اجرای inference ارائه میکنند؛ در Intel FPGA AI Suite، مدل و توصیف معماری با کامپایلر به تنظیمات IP تبدیل میشوند. این یعنی سازگاری مدل و معماری FPGA باید در نمونهٔ عملی اثبات شود.
روش مقایسهٔ منصفانه روی برد واقعی
- یک workload مشخص بسازید: همان مدل، ورودی، پیشپردازش، نرخ فریم یا نرخ نمونهبرداری را برای هر دو گزینه تعریف کنید.
- محدودیتها را قبل از benchmark بنویسید: latency انتهابهانتها، throughput، دقت قابلقبول، بودجهٔ توان، اندازهٔ حافظه و هزینهٔ BOM را تعیین کنید.
- زمان فقط هستهٔ inference را نسنجید: انتقال داده، تبدیل قالب، پیشپردازش، فراخوانی runtime و پسپردازش را در زمان کل وارد کنید.
- مدل را برای هر پشته آماده کنید: quantization یا تبدیل لازم را انجام دهید و گزارش اپراتورهای پشتیبانیشده، fallback به CPU و بخشهای شتابگرفته را بررسی کنید.
- اندازهگیری را تکرار کنید: latency میانه و صدک ۹۹، انرژی هر inference، مصرف حافظه و دما را تحت بار پیوسته ثبت کنید.
- هزینهٔ مهندسی را هم حساب کنید: زمان یادگیری ابزار، اشکالزدایی، بهروزرسانی مدل، تأمین قطعه و نگهداری چندساله را کنار قیمت تراشه بگذارید.
نکتههای طراحی PCB و سامانه
شتابدهندهٔ قوی با تغذیه و حافظهٔ نامناسب به نتیجهٔ پایدار نمیرسد. برای FPGA یا SoC، ریلهای ولتاژ، ترتیب روشنشدن، افت گذرا، دفع حرارت و مسیرهای حافظه را طبق راهنمای همان برد و قطعه طراحی کنید. اگر از DRAM خارجی استفاده میشود، پهنای باند و layout آن میتواند گلوگاه باشد. رابط حسگر را هم طوری انتخاب کنید که داده با کمترین کپی و تبدیل غیرضروری به شتابدهنده برسد. در تست توان، مصرف کل برد را اندازه بگیرید، نه فقط رقم اسمی NPU یا FPGA را.
جمعبندی انتخاب
اگر مدل متعارف است و هدف، استقرار سریع با ابزار آماده است، ابتدا NPU را با مدل واقعی ارزیابی کنید. اگر جریان داده، رابطها یا pipeline اختصاصی تعیینکنندهاند و تیم توان توسعهٔ سختافزار دارد، FPGA را روی نمونهٔ واقعی مقایسه کنید. برای هر دو مسیر، دادهٔ تصمیم باید از benchmark منصفانه، دقت مدل و مصرف انرژی کل سامانه بیاید. گاهی پاسخ مناسب یک SoC ناهمگن است که CPU، NPU و منطق قابلبرنامهریزی را با هم بهکار میگیرد.
سوالات متداول
آیا FPGA همیشه کمتأخیرتر از NPU است؟
خیر. FPGA امکان ساخت pipeline سفارشی میدهد، ولی کیفیت نتیجه به پیادهسازی و مسیر حافظه وابسته است. NPU آماده ممکن است برای مدل پشتیبانیشده سریعتر و سادهتر باشد. latency کل را روی برد بسنجید.
آیا برای FPGA باید کل شبکه را با HDL از نو نوشت؟
نه همیشه. ابزارهای موجود میتوانند مدل را کامپایل یا بخشهایی از آن را روی IP شتابدهنده اجرا کنند؛ اما میزان خودکارسازی، اپراتورهای پشتیبانیشده و نیاز به طراحی سفارشی بین پلتفرمها فرق دارد.
برای نمونهٔ اولیهٔ کمتیراژ کدام را انتخاب کنم؟
اگر مدل روی NPU موجود قابل اجراست، آن مسیر معمولاً ارزیابی سادهتری دارد. بااینحال، رابطها و نیاز واقعی پروژه را هم بسنجید؛ نتیجهٔ انتخاب را با اندازهگیری و هزینهٔ توسعه تعیین کنید، نه فقط قیمت قطعه.
دیدگاهتان را بنویسید