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

StackFabricantGPU supportésMaturité LLM
CUDANVIDIANVIDIA uniquementExcellente
ROCmAMDAMD uniquementBonne (variable selon GPU)
VulkanKhronos GroupTous (AMD, NVIDIA, Intel, ARM)Bonne
MetalAppleApple Silicon (M1 à M4)Excellente (via MLX)
SYCL/oneAPIIntelIntel 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

ArchitectureGPUSupport ROCm
gfx906Radeon VII, MI50ROCm 5.x+
gfx908MI100ROCm 4.x+
gfx90aMI210, MI250ROCm 5.x+
gfx942MI300XROCm 6.x+
gfx1100RX 7900 XTX/XTROCm 5.5+
gfx1151Ryzen 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

GPUDriverType
AMDRADV (Mesa)Open source, recommandé
AMDAMDVLKOfficiel AMD, parfois plus rapide
NVIDIADriver propriétaireInclus dans le driver NVIDIA
NVIDIANVK (Mesa)Open source, en développement
IntelANV (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) :

BackendPrompt (pp512)Génération (tg128)Notes
Vulkan (RADV)4823 t/s265 t/sStable, meilleur en génération
ROCm 7.1.1 (HIP)5954 t/s205 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

PlateformeCommandeDescription
NVIDIAnvidia-smiInfos GPU, VRAM, utilisation
NVIDIAnvtopInterface TUI temps réel
AMDrocm-smiÉquivalent de nvidia-smi
AMDradeontopMonitoring GPU AMD
TousvulkaninfoInfos driver Vulkan
Applesudo powermetrics --samplers gpu_powerConsommation GPU Apple

Pour aller plus loin

← Toutes les découvertes