使用 Ultralytics YOLO 和 ROCm 进行 AMD GPU 训练#
Ultralytics 支持通过 PyTorch ROCm 在兼容的 AMD GPU 上进行训练、验证和推理。PyTorch 特意通过与 CUDA 使用相同的 torch.cuda Python API 来暴露 ROCm 设备,因此 Ultralytics 无需为原生 PyTorch 模型提供单独的 rocm 设备类型。安装 ROCm 版本的 PyTorch,然后使用标准的 device=0 或 device=cuda:0 语法选择 AMD GPU。
AMD 还提供与 PyTorch ROCm 不同的推理技术。支持某个 AMD 产品并不意味着支持每一个 AMD 运行时或加速器。
支持概览#
下表描述了用于训练、验证、导出和预测的 Ultralytics Python 软件包。
| AMD 产品或运行时 | Ultralytics 支持 | 用法或状态 |
|---|---|---|
| 支持 ROCm 的 AMD Instinct 和受支持的 Radeon GPU | ✅ | 使用 device=0 或 device=cuda:0 训练、验证和运行原生 PyTorch 模型。 |
| 多 GPU ROCm | ✅ | 使用 device=0,1 或 device=[0, 1];分布式执行遵循已安装的 PyTorch ROCm 栈。 |
| ROCm 自动混合精度 (AMP) | ⚠️ | 当已安装的 PyTorch 和 ROCm 版本通过 Ultralytics AMP 检查时可用;如果版本不兼容,请使用 amp=False。 |
| ONNX 导出 | ✅ | 支持导出,但 ONNX 文件本身不提供 AMD 加速的运行时。 |
| MIGraphX 推理 | 🚧 | 当前 Python 软件包中不可用;相关实现工作在 PR #24137 中跟踪。 |
| AMD Docker 镜像和 AMD 硬件 CI | 🚧 | 同样在 PR #24137 中跟踪,无法仅通过 ROCm 设备选择提供。 |
| Windows DirectML | ❌ Python | Python 软件包中没有 DirectML 训练或预测后端。 |
| Ryzen AI NPU | ❌ | 没有原生的 Ultralytics NPU 集成;外部 ONNX/Vitis AI 工作流由社区管理。 |
| AMD CPU | ✅ CPU | 使用 device=cpu;这是标准的 CPU 执行,而不是 AMD 专用的加速后端。 |
ROCm 的可用性取决于具体的 GPU、操作系统、ROCm 版本和 PyTorch 构建版本。在安装前,请在 AMD 的 ROCm 兼容性矩阵 中确认硬件。Ultralytics 无法为已安装的 PyTorch ROCm 构建版本未公开的设备添加支持。
为什么 ROCm 使用 CUDA 设备名称#
PyTorch 的 ROCm 构建版本在内部使用 HIP,但刻意重用了 torch.cuda 接口。例如,torch.cuda.is_available()、torch.cuda.device_count() 和 torch.cuda.get_device_name() 适用于受支持的 AMD GPU。这种设计使相同的 Ultralytics 训练路径能够同时服务 NVIDIA CUDA 和 AMD ROCm,而无需重复的后端。
有关详细信息,请参阅官方 PyTorch HIP 语义。
在 Python 软件包中,对于 PyTorch ROCm,请使用 device=0 或 device=cuda:0。请勿使用 device=rocm:0;rocm 不是 PyTorch 设备类型。
安装 PyTorch ROCm#
-
验证你的操作系统和 GPU 是否出现在 ROCm 兼容性矩阵 中。
-
使用 PyTorch 安装选择器 选择与你已安装的 ROCm 版本相匹配的 ROCm 构建版本。
-
在 PyTorch 之后安装 Ultralytics:
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,设备名称应识别出你的 AMD GPU,并且 torch.version.hip 应报告由 ROCm 构建版本提供的 HIP 版本。
在 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=0AMP 兼容性#
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 的图优化和推理运行时。当前的 Ultralytics Python 软件包中不包含原生 MIGraphX 模型加载。实际的实现、AMD 容器、依赖项、测试和文档都在 PR #24137 中共同跟踪。在该工作合并并通过 AMD 硬件验证之前,导出 ONNX 模型不应在 Python 软件包中被描述为原生 MIGraphX 支持。
DirectML#
Ultralytics Python 软件包没有用于 Windows 训练或预测的 DirectML 后端。DirectML 与 ROCm 不同,并且正常工作的 ROCm 环境不会启用 device=directml。
Ryzen AI NPU#
Ryzen AI NPU 不通过 PyTorch ROCm 公开,也不是原生的 Ultralytics 设备。社区工作流可能会将 YOLO 模型导出为 ONNX 并使用 AMD 的外部 Ryzen AI 或 Vitis AI 工具运行它们,但该运行时、转换和硬件兼容性超出了 Ultralytics 支持的执行路径。
故障排除#
为什么在我的 AMD 系统上 torch.cuda.is_available() 会返回 False?#
已安装的 PyTorch 软件包可能是 CPU 或 CUDA 构建版本,或者当前活动的 ROCm 堆栈可能不支持该 GPU。请从 PyTorch 选择器安装匹配的 ROCm 构建版本,并对照 AMD 的兼容性矩阵验证 GPU。
为什么我有 AMD GPU 时 Ultralytics 却显示 CUDA?#
这是正常的。为了保持 Python 兼容性,PyTorch ROCm 刻意使用了 torch.cuda API 和 CUDA 风格的设备字符串。模型仍然通过 AMD GPU 上的 HIP 和 ROCm 执行。
ONNX 导出会自动启用 MIGraphX 或 Ryzen AI 吗?#
不会。ONNX 是一种可移植的模型格式。加速执行仍然需要兼容的运行时,并且当前的 Ultralytics Python 软件包中不包含原生的 MIGraphX、DirectML 和 Ryzen AI NPU 后端。
总结#
对于受支持的 AMD GPU 训练、验证和推理,请配合 device=0 或 device=cuda:0 使用兼容的 PyTorch ROCm 构建版本。将 MIGraphX、DirectML 和 Ryzen AI NPU 视为独立的功能:仅安装 ROCm 或导出 ONNX 模型并不能启用它们中的任何一个。