ROCm Execution Provider
Der ROCm Execution Provider ermöglicht hardwarebeschleunigte Berechnungen auf AMD ROCm-fähigen GPUs.
Inhalt
- Installieren
- Erstellung aus Quelle
- Voraussetzungen
- Docker-Unterstützung
- Konfigurationsoptionen
- Verwendung
- Beispiele
Installieren
HINWEIS Bitte stellen Sie sicher, dass Sie die richtige Version von Pytorch installieren, wie hier angegeben PyTorch-Version.
Für Nightly-PyTorch-Builds siehe Pytorch-Startseite und wählen Sie ROCm als Rechenplattform.
Vorkompilierte Binärdateien von ONNX Runtime mit ROCm EP werden für die meisten Sprachbindungen veröffentlicht. Bitte siehe ORT installieren.
Aus dem Quellcode kompilieren
Für Build-Anweisungen siehe die BUILD-Seite. Vorkompilierte .whl-Dateien werden unten im Abschnitt Anforderungen bereitgestellt und auf repo.radeon.com gehostet. Ubuntu-basierte Docker-Entwicklungsumgebungen sind im Abschnitt Docker-Unterstützung aufgeführt. Neue Wheels und Docker-Images werden mit jeder ROCm-Version veröffentlicht.
Voraussetzungen
Unten sehen Sie die Matrix der unterstützten ROCm-Versionen, die den Ubuntu-Builds entsprechen.
Ab ROCm 6.0.2 sind Links für vorkompilierte Python-Wheels (.whl) unten aufgeführt, die den Python-Versionen für das Host-Betriebssystem basierend auf der Ubuntu-Unterstützung entsprechen. Alle Links finden Sie auf der manylinux-Seite von AMD repo.radeon für jede entsprechende ROCm-Version.
| ONNX Runtime-Version | ROCm-Version | 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-Unterstützung
Für einfache Workloads und/oder Prototyping erstellt AMD Docker-Images basierend auf Ubuntu unter Verwendung der neuesten ROCm-Version und unterstützten ROCm-Pytorch-Builds, die auf ROCM Dockerhub zu finden sind.
Ziel ist es, Benutzern den Einstieg in ihre benutzerdefinierten Workloads in Python zu ermöglichen und eine Umgebung mit vorkompilierten ROCm-, Onnxruntime- und MIGraphX-Paketen bereitzustellen, die für den Einstieg erforderlich sind, ohne dass ONNX Runtime selbst kompiliert werden muss.
Konfigurationsoptionen
Der ROCm Execution Provider unterstützt die folgenden Konfigurationsoptionen.
device_id
Die Geräte-ID.
Standardwert: 0
tunable_op_enable
Auf true gesetzt, um TunableOp zu verwenden.
Standardwert: false
tunable_op_tuning_enable
Setzt TunableOp auf den Versuch, ein Online-Tuning durchzuführen.
Standardwert: false
user_compute_stream
Definiert den Rechenstream, auf dem die Inferenz ausgeführt werden soll. Dies setzt implizit die Option has_user_compute_stream. Es kann nicht über UpdateROCMProviderOptions gesetzt werden. Dies kann nicht in Kombination mit einem externen Allocator verwendet werden.
Beispiel für die Python-Verwendung
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)
Um den benutzerdefinierten Rechenstream zu nutzen, wird empfohlen, I/O-Binding zu verwenden, um Ein- und Ausgaben an Tensoren im Gerät zu binden.
do_copy_in_default_stream
Gibt an, ob Kopien im Standardstream erfolgen sollen oder separate Streams verwendet werden sollen. Die empfohlene Einstellung ist true. Wenn false, gibt es Race Conditions und möglicherweise eine bessere Leistung.
Standardwert: true
gpu_mem_limit
Die Größenbeschränkung des Geräte-Memory-Arenas in Bytes. Diese Größenbeschränkung gilt nur für den Arena des Execution Providers. Die gesamte Gerätespeichernutzung kann höher sein. s: maximaler Wert des C++ size_t-Typs (effektiv unbegrenzt)
Hinweis: Wird durch den Inhalt von default_memory_arena_cfg (falls angegeben) überschrieben.
arena_extend_strategy
Die Strategie zur Erweiterung des Gerätespeicher-Arenas.
| Wert | Beschreibung |
|---|---|
| kNextPowerOfTwo (0) | nachfolgende Erweiterungen erfolgen in grösseren Schritten (multipliziert mit Zweierpotenzen) |
| kSameAsRequested (1) | Erweiterung um den angeforderten Betrag |
Standardwert: kNextPowerOfTwo
Hinweis: Wird durch den Inhalt von default_memory_arena_cfg (falls angegeben) überschrieben.
gpu_external_[alloc|free|empty_cache]
gpu_external_* wird verwendet, um externe Allocators zu übergeben. Beispiel für die Python-Verwendung
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())
Standardwert: 0
Verwendung
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));
Die Details der C-API finden Sie hier.
Python
Python-APIs-Details finden Sie hier.
Beispiele
Python
import onnxruntime as ort
model_path = '<path to model>'
providers = [
'ROCMExecutionProvider',
'CPUExecutionProvider',
]
session = ort.InferenceSession(model_path, providers=providers)