Aller au contenu principal

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.

Par Antoine Michéa, Fondateur & ingénieur infrastructure ·

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 : cuBLASrocBLAS, cuDNNMIOpen, nvcchipcc, cudaMallochipMalloc.

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

Pour aller plus loin

← Toutes les découvertes