Link to this section使用 Ultralytics YOLO 和 ROCm 进行 AMD GPU 训练#
Ultralytics 支持通过 PyTorch ROCm 在兼容的 AMD GPU 上进行训练、验证和推理。PyTorch 有意通过 CUDA 使用的相同 torch.cuda Python API 公开 ROCm 设备,因此 Ultralytics 不需要为原生 PyTorch 模型单独设置 rocm 设备类型。请安装 PyTorch 的 ROCm 构建版本,然后使用标准的 device=0 或 device=cuda:0 语法选择 AMD GPU。
AMD 还提供与 PyTorch ROCm 不同的推理技术。支持某个 AMD 产品并不意味着支持每一个 AMD 运行时或加速器。
Link to this section支持概览#
下表描述了用于训练、验证、导出和预测的 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 构建版本未公开的设备添加支持。
Link to this section为什么 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 软件包中,请使用 device=0 或 device=cuda:0 来配合 PyTorch ROCm 使用。切勿使用 device=rocm:0;rocm 不是 PyTorch 的设备类型。
Link to this section安装 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 版本。
Link to this section在 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=0Link to this sectionAMP 兼容性#
Ultralytics 默认启用 AMP,并在训练前比较全精度和混合精度结果。如果检查检测到不兼容的结果,将禁用 AMP 以防止出现 NaN 损失或零 mAP 训练。ROCm AMP 行为可能会随 PyTorch 和 ROCm 版本而变化,因此在排查特定堆栈的故障时请使用 amp=False:
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=FalseLink to this section尚不支持的功能#
Link to this sectionMIGraphX#
MIGraphX 是 AMD 的图优化和推理运行时。当前的 Ultralytics Python 软件包中不包含原生 MIGraphX 模型加载。活跃的实现、AMD 容器、依赖项、测试和文档均在 PR #24137 中进行跟踪。在该工作合并并获得 AMD 硬件验证之前,导出 ONNX 模型不应在 Python 软件包中被描述为原生 MIGraphX 支持。
Link to this sectionDirectML#
Ultralytics Python 软件包没有用于 Windows 训练或预测的 DirectML 后端。DirectML 不同于 ROCm,并且正常工作的 ROCm 环境不会启用 device=directml。
Link to this sectionRyzen AI NPU#
Ryzen AI NPU 不通过 PyTorch ROCm 公开,也不是原生的 Ultralytics 设备。社区工作流可能会将 YOLO 模型导出为 ONNX 并使用 AMD 的外部 Ryzen AI 或 Vitis AI 工具运行它们,但该运行时、转换和硬件兼容性超出了 Ultralytics 支持的执行路径。
Link to this section故障排除#
Link to this section为什么在我的 AMD 系统上 torch.cuda.is_available() 返回 False?#
已安装的 PyTorch 软件包可能是 CPU 或 CUDA 构建版本,或者当前活动的 ROCm 堆栈可能不支持该 GPU。请从 PyTorch 选择器安装匹配的 ROCm 构建版本,并对照 AMD 的兼容性矩阵验证 GPU。
Link to this section为什么我有 AMD GPU 时 Ultralytics 却显示 CUDA?#
这是正常现象。为了兼容 Python,PyTorch ROCm 有意使用了 torch.cuda API 和 CUDA 风格的设备字符串。模型仍然通过 AMD GPU 上的 HIP 和 ROCm 执行。
Link to this sectionONNX 导出会自动启用 MIGraphX 或 Ryzen AI 吗?#
不会。ONNX 是一种可移植的模型格式。加速执行仍然需要兼容的运行时,并且当前的 Ultralytics Python 软件包中不包含原生的 MIGraphX、DirectML 和 Ryzen AI NPU 后端。
Link to this section总结#
对于受支持的 AMD GPU 训练、验证和推理,请使用兼容的 PyTorch ROCm 构建版本并搭配 device=0 或 device=cuda:0。将 MIGraphX、DirectML 和 Ryzen AI NPU 视为独立的功能:仅安装 ROCm 或导出 ONNX 模型并不会启用其中任何一项。