YOLO Vision 2026:

使用 Ultralytics YOLO 和 ROCm 训练 AMD GPU#

Ultralytics 支持通过 PyTorch ROCm 在兼容的 AMD GPU 上进行训练、验证和推理。PyTorch 有意通过与 CUDA 相同的 torch.cuda Python API 暴露 ROCm 设备,因此 Ultralytics 不需要为原生 PyTorch 模型单独使用 rocm 设备类型。安装 ROCm 版本的 PyTorch,然后使用标准的 device=0device=cuda:0 语法选择 AMD GPU。

AMD 还提供了独立于 PyTorch ROCm 的推理技术。支持某一 AMD 产品并不意味着 支持所有 AMD 运行时或加速器。

支持概览#

此表介绍用于训练、验证、导出和预测的 Ultralytics Python 包。

AMD 产品或运行时Ultralytics 支持情况用法或状态
使用 ROCm 的 AMD Instinct 和受支持的 Radeon GPU使用 device=0device=cuda:0 训练、验证并运行原生 PyTorch 模型。
多 GPU ROCm使用 device=0,1device=[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❌ PythonPython 包中没有 DirectML 训练或预测后端。
Ryzen AI NPU没有原生的 Ultralytics NPU 集成;外部 ONNX/Vitis AI 工作流由社区维护。
AMD CPU✅ CPU使用 device=cpu;这是标准 CPU 执行,并非 AMD 专用的加速后端。
先检查 AMD 与 PyTorch 的兼容性

ROCm 是否可用取决于具体的 GPU、操作系统、ROCm 版本和 PyTorch 构建。安装前,请在 AMD 的 ROCm 兼容性矩阵 中确认你的硬件。对于已安装的 PyTorch ROCm 构建未公开支持的设备,Ultralytics 无法添加支持。

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=0device=cuda:0。不要使用 device=rocm:0rocm 不是 PyTorch 设备类型。

安装 PyTorch ROCm#

  1. 确认你的操作系统和 GPU 出现在 ROCm 兼容性矩阵中。

  2. 使用 PyTorch 安装选择器 选择与 已安装 ROCm 版本匹配的 ROCm 构建。

  3. 在 PyTorch 之后安装 Ultralytics:

    pip install ultralytics
  4. 验证 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 Train 模式 相同的设备参数。

ROCm 训练
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 的图优化和推理运行时。当前 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 GPU 训练、验证和推理,请使用兼容的 PyTorch ROCm 构建以及 device=0device=cuda:0。 将 MIGraphX、DirectML 和 Ryzen AI NPU 视为独立功能:仅安装 ROCm 或导出 ONNX 模型不会启用其中任何一项。

常见问题#

  • 已安装的 PyTorch 包可能是 CPU 或 CUDA 构建,或者该 GPU 可能不受当前 ROCm 技术栈支持。 从 PyTorch 选择器安装匹配的 ROCm 构建,并根据 AMD 的兼容性矩阵验证 GPU。

  • 这是预期行为。PyTorch ROCm 有意使用 torch.cuda API 和 CUDA 风格的设备字符串,以实现 Python 兼容性。模型仍会通过 AMD GPU 上的 HIP 和 ROCm 执行。

  • 不会。ONNX 是一种可移植的模型格式。加速执行仍需要兼容的运行时,而当前 Ultralytics Python 包不包含原生 MIGraphX、 DirectML 和 Ryzen AI NPU 后端。

评论