Обучение на AMD GPU с Ultralytics YOLO и ROCm#
Ultralytics поддерживает обучение, валидацию и инференс на совместимых GPU AMD через PyTorch ROCm. PyTorch намеренно предоставляет доступ к устройствам ROCm через тот же Python API torch.cuda, который используется для CUDA, поэтому Ultralytics не нуждается в отдельном типе устройства rocm для нативных моделей PyTorch. Установи ищи сборку PyTorch с поддержкой ROCm, а затем выбери GPU AMD с помощью стандартного синтаксиса device=0 или device=cuda:0.
AMD также предлагает технологии инференса, которые не связаны с PyTorch ROCm. Поддержка одного продукта AMD не означает поддержку любой среды выполнения или ускорителя AMD.
Сводка поддержки#
В этой таблице описывается пакет Ultralytics Python, используемый для обучения, валидации, экспорта и предсказания.
| Продукт или среда выполнения AMD | Поддержка Ultralytics | Использование или статус |
|---|---|---|
| AMD Instinct и поддерживаемые Radeon GPU с ROCm | ✅ | Обучай, валидируй и запускай нативные модели PyTorch с помощью device=0 или device=cuda:0. |
| Многопроцессорный ROCm (Multi-GPU) | ✅ | Используй device=0,1 или device=[0, 1]; распределенное выполнение следует установленному стеку PyTorch ROCm. |
| Автоматическая смешанная точность ROCm (AMP) | ⚠️ | Доступно, когда установленные версии PyTorch и ROCm проходят проверки AMP от Ultralytics; используй amp=False, если они несовместимы. |
| Экспорт в ONNX | ✅ | Экспорт поддерживается, но сам по себе файл ONNX не обеспечивает ускоренную среду выполнения AMD. |
| Инференс MIGraphX | 🚧 | Недоступно в текущем пакете Python; работа над реализацией отслеживается в PR #24137. |
| Docker-образ AMD и CI на оборудовании AMD | 🚧 | Также отслеживается в PR #24137, не предоставляется исключительно за счет выбора устройства ROCm. |
| Windows DirectML | ❌ Python | В пакете Python отсутствует бэкенд обучения или предсказания DirectML. |
| Ryzen AI NPU | ❌ | Отсутствует нативная интеграция NPU с Ultralytics; сторонние рабочие процессы ONNX/Vitis AI поддерживаются силами сообщества. |
| Процессоры AMD (CPU) | ✅ CPU | Используй device=cpu; это стандартное выполнение на CPU, а не бэкенд ускорения, специфичный для AMD. |
Доступность ROCm зависит от конкретного GPU, операционной системы, версии ROCm и сборки PyTorch. Перед установкой проверь свое железо в матрице совместимости ROCm от AMD. Ultralytics не может добавить поддержку устройства, которое не экспортирует установленная сборка PyTorch ROCm.
Почему в ROCm используются имена устройств CUDA#
Сборка PyTorch с ROCm использует HIP внутри, но осознанно переиспользует интерфейсы torch.cuda. Например, torch.cuda.is_available(), torch.cuda.device_count() и torch.cuda.get_device_name() работают с поддерживаемыми GPU AMD. Такой дизайн позволяет одному и тому же пути обучения Ultralytics обслуживать NVIDIA CUDA и AMD ROCm без дублирования бэкенда.
Подробности см. в официальной документации Семантика HIP в PyTorch.
В пакете Python используй device=0 или device=cuda:0 для PyTorch ROCm. Не используй device=rocm:0; rocm не является типом устройства PyTorch.
Установи PyTorch ROCm#
-
Убедись, что твоя операционная система и GPU указаны в матрице совместимости ROCm.
-
Используй инструмент выбора установки PyTorch, чтобы выбрать сборку ROCm, соответствующую твоей установленной версии ROCm.
-
Установи Ultralytics после PyTorch:
pip install ultralytics -
Убедись, что PyTorch видит AMD GPU:
import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0)) print(torch.version.hip)
torch.cuda.is_available() должен возвращать True, имя устройства должно указывать на твой GPU AMD, а torch.version.hip должен сообщать версию HIP, предоставленную сборкой ROCm.
Обучение на AMD GPU#
Используй те же аргументы устройств, что и в стандартном режиме обучения Ultralytics.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on the first AMD GPU exposed by PyTorch ROCm
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)
# Train across two AMD GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])Валидация и предикты используют тот же выбор устройства:
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Совместимость с AMP#
Ultralytics по умолчанию включает AMP и перед обучением сравнивает результаты в полной и смешанной точности. Если проверка обнаруживает несовместимые результаты, AMP отключается во избежание потерь NaN или обучения с нулевым mAP. Поведение ROCm AMP может изменяться в зависимости от версий PyTorch и ROCm, поэтому используй amp=False при устранении неполадок, специфичных для стека:
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=FalseПока не поддерживаемые функции#
MIGraphX#
MIGraphX — это среда выполнения графовой оптимизации и инференса от AMD. Загрузка нативных моделей MIGraphX не входит в текущий пакет Python от Ultralytics. Активная реализация, контейнер AMD, зависимости, тесты и документация отслеживаются вместе в PR #24137. До тех пор пока эта работа не будет объединена и не получит валидацию оборудования AMD, экспорт модели ONNX не должен описываться как нативная поддержка MIGraphX в пакете Python.
DirectML#
Пакет Python от Ultralytics не имеет бэкенда DirectML для обучения или предсказания на Windows. DirectML отличается от ROCm, и работающая среда ROCm не включает device=directml.
Ryzen AI NPU#
Ryzen AI NPU не экспонируются через PyTorch ROCm и не являются нативными устройствами Ultralytics. Сторонние рабочие процессы могут экспортировать модели YOLO в ONNX и запускать их с помощью внешних инструментов Ryzen AI или Vitis AI от AMD, однако эта среда выполнения, конвертация и совместимость с аппаратным обеспечением находятся за пределами поддерживаемого пути выполнения Ultralytics.
Устранение неполадок#
Почему torch.cuda.is_available() возвращает False на моей системе AMD?#
Установленный пакет PyTorch может быть сборкой для CPU или CUDA, либо GPU может не поддерживаться активным стеком ROCm. Установи соответствующую сборку ROCm из селектора PyTorch и проверь GPU по матрице совместимости AMD.
Почему Ultralytics пишет CUDA, когда у меня AMD GPU?#
Это ожидаемое поведение. PyTorch ROCm намеренно использует API torch.cuda и строки устройств в стиле CUDA для совместимости с Python. Модель по-прежнему выполняется через HIP и ROCm на GPU AMD.
Включает ли экспорт ONNX поддержку MIGraphX или Ryzen AI автоматически?#
Нет. ONNX — это переносимый формат моделей. Для ускоренного выполнения по-прежнему требуется совместимая среда выполнения, а нативные бэкенды MIGraphX, DirectML и Ryzen AI NPU не входят в текущий пакет Ultralytics Python.
Резюме#
Используй совместимую сборку PyTorch ROCm с device=0 или device=cuda:0 для обучения, валидации и инференса на поддерживаемых GPU AMD. Рассматривай MIGraphX, DirectML и Ryzen AI NPU как отдельные возможности: ни одна из них не включается простым установкой ROCm или экспортом модели ONNX.