Ultralytics YOLO27: Запишись в список ожидания.

Обучение и инференс на GPU AMD с Ultralytics YOLO, ROCm и MIGraphX#

Только Linux x86_64

Это руководство предназначено для хостов 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 ultralytics

Ultralytics автоматически устанавливает 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:

Почему в Ultralytics GPU AMD отображаются как CUDA

Сборка PyTorch для ROCm использует HIP внутри, но намеренно повторно задействует интерфейсы torch.cuda, поэтому torch.cuda.is_available() возвращает True, а для обращения к GPU AMD используются стандартные идентификаторы в стиле CUDA. Для GPU AMD используй device=0 или device=cuda:0; rocm не является типом устройства PyTorch. Подробнее смотри в описании семантики HIP в PyTorch.

Обучение с ROCm
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=0
Смешанная точность в ROCm

Ultralytics по умолчанию включает 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 — единственном семействе с такими выходными головками.

Использование#

Прежде чем перейти к инструкциям по использованию, ознакомься с линейкой моделей YOLO26 от Ultralytics. Это поможет выбрать модель, которая лучше всего подходит для требований твоего проекта.

Формат ONNX поддерживает режимы Export, Predict и Validate. Для инференса и валидации на GPU AMD нужна система с ROCm и установленным плагином MIGraphX. Экспортируй модель, а затем загрузи её, чтобы запустить инференс или проверить точность на device=0.

Конфликт с onnxruntime-gpu

Пакеты 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:

АргументТипПо умолчаниюОписание
formatstr'onnx'Целевой формат экспортируемой модели. Для инференса через MIGraphX EP используй onnx.
imgszint или tuple640Желаемый размер входных изображений модели. Может быть целым числом для квадратных изображений или кортежем (height, width).
quantizeint или strNoneТочность экспортируемой модели ONNX: 16 (FP16) для инференса с пониженной точностью; 32/не задано — FP32.
dynamicboolFalseРазрешает динамические размеры входных данных. Статические формы позволяют MIGraphX скомпилировать специализированную программу и использовать привязку ввода-вывода без копирования данных.
simplifyboolTrueУпрощает граф модели с помощью onnxslim, что потенциально повышает производительность и совместимость.
opsetintNoneВерсия opset ONNX для совместимости с разными средами выполнения. Если не указана, используется последняя поддерживаемая версия.
nmsbool, необязательноNoneВыбери необработанный выход (None, по умолчанию), встроенный NMS (True) или голову без NMS (False). Встроенный NMS (True) пока не поддерживается MIGraphX EP (ROCm/AMDMIGraphX#5246).
batchint1Размер пакета экспорта, то есть максимальное количество изображений, которые экспортированная модель обрабатывает одновременно в режиме predict.
devicestrNoneУстройство для экспорта: 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)Время инференса (мс/изобр.)
YOLO26nPyTorch✅5.30.40894.1
YOLO26nONNX (MIGraphX)✅9.50.40892.1
YOLO26sPyTorch✅19.50.48507.2
YOLO26sONNX (MIGraphX)✅36.50.48504.7
YOLO26mPyTorch✅42.20.532314.6
YOLO26mONNX (MIGraphX)✅78.20.532310.9
YOLO26lPyTorch✅50.70.548918.5
YOLO26lONNX (MIGraphX)✅95.00.548915.0
YOLO26xPyTorch✅113.20.574837.4
YOLO26xONNX (MIGraphX)✅212.90.574827.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 бэкендом ускорения.
Сначала проверь совместимость AMD и PyTorch

Доступность 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.

Участники

Комментарии