نساج شبکه‌های عصبی
شبکه‌های عصبی عمیق (DNNs) مدل‌های یادگیری هستند که دارای محاسبات خیلی زیادی‌اند. این مدل‌ها کاربردهای روزافزونی در بخش‌های مختلف دارند. از آنجا که FPGA ها یک زیرساخت قابل‌برنامه‌نویسی برای شتاب‌دادن به محاسبات می‌دهند و همچنین امروزه در بیشتر دنیا به سادگی قابل دسترس‌اند، FPGAها یک انتخاب خیلی خوب برای پیاده‌سازی مدل‌های DNN هستند. اما استفاده از FPGAها به دلیل اینکه به‌دست آوردن کارایی و مصرف انرژی کم آنها به‌طور همزمان کار خیلی سختی است و همچنین DNNها به حافظه زیادی نیاز دارند (در FPGA معمولاً حافظه روی برد کم است)، پیاده‌سازی مدل‌ها با FPGA بسیار دشوار است. نساج شبکه‌های عصبی (DNNWEAVER) یک چارچوب است که به صورت خودکار یک کد قابل‌سنتز برای یک زوج مرتب (DNN, FPGA) تولید می‌کند. مدل DNN را به صورتی که در Caffe معرفی می‌کنند به عنوان ورودی می‌دهند.
روند کلی کار این برنامه به این صورت است که ابتدا مدل ورودی را به یک زبان میانی تبدیل می‌کند که یک گراف از جریان داده کلی را نشان می‌دهد. در این مرحله با الگوریتمهای مختلف مدل داده شده را گروه‌بندی می‌کند تا با توجه به حافظه FPGA و دیگر منابع موجود روی FPGA به حداکثر استفاده مجدد از داده‌ها و بالاترین سطح کارایی برسد. بعد از آن نتیجه نهایی یک کد سنتزپذیر است که با بالاترین کارایی روی FPGA موردنظر تمامی نیازهای مدل ورودی را برآورده می‌سازد.
این کار کمک می‌کند تا چرخه طولانی لازم برای استفاده از FPGA در شبکه‌های عصبی عمیق کوتاه‌تر شود. هدف از این کار تولید یک چارچوب خودکار است که اولاً برنامه‌نویس را از جزییات مربوط به طراحی و بهینه‌سازی سخت‌افزار جدا می‌کند. دوماً خود چارچوب به منابع محدود موجود روی FPGA دست و پنجه نرم می‌کند؛ و در نهایت چارچوب پایدار برای FPGA فراهم می‌کند که کارایی بالایی را برای پیاده‌سازی مدل‌های مختلف شبکه‌های عصبی عمیق روی FPGAهای گوناگون ارائه می‌کند. برای رسیدن به چنین هدف‌هایی DNNWEAVER طراحی شده‌است. در مرحله اول DNNWEAVER نیاز به یک مدل شبکه عصبی عمیق دارد که با استفاده از یک رابط سطح بالا مشخص شده‌است.
ورودی برنامه DNNWEAVER یک توصیف‌گر سطح بالا از شبکه‌های عصبی عمیق است که در دانشگاه برکلی با نام قالب Caffe درست شده‌است.
Caffe یکی از پراستفاده‌ترین چارچوب‌های یادگیری عمیق است که توصیف شبکه را به عنوان ورودی می‌گیرد و به مدلی قابل اجرا روی CPU یا GPU تبدیل می‌کند.
DNNWEAVER به صورت خودکار مدل ورودی را به کد سنتزپذیر زبان وریلاگ تبدیل می‌کند. DNNWEAVER از چهار بخش نرم‌افزاری تشکیل شده‌است:
ترجمه‌گر شبکه عمیق توصیف‌شده را به معماری مجموعه دستورها خاصی که مسیر داده را مشخص می‌کند تبدیل می‌کند. هر دستور در این مجموعه نشان دهنده یک گره در گراف مسیر داده شبکه است. توجه کنید که FPGA مستقیماً این دستورها را اجرا نمی‌کند. کامپایلر DNNWEAVER این دستورها را به سیگنال‌های کنترلی FPGA می‌نگارد و یک تقویم اجرا را درست می‌کند. این روش یک واسط نرم‌افزار-سخت‌افزار یکپارچه را فراهم می‌کند؛ بنابراین به کمک این معماری مجموعه دستورها انواع گوناگونی از پیاده‌سازی شتاب‌دهنده‌ها را که با محدودیت‌های FPGA مقصد سازگار است، امکان‌پذیر می‌کند.
نقشه‌کش طرح دستورها تولید شده در مرحله قبل را به عنوان ورودی می‌گیرد و با کمک الگوریتم بهینه‌سازی منابع الگو قالب‌های سخت‌افزاری را برای FPGA مقصد بهینه می‌کند. نقشه‌کش طرح محاسبات هر لایه را به گروه‌هایی از عملگرها بخش‌بندی می‌کند که داده‌ها را به اشتراک می‌گذارند یا استفاده مجدد می‌کنند. به هرکدام این بخش‌ها تکه می‌گوییم. هر تکه بعد از محاسبه در حافظه ریخته می‌شود و FPGA به سراغ محاسبه تکه بعدی می‌رود. شتاب‌دهنده شبکه‌های عصبی مشکل اساسی با مقدار زیاد حافظه موردنیاز برخلاف حافظه کم FPGA دارد که DNNWEAVER این مشکل را با استفاده از الگوریتم بهینه‌سازی منابع الگو بهبود می‌دهد و به کمک آن یک تعادل بین عملگرهای موازی و استفاده مجدد از داده‌ها با توجه به محدودیت‌های FPGA مقصد برقرار می‌کند.
نسّاجی طرح مرحله یکی‌مانده به آخر از DNNWEAVER است که ورودی آن مقدار منابع موردنیاز و تقویم اجرای تولید شده در مرحله قبل است و به کمک آن هسته شتاب‌دهنده را تولید می‌کند. DNNWEAVER از تعدادی قالب بهینه‌سازی دستی استفاده می‌کند که با توجه به گرفتن منابع و سازمان‌دهی سخت‌افزار که در مرحله قبل تولید شده از آن قالب‌ها استفاده می‌کند.
آخرین قسمت DNNWEAVER مجتمع‌کننده است. در این مرحله کدهای رابط حافظه به کدهای شتاب‌دهنده اضافه می‌شود. از آنجایی که FPGAهای مختلف از رابط‌های مختلفی برای ارتباط با DRAM خارجی استفاده می‌کنند، این بخش شامل کتابخانه‌هایی از رابط‌های DRAM است که در هر بار کد لازم را اضافه می‌کند.
در این حوزه کاری چندین سخت‌افزار با اهداف مختلف ایجاد شده‌است. هر چند که DNNWEAVER یک شتاب‌دهنده نیست، بلکه تولیدکننده کد یک شتاب‌دهنده است.
Tabla یک شتاب‌دهنده FPGA برای فاز آموزش الگوریتم‌های یادگیری ماشین ارائه می‌کند در حالی که DNNWEAVER رو رابط شبکه‌های عصبی تمرکز دارد. Tabla از زبان ریاضیاتی مختص به خودش استفاده می‌کند در حالی که DNNWEAVER از زبان Caffe برای مشخص کردن مدل استفاده می‌کند.
کار انجام شده توسط چن و همکارانش روی طرحی تحلیلی بر اساس مدل خط بیشترین کار می‌کند تا با استفاده از آن سریع‌ترین طرح را برای شبکه عصبی عمیق مربوطه روی FPGA بیابند. اما این کار برخی لایه‌ها مثل ائتلافی (Pooling) را دربر نمی‌گیرد.