Ollama sur GPU AMD : toutes les couches d'accélération (CPU seul, Vulkan, ROCm)
Sur une machine AMD, Ollama n'a pas de réponse unique « le GPU marche ou pas » comme on le ressent souvent sur NVIDIA. Vous avez plusieurs couches d'accélération distinctes — CPU seul, Vulkan, ROCm — et elles diffèrent énormément en effort d'installation et en performances. Choisir la bonne compte autant que choisir le bon modèle. Ce guide passe en revue chaque option, sa configuration et comment choisir selon que vous codez, faites tourner des agents et selon le matériel que vous possédez.
Pourquoi Ollama a-t-il plusieurs couches d'accélération AMD
Ollama repose sur llama.cpp et llama.cpp ne parle pas directement à votre GPU. Il délègue le gros du travail à une couche d'accélération : CUDA chez NVIDIA et chez AMD soit ROCm (la pile de calcul complète d'AMD, basée sur HIP), soit Vulkan (une API graphique/computing multi-fabricants). Chaque couche s'installe sous forme de bibliothèques différentes, c'est pourquoi une installation peut être accélérée par GPU sur une machine et silencieusement limitée au CPU sur la suivante.
Bonne nouvelle : pas besoin de réinstaller Ollama pour changer. Vous contrôlez le comportement avec des variables d'environnement et, dans certains cas, des builds séparés. Voici d'emblée le tableau qui compare les trois modes — le reste de l'article détaille chacun.
Vue d'ensemble : CPU vs Vulkan vs ROCm
| CPU seul | Vulkan | ROCm | |
|---|---|---|---|
| Installation | Rien | Rien à installer — livré avec Ollama | amdgpu-install avec le usecase ROCm |
| Accélération GPU | Aucune — tout tourne sur CPU | Presque tous les GPU AMD, iGPU et cartes anciennes inclus | Officiellement une liste précise de cartes (surtout RDNA2/3) ; les iGPU demandent des variables d'env supplémentaires |
| Performances maximales | Les plus lentes (quelques tokens/s au-delà de 7B) | Bonnes, un cran derrière ROCm | Les meilleures disponibles sur AMD |
| Stabilité | Très stable — rien ne peut mal tourner | Très stable ; l'échec est généralement un repli sur CPU | Sensible aux incompatibilités noyau/pilote/version ROCm |
| Mémoire | Toute la RAM système ; pas de limite VRAM | Surcoût VRAM légèrement plus élevé | Utilisation mémoire la plus efficace |
| Quand le choisir | Tests, débogage, très petits modèles, GPU occupé | Le choix par défaut : simplicité et large support | Vitesse maximale sur les cartes officiellement supportées |
Avant tout, voici comment savoir ce que votre Ollama fait actuellement.
Vérifier ce que vous utilisez actuellement
La vérification tient en deux étapes : lancez un modèle, puis regardez où il tourne.
# Charger un modèle (n'importe lequel fera l'affaire) :
ollama run mistral
Attendez la fin du chargement et générez une réponse. Dans un second terminal, vérifiez où le modèle tourne :
# Le modèle est-il sur GPU ou CPU ?
ollama ps
La colonne PROCESSOR donne la réponse honnête : 100% GPU signifie un déchargement complet, alors que quelque chose comme 48%/52% CPU/GPU signifie que le modèle est réparti — signe qu'il ne tient pas dans la VRAM. Dans ce cas, aucun changement de couche d'accélération ne vous sauvera : choisissez d'abord un modèle plus petit ou une quantization plus basse (voir le guide complet d'Ollama).
70%/30% CPU/GPU)
Un chiffre mixte comme 70%/30% CPU/GPU dans ollama ps signifie que le modèle tourne en mode hybride : la partie qui tient en VRAM (70 % des couches) tourne sur le GPU, le reste (30 %) sur le CPU. C'est mieux que 100% CPU, mais loin d'idéal : à chaque token, le GPU et le CPU doivent se passer le relais et vos tokens/seconde s'effondrent — souvent 5 à 10 fois plus lentement qu'un déchargement complet. 100% GPU = tout le modèle vit en VRAM, le meilleur cas. Si vous voyez 100% CPU alors qu'un GPU est présent, votre couche d'accélération n'est pas en place — c'est ce que le reste de l'article corrige.
Option 1 : CPU seul
Parfois vous voulez forcer le CPU — pour tester, comparer ou parce que le GPU est occupé ailleurs (un jeu, un rendu). Ollama n'a pas d'option « CPU seul » en une ligne, mais vous pouvez le forcer de façon fiable en masquant le GPU au processus.
Comment forcer le CPU seul
Le mécanisme est le même que celui utilisé pour exclure un GPU dans les configurations multi-GPU : masquer les fichiers de périphérique pour qu'Ollama ne les voie pas.
Si vous lancez Ollama comme service systemd (le cas courant sur GNU/Linux), éditez le service :
sudo systemctl edit ollama.service
Plus simple et plus portable : masquez les nœuds de rendu AMD au processus. Arrêtez le serveur, puis lancez-le avec les périphériques masqués :
sudo systemctl stop ollama
# Lancer un serveur CPU seul dans un terminal :
HIP_VISIBLE_DEVICES=-1 ollama serve
HIP_VISIBLE_DEVICES=-1 indique à la couche ROCm que zéro GPU est visible, donc toutes les couches tournent sur CPU. Le build Vulkan a son équivalent — voir l'option 2.
CPU seul : bon ou mauvais choix ?
| Cas | Verdict | Détail |
|---|---|---|
| Modèles qui tiennent en RAM de toute façon | ✅ Bon choix | Un 7B en q4 tourne de façon acceptable sur un CPU moderne à 8 cœurs (typiquement 8–15 tokens/s) — très bien pour discuter et résumer |
| Très petits modèles (1B–3B) | ✅ Bon choix | Pour de la classification ou de l'extraction, le CPU peut être plus rapide que de payer le coût de transfert GPU — et ça libère votre VRAM |
| Débogage GPU | ✅ Bon choix | Si vous suspectez un problème côté GPU (crashs, sorties incohérentes), passer en CPU seul l'isole instantanément |
| Tout ce qui est interactif et volumineux | ❌ Mauvais choix | Un 13B semble lent (2–6 tokens/s sur une puce de bureau typique) et un 30B et plus est pénible |
| Assistants de code et agents | ❌ Mauvais choix | Ils génèrent des milliers de tokens par tâche : le CPU seul est le mauvais choix par défaut |
Option 2 : GPU avec Vulkan
Vulkan est la voie « ça marche direct » : une couche universelle qui tourne sur les GPU AMD, NVIDIA et Intel, sans pile de calcul du fabricant à installer.
Comment le configurer
Le support Vulkan est intégré aux versions récentes d'Ollama et est activé par défaut sur GNU/Linux quand Ollama ne peut pas (ou n'est pas configuré pour) utiliser ROCm. Deux choses à savoir :
1. Assurez-vous que ROCm ne capture pas l'exécution. Si les bibliothèques ROCm sont installées mais que quelque chose cloche, vous pouvez préférer explicitement Vulkan :
# Préférer la couche Vulkan à ROCm
OLLAMA_VULKAN=1 ollama serve
2. Ou passer en Vulkan seul en masquant le GPU à HIP. Si vous voulez forcer le chemin Vulkan (par exemple pour le comparer à ROCm) :
HIP_VISIBLE_DEVICES=-1 OLLAMA_VULKAN=1 ollama serve
Les différences avec ROCm sont résumées dans le tableau de vue d'ensemble en début d'article. En résumé pratique : Vulkan est le choix par défaut — zéro installation, support large et à 10–20 % de ROCm sur la plupart des modèles. ROCm gagne quand vous courez après le dernier token/seconde ou avec de gros modèles où sa meilleure efficacité mémoire vous achète une couche de plus en VRAM.
Une fois vos tests faits et votre choix de variable d'env arrêté, gardez la configuration dans le système plutôt que de la retaper à chaque lancement : lancez sudo systemctl edit ollama.service et ajoutez :
[Service]
Environment="OLLAMA_VULKAN=1"
Terminez par sudo systemctl restart ollama, puis vérifiez avec ollama ps — vous devriez voir 100% GPU.
Option 3 : GPU avec ROCm
ROCm est la réponse d'AMD à CUDA : la pile de calcul officielle, la mieux optimisée. Quand elle fonctionne, c'est la façon la plus rapide de faire tourner des modèles sur un GPU AMD. Quand elle ne fonctionne pas, c'est la plus exigeante à installer — c'est pourquoi nous avons un article entier sur l'installation de ROCm sur GNU/Linux. La version courte :
amdgpu-install -y --usecase=rocm --no-dkms
(La partie --no-dkms compte : elle évite le module noyau DKMS instable et garde le pilote AMD du noyau.)
Quels GPU sont réellement supportés
C'est la partie qui décide de tout. Les cartes officiellement supportées sont surtout des GPU discrets RDNA2 et RDNA3 — les familles RX 6000 et RX 9000/7000 — plus les cartes Instinct pour datacenter. Beaucoup d'autres cartes fonctionnent quand même via l'astuce HSA_OVERRIDE_GFX_VERSION, qui fait croire à ROCm que votre GPU est un modèle supporté :
| Votre GPU | Cartes d'exemple | Astuce nécessaire |
|---|---|---|
| RDNA3 (gfx1100…) | RX 7900 XTX/XT/GRE | Fonctionne directement |
| RDNA2 (gfx1030…) | RX 6800/6900/6950 XT | Fonctionne directement |
| iGPU RDNA3 | Radeon 780M/880M/890M (portables, mini PC) | HSA_OVERRIDE_GFX_VERSION=11.0.0 |
| iGPU RDNA2 | iGPU Vega de certains APU | Repli Vulkan généralement |
| GCN / Polaris / plus ancien | RX 500 / Vega discrètes | HSA_OVERRIDE_GFX_VERSION=9.0.0 (aléatoire) — préférez Vulkan |
| CDNA / Instinct | MI300X, MI250 | Supporté (datacenter) |
Positionnez l'override comme n'importe quelle variable d'env :
HSA_OVERRIDE_GFX_VERSION=11.0.0 ollama serve
Une fois vos tests faits et l'override validé, inscrivez-le dans le service au lieu de le redéfinir à chaque lancement : lancez sudo systemctl edit ollama.service et ajoutez :
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=11.0.0"
Vérifier que ROCm voit votre carte
rocminfo | grep -i gfx
# ou, pour un contrôle santé rapide :
rocm-smi
Si rocminfo liste votre GPU et que ollama ps montre 100% GPU (ou un déchargement partiel), vous êtes sur ROCm. Si Ollama démarre mais que ollama ps montre toujours CPU, vérifiez les deux suspects habituels : l'utilisateur du service doit avoir accès au GPU (ajoutez-le aux groupes render et video) et la version de ROCm doit correspondre à ce que votre build d'Ollama attend.
Réglages spécifiques à ROCm
OLLAMA_NUM_GPU— nombre de couches GPU à décharger (0 = CPU seul, 999 = tout tenter). Rarement nécessaire ; l'ordonnanceur d'Ollama fait bien le travail.OLLAMA_SPLIT_MODE=layer— comment les configurations multi-GPU répartissent le modèle (la valeur par défaut convient à la plupart des cas).HIP_VISIBLE_DEVICES=0,1— restreindre les GPU utilisés par ROCm quand vous en avez plusieurs.
Quelle option pour quel usage
Tableau de décision par matériel
| Votre matériel | Couche recommandée | Pourquoi |
|---|---|---|
| CPU AMD, pas de GPU discret | CPU seul (option 1) | Rien à accélérer ; un 7B en q4 reste exploitable |
| Portable / mini PC avec iGPU AMD (780M/880M/890M) | Vulkan (option 2), ROCm avec override si ça marche | Les iGPU partagent la RAM système ; Vulkan les gère sans gymnastique. Allouez 8–16 Go de RAM à l'iGPU dans le BIOS pour de vrais gains |
| GPU discret RX 6000 / 7000 / 9000, 8–24 Go | ROCm (option 3) | Officiellement supporté, le plus rapide ; Vulkan en repli |
| Cartes GCN/Polaris/Vega anciennes | Vulkan (option 2) | Le support ROCm est officieux au mieux ; Vulkan gère ces cartes nativement |
| Instinct / serveur multi-GPU | ROCm (option 3) | La seule couche conçue pour ça |
Par cas d'usage
Codage et agents (les cas exigeants). Le codage agentique — celui dont parle notre guide des modèles de code locaux et que des outils comme OpenCode pratiquent avec une couche locale — est la charge la plus exigeante que vous puissiez infliger à une machine locale : prompts longs, énormes contextes, des milliers de tokens par minute de génération soutenue. Chaque % de vitesse se cumule. Sur du matériel supporté, utilisez ROCm ; sur tout le reste, Vulkan. Et dans les deux cas, assurez-vous que tout le modèle tient en VRAM (100% GPU dans ollama ps) — un modèle partiellement déchargé rendra un agent pénible à utiliser, car les allers-retours d'appels d'outils multiplient votre pénalité de latence.
Autocomplétion en ligne. Un petit modèle FIM (1B–3B) veut une latence minimale, pas du débit. Ces modèles sont si petits qu'ils tournent bien sur l'une ou l'autre couche — même sur CPU — mais si le GPU est libre, déchargez-les ; la différence se voit dans la réactivité perçue de l'éditeur.
Chat, RAG, résumé. La vitesse de lecture humaine est le goulot d'étranglement. Même 10–15 tokens/s semblent très bien. Ici, Vulkan vs ROCm compte peu ; choisissez celui qui fonctionne déjà. Priorisez le fait que le modèle + un num_ctx confortable tiennent en mémoire plutôt que la vitesse brute.
Expérimenter / pilotes instables. Si votre installation ROCm est capricieuse, ne vous battez pas des heures : passez à Vulkan et continuez. Le mode d'échec de Vulkan est gracieux (repli CPU), celui de ROCm ne l'est pas.
Aide-mémoire de dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
ollama ps montre 100% CPU alors qu'un GPU est présent |
Couche inactive | Vérifiez le log de serve ; essayez OLLAMA_VULKAN=1 ou réinstallez ROCm selon notre guide ROCm |
| ROCm installé mais GPU invisible | L'utilisateur du service n'a pas accès au GPU | sudo usermod -aG render,video $USER puis redémarrez |
rocminfo montre un mauvais id gfx ou rien |
Carte non supportée | Définissez HSA_OVERRIDE_GFX_VERSION (voir tableau ci-dessus) ou passez à Vulkan |
Modèle réparti CPU/GPU dans ollama ps |
Modèle trop gros pour la VRAM | Quantization plus basse ou modèle plus petit ; réduisez num_ctx |
| Crashs seulement sur ROCm, OK sur CPU/Vulkan | Incompatibilité ROCm/pilote | Faites correspondre les versions ou restez sur Vulkan |