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)