ROCm 执行提供程序

ROCm 执行提供程序可在支持 AMD ROCm 的 GPU 上实现硬件加速计算。

目录

安装

注意 请确保安装此处指定的正确 PyTorch 版本:PyTorch 版本

对于 PyTorch 每夜构建版本,请参阅 Pytorch 主页 并选择 ROCm 作为计算平台。

大多数语言绑定都发布了包含 ROCm EP 的 ONNX Runtime 预构建二进制文件。请参考 安装 ORT

从源代码构建

有关构建说明,请参阅 构建页面。预构建的 .whl 文件在下方要求部分提供,并托管在 repo.radeon.com。基于 Ubuntu 的 Docker 开发环境在 Docker 支持部分提供。每个 ROCm 版本都会发布新的 wheels 和 Docker 镜像。

要求

以下是与 Ubuntu 构建对应的受支持 ROCm 版本矩阵。

截至 ROCm 6.0.2,预构建的 Python Wheel (.whl) 文件的链接如下,对应于基于 Ubuntu 支持的主机操作系统的 Python 版本。所有链接都可以在 AMD 的 repo.radeon manylinux 页面 上找到,每个链接都对应于 ROCm 版本。

ONNX Runtime 版本 ROCm 版本 Python 3.8 Python 3.9 Python 3.10 Python 3.12
           
1.21 6.4.1   3.9 3.10 3.12
1.21 6.4     3.10 3.12
1.19 6.3.1     3.10 3.12
1.19 6.3     3.10 3.12
1.18 6.2.4     3.10  
1.18 6.2.3     3.10  
1.18 6.2 3.8   3.10  
1.17 6.1.3     3.10  
1.17 6.1 3.8   3.10  
1.17 6.0.2     3.10  
1.17 6.0
5.7
       
1.16 5.6
5.5
5.4.2
       
1.15 5.4.2
5.4
5.3.2
       
1.14 5.4
5.3.2
       
1.13 5.4
5.3.2
       
1.12 5.2.3
5.2
       

Docker 支持

为了简化工作负载和/或原型开发,AMD 基于 Ubuntu 创建了 Docker 镜像,使用了最新的 ROCm 版本和在 ROCM Dockerhub 上找到的受支持的 ROCm-PyTorch 构建版本。

其目的是让用户能够快速使用 Python 进行自定义工作负载,并提供一个包含预构建 ROCm、Onnxruntime 和 MIGraphX 包的环境,无需构建 Onnxruntime 即可开始使用。

配置选项

ROCm 执行提供程序支持以下配置选项。

device_id

设备 ID。

默认值:0

tunable_op_enable

设置为使用 TunableOp。

默认值:false

tunable_op_tuning_enable

设置 TunableOp 尝试进行在线调优。

默认值:false

user_compute_stream

定义推理运行的计算流。它隐式设置 has_user_compute_stream 选项。不能通过 UpdateROCMProviderOptions 设置此项。此项不能与外部分配器结合使用。

Python 用法示例

providers = [("ROCMExecutionProvider", {"device_id": torch.cuda.current_device(),
                                        "user_compute_stream": str(torch.cuda.current_stream().cuda_stream)})]
sess_options = ort.SessionOptions()
sess = ort.InferenceSession("my_model.onnx", sess_options=sess_options, providers=providers)

为了利用用户计算流,建议使用 I/O 绑定 将输入和输出绑定到设备中的张量。

do_copy_in_default_stream

是否在默认流中进行复制或使用单独的流。推荐设置为 true。如果设置为 false,则可能存在竞态条件并可能获得更好的性能。

默认值:true

gpu_mem_limit

设备内存区域的字节大小限制。此大小限制仅适用于执行提供程序的区域。总设备内存使用量可能更高。s: C++ size_t 类型的最大值 (实际上无限制)

注意: 将被 default_memory_arena_cfg 的内容覆盖(如果指定)

arena_extend_strategy

扩展设备内存区域的策略。

描述
kNextPowerOfTwo (0) 后续扩展以更大的量(乘以 2 的幂)进行扩展
kSameAsRequested (1) 按请求量扩展

默认值:kNextPowerOfTwo

注意: 将被 default_memory_arena_cfg 的内容覆盖(如果指定)

gpu_external_[alloc|free|empty_cache]

gpu_external_* 用于传递外部分配器。Python 用法示例

from onnxruntime.training.ortmodule.torch_cpp_extensions import torch_gpu_allocator

provider_option_map["gpu_external_alloc"] = str(torch_gpu_allocator.gpu_caching_allocator_raw_alloc_address())
provider_option_map["gpu_external_free"] = str(torch_gpu_allocator.gpu_caching_allocator_raw_delete_address())
provider_option_map["gpu_external_empty_cache"] = str(torch_gpu_allocator.gpu_caching_allocator_empty_cache_address())

默认值:0

用法

C/C++

Ort::Env env = Ort::Env{ORT_LOGGING_LEVEL_ERROR, "Default"};
Ort::SessionOptions so;
int device_id = 0;
Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_ROCm(so, device_id));

C API 详细信息请参见此处

Python

Python API 详细信息请参见此处

示例

Python

import onnxruntime as ort

model_path = '<path to model>'

providers = [
    'ROCMExecutionProvider',
    'CPUExecutionProvider',
]

session = ort.InferenceSession(model_path, providers=providers)