企业级安全性: 已通过 ISO 27001 和 SOC 2 Type I 合规。

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=0device=cuda:0 语法选择 AMD GPU。

AMD 还提供与 PyTorch ROCm 不同的推理技术。支持某个 AMD 产品并不意味着支持每一个 AMD 运行时或加速器。

Link to this section支持概览#

下表描述了用于训练、验证、导出和预测的 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 兼容性矩阵中确认你的硬件。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=0device=cuda:0 来配合 PyTorch ROCm 使用。切勿使用 device=rocm:0rocm 不是 PyTorch 的设备类型。

Link to this section安装 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 版本。

Link to this section在 AMD GPU 上进行训练#

使用与标准的 Ultralytics 训练模式相同的设备参数。

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

Link 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=False

Link 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=0device=cuda:0。将 MIGraphX、DirectML 和 Ryzen AI NPU 视为独立的功能:仅安装 ROCm 或导出 ONNX 模型并不会启用其中任何一项。

评论