Get Mystery Box with random crypto!

Цікавий проект 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 разів.

До речі, виглядає, як цікавий напрямок для диплому бакалавра чи магістра