ОТ 0 ДО реальной видео карты - дома №1

Admin Admin 4 Октября 2025

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. Подготовка платы

  1. Скачайте образ Linux для вашей платформы и запишите на microSD (для KV260 — «Starter Linux image»). AMD Documentation

  2. Вставьте карту, подайте питание, загрузитесь в Linux на плате. Руководство по «Setting Up … ZCU102/ZCU104/KV260/VCK190» проведёт по шагам. AMD Documentation

A2. Подготовка хоста (ваш ПК)

  1. Установите Docker.

  2. Возьмите готовый контейнер 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. Запуск примеров и бенчмарков

  1. Откройте контейнер и клонируйте репозиторий:
git clone https://github.com/Xilinx/Vitis-AI.git
cd Vitis-AI
./docker_run.sh xilinx/vitis-ai-pytorch-cpu:latest
  1. Используйте Vitis AI Model Zoo — там есть готовые модели/скрипты для запуска на плате. Xilinx+1

  2. Установите на плате VART (Vitis AI Runtime) по «Quick Start Guide for Zynq US+» и соответствующему разделу UG1414. Xilinx+1

  3. Запустите демо (например, 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. Быстрый старт в софте (без железа)

  1. Клонируйте nvdla/hw и nvdla/sw с GitHub. GitHub+1

  2. Пройдите Environment Setup Guide (сборка, переменные окружения). Обратите внимание: протестированная конфигурация — nv_small. NVDLA

  3. Ознакомьтесь с 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‑платформа:

  1. По гиду «How to integrate a third‑party accelerator (NVDLA)» добавьте NVDLA как «третьесторонний акселератор» (AXI/APB+IRQ), соберите Linux/драйверы, подготовьте loadable. ESP — open SoC platform

  2. Сконфигурируйте SoC, сгенерируйте битстрим Vivado под, например, Xilinx VCU118, прошейте FPGA и загрузите Linux. ESP — open SoC platform

  3. Запустите 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

Что делаем:

  1. Ставим PCIe‑endpoint на FPGA‑плате, настраиваем BAR’ы для MMIO к регистрам NVDLA и DMA‑каналы к памяти.

  2. Пишем тонкий Linux‑драйвер/udev на хосте: mmap BAR, ioctl для загрузки *.nvdla, старт/стоп, опрос IRQ.

  3. Проверяем пропускную способность 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 стабилен:

  1. SKY130 (open PDK) + OpenLane/OpenROAD: синтез RTL→GDSII и tape‑out через MPW‑шаттлы (Efabless/SkyWater). GitHub+2openroad.readthedocs.io+2

  2. Память — через OpenRAM (генерация SRAM‑макросов под SKY130), интеграция в ваш дизайн. eScholarship

  3. Шаттлы/программы 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

Вспомогательные материалы (куда заглянуть сразу)

Что можно сделать уже сегодня (конкретные действия)

  1. Быстрый старт (советую начать именно с него):

    • Достаньте/закажите KV260 (или ZCU104).
    • Прошейте SD‑карту и запустите демо из Vitis AI Model Zoo → получите FPS. AMD Documentation+1
  2. Параллельно поднимайте NVDLA в ESP (открытая база):

    • Пройдите разделы «NVDLA» и «Integrate a third‑party accelerator» в ESP, соберите Linux + nvdla_runtime, соберите битстрим и прогоните LeNet. ESP — open SoC platform
  3. Дальше — PCIe‑«карта»:

    • Добавьте XDMA/QDMA или LitePCIe, заведите BAR + DMA, напишите минимальный драйвер на хосте. AMD+2GitHub+2
  4. Для собственного исследования/усовершенствований:

    • Поднимите Gemmini (Chipyard) и FireSim, сравните dataflow/тайлинг с NVDLA. GitHub+1

Даю пошаговый план «от 0 до рабочей «видеокарты» для ML‑инференса» + готовые шаблоны кода для PCIe‑драйвера и загрузчика. Пойдём двумя дорожками:

A) быстрый результат на Vitis AI DPU (FPGA) и B) открытая архитектура NVDLA (симулятор → FPGA → PCIe‑«карта»). В конце — шаги к ASIC.

Для ответа вы можете авторизоваться