Обучение и инференс на GPU AMD с Ultralytics YOLO, ROCm и MIGraphX#
Это руководство предназначено для хостов Linux x86_64 с установленным драйвером ядра GPU AMD (amdgpu); все приведённые ниже команды предназначены для оболочки Linux. Провайдер выполнения MIGraphX выпускается только в виде wheel-пакетов для Linux x86_64 и Python 3.11 или новее, поэтому нативная Windows не поддерживается, а Windows Subsystem for Linux (WSL2) пока не проходила проверку.
Ultralytics YOLO работает на GPU AMD Instinct и поддерживаемых GPU Radeon через ROCm — открытый вычислительный стек AMD для GPU. Сборка PyTorch для ROCm позволяет обучать, валидировать и запускать предсказания на моделях .pt, используя тот же аргумент device=0, что и для любого другого GPU, без изменений кода.
Для развёртывания экспортируй обученную модель в ONNX и запусти её через MIGraphX — движок AMD для оптимизации графов и инференса. Бэкенд ONNX Ultralytics обнаруживает ROCm и автоматически выбирает MIGraphXExecutionProvider среды выполнения ONNX, поэтому вызов predict, работающий на GPU NVIDIA, будет работать и на GPU AMD. В рамках запланированных запусков непрерывной интеграции Ultralytics выполняет экспорт ONNX и инференс MIGraphX для всех задач на оборудовании с GPU AMD.
Установка#
Стек Python полностью устанавливается через pip из индексов wheel-пакетов ROCm от AMD, поэтому для PyTorch, плагина и библиотек среды выполнения ROCm не нужны пакеты apt или root-доступ — при условии, что на хосте уже установлен драйвер ядра GPU AMD (amdgpu / /dev/kfd).
Определи архитектуру GPU (например, gfx1151 для Strix Halo) и установи только необходимые ему ядра PyTorch:
# Read the GPU architecture from the amdgpu driver, e.g. device-gfx1151
GPU_ARCH=$(grep -rhs '^gfx_target_version' /sys/class/kfd/kfd/topology/nodes | awk '$2 {printf "device-gfx%d%d%x\n", int($2/10000), int($2/100)%100, $2%100}' | sort -u | paste -sd, -)
# ROCm PyTorch + torchvision for the detected architecture
pip install "torch[${GPU_ARCH:?No AMD GPU found}]" "torchvision[$GPU_ARCH]" --index-url https://stable.repo.amd.com/rocm/whl-next/
# Ultralytics
pip install ultralyticsUltralytics автоматически устанавливает onnx при первом экспорте ONNX. При первом инференсе ONNX в системе с ROCm также устанавливаются плагин-провайдер выполнения MIGraphX (onnxruntime-ep-migraphx) и загружаемые им библиотеки среды выполнения MIGraphX (migraphx-libs); их версии закреплены и проверены на совместную работу. Плагин выпускается только для Python 3.11 или новее на Linux x86_64; в других версиях Python и архитектурах, а также при использовании YOLO_AUTOINSTALL=false без установленного плагина инференс ONNX переключается на CPU с предупреждением. Подробные инструкции и рекомендации смотри в нашем руководстве по установке YOLO26; если возникнут трудности, загляни в наше руководство по распространённым проблемам.
Перед обучением или экспортом убедись, что PyTorch видит GPU AMD:
import torch
print(torch.cuda.is_available()) # True при корректной установке ROCm
print(torch.cuda.get_device_name(0)) # Название GPU AMD, например AMD Radeon 8060S
print(torch.version.hip) # Версия HIP в сборке PyTorch для ROCm; None для сборок CUDA или CPUОбучение на GPU AMD с PyTorch ROCm#
Нативное обучение, валидация и предсказания на моделях .pt выполняются на GPU AMD через PyTorch ROCm, независимо от описанного ниже пути инференса через MIGraphX. Установи сборку PyTorch для ROCm, как указано в разделе Установка, и используй те же аргументы устройства, что и при любом другом запуске обучения Ultralytics:
Сборка PyTorch для ROCm использует HIP внутри, но намеренно повторно задействует интерфейсы torch.cuda, поэтому torch.cuda.is_available() возвращает True, а для обращения к GPU AMD используются стандартные идентификаторы в стиле CUDA. Для GPU AMD используй device=0 или device=cuda:0; rocm не является типом устройства PyTorch. Подробнее смотри в описании семантики HIP в PyTorch.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Обучение на первом GPU AMD, доступном PyTorch ROCm
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)
# Обучение на двух GPU AMD
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])Валидация и предсказания для моделей .pt используют тот же выбор устройства:
yolo detect val model=path/to/best.pt data=coco8.yaml device=0
yolo predict model=path/to/best.pt source=path/to/image.jpg device=0Ultralytics по умолчанию включает AMP и автоматически отключает его, если проверка перед обучением обнаруживает расхождение результатов смешанной точности с результатами полной точности. Поведение AMP в ROCm может меняться в зависимости от версий PyTorch и ROCm, поэтому, если во время запуска всё ещё появляются потери NaN или нулевой mAP, выполняй обучение с amp=False:
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=FalseЭкспорт и инференс с MIGraphX#
ONNX Runtime — кроссплатформенный движок инференса, который запускает одну модель ONNX на различных аппаратных платформах с помощью подключаемых провайдеров выполнения (EP). Каждый EP сопоставляет граф ONNX с конкретным ускорителем: CUDA для GPU NVIDIA, CoreML для Apple silicon и MIGraphX для GPU AMD с ROCm. MIGraphX поставляется в виде плагина onnxruntime-ep-migraphx и компилирует граф в оптимизированную программу для твоего GPU.
Для инференса MIGraphX используется стандартный экспорт ONNX. Экспортируй модель в ONNX (format="onnx"), и инференс Ultralytics автоматически задействует бэкенд MIGraphXExecutionProvider для запуска модели ONNX на GPU AMD.
Основные возможности инференса MIGraphX#
- Автоматический выбор провайдера: на хосте с ROCm бэкенд ONNX регистрирует плагин и выбирает
MIGraphXExecutionProviderбез изменений кода. Если плагин отсутствует или не загружается, инференс переключается на CPU с предупреждением. - Оптимизация графа: MIGraphX выполняет слияние операторов, планирование памяти и выбор ядер, оптимизированных для архитектур GPU AMD.
- Привязка ввода-вывода без копирования: входные и выходные данные привязываются напрямую к тензорам GPU через протокол DLPack, что позволяет избежать передачи данных через хост во время инференса.
- Варианты точности: запускай модель в FP32 или экспортируй модель ONNX в FP16 для инференса с пониженной точностью.
- Переносимый артефакт: один файл
.onnxработает на CPU, GPU NVIDIA и GPU AMD, позволяя использовать несколько платформ на основе одного экспорта. - Воспроизводимое развёртывание: весь стек (PyTorch для ROCm, плагин MIGraphX и его библиотеки) устанавливается через
pipиз индексов wheel-пакетов ROCm от AMD.
Поддерживаемые задачи#
Инференс MIGraphX поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе с такими выходными головками.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Обнаружение | ✅ | ✅ | ✅ |
| Сегментация | ✅ | ✅ | ✅ |
| Семантическая сегментация | ❌ | ❌ | ✅ |
| Глубина | ❌ | ❌ | ✅ |
| Классификация | ✅ | ✅ | ✅ |
| Оценка позы | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Использование#
Прежде чем перейти к инструкциям по использованию, ознакомься с линейкой моделей YOLO26 от Ultralytics. Это поможет выбрать модель, которая лучше всего подходит для требований твоего проекта.
Формат ONNX поддерживает режимы Export, Predict и Validate. Для инференса и валидации на GPU AMD нужна система с ROCm и установленным плагином MIGraphX. Экспортируй модель, а затем загрузи её, чтобы запустить инференс или проверить точность на device=0.
Пакеты onnxruntime-gpu и стандартный onnxruntime устанавливаются в один и тот же модуль Python onnxruntime, поэтому установленный последним перезаписывает другой. Если удалить только один из них, модуль перестанет работать, а старые версии onnxruntime-gpu могут аварийно завершать инференс MIGraphX. Если при первоначальной настройке был установлен onnxruntime-gpu, запусти pip uninstall -y onnxruntime-gpu onnxruntime, и Ultralytics переустановит стандартный onnxruntime при следующем инференсе ONNX.
from ultralytics import YOLO
# Загрузи модель YOLO26
model = YOLO("yolo26n.pt")
# Экспортировать модель в формат ONNX
model.export(format="onnx") # создаёт 'yolo26n.onnx'from ultralytics import YOLO
# Загрузи экспортированную модель ONNX и запусти инференс на GPU AMD
model = YOLO("yolo26n.onnx")
# Провайдер выполнения MIGraphX автоматически выбирается в ROCm
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)from ultralytics import YOLO
# Загрузи экспортированную модель ONNX
model = YOLO("yolo26n.onnx")
# Проверь точность на наборе данных COCO8 на GPU AMD
metrics = model.val(data="coco8.yaml", device=0)Аргументы экспорта#
Инференс MIGraphX использует аргументы экспорта ONNX. Наиболее важные параметры для развёртывания на GPU AMD:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'onnx' | Целевой формат экспортируемой модели. Для инференса через MIGraphX EP используй onnx. |
imgsz | int или tuple | 640 | Желаемый размер входных изображений модели. Может быть целым числом для квадратных изображений или кортежем (height, width). |
quantize | int или str | None | Точность экспортируемой модели ONNX: 16 (FP16) для инференса с пониженной точностью; 32/не задано — FP32. |
dynamic | bool | False | Разрешает динамические размеры входных данных. Статические формы позволяют MIGraphX скомпилировать специализированную программу и использовать привязку ввода-вывода без копирования данных. |
simplify | bool | True | Упрощает граф модели с помощью onnxslim, что потенциально повышает производительность и совместимость. |
opset | int | None | Версия opset ONNX для совместимости с разными средами выполнения. Если не указана, используется последняя поддерживаемая версия. |
nms | bool, необязательно | None | Выбери необработанный выход (None, по умолчанию), встроенный NMS (True) или голову без NMS (False). Встроенный NMS (True) пока не поддерживается MIGraphX EP (ROCm/AMDMIGraphX#5246). |
batch | int | 1 | Размер пакета экспорта, то есть максимальное количество изображений, которые экспортированная модель обрабатывает одновременно в режиме predict. |
device | str | None | Устройство для экспорта: GPU (device=0), CPU (device=cpu). |
Полный список аргументов экспорта смотри в описании интеграции ONNX и на странице документации Ultralytics об экспорте.
Развёртывание на GPU AMD с MIGraphX#
MIGraphX EP компилирует граф при создании первого сеанса, что составляет основную часть времени первоначальной загрузки. Ultralytics кэширует скомпилированную программу для каждой модели в каталоге конфигурации Ultralytics, поэтому при последующей загрузке той же модели повторная компиляция не требуется. В кэше хранятся 8 недавно использовавшихся моделей, а более старые удаляются, поэтому он не может расти бесконечно. Задай ORT_MIGRAPHX_CACHE_DIR, чтобы изменить расположение кэша, а после обновления ROCm или MIGraphX удали каталог кэша, чтобы принудительно выполнить повторную компиляцию.
По умолчанию Ultralytics отключает ядра свёртки Winograd в MIGraphX (MIGRAPHX_DISABLE_WINOGRAD=1), чтобы сократить время первой компиляции графов YOLO без заметного влияния на инференс (ROCm/AMDMIGraphX#5234); задай MIGRAPHX_DISABLE_WINOGRAD=0, чтобы снова включить их.
Для готовой к запуску среды Dockerfile-amd собирает образ ultralytics/ultralytics:latest-amd с предустановленными ROCm PyTorch и MIGraphX EP. Информацию о флагах docker run, позволяющих использовать GPU AMD в контейнере, смотри в разделе Использование GPU краткого руководства по Docker.
Бенчмарки#
Приведённые ниже бенчмарки YOLO26 команда Ultralytics выполнила на GPU AMD Radeon 8060S (Ryzen AI Max+ PRO 395), сравнив скорость и точность PyTorch и ONNX с провайдером выполнения MIGraphX. Оба формата работают на GPU с точностью FP32: PyTorch использует ROCm, а ONNX — MIGraphX.
| Модель | Формат | Статус | Размер (МБ) | metrics/mAP50-95(B) | Время инференса (мс/изобр.) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4089 | 4.1 |
| YOLO26n | ONNX (MIGraphX) | ✅ | 9.5 | 0.4089 | 2.1 |
| YOLO26s | PyTorch | ✅ | 19.5 | 0.4850 | 7.2 |
| YOLO26s | ONNX (MIGraphX) | ✅ | 36.5 | 0.4850 | 4.7 |
| YOLO26m | PyTorch | ✅ | 42.2 | 0.5323 | 14.6 |
| YOLO26m | ONNX (MIGraphX) | ✅ | 78.2 | 0.5323 | 10.9 |
| YOLO26l | PyTorch | ✅ | 50.7 | 0.5489 | 18.5 |
| YOLO26l | ONNX (MIGraphX) | ✅ | 95.0 | 0.5489 | 15.0 |
| YOLO26x | PyTorch | ✅ | 113.2 | 0.5748 | 37.4 |
| YOLO26x | ONNX (MIGraphX) | ✅ | 212.9 | 0.5748 | 27.1 |
Проверено с Ultralytics 8.4.165 (оценка глубины с 8.4.172)
Валидация для приведённых выше бенчмарков выполнялась с размером пакета 1 на полных наборах валидации: при разрешении 640 для обнаружения объектов, сегментации и оценки позы, 2048 для семантической сегментации, 768 для оценки глубины, 224 для классификации и 1024 для OBB. Время инференса не включает предобработку, постобработку и однократную компиляцию MIGraphX.
Обзор поддержки#
Поддержка одного продукта или среды выполнения AMD не означает поддержку всех ускорителей AMD. В этой таблице описан текущий статус поддержки в пакете Ultralytics Python.
| Продукт или среда выполнения AMD | Поддержка | Использование или статус |
|---|---|---|
| AMD Instinct и поддерживаемые GPU Radeon с ROCm | ✅ | Обучай модели PyTorch, проверяй их и запускай в нативном режиме с помощью device=0 или device=cuda:0. |
| Инференс MIGraphX | ✅ | Запускай экспортированные модели ONNX на GPU AMD через MIGraphX EP. Поддерживаются все задачи YOLO26. |
| ROCm с несколькими GPU | ✅ | Используй device=0,1 или device=[0, 1]; распределённое выполнение использует установленный стек PyTorch ROCm. |
| Автоматическая смешанная точность ROCm (AMP) | ⚠️ | Доступно, если установленные версии PyTorch и ROCm проходят проверки AMP Ultralytics; при несовместимости используй amp=False. |
| Образ AMD для Docker | ✅ | latest-amd поставляется с ROCm PyTorch и предустановленным MIGraphX EP. |
| Нативный экспорт MIGraphX | ❌ | Экспортируй модель в ONNX с помощью format="onnx" и запускай её через MIGraphX EP для инференса на GPU AMD. |
| Windows DirectML | ❌ | В пакете Python отсутствует бэкенд DirectML для обучения и предсказаний. |
| NPU Ryzen AI | ❌ | Нативная интеграция с NPU отсутствует; внешние процессы на основе ONNX/Vitis AI поддерживаются сообществом. |
| NPU AMD Xilinx Versal AI Edge Gen 2 | ✅ | Экспортируй с помощью format="xilinx"; смотри руководство по AMD Xilinx. |
| AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1 | ❌ | Нативный экспорт не поддерживается; используй процессы AMD Vitis AI из руководства по AMD Xilinx. |
| Процессоры AMD | ✅ CPU | Используй device=cpu: стандартное выполнение на CPU, не связанное со специфичным для AMD бэкендом ускорения. |
Доступность ROCm зависит от конкретной модели GPU, операционной системы, версии ROCm и сборки PyTorch. Перед установкой проверь оборудование в таблице совместимости ROCm от AMD.
Итоги#
В этом руководстве ты узнал, как обучать модели Ultralytics YOLO26 на GPU AMD с PyTorch ROCm, используя стандартный аргумент device=0, а затем экспортировать их в ONNX для ускоренного инференса через провайдер выполнения MIGraphX в ONNX Runtime. Бэкенд ONNX автоматически выбирает MIGraphXExecutionProvider, кэширует скомпилированную программу для ускорения последующих загрузок и поддерживает все задачи YOLO26 без изменений кода.
Другие целевые платформы развёртывания смотри на странице руководства по интеграциям, а форматы экспорта сравнивай в режиме бенчмарка.
Часто задаваемые вопросы#
Да. Установи сборку PyTorch с ROCm, как описано в разделе Установка, затем обучай модели
.ptс помощьюdevice=0или используйdevice=0,1для нескольких GPU. Обучение выполняется через PyTorch ROCm без MIGraphX и плагина ONNX. Примеры смотри в руководстве Обучение на GPU AMD с PyTorch ROCm.Экспортируй модель в ONNX, а затем запусти её с помощью
device=0в системе с ROCm. При первом инференсе ONNX Ultralytics устанавливает плагин MIGraphX:Использованиеfrom ultralytics import YOLO # Экспортируй в ONNX model = YOLO("yolo26n.pt") model.export(format="onnx") # создаёт 'yolo26n.onnx' # Запусти инференс на GPU AMD (MIGraphX EP выбирается автоматически) onnx_model = YOLO("yolo26n.onnx") results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)Нет. В системе с ROCm бэкенд ONNX Ultralytics обнаруживает HIP, устанавливает и регистрирует плагин
onnxruntime-ep-migraphxи автоматически выбираетMIGraphXExecutionProvider. Если установить или загрузить плагин не удаётся — например, при использовании Python версии ниже 3.11 или ARM64, — инференс переключается на CPU с предупреждением.При создании первого сеанса MIGraphX компилирует граф ONNX в оптимизированную программу, что составляет основную часть времени первоначальной загрузки. Ultralytics кэширует скомпилированную программу, поэтому при последующей загрузке той же модели повторная компиляция не требуется. Подробности о расположении и ограничении размера смотри в примечании о кэше скомпилированных программ.
Установленный пакет PyTorch, вероятно, собран для CPU или CUDA, а не для ROCm, либо используемый стек ROCm не поддерживает GPU. Переустанови PyTorch из индекса wheel-пакетов ROCm от AMD, как показано в разделе Установка, проверь, что
torch.version.hip— это неNone, и убедись, что GPU поддерживается согласно таблице совместимости ROCm от AMD. Также проверь, что у пользователя есть доступ к/dev/kfdи/dev/dri, обычно для этого нужно добавить пользователя в группыvideoиrender.Это ожидаемое поведение. PyTorch ROCm намеренно использует API
torch.cudaи строки устройств в стиле CUDA для совместимости с Python. Используйdevice=0илиdevice=cuda:0: модель по-прежнему выполняется через HIP и ROCm на GPU AMD.Не через пакет Python. В DirectML нет бэкенда для обучения или предсказаний, а NPU Ryzen AI не доступны через PyTorch ROCm. В пользовательских процессах можно экспортировать модель в ONNX и запускать ее с помощью внешних инструментов AMD Ryzen AI или Vitis AI, но эти среды выполнения не входят в поддерживаемый путь выполнения Ultralytics. Для встроенных NPU AMD Xilinx Versal AI Edge Series Gen 2 экспортируй модель с помощью
format="xilinx"; для устройств Zynq, Kria и Versal AI Edge первого поколения смотри руководство по AMD Xilinx.Укажи индекс GPU напрямую, например
device=1для второго GPU, как для PyTorch, так и для инференса через MIGraphX EP. Чтобы ограничить процесс или контейнер определёнными GPU, задайHIP_VISIBLE_DEVICES(илиROCR_VISIBLE_DEVICESдля контейнеров), напримерHIP_VISIBLE_DEVICES=2; после этого видимые GPU будут перенумерованы начиная сdevice=0.