ОТ 0 ДО реальной видео карты - дома №1
C нуля» к реальному ускорителю/«видеокарте» для ML‑инференса двумя путями:
-
Быстрый прототип на готовом Vitis AI DPU (FPGA‑плата от AMD/Xilinx) — минимальные риски, сразу будут бенчмарки. AMD Documentation+2AMD Documentation+2
-
Открытая архитектура — адаптируем NVDLA или Gemmini и доводим до FPGA/ASIC. NVDLA+1
Ниже — пошаговая инструкция для новичка. Выберите путь A (самый быстрый старт), затем, когда появится уверенность, берите путь B/C, и при желании — шаги до ASIC.
Путь A. Быстрый результат: Vitis AI DPU на плате AMD/Xilinx
Что получится: реальный аппаратный ускоритель, работающие демо‑сети, измеренные FPS/латентность, понятный референс по пропускной способности памяти.
A0. Что купить/взять
- Подходящие платы: Kria KV260, ZCU104/ZCU102, VCK190 (Versal). Эти платы прямо поддерживаются в руководстве Vitis AI. AMD Documentation
A1. Подготовка платы
-
Скачайте образ Linux для вашей платформы и запишите на microSD (для KV260 — «Starter Linux image»). AMD Documentation
-
Вставьте карту, подайте питание, загрузитесь в Linux на плате. Руководство по «Setting Up … ZCU102/ZCU104/KV260/VCK190» проведёт по шагам. AMD Documentation
A2. Подготовка хоста (ваш ПК)
-
Установите Docker.
-
Возьмите готовый контейнер Vitis AI 3.5 (есть CPU‑only и ROCm‑GPU варианты):
docker pull xilinx/vitis-ai-pytorch-cpu:latest
# или TensorFlow2:
docker pull xilinx/vitis-ai-tensorflow2-cpu:latest
Далее запускайте контейнер так, как показано в «Host Installation / Vitis AI Containers». Xilinx+1
A3. Запуск примеров и бенчмарков
- Откройте контейнер и клонируйте репозиторий:
git clone https://github.com/Xilinx/Vitis-AI.git
cd Vitis-AI
./docker_run.sh xilinx/vitis-ai-pytorch-cpu:latest
-
Используйте Vitis AI Model Zoo — там есть готовые модели/скрипты для запуска на плате. Xilinx+1
-
Установите на плате VART (Vitis AI Runtime) по «Quick Start Guide for Zynq US+» и соответствующему разделу UG1414. Xilinx+1
-
Запустите демо (например, ResNet50) и измерьте FPS/латентность. Поддерживаемые операторы/платформы также описаны в UG1414. AMD Documentation
Зачем это: вы сразу получите рабочий ускоритель и метрики — это «земля под ногами» и референс для своих будущих ядер. Документация актуальна и детальная. AMD Documentation
Путь B. Открытая архитектура: NVDLA (самый прямой путь к «собственной карте»)
Идея: взять open‑source архитектуру от NVIDIA, поднять софтстек (компилятор+рантайм), прогнать на модели, интегрировать в SoC, собрать на FPGA. Позже — путь к ASIC.
B1. Что это такое
NVDLA — открытая архитектура ИИ‑акселератора (варианты nv_small/nv_large), со софтовым стеком (компилятор/рантайм/драйвер). Стартовать проще всего с nv_small — он лучше всего проверен в репозитории. NVDLA+1
B2. Быстрый старт в софте (без железа)
-
Клонируйте nvdla/hw и nvdla/sw с GitHub. GitHub+1
-
Пройдите Environment Setup Guide (сборка, переменные окружения). Обратите внимание: протестированная конфигурация — nv_small. NVDLA
-
Ознакомьтесь с Software Manual (структура компилятора/рантайма). NVDLA
B3. Запустить модель в NVDLA Virtual Platform (симулятор)
-
Следуйте инструкции VP on AWS F1 (рекомендуется
f1.2xlarge) или локальной VP: поднимаете инстанс, ставите готовый AMI, гоняете loadable. NVDLA -
Есть и публикации/слайды по интеграции NVDLA с RISC‑V на FireSim (ускоренная симуляция на FPGA). ittc.ku.edu
B4. Компиляция» сети и рантайм
-
Скомпилируйте Caffe/ONNX‑модель в NVDLA Loadable через компилятор (есть готовые бинарники в
sw/prebuilt). Пример команд у Колумбийского ESP в их гиде (LeNet/MNIST):
./nvdla_compiler --prototxt lenet_mnist.prototxt --caffemodel lenet_mnist.caffemodel -o . --cprecision int8 --configtarget nv_small ...ESP — open SoC platform -
Рантайм состоит из KMD/UMD (kernel/user mode drivers) и утилиты
nvdla_runtime. NVDLA
B5. Из «симулятора» — на FPGA c ESP (Columbia ESP SoC)
Самый «новичково‑дружественный» путь интеграции NVDLA в целый SoC с Linux — ESP‑платформа:
-
По гиду «How to integrate a third‑party accelerator (NVDLA)» добавьте NVDLA как «третьесторонний акселератор» (AXI/APB+IRQ), соберите Linux/драйверы, подготовьте loadable. ESP — open SoC platform
-
Сконфигурируйте SoC, сгенерируйте битстрим Vivado под, например, Xilinx VCU118, прошейте FPGA и загрузите Linux. ESP — open SoC platform
-
Запустите
nvdla_runtimeна плате (там же показаны команды и ожидаемый вывод). ESP — open SoC platform
Почему ESP: это готовая «операционная среда» (процессор RISC‑V, память, шины, Linux), в которую NVDLA уже интегрирован. Вы экономите месяцы. ESP — open SoC platform
B6. Превращаем в «карту» под ПК (PCIe)
Чтобы получить «как видеокарта в системнике», добавьте PCIe‑endpoint + DMA:
-
Вариант нативный: IP‑ядра AMD XDMA/QDMA + их Linux‑драйверы. AMD+2Xilinx+2
-
Вариант open‑source: LitePCIe (ядро PCIe + утилиты) — референсы throughput ~31 Gb/s на ×8. GitHub+1
Что делаем:
-
Ставим PCIe‑endpoint на FPGA‑плате, настраиваем BAR’ы для MMIO к регистрам NVDLA и DMA‑каналы к памяти.
-
Пишем тонкий Linux‑драйвер/udev на хосте: mmap BAR, ioctl для загрузки
*.nvdla, старт/стоп, опрос IRQ. -
Проверяем пропускную способность PCIe/DDR, параллелим запросы.
Путь C. Открытая архитектура: Gemmini (RISC‑V, систолический массив)
Идея: генератор систолического массива (INT8/BF16 и др.) в экосистеме Chipyard, богатая документация и примеры — удобно для своих модификаций. Chipyard Documentation
C1. Установка Chipyard + Gemmini
git clone https://github.com/ucb-bar/chipyard.git
cd chipyard
./build-setup.sh
source env.sh
# Дальше — раздел Gemmini Quick Start:
cd generators/gemmini
make -C software/libgemmini install
Команды и порядок — в README Gemmini (Quick Start). GitHub
C2. Сборка софта и симуляторов
-
Сборка тестов/библиотек Gemmini:
./software/gemmini-rocc-tests/build.sh -
Функциональная симуляция (Spike) и такт‑точная (Verilator) с готовыми конфигами:
make CONFIG=GemminiRocketConfig -C sims/verilator— соберёт симулятор и Verilog SoC. GitHub
C3. Ускоренная симуляция на FireSim (AWS F1 или локальные FPGA)
FireSim даёт десятки МГц симуляции SoC с Gemmini и позволяет гонять «большие» DNN в разумное время. Chipyard Documentation+1
Дальше путь аналогичен NVDLA: интеграция PCIe‑endpoint и драйвера даёт «карту» под ПК.
(Опционально) D. Путь к ASIC (чип в руках)
Когда прототип на FPGA стабилен:
-
SKY130 (open PDK) + OpenLane/OpenROAD: синтез RTL→GDSII и tape‑out через MPW‑шаттлы (Efabless/SkyWater). GitHub+2openroad.readthedocs.io+2
-
Память — через OpenRAM (генерация SRAM‑макросов под SKY130), интеграция в ваш дизайн. eScholarship
-
Шаттлы/программы MPW (Google/SkyWater/Efabless) — периодические наборы на SKY130. Skywater Technology+1
Caravel‑harness (готовое «шасси» SoC с user‑area) заметно упрощает bring‑up. caravel-harness.readthedocs.io
Контрольные точки (чтобы не «утонуть»)
Шаг 1. Доказательство работоспособности (1–2 дня):
Запустить демо‑модель из Vitis AI Model Zoo на плате KV260/ZCU104 и получить FPS. Xilinx
Шаг 2. Открытая архитектура (1–2 итерации):
-
Для NVDLA: собрать компилятор/рантайм, прогнать LeNet/ResNet в VP/ESP, получить лог
nvdla_runtime. ESP — open SoC platform -
Для Gemmini: запустить тесты на Verilator и FireSim, зафиксировать конфигурацию массива. GitHub+1
Шаг 3. «Карта» под ПК:
Поднять PCIe DMA (XDMA/QDMA или LitePCIe), написать минимальный драйвер и пользовательскую утилиту nvdla_run/gemmini_run. AMD+2GitHub+2
Шаг 4. (По желанию) ASIC‑POC:
Синтез ядра на SKY130 через OpenLane, обвязка Caravel, участие в MPW. GitHub+1
Частые подводные камни и как избежать
-
NVDLA: только nv_small действительно покрыт тестами в открытом репо — начинайте с него. NVDLA
-
Память — узкое место. Планируйте SRAM/banking/двойную буферизацию, тильность. Это критично и для NVDLA, и для Gemmini. (См. архитектурные описания/ISA). NVDLA+1
-
PCIe: начните с готового IP (XDMA/QDMA) и эталонного драйвера — получите стабильный DMA раньше, чем если писать endpoint «с нуля». AMD+1
-
Версии Vitis AI/контейнеры: придерживайтесь матрицы версий (3.5 и соответствующие Docker‑образы). AMD Documentation+1
Вспомогательные материалы (куда заглянуть сразу)
-
NVDLA: сайт/доки, репозитории hw/sw, компилятор/рантайм. NVDLA+2GitHub+2
-
Гид ESP (Columbia): интеграция NVDLA и запуск на FPGA — пошагово, со скриптами. ESP — open SoC platform
-
Gemmini: документация в Chipyard + README с командами Quick Start. Chipyard Documentation+1
-
Vitis AI (UG1414 3.5), «Setting Up … ZCU102/ZCU104/KV260/VCK190», Model Zoo. AMD Documentation+2AMD Documentation+2
-
OpenLane/OpenROAD и Caravel для ASIC. GitHub+2openroad.readthedocs.io+2
Что можно сделать уже сегодня (конкретные действия)
-
Быстрый старт (советую начать именно с него):
- Достаньте/закажите KV260 (или ZCU104).
- Прошейте SD‑карту и запустите демо из Vitis AI Model Zoo → получите FPS. AMD Documentation+1
-
Параллельно поднимайте NVDLA в ESP (открытая база):
- Пройдите разделы «NVDLA» и «Integrate a third‑party accelerator» в ESP, соберите Linux +
nvdla_runtime, соберите битстрим и прогоните LeNet. ESP — open SoC platform
- Пройдите разделы «NVDLA» и «Integrate a third‑party accelerator» в ESP, соберите Linux +
-
Дальше — PCIe‑«карта»:
- Добавьте XDMA/QDMA или LitePCIe, заведите BAR + DMA, напишите минимальный драйвер на хосте. AMD+2GitHub+2
-
Для собственного исследования/усовершенствований:
- Поднимите Gemmini (Chipyard) и FireSim, сравните dataflow/тайлинг с NVDLA. GitHub+1
Даю пошаговый план «от 0 до рабочей «видеокарты» для ML‑инференса» + готовые шаблоны кода для PCIe‑драйвера и загрузчика. Пойдём двумя дорожками:
A) быстрый результат на Vitis AI DPU (FPGA) и B) открытая архитектура NVDLA (симулятор → FPGA → PCIe‑«карта»). В конце — шаги к ASIC.