EdigE
← ЛЕНТА

openTPU связывает Python, собственную ISA и Kintex‑7 побитно

openTPU можно проследить от выражения в Python до каждого бита внутри FPGA. Репозиторий объединяет компилятор, собственную систему команд, побитно точный симулятор, SystemVerilog-реализацию, PCIe-драйвер и программы запуска моделей. Это позволяет сравнивать промежуточные результаты программы с аппаратурой, а не разбирать готовый ускоритель только по его внешнему интерфейсу.

Первая реализация рассчитана на Xilinx Kintex‑7 XC7K480T. Плата соединена с хостом по PCIe Gen2 x8 и несёт 4 ГБ DDR3 в двух каналах. Вычислительное ядро построено вокруг систолического массива из четырёх колонок и восьми векторных линий. Компилятор раскладывает операции модели в команды этой архитектуры, а симулятор исполняет тот же поток с той же целочисленной арифметикой до загрузки битстрима.

На четырёхбитной LFM2.5-230M авторы получили 82,1 токена в секунду. Во время декодирования память передавала 14,1 ГБ/с при теоретическом пределе 17,1 ГБ/с — около 82% доступной полосы. Эти числа описывают конкретное сочетание небольшой модели, низкой точности, выбранной FPGA и программного стека; переносить их на другие сети или сравнивать напрямую с современными GPU нельзя.

Сильная сторона проекта — воспроизводимая граница между слоями. Ошибку округления можно искать в симуляторе ISA, простой массива — в RTL, недогруз памяти — в счётчиках аппаратуры, а неверный тензор — в компиляторе. Открытая только на уровне RTL система обычно оставляет за кадром как раз эти связующие части.

Kintex‑7 здесь выступает не обещанием универсального «TPU», а стендом, на котором видна цена каждого архитектурного решения. Результат уже достаточно конкретен для проверки: опубликованы исходники всей цепочки, параметры платы и измеренная полоса памяти. Следующий содержательный тест — повторить числа на независимой системе и посмотреть, как стек поведёт себя на моделях, которые перестают помещаться в удобный для этой архитектуры режим.