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)