Drivers
Drivers GPU pour l'inférence : Vulkan, ROCm, CUDA, Metal
Comparatif des stacks GPU pour l'inférence LLM : CUDA, ROCm, Vulkan, Metal, et pourquoi Strix Halo passe par Vulkan.
Comprendre les différentes stacks logicielles (CUDA, ROCm, Vulkan, Metal) est essentiel pour exploiter pleinement un GPU lors de l’inférence de LLM. Chaque stack a ses forces, ses limitations et ses cas d’usage optimaux — et le choix conditionne directement quel moteur d’inférence est utilisable.
Vue d’ensemble des stacks GPU
| Stack | Fabricant | GPU supportés | Maturité LLM |
|---|---|---|---|
| CUDA | NVIDIA | NVIDIA uniquement | Excellente |
| ROCm | AMD | AMD uniquement | Bonne (variable selon GPU) |
| Vulkan | Khronos Group | Tous (AMD, NVIDIA, Intel, ARM) | Bonne |
| Metal | Apple | Apple Silicon (M1 à M4) | Excellente (via MLX) |
| SYCL/oneAPI | Intel | Intel Arc, CPU | Émergente |
CUDA (NVIDIA)
CUDA (Compute Unified Device Architecture) est la stack propriétaire de NVIDIA, lancée en 2007. C’est le standard de facto pour le calcul GPU en IA grâce à son écosystème mature.
La stack se superpose ainsi : application (llama.cpp, vLLM, PyTorch) → bibliothèques optimisées (cuBLAS, cuDNN, TensorRT) → CUDA Runtime API → CUDA Driver API → driver NVIDIA → GPU.
Avantages
- Écosystème mature : cuBLAS, cuDNN, TensorRT sont ultra-optimisés.
- Documentation abondante : la plus grande communauté GPU.
- Performance de référence : la plupart des benchmarks sont basés sur CUDA.
- Tensor Cores : accélération matérielle pour FP16, INT8, FP8.
Limitations : propriétaire (NVIDIA uniquement), coût matériel plus élevé, verrouillage à un seul fabricant.
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release
nvidia-smi
nvcc --version
ROCm (AMD)
ROCm (Radeon Open Compute) est la réponse open source d’AMD à CUDA. Il fournit une stack complète avec une API compatible HIP (Heterogeneous-computing Interface for Portability).
La stack : application → bibliothèques AMD (rocBLAS, MIOpen, hipBLASLt) → HIP Runtime (API compatible CUDA) → HSA Runtime (ROCr) → driver amdgpu (module kernel Linux) → GPU.
HIP : portabilité CUDA vers AMD
HIP permet de compiler du code CUDA pour GPU AMD avec des modifications minimales. La plupart du code se convertit automatiquement avec l’outil hipify. Correspondances : cuBLAS → rocBLAS, cuDNN → MIOpen, nvcc → hipcc, cudaMalloc → hipMalloc.
Support GPU
| Architecture | GPU | Support ROCm |
|---|---|---|
| gfx906 | Radeon VII, MI50 | ROCm 5.x+ |
| gfx908 | MI100 | ROCm 4.x+ |
| gfx90a | MI210, MI250 | ROCm 5.x+ |
| gfx942 | MI300X | ROCm 6.x+ |
| gfx1100 | RX 7900 XTX/XT | ROCm 5.5+ |
| gfx1151 | Ryzen AI MAX+ (Strix Halo) | ROCm 7.1+ |
cmake -B build -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1100
cmake --build build --config Release
rocminfo
rocm-smi
Sur les GPU très récents, toutes les bibliothèques Tensile optimisées ne sont pas encore disponibles. Dans ce cas, le backend Vulkan peut être plus stable et plus performant en attendant que ROCm rattrape son retard.
Vulkan
Vulkan est une API graphique et de calcul bas niveau, multiplateforme, gérée par le Khronos Group. Contrairement à CUDA/ROCm, Vulkan fonctionne sur tous les GPU modernes.
La stack : application (llama.cpp) → ggml-vulkan (compute shaders SPIR-V) → Vulkan Loader → driver ICD (RADV, NVK, ANV, AMDVLK) → GPU.
Drivers Vulkan par fabricant
| GPU | Driver | Type |
|---|---|---|
| AMD | RADV (Mesa) | Open source, recommandé |
| AMD | AMDVLK | Officiel AMD, parfois plus rapide |
| NVIDIA | Driver propriétaire | Inclus dans le driver NVIDIA |
| NVIDIA | NVK (Mesa) | Open source, en développement |
| Intel | ANV (Mesa) | Open source |
Avantages : universel (AMD, NVIDIA, Intel, ARM, Apple via MoltenVK), drivers graphiques très matures, aucune dépendance CUDA/ROCm à installer, support des cooperative matrices (tensor cores AMD/NVIDIA).
Limitations : généralement 10 à 20 % plus lent que CUDA/ROCm natif, et pas d’équivalent à cuBLAS/rocBLAS pré-optimisé.
sudo apt install libvulkan-dev glslang-tools
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config Release
vulkaninfo --summary
Comparatif performance sur Strix Halo
Exemple sur un AMD Ryzen AI MAX+ 395 (gfx1151) :
| Backend | Prompt (pp512) | Génération (tg128) | Notes |
|---|---|---|---|
| Vulkan (RADV) | 4823 t/s | 265 t/s | Stable, meilleur en génération |
| ROCm 7.1.1 (HIP) | 5954 t/s | 205 t/s | +23 % prompt, support récent |
Recommandation générale
- NVIDIA : CUDA, c’est le plus optimisé.
- AMD récent (RX 7000, MI300) : testez ROCm et Vulkan, gardez le meilleur.
- AMD ancien ou GPU très récent non supporté : Vulkan.
- Apple Silicon : Metal via MLX ou llama.cpp backend Metal.
Metal (Apple Silicon)
Metal est l’API graphique et de calcul d’Apple, optimisée pour les puces M1 à M4. La mémoire unifiée des Mac permet de charger de très grands modèles.
cmake -B build -DGGML_METAL=ON
cmake --build build --config Release
# Ou via MLX
pip install mlx mlx-lm
Le cas gfx1151 : passer par Vulkan
Notre banc de test Strix Halo repose sur un AMD Ryzen AI MAX+ 395 : iGPU Radeon 8060S en gfx1151, 128 Gio de mémoire UMA. Sur cette architecture, le choix de stack n’est pas qu’une question de performance, c’est une question de support.
ROCm ne couvre gfx1151 que depuis la version 7.1, et le chemin vLLM y reste inutilisable (bug Triton sur cette cible). En pratique, l’inférence passe donc par llama.cpp avec le backend Vulkan (image kyuz0/amd-strix-halo-toolboxes), qui exploite l’iGPU de façon stable. Sur Strix Halo, Qwen3.6-35B-A3B (MoE, 3B actifs par token) quantifié Q5_K_XL tourne à environ 73 t/s. Le comparatif ci-dessus confirme le compromis : Vulkan est meilleur en génération, ROCm en prompt, mais seul Vulkan offre aujourd’hui une voie fiable et complète sur gfx1151.
Sur RTX 3090 (architecture Ampere), on reste sur CUDA et vLLM, là où l’écosystème est le plus mature.
Outils de monitoring
| Plateforme | Commande | Description |
|---|---|---|
| NVIDIA | nvidia-smi | Infos GPU, VRAM, utilisation |
| NVIDIA | nvtop | Interface TUI temps réel |
| AMD | rocm-smi | Équivalent de nvidia-smi |
| AMD | radeontop | Monitoring GPU AMD |
| Tous | vulkaninfo | Infos driver Vulkan |
| Apple | sudo powermetrics --samplers gpu_power | Consommation GPU Apple |