Цікавий проект CFU-Playground від інженерів Google для апаратн | Lampa
Цікавий проект CFU-Playground від інженерів Google для апаратного прискорення задач машинного навчання на FPGA/ASIC
Репозиторій: https://github.com/google/CFU-Playground
Відео з описом і прикладом застосування:
Документація: https://cfu-playground.readthedocs.io/en/latest/
Ідея CFU-Playground полягає у тому, шоб прискорювати не сам TensorFlow, а конкретну реалізацію нейромережі (або іншої ML задачі) шляхом додавання нових апаратних інструкцій до RISC-V процесора в FPGA/ASIC.
В TensorFlow створюється нейромережа під необхідну задачу (далі - модель). Модель конвертається в TFLite (TensorFlow Lite). TFLite - це відкрита бібліотека (вагою десятки кілобайт) для запуску нейромереж на мікроконтролерах, у т.ч. без ОС. В TFLite 32-бітні змінні типу float квантуються у 8-бітні цілочисельні значення. Засобами CFU-Playground виконується профайлінг виконання моделі для визначеня вузьких місць, які необхідно прискорити. Для виявлених проблемних місць визначаються обчислювачі TensorFlow Kernels, які задіяні в цих проблемних участках і далі створюються оптимізовані версії кернелів під конкретну систему-на-кристалі на базі RISC-V процесора з апаратною підтримкою додаткових інструкцій, які і будуть прискорювати виконання повільних операцій.
Кастомні інструкції повністю інтегровані в ковеєр RISC-V. Для їх підтримки з боку софта використовуються спеціальні макроси і немає необхідності перекомпільовувати GCC. Є можливість зберігати стан всередині блоку кастомних інструкцій (наприклад, для реалізації перемноження з накопиченням, або згортки, або FFT).
Проект повністю опенсорсний. Немає привязки до конкретного вендора FPGA. Приклади створені для Xilinx Artix, але автори стверджують, що CFU-Playground не складно портувати і на інші FPGA.
За словами розробників перевагами CFU-Playground є простота початку роботи і щвидкість виконання ітерацій (внесення змін і оцінки результатів).
У якості RISC-V процесора використовується VexRiscv: https://github.com/SpinalHDL/VexRiscv
Для створення системи-на-кристалі на основі VexRiscv застосований відкритий кросплатформений фреймворк LiteX, який підтримується для Intel, Xilinx, Lattice: https://github.com/enjoy-digital/litex
З метою створення бітстрімів FPGA можна скористатися або пропрієтарними інструментами на зразок Vivado, або відкритим САПР SymbiFlow, який може виконувати синтез і Place&Roure, а також створення бітстрімів для Xilinx і Lattice: https://symbiflow.github.io/
В кінці відео наводиться приклад, як за допомогою апартного прискорення вдалося пришвидшити операцію двовимірної згортки Conv2D в 55 разів.
До речі, виглядає, як цікавий напрямок для диплому бакалавра чи магістра