Экспорт AMD Xilinx для Ultralytics YOLO с Vitis AI#
При экспорте моделей Ultralytics YOLO26 с помощью format="xilinx" выполняется квантование с AMD Quark для NPU адаптивных SoC AMD Versal AI Edge Series Gen 2. После этого компилятор Vitis AI от AMD может создать модель .rai. Этот же экспорт проверяет точность INT8 на любом хосте до развертывания.
Экспорт предназначен для поддерживаемого процесса Vitis AI NPU на устройствах Versal AI Edge Series Gen 2, таких как оценочный комплект VEK385. Для DPU Zynq UltraScale+ и Kria, а также NPU Versal AI Edge первого поколения (VEK280) используются другие процессы Vitis AI, описанные в разделе Развертывание на других целевых устройствах AMD Xilinx.
Устройства AMD Xilinx используются во многих промышленных камерах, системах технического зрения для автомобилей, роботах, дронах и медицинском оборудовании по всему миру. Они объединяют процессоры Arm с программируемой логикой, а в новых устройствах — и специализированные AI Engines. Благодаря этому один чип может захватывать видео, предварительно обрабатывать его, выполнять детекцию объектов и реагировать на результат с низкой и предсказуемой задержкой инференса.
В этом руководстве рассматриваются экспорт AMD Xilinx, компиляция и запуск модели на плате Versal, семейства устройств AMD Xilinx, работа ИИ на этих устройствах, а также операторы Ultralytics YOLO, поддерживаемые каждым ускорителем.
Что такое AMD Xilinx?#
В 1980-х годах Xilinx изобрела программируемую пользователем вентильную матрицу (FPGA) и стала ведущим поставщиком адаптивных SoC и FPGA. AMD завершила приобретение Xilinx в феврале 2022 года, и теперь эти линейки продуктов продаются под брендом AMD: AMD Zynq, AMD Kria, AMD Versal и AMD Vitis.
Оба названия относятся к одним и тем же продуктам. AMD продвигает их как «адаптивные SoC и FPGA», но инженеры по-прежнему часто говорят «Xilinx». В номерах моделей используется префикс XC (например, xczu7ev), а старый репозиторий Vitis AI и образы Docker по-прежнему размещены на GitHub и Docker Hub под названием Xilinx. В этом руководстве используется название «AMD Xilinx», чтобы его можно было найти по любому из этих названий.
Основные термины и понятия#
При развертывании AMD Xilinx используется собственная терминология. В таблице ниже объясняется каждый термин из этого руководства.
| Термин | Что это означает |
|---|---|
| FPGA | Программируемая пользователем вентильная матрица: чип, цифровая логика которого настраивается после производства путем загрузки проекта, называемого битстримом. Она позволяет реализовать специализированные аппаратные блоки, например конвейеры обработки видео или ускорители нейронных сетей. |
| Программируемая логика (PL) | Логическая матрица FPGA внутри SoC AMD Xilinx. В устройствах Zynq и Kria AI-ускоритель реализован в PL. |
| Система обработки (PS) | Аппаратные ядра CPU Arm, контроллеры памяти и периферийные устройства SoC. На PS работают Linux, приложение и любые слои модели, которые не может выполнить ускоритель. |
| Адаптивная SoC / MPSoC | Система на кристалле, объединяющая систему обработки с программируемой логикой, а во многих устройствах Versal — и с AI Engines. MPSoC означает многопроцессорную систему на кристалле. |
| AI Engine (AIE, AIE-ML, AIE-MLv2) | Массивы специализированных векторных процессоров во многих устройствах Versal, включая рассматриваемую здесь серию Versal AI Edge. Они предназначены для машинного обучения и обработки сигналов. |
| DPU | Блок обработки глубокого обучения: INT8-ускоритель нейронных сетей AMD, поставляемый в виде IP-блока и встраиваемый в PL (например, DPUCZDX8G в Zynq UltraScale+ и Kria). Размеры от B512 до B4096 указывают пиковое число операций за такт. |
| NPU / IP-блок NPU | Нейронный процессор: ускоритель инференса текущего поколения от AMD, который в последних версиях Vitis AI заменяет DPU. AMD описывает IP-блок NPU как программный ускоритель, объединяющий AI Engines с программируемой логикой, поэтому для него также необходим соответствующий проект оборудования. См. словарную статью о NPU. |
| Vitis AI | Набор инструментов AMD для развертывания нейронных сетей на устройствах AMD Xilinx. Он включает квантование, компиляцию, среды выполнения, примеры и среды Docker. |
| AMD Quark | Текущая библиотека AMD для квантования моделей, используемая в процессе для Versal AI Edge Gen 2, чтобы преобразовать модель ONNX FP32 в модель INT8. |
| Квантование, PTQ и QAT | Преобразование весов и активаций FP32 в INT8. При посттренировочном квантовании (PTQ) используются калибровочные изображения. Квантование с учетом обучения (QAT) дообучает модель, чтобы восстановить точность. |
| Калибровочные изображения | Небольшой репрезентативный набор изображений, пропускаемых через модель при PTQ, чтобы выбрать масштаб INT8 для каждого тензора. |
| BF16 и смешанная точность | BFloat16 — это 16-битный формат чисел с плавающей запятой, сохраняющий диапазон FP32. При смешанной точности большая часть сети работает в INT8, а чувствительные слои — в BF16. |
| XIR | Промежуточное представление Xilinx: формат графа, который создает компилятор DPU и считывает среда выполнения. |
.xmodel | Сериализованный граф XIR. Квантователь записывает квантованный .xmodel, а компилятор DPU преобразует его в скомпилированный .xmodel с инструкциями DPU, квантованными весами и подграфами CPU. Для скомпилированной модели требуется соответствующая конфигурация DPU. |
arch.json / отпечаток DPU | Файл с описанием конкретной конфигурации DPU. Он нужен компилятору DPU; скомпилированный .xmodel для одного отпечатка не будет работать с другим. |
| Снимок | Каталог скомпилированной модели, созданный в процессе работы NPU на Versal AI Edge (VEK280). Он привязан к конкретному варианту IP-блока NPU. |
.rai | Файл скомпилированной модели, созданный в процессе работы NPU на Versal AI Edge Gen 2. |
| VART / VART-ML | Библиотеки среды выполнения Vitis AI, которые загружают скомпилированные модели и запускают их на плате; доступны API для C++ и Python. |
| Провайдер выполнения ONNX Runtime Vitis AI EP | VitisAIExecutionProvider для ONNX Runtime, который компилирует и запускает модели ONNX на NPU AMD. |
| Резервный запуск на CPU / разбиение графа | Если ускоритель не может выполнить оператор, компилятор обычно делит модель на подграфы ускорителя и CPU. Каждое такое разделение добавляет передачу данных, которая может существенно увеличить задержку. Некоторые операторы вместо этого принудительно переносят всю модель на CPU или приводят к ошибке компиляции. |
Семейства устройств AMD Xilinx для периферийного AI#
Устройства AMD Xilinx для периферийного AI относятся к трем семействам. В Zynq и Kria используется DPU в программируемой логике, а в рассматриваемых здесь устройствах Versal AI Edge — NPU на базе AI Engines.
| Семейство | Описание | Прикладной CPU | AI-ускоритель | Примеры плат |
|---|---|---|---|---|
| Zynq UltraScale+ MPSoC | Arm CPU и логика FPGA на одном чипе; варианты от ZU1 до ZU19 | Двухъядерный или четырехъядерный Arm Cortex-A53 | DPU, встроенный в программируемую логику | ZCU104, ZCU102, заказные платы |
| Системный модуль Kria K26 | Готовый к серийному производству модуль на базе Zynq UltraScale+ MPSoC | Четырехъядерный Arm Cortex-A53 | DPU, встроенный в программируемую логику | Комплект для разработки KV260 Vision AI, комплект для разработки робототехники KR260 |
| Серия Versal AI Edge | Адаптивные SoC; модели AIE-ML, например VE2302 и VE2802, работают с NPU | Двухъядерный Arm Cortex-A72 | NPU на базе AI Engines AIE-ML и PL | VEK280 |
| Серия Versal AI Edge Gen 2 | Адаптивная SoC нового поколения с AI Engines AIE-MLv2 | До восьми ядер Arm Cortex-A78AE | NPU на базе AI Engines AIE-MLv2 и PL | VEK385 |
Zynq UltraScale+ MPSoC#
Каждый чип Zynq UltraScale+ объединяет систему обработки Arm с FPGA-логикой. Система обработки включает двухъядерные (CG) или четырехъядерные (EG и EV) ядра Cortex-A53 и ядра реального времени Cortex-R5F. Устройства EV дополнены аппаратным видеокодеком H.264/H.265. Чтобы запускать нейронные сети, разработчики встраивают DPU в логику рядом с конвейерами обработки изображения и видео. В небольших устройствах DPU конкурирует за ресурсы с остальными компонентами проекта.
Системные модули Kria#
Модуль Kria K26 объединяет Zynq UltraScale+ MPSoC, память и систему питания в готовом к серийному производству модуле, поэтому тебе не придется самостоятельно проектировать процессор, память и подсистему питания. Модуль устанавливается на несущую плату — плату из стартового комплекта или собственную разработку. Он используется в комплекте для разработки KV260 Vision AI для интеллектуальных камер и комплекте для разработки робототехники KR260 для робототехники. Поскольку K26 построен на базе Zynq UltraScale+, для него используется тот же процесс работы с DPU. В линейку Kria входят и другие модули, поэтому перед выбором процесса проверь, какой процессор установлен в твоем модуле.
Адаптивные SoC Versal#
Versal — семейство адаптивных SoC от AMD. Серии AI Edge и AI Core дополнены специализированными AI Engines, расположенными рядом с ядрами Arm и программируемой логикой; в некоторых других сериях Versal AI Engines нет. IP-блок NPU от AMD одновременно работает с AI Engines и программируемой логикой, а Vitis AI предназначен для компонентов AIE-ML серии AI Edge, например VE2302 и VE2802. Серия Versal AI Edge (оценочный комплект VEK280) и серия Versal AI Edge Gen 2 (оценочный комплект VEK385) — это текущие платформы AMD для периферийного AI, на которых сосредоточены последние версии Vitis AI.
Как работает AI на устройствах AMD Xilinx: DPU и NPU#
Большинство решений AMD Xilinx для AI работают по одной схеме. Ускоритель выполняет поддерживаемые слои, CPU Arm отвечает за предварительную обработку, постобработку и любые слои, которые ускоритель выполнить не может, а среда выполнения на плате координирует их работу.
AMD выпустила два поколения ускорителей, каждое со своим набором инструментов и форматом файла скомпилированной модели. В этом руководстве описаны Vitis AI 3.5 для DPU и Vitis AI 6.3 для NPU; для более поздних версий проверяй актуальную документацию AMD.
| Процесс | Оборудование | Набор инструментов | Квантователь | Скомпилированный артефакт | Среда выполнения на плате | Статус |
|---|---|---|---|---|---|---|
| DPU | Zynq UltraScale+, Kria | Vitis AI 3.5 (Docker) | vai_q_pytorch | .xmodel | VART | Замороженные компилятор, зоопарк моделей и IP-блок DPU |
| NPU (Versal AI Edge) | VEK280 и другие компоненты Versal AI Edge | Vitis AI 6.3 (Docker) | Встроено в процесс создания снимка | Снимок | VART-ML | Активно |
| NPU (Versal AI Edge Gen 2) | VEK385 и другие компоненты Gen 2 | Vitis AI 6.3 (Docker) | AMD Quark | .rai | ONNX Runtime Vitis AI EP или VART-ML | Активно |
Vitis AI 3.5 — последний выпуск с обновлениями компилятора DPU и зоопарка моделей. В более поздних выпусках репозитория Xilinx/Vitis-AI компилятор, зоопарк моделей и IP-ядро DPU для Zynq UltraScale+ остаются без изменений, а среда выполнения и совместимость с более новыми версиями инструментов AMD обновляются (см. примечания к выпуску Vitis AI 5.0); в актуальной документации AMD по Vitis AI NPU описывается как замена устаревшей архитектуры DPU. Продукты Zynq UltraScale+ и Kria можно и дальше выпускать с DPU, но поддержка операторов для неё расширяться не будет, поэтому для новых архитектур моделей потребуются адаптации, описанные в разделе Совместимость моделей YOLO.
Процессоры AMD Ryzen AI в ПК также оснащены NPU, но в них используется отдельный стек Ryzen AI Software, а не встроенные потоки Vitis AI, описанные в этом руководстве. Информацию о GPU AMD Instinct и Radeon см. в разделе Интеграция с GPU AMD.
Какой поток Vitis AI выбрать?#
Выбери поток в зависимости от устройства на своей плате:
Экспорт в AMD Xilinx: преобразование модели YOLO#
Поддерживаемые задачи#
Экспорт AMD Xilinx поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе с соответствующими головами модели.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Обнаружение | ✅ | ✅ | ✅ |
| Сегментация | ✅ | ✅ | ✅ |
| Семантическая сегментация | ❌ | ❌ | ✅ |
| Глубина | ❌ | ❌ | ✅ |
| Классификация | ✅ | ✅ | ✅ |
| Оценка позы | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Установка#
Экспорт AMD Xilinx выполняется в Linux (x86-64 или ARM64) с Python 3.11–3.13 — именно эти версии поддерживает AMD Quark. При первом экспорте также компилируются пользовательские операторы Quark, для чего нужен компилятор C++, например g++.
# Install the required package for YOLO
pip install ultralyticsПри первом экспорте AMD Quark автоматически устанавливается из PyPI. Чтобы заранее установить зависимости для экспорта:
pip install "ultralytics[export-xilinx]"Для установки репозитория в редактируемом режиме замени "ultralytics[export-xilinx]" на -e ".[export-base,export-xilinx]". Чтобы воспроизвести окружение Python 3.12 и выполнить проверочный экспорт, используемые в CI, запусти имеющийся сборщик окружения из корневого каталога репозитория:
ULTRALYTICS_ISOLATED_VENVS="$PWD/.venvs" python .github/scripts/create-export-env.py --env isolated-xilinxИспользование#
Формат AMD Xilinx поддерживает режимы экспорта, предсказания и валидации. Без AMD Vitis AI Execution Provider предсказание и валидация выполняются на квантованной модели с помощью ONNX Runtime на CPU, что позволяет измерить точность INT8 на любом хосте. Если ONNX Runtime предоставляет VitisAIExecutionProvider, как на плате Versal AI Edge Series Gen 2, Ultralytics выбирает его автоматически.
from ultralytics import YOLO
# Загрузи модель YOLO26
model = YOLO("yolo26n.pt")
# Экспорт в формат AMD Xilinx для VEK385 (quantize=8 включается автоматически)
model.export(format="xilinx") # creates 'yolo26n_xilinx_model/'from ultralytics import YOLO
# Загрузка экспортированной модели AMD Xilinx
model = YOLO("yolo26n_xilinx_model")
# Выполнить инференс
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Загрузка экспортированной модели AMD Xilinx
model = YOLO("yolo26n_xilinx_model")
# Валидация точности INT8 на наборе данных COCO8
metrics = model.val(data="coco8.yaml")Названия форматов vitis, vitisai и versal — это псевдонимы xilinx.
Аргументы экспорта#
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'xilinx' | Целевой формат экспортированной модели, определяющий совместимость с NPU AMD Versal AI Edge Series Gen 2. |
imgsz | int или tuple | 640 | Требуемый размер входного изображения модели: целое число для квадратных изображений или кортеж (height, width). Размер пакета экспортированной модели фиксирован и равен 1. |
quantize | int или str | 8/авто | Точность квантования. Требуется 8 (Vitis AI INT8); если параметр не указан, он включается автоматически. |
data | str | None | YAML-файл набора данных для калибровки INT8; для классификации вместо него укажи каталог с набором данных или название встроенного набора данных. Если параметр не указан, Ultralytics использует набор данных для калибровки соответствующей задачи, например coco128.yaml для обнаружения объектов. |
fraction | float | 1.0 | Доля набора данных для калибровки, которую нужно использовать. |
name | str | 've2-xc2ve3858' | Устройство для компилятора Vitis AI: 've2-xc2ve3858' (оценочный комплект VEK385), 've2-xc2ve3804', 've2-xc2ve3558', 've2-xc2ve3504', 've2-xc2ve3358' или 've2-xc2ve3304'. |
opset | int | None | Версия ONNX opset для промежуточного графа. По умолчанию используется 17 — версия opset, которую AMD проверяет для YOLO на Vitis AI. |
simplify | bool | True | Упрощает промежуточный граф ONNX с помощью onnxslim. |
device | str | None | Указывает устройство для экспорта: GPU (device=0) или CPU (device=cpu). |
Установи nms=False, чтобы экспортировать голову YOLO26 без NMS. Встроенный NMS (nms=True) не поддерживается, поскольку AMD относит NonMaxSuppression к операторам, которые могут перенести всю модель на CPU.
Точность INT8 зависит от того, насколько калибровочные изображения отражают сцену развертывания. Передай data= YAML-файл набора данных, содержащий не менее 300 репрезентативных изображений с твоих камер; стандартные наборы данных для калибровки — это небольшие общедоступные выборки.
Подробнее о процессе экспорта смотри на странице документации Ultralytics об экспорте.
Структура вывода#
После успешного экспорта создается каталог модели со следующей структурой:
yolo26n_xilinx_model/
├── yolo26n.onnx # AMD Quark VINT8 model with the Ultralytics metadata
└── vitisai_config.json # Vitis AI compiler configuration for the target deviceКомпиляция модели, описанная ниже, создает в том же каталоге кэш компилятора yolo26n/, содержащий модель NPU yolo26n.rai и отчеты AMD о компиляции, например final-vaiml-pass-summary.txt.
Как работает экспорт#
Экспорт соответствует описанному AMD процессу Vitis AI для Versal AI Edge Series Gen 2:
- Экспорт ONNX с opset 17 и статическим размером пакета 1.
- Квантование AMD Quark с конфигурацией
VINT8(симметричный INT8 со степенными масштабами) и параметрами, необходимыми AMD для компиляции на NPU:Int32Bias=False,enable_npu_cnn=True,DedicatedQDQPair=TrueиQuantizeAllOpTypes=True. Для калибровки используется стандартный загрузчик Ultralytics для калибровки INT8 с той же предобработкой, что и при инференсе: letterbox, RGB и диапазон 0–1. - Смешанная точность: голова модели остается в формате с плавающей точкой, а компилятор Vitis AI запускает ее на NPU в BF16. Квантование головы в INT8 приводит к большей части потери точности; по той же причине в руководстве AMD по YOLOv8m постобработка не переводится в INT8.
- Конфигурация компилятора:
vitisai_config.jsonвыбирает целевое устройствоVAIMLи устройство изname.
Точность#
В таблице сравниваются экспортированная модель INT8 и модель ONNX FP32 на COCO val2017 (5 000 изображений) с размером 640; обе модели запускаются на хосте с помощью ONNX Runtime на CPU. Модели INT8 калибровались на стандартном наборе данных coco128.yaml; калибровка на собственных изображениях для развертывания обычно сокращает разрыв.
В этих тестах квантованная модель запускается с ONNX Runtime на CPU хоста — это базовый вариант, с которым AMD сравнивает результаты NPU в своей методике оценки точности. Опубликованные AMD результаты для YOLOv8m на VEK385 демонстрируют тот же подход со смешанной точностью на NPU:
| Конфигурация YOLOv8m | Оборудование | mAP50-95 (COCO) |
|---|---|---|
| ONNX в FP32 | CPU хоста | 49.95 |
| BF16 | NPU VEK385 | 50.29 |
| VINT8, конечная часть в FP32 | CPU хоста | 48.75 |
| VINT8, конечная часть в BF16 | NPU VEK385 | 48.38 |
Источник: руководство AMD по YOLOv8m для Versal AI Edge Gen 2; в нём также указано среднее время инференса 10,69 мс по результатам 100 запусков VART при dp_size=1.
Компиляция и запуск на Versal AI Edge Gen 2#
Экспортированный каталог готов для компилятора AMD Vitis AI, который создает модель .rai для запуска на NPU.
-
Подготовь хост и плату. Выполняй компиляцию на хосте Linux x86-64 с помощью Docker-образа AMD Vitis AI 6.3 для Versal AI Edge Gen 2 и лицензии на компилятор AMD AI Engine (смотри страницу лицензирования AMD). Подготовь VEK385 по руководству AMD по настройке платы.
-
Скомпилируй модель. В контейнере создай сессию ONNX Runtime с Vitis AI Execution Provider — именно так это делается в руководстве AMD по компиляции. В экспортированный каталог будет записан кэш
yolo26n/сyolo26n.rai:import onnxruntime as ort d = "yolo26n_xilinx_model" options = {"config_file": f"{d}/vitisai_config.json", "cache_dir": d, "cache_key": "yolo26n", "target": "VAIML"} ort.InferenceSession(f"{d}/yolo26n.onnx", providers=["VitisAIExecutionProvider"], provider_options=[options])Проверь
yolo26n_xilinx_model/yolo26n/final-vaiml-pass-summary.txt, чтобы узнать, какая часть модели выполняется на NPU. Для YOLO26n с размером 640 компилятор AMD Vitis AI 6.3 размещает на NPU VEK385 99,9% операторов и вычислений в одном разделе. -
Запусти модель на плате. Скопируй экспортированный каталог на VEK385. ONNX Runtime с Vitis AI Execution Provider загружает скомпилированную модель
yolo26n.raiи запускает ее на NPU;YOLO("yolo26n_xilinx_model")автоматически выбирает этот провайдер, если он доступен.
Для компиляции нужен только ONNX Runtime от AMD, поэтому экспортируй модель на любом компьютере с Linux и скопируй каталог в контейнер, а не устанавливай туда Ultralytics: установка может изменить закрепленные версии пакетов контейнера. Если Ultralytics установлена рядом со сборкой AMD onnxruntime-vitisai, как на плате, она сохраняет эту сборку, а не заменяет ее стандартной onnxruntime.
Экспорт настраивает стандартную компиляцию для ONNX Runtime, которая выполняет на самом CPU Arm несовместимые с NPU операторы, например выбор top-k в YOLO26 с nms=False. Среда выполнения AMD VART-ML запускает модель, только если все операторы выполняются на NPU, если не добавить проходы разбиения CPU от AMD в vitisai_config.json; такие артефакты нельзя запускать через ONNX Runtime.
Совместимость моделей YOLO и поддерживаемые операторы#
Ускоритель выполняет быстрее только те операторы, которые реализованы в его аппаратной части. Если модель содержит неподдерживаемый оператор, компилятор обычно передаёт эту часть сети Arm CPU, а каждый переход между ускорителем и CPU увеличивает задержку. Некоторые операторы невозможно разделить: на NPU Versal AI Edge Gen 2 AMD указывает такие операторы, как NonZero и NonMaxSuppression, которые могут заставить выполнять всю модель на CPU. Поддержка операторов — важнейший фактор производительности модели YOLO на оборудовании AMD Xilinx.
В таблице показано, где выполняется каждый оператор модели YOLO26. Стандартный экспорт YOLO26n в ONNX содержит 87 активаций SiLU, каждая из которых экспортируется как Sigmoid и Mul, а также 4 оператора MatMul и 2 оператора Softmax из двух блоков внимания: блока C2PSA в конце базовой сети (слой 10) и блока C3k2 с механизмом внимания, формирующего выход P5 (слой 22).
| Оператор | Где встречается в YOLO | DPU (Zynq UltraScale+, Kria) | NPU (Versal AI Edge Gen 2) |
|---|---|---|---|
| Свёртка + пакетная нормализация | Каждый блок Conv | ✅ | ✅ |
| Активация SiLU | Каждый блок Conv (активация по умолчанию) | ❌ Выполняется на CPU; замени на Hard-Swish | ✅ |
| Hard-Swish, ReLU, ReLU6, LeakyReLU | Необязательные активации, заданные в YAML модели | ✅ Объединяется со свёрткой | ✅ |
| Sigmoid | Оценки классов в голове детекции | ❌ Выполняется на CPU (обычно в составе постобработки) | ✅ |
| MatMul между двумя активациями | Блоки внимания (C2PSA; C3k2 в YOLO26) | ❌ Выполняется на CPU | ✅ |
| Softmax | Блоки внимания; DFL в YOLOv8 и YOLO11 | ❌ Выполняется на CPU | ✅ |
| Reshape, Transpose | Блоки внимания | ⚠️ Объединяется, если возможно; иначе выполняется на CPU | ✅ |
| Split, Slice | Блоки C3k2 и C2f | ⚠️ Преобразуется в срезы; проверь отчёт компилятора | ✅ |
| Resize (увеличение ближайшим соседом) | Увеличение разрешения в шейке | ✅ | ✅ |
| MaxPool, Concat, Add | Блок SPPF и объединение признаков | ✅ | ✅ |
| TopK, GatherElements | Голова YOLO26 без NMS (nms=False) | ❌ Выполняется на CPU | ⚠️ Раздел CPU на хосте Arm |
| NonMaxSuppression | Только при экспорте с nms=True | ❌ Выполняется на CPU | ❌ Может заставить выполнять модель на CPU |
Источники: списки поддерживаемых операторов AMD UG1414, поддержка операторов PyTorch, а также списки поддерживаемых, выполняемых на CPU и неподдерживаемых операторов для Versal AI Edge Gen 2. Поддержка также зависит от конфигурации DPU и структуры графа, поэтому всегда проверяй отчёт компилятора о разделении модели.
YOLO26 не использует Distribution Focal Loss (DFL), поэтому, в отличие от YOLO11 и YOLOv8, для декодирования выходов координат рамок не нужен softmax. В YOLO26 также добавлен второй блок внимания по сравнению с YOLO11, поэтому перед выбором модели сравни отчёты компилятора и результаты тестирования непосредственно на целевом устройстве. Если nms не задан, экспорт сохраняет голову one-to-many, и для неё, как и для других моделей YOLO, требуется NMS на CPU. Чтобы вместо этого использовать голову YOLO26 one-to-one без NMS, выполни экспорт с nms=False: она заменяет NMS лёгким отбором top-k, который выполняется на CPU.
Подготовь YOLO26 к работе на DPU с Hard-Swish#
DPU объединяет со свёртками только ReLU, ReLU6, LeakyReLU, Hard-Swish и Hard-Sigmoid. Hard-Swish — аппаратно-эффективное приближение SiLU, поэтому это естественная замена. В YAML-файлах моделей Ultralytics можно задать ключ activation, чтобы изменить активацию по умолчанию для блоков Conv (руководство по настройке YAML модели).
Скопируй yolo26.yaml в yolo26-hswish.yaml и добавь одну строку в раздел параметров:
# Parameters
nc: 80 # number of classes
activation: nn.Hardswish() # default Conv activation, DPU-native
end2end: True # whether to use end-to-end modeЗатем создай модель, перенеси предобученные веса YOLO26 и выполни дообучение на своём наборе данных:
from ultralytics import YOLO
# Собери YOLO26n с активациями Hard-Swish; «n» в названии обозначает размер nano
model = YOLO("yolo26n-hswish.yaml").load("yolo26n.pt") # перенеси предобученные веса
# Дообучи модель, чтобы сеть адаптировалась к Hard-Swish
model.train(data="coco8.yaml", epochs=100, imgsz=640)У активаций нет весов, поэтому переносятся все предобученные веса. В экспортированном графе ONNX будет 87 операторов HardSwish и ни одного SiLU. Замени coco8.yaml на собственный набор данных и перед развёртыванием сравни точность с моделью SiLU в режиме Val.
- Замена на этапе квантования: задай
"convert_silu_to_hswish": trueв JSON-конфигурации квантователя PyTorch из Vitis AI 3.5, чтобы заменить SiLU во время квантования. Это избавляет от цикла обучения, но обычно снижает точность сильнее; частично восстановить её можно с помощью быстрого дообучения AMD или QAT. См. руководство по настройке vai_q_pytorch. - LeakyReLU: DPU реализует LeakyReLU с фиксированным отрицательным наклоном 26/256 (около 0.1). Если используешь LeakyReLU, обучай модель с
activation: nn.LeakyReLU(0.1015625), чтобы наклоны при обучении и развёртывании совпадали.
Обработка блоков внимания на DPU#
YOLO26 применяет механизм внимания в двух местах с самым низким разрешением (сетка 20×20 при входном размере 640): в блоке C2PSA на слое 10 и блоке C3k2 с механизмом внимания на слое 22. В YOLO11 есть один блок C2PSA. На DPU операторы MatMul и Softmax выполняются на CPU, разделяя модель на чередующиеся подграфы DPU и CPU. Есть три варианта:
-
Оставить блоки на CPU. В скомпилированной модели
.xmodelбудут подграфы CPU, поэтому запускай её с помощью Graph Runner от AMD. Он совместно выполняет подграфы DPU и CPU, если для каждого оператора есть реализация для CPU; в противном случае нужно самостоятельно реализовать и зарегистрировать недостающие операторы. При разрешении 20×20 вычисления внимания невелики, но каждый дополнительный переход между DPU и CPU увеличивает задержку, поэтому измерь её на своей плате. -
Использовать YAML без механизма внимания. В YAML-файле с Hard-Swish замени слой C2PSA на
nn.Identity, чтобы сохранить корректность индексов слоёв, используемых вConcatиDetect, а также отключи механизм внимания в слое 22:backbone: # ... layers 0-9 unchanged - [-1, 1, nn.Identity, []] # 10 C2PSA removed; keeps later layer indices valid head: # ... layers 11-21 unchanged - [-1, 1, C3k2, [1024, True, 0.5, False]] # 22 (P5/32-large), attention disabled - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)В экспортированном графе ONNX не будет операторов MatMul и Softmax. Веса механизма внимания больше не подойдут (переносятся 624 из 666 весов YOLO26n), поэтому выполни больше итераций дообучения и сравни точность в режиме Val.
-
Использовать модель без механизма внимания, например YOLOv8, которую AMD использовала в собственных примерах для DPU.
На Versal AI Edge Gen 2 операторы внимания указаны как поддерживаемые NPU, поэтому обычно вносить эти изменения не нужно. Проверь размещение операторов в отчёте компилятора: AMD отмечает, что даже поддерживаемые операторы могут выполняться на CPU из-за ограничений конфигурации или памяти.
Краткий обзор совместимости моделей#
| Модель | DPU (Zynq UltraScale+, Kria) | NPU (Versal AI Edge Gen 2) |
|---|---|---|
| YOLO26 | Обучай с Hard-Swish; два блока внимания становятся подграфами CPU; DFL отсутствует | Нативный экспорт format="xilinx"; голова модели выполняется в BF16 |
| YOLO11 | Обучай с Hard-Swish; C2PSA и softmax DFL выполняются на CPU | Нативный экспорт format="xilinx"; голова модели выполняется в BF16 |
| YOLOv8 | Обучай с Hard-Swish; softmax DFL выполняется на CPU | Нативный экспорт format="xilinx". Руководство AMD по YOLOv8m (Vitis AI 6.3, VEK385, INT8 с хвостом BF16): отчет компилятора показывает 1 181 оператор (99,915%) и 99,994% GOP на NPU; модель не изменялась. |
Развертывание на других целевых устройствах AMD Xilinx#
Для DPU Zynq UltraScale+ и Kria, а также NPU Versal AI Edge первого поколения используются процессы Vitis AI, которые не создает format="xilinx". Обучи модель с Ultralytics, а затем создай артефакт для целевого устройства с помощью инструментов AMD в их Docker-образах для Linux x86-64. Выбери вкладку своего устройства:
-
Запусти Docker-образ AMD Vitis AI 6.3 для Versal AI Edge.
-
Активируй среду NPU для IP-блока NPU на плате, выполнив
settings.sh. Передай имя IP-блока NPU своей платы в качестве аргумента или укажиLIST, чтобы посмотреть доступные IP-блоки. -
Сними снимок: запусти обычный скрипт инференса на репрезентативных изображениях, задав переменную среды
VAISW_SNAPSHOT_DIRECTORY. Изменять код не нужно:# Activate the NPU environment inside the Vitis AI Docker container source $VITIS_AI_REPO/npu_ip/settings.sh # Capture a mixed INT8/BF16 snapshot, calibrating on 100 images from your inference script VAISW_SNAPSHOT_DIRECTORY=snapshot.yolo26n VAISW_FE_PRECISION=MIXED VAISW_QUANTIZATION_NBIMAGES=100 python3 my_inference.py
VAISW_FE_PRECISION принимает значения INT8 (по умолчанию), BF16 или MIXED; VAISW_QUANTIZATION_NBIMAGES по умолчанию равно 4 изображениям, поэтому для моделей обнаружения задай большее репрезентативное число. Снимок привязан к варианту IP-блока NPU на плате. Конечные части постобработки YOLO выполняются на AI Engines только в режимах BF16 или MIXED. Документация AMD содержит противоречивые сведения о Softmax: на странице с примерами сказано, что Softmax не ускоряется и конечная часть YOLOv8 с Softmax выполняется на CPU, тогда как в примечаниях к выпуску Vitis AI 6.1 сообщается о полном ускорении YOLOv8 при смешанной точности. Проверь файл wrp_network_iriz.onnx внутри снимка, чтобы выяснить, какие части модели, включая механизмы внимания YOLO11 и YOLO26, выполняются на NPU. См. руководство по использованию собственной модели.
Подготовь плату с аппаратной конфигурацией и образом Linux, включающими конфигурацию ускорителя, для которой ты выполнял компиляцию, а также соответствующую среду выполнения Vitis AI. Смотри руководства AMD по настройке целевых устройств Zynq UltraScale+ и Kria DPU и Versal AI Edge (VEK280), а затем скопируй необходимые среде выполнения артефакты:
| Процесс | Артефакты для копирования на плату | Среда выполнения на плате |
|---|---|---|
| DPU (Zynq UltraScale+, Kria) | Скомпилированный .xmodel | VART; Graph Runner для подграфов на CPU |
| NPU (Versal AI Edge, VEK280) | Каталог снимка | VART-ML |
В DPU буферы VART содержат значения INT8 с фиксированной точкой: запроси форму каждого тензора и масштаб fix_point, квантуй входные данные и деквантуй выходные перед постобработкой. Graph Runner возвращает выходные данные всего графа, а DPU-only runner — выходные данные промежуточных подграфов DPU, вычисления которых должен завершить твой код. VART-ML на VEK280 по умолчанию использует аппаратные представления тензоров, форма, тип данных и раскладка памяти которых могут отличаться от ONNX; настрой типы входных и выходных тензоров runner как CPU-представления или самостоятельно преобразуй аппаратный формат (смотри обзор архитектуры VART-ML от AMD).
Для поставки Ultralytics YOLO в составе коммерческого продукта AMD Xilinx необходимо соблюдать условия лицензии AGPL-3.0 или получить корпоративную лицензию Ultralytics.
Применение в реальных условиях#
Устройства AMD Xilinx часто используют там, где компьютерное зрение с ИИ должно работать в реальном времени, потреблять мало энергии и находиться рядом с датчиком:
- Безопасность на промышленных и строительных объектах: обнаруживай людей и машины рядом с тяжёлым оборудованием и контролируй рабочие зоны с помощью обнаружения объектов и подсчёта объектов.
- Автомобильное зрение и техника для бездорожья: запускай компьютерное зрение на основе камер на сертифицированных компонентах автомобильного класса для автономных транспортных средств и систем помощи водителю.
- Умные камеры и видеоаналитика: объединяй захват и кодирование видео с инференсом YOLO на одном чипе для систем безопасности и видеоаналитики.
- Машинное зрение и контроль качества: сочетай высокоскоростной захват изображений на FPGA с сегментацией экземпляров или классификацией YOLO для обнаружения дефектов на конвейере.
- Робототехника и дроны: используй модули Kria KR260 или Versal для оценки позы, обнаружения объектов с ориентацией и навигации с детерминированной задержкой.
Итоги#
Экспорт с помощью format="xilinx" квантует модели Ultralytics YOLO с AMD Quark для NPU Versal AI Edge Series Gen 2, оставляет голову модели в BF16 и записывает конфигурацию компилятора Vitis AI рядом с моделью. Проверь точность INT8 на любом хосте, скомпилируй модель .rai в Docker-образе AMD Vitis AI и запусти ее на плате с ONNX Runtime и Vitis AI Execution Provider.
Для старых устройств AMD Xilinx используются другие процессы. В DPU Zynq UltraScale+ и Kria применяется зафиксированный набор инструментов Vitis AI 3.5 и файлы .xmodel; требуются нативные для DPU функции активации, например Hard-Swish, а attention выполняется на CPU. Для NPU Versal AI Edge первого поколения применяется процесс snapshot; поддержка операторов зависит от версии и точности Vitis AI.
Для других целевых устройств развертывания смотри руководство по вариантам развертывания моделей, рекомендации по развертыванию и интеграции ускорителей, например Hailo, Rockchip RKNN и Axelera.
Часто задаваемые вопросы#
Да. AMD завершила приобретение Xilinx в феврале 2022 года, и теперь продукты Xilinx продаются как адаптивные системы на кристалле и FPGA от AMD: AMD Zynq, AMD Kria, AMD Versal и AMD Vitis. Инженеры по-прежнему широко используют название Xilinx, а номера компонентов сохраняют префикс
XC.Да.
model.export(format="xilinx")квантует модель с помощью AMD Quark для NPU Versal AI Edge Series Gen 2 и создает каталог с квантованной моделью ONNX и конфигурацией компилятора Vitis AI. Скомпилируй ее в.raiс помощью инструментов AMD Vitis AI, как показано в разделе Компиляция и запуск на Versal AI Edge Gen 2. Для Zynq UltraScale+, Kria и VEK280 используются процессы из раздела Развертывание на других целевых устройствах AMD Xilinx.DPU (блок обработки глубокого обучения) — это более ранний ускоритель AMD для INT8. Он встроен в программируемую логику устройств Zynq UltraScale+ и Kria, компилируется с помощью Vitis AI 3.5 и создаёт файлы
.xmodel. В актуальных выпусках Vitis AI его заменяет NPU. В устройствах Versal AI Edge он объединяет специализированные AI Engines с программируемой логикой, поддерживает INT8, BF16 и смешанную точность, а также больше операторов, включая SiLU и, в Versal AI Edge Gen 2, механизмы внимания..xmodel— это сериализованный граф XIR, используемый в цепочке инструментов AMD DPU. Средство квантования создаёт квантованный файл.xmodel, а компиляторvai_c_xirпреобразует его в скомпилированный файл.xmodel, содержащий поток инструкций DPU, квантованные веса INT8 и подграфы, которые должны выполняться на CPU. Скомпилированный файл предназначен для конкретной конфигурации DPU, заданной отпечаткомarch.json, и запускается на плате с помощью Vitis AI Runtime (VART) или Graph Runner, если в файле есть подграфы для CPU.Нет. DPU ускоряет только функции активации ReLU, ReLU6, LeakyReLU, Hard-Swish и Hard-Sigmoid; Sigmoid, Softmax и MatMul между двумя функциями активации выполняются на CPU. Обучай YOLO с
activation: nn.Hardswish()в YAML-файле модели, чтобы свёртки выполнялись на DPU, а о вариантах обработки механизмов внимания см. «Обработка блоков внимания на DPU». NPU Versal AI Edge Gen 2 изначально поддерживают SiLU, Softmax и MatMul.В KV260 используется Zynq UltraScale+ MPSoC с DPU, поэтому следуй инструкции для DPU. Обучи модель YOLO26 с Hard-Swish, квантуй её с помощью
vai_q_pytorchв Docker-образе Vitis AI 3.5, скомпилируй с помощьюvai_c_xir, указавarch.jsonдля KV260, и запусти полученный.xmodelна плате с помощью VART или Graph Runner, если файл содержит подграфы для CPU.Нет. Экспорт выполняется на любом хосте Linux с Python 3.11–3.13, учетная запись AMD не нужна, а экспортированная модель работает на CPU, позволяя проверять точность на любом хосте. Для компиляции модели
.raiтребуются Docker-образ AMD Vitis AI и лицензия на компилятор AI Engine, а для запуска на NPU нужна плата Versal AI Edge Series Gen 2.Ultralytics использует Vitis AI Execution Provider, только если он доступен в ONNX Runtime, как в сборке AMD
onnxruntime-vitisaiна плате Versal или в Docker-образе AMD. В остальных случаях квантованная модель запускается на CPU со стандартным ONNX Runtime — так измеряется точность INT8 до развертывания.Можно запускать задачи любого типа, если операторы для них компилируются под твой ускоритель. Неподдерживаемые операторы обычно выполняются на CPU, но некоторые могут перевести всю модель на CPU или привести к ошибке компиляции. Обнаружение объектов — самая распространённая задача и та, которую используют в примерах самой AMD. Для сегментации, оценки позы и других задач проверь отчёт компилятора о разбиении, чтобы убедиться, что ресурсоёмкие слои выполняются на ускорителе.