<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Llm on slash-root.fr</title><link>https://slash-root.fr/tags/llm/</link><description>Recent content in Llm on slash-root.fr</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Wed, 05 Aug 2026 23:55:00 +0200</lastBuildDate><atom:link href="https://slash-root.fr/tags/llm/index.xml" rel="self" type="application/rss+xml"/><item><title>LLM en local sur GPU AMD : ROCm, Ollama, OpenCode</title><link>https://slash-root.fr/llm-local-gpu-amd-rocm-ollama-opencode/</link><pubDate>Wed, 05 Aug 2026 23:55:00 +0200</pubDate><guid>https://slash-root.fr/llm-local-gpu-amd-rocm-ollama-opencode/</guid><description>&lt;img src="https://slash-root.fr/llm-local-gpu-amd-rocm-ollama-opencode/cover.png" alt="Featured image of post LLM en local sur GPU AMD : ROCm, Ollama, OpenCode" /&gt;&lt;h2 id="introduction"&gt;&lt;a href="#introduction" class="header-anchor"&gt;&lt;/a&gt;Introduction
&lt;/h2&gt;&lt;p&gt;CUDA partout, ROCm plus discret. C&amp;rsquo;est le sentiment qu&amp;rsquo;on peut avoir en cherchant à faire tourner un LLM en local sur une carte AMD : la majorité des tutoriels et benchmarks qui circulent partent du principe qu&amp;rsquo;on a une carte NVIDIA. Ici, c&amp;rsquo;est une &lt;strong&gt;RX 7900 XTX (Navi 31, RDNA3)&lt;/strong&gt;, 24 Go de VRAM, et pas de CUDA à l&amp;rsquo;horizon.&lt;/p&gt;
&lt;p&gt;Bonne nouvelle : ROCm a eu le temps de mûrir depuis, il est packagé nativement dans les dépôts CachyOS/Arch, et Ollama sait très bien s&amp;rsquo;en servir. La mauvaise nouvelle, c&amp;rsquo;est qu&amp;rsquo;il y a deux ou trois pièges classiques (iGPU qui se fait passer pour le GPU de compute, mauvais paquet, mauvais tag de modèle&amp;hellip;) qu&amp;rsquo;il vaut mieux connaître avant de perdre une soirée à débugger.&lt;/p&gt;
&lt;p&gt;Voici la stack complète : &lt;strong&gt;ROCm → Ollama → OpenCode&lt;/strong&gt;, du driver jusqu&amp;rsquo;à l&amp;rsquo;agent de codage qui tourne dans le terminal.&lt;/p&gt;
&lt;h2 id="lexique"&gt;&lt;a href="#lexique" class="header-anchor"&gt;&lt;/a&gt;Lexique
&lt;/h2&gt;&lt;p&gt;Quelques termes qui reviennent tout au long de l&amp;rsquo;article, pour ceux qui n&amp;rsquo;auraient pas suivi l&amp;rsquo;actualité IA de près :&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;LLM&lt;/strong&gt; (Large Language Model)&lt;/td&gt;&lt;td&gt;Un modèle de langage entraîné sur d'énormes volumes de texte, capable de générer/comprendre du texte (et du code).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;ROCm&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;La stack logicielle open source d'AMD équivalente à CUDA chez NVIDIA - pilotes, runtime de calcul (HIP) et bibliothèques (BLAS, etc.) pour faire tourner du calcul GPU générique.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;HIP&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;L'API de programmation GPU d'AMD, pensée pour être proche de CUDA. C'est ce que ROCm expose en interne, d'où les noms de variables &lt;code&gt;HIP_VISIBLE_DEVICES&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Un serveur qui télécharge, charge en mémoire et sert des LLM localement via une API HTTP, avec gestion automatique du backend GPU (CUDA/ROCm/CPU selon le paquet installé).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;OpenCode&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Un agent de codage IA en ligne de commande (façon Aider/Claude Code) qui peut se connecter à n'importe quel provider compatible OpenAI, dont Ollama en local.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;VRAM&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;La mémoire embarquée sur le GPU. Elle contient à la fois les poids du modèle chargé et le contexte en cours de traitement (KV-cache) - c'est la ressource limitante sur ce genre de setup.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;GPU / iGPU&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Le GPU dédié (carte graphique, ici la RX 7900 XTX) fait le calcul lourd ; l'iGPU (intégré au CPU) n'est pas fait pour ça et doit être exclu du calcul.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Contexte&lt;/strong&gt; (context window)&lt;/td&gt;&lt;td&gt;Le nombre maximum de tokens (mots/fragments de mots) qu'un modèle peut "voir" en une fois, prompt + réponse compris. Un contexte trop court limite la taille des fichiers qu'un agent comme OpenCode peut analyser.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;KV-cache&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;La mémoire utilisée par le modèle pour stocker les calculs intermédiaires de tout le contexte en cours - elle grandit avec la taille du contexte utilisé, en plus des poids du modèle.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;MoE&lt;/strong&gt; (Mixture of Experts)&lt;/td&gt;&lt;td&gt;Une architecture où seule une partie des paramètres du modèle est activée par token traité - plus rapide à taille égale qu'un modèle "dense", mais qui occupe quand même toute la VRAM pour stocker l'ensemble des experts.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Tokens/s&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;La vitesse de génération d'un modèle, mesurée en tokens produits par seconde. Un bon indicateur de confort d'usage au quotidien.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="le-matériel"&gt;&lt;a href="#le-mat%c3%a9riel" class="header-anchor"&gt;&lt;/a&gt;Le matériel
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GPU dédié : AMD Radeon &lt;strong&gt;RX 7900 XTX&lt;/strong&gt; (Navi 31, &lt;code&gt;gfx1100&lt;/code&gt;) - 24 Go de VRAM&lt;/li&gt;
&lt;li&gt;iGPU (à ignorer pour le compute) : AMD Raphael (&lt;code&gt;gfx1036&lt;/code&gt;) - non supporté officiellement par ROCm&lt;/li&gt;
&lt;li&gt;OS : CachyOS (Arch-based)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le point important ici : la machine a &lt;strong&gt;deux GPU AMD détectés par ROCm&lt;/strong&gt;, dont un qui ne doit surtout pas être utilisé pour l&amp;rsquo;inférence. On y revient plus bas.&lt;/p&gt;
&lt;h2 id="1-rocm--le-minimum-syndical"&gt;&lt;a href="#1-rocm--le-minimum-syndical" class="header-anchor"&gt;&lt;/a&gt;1. ROCm : le minimum syndical
&lt;/h2&gt;&lt;p&gt;Pas besoin du script d&amp;rsquo;installation AMD ni de l&amp;rsquo;AUR - ROCm est dans le dépôt officiel &lt;code&gt;extra&lt;/code&gt;. Et contrairement à ce qu&amp;rsquo;on pourrait croire, il n&amp;rsquo;est &lt;strong&gt;pas nécessaire d&amp;rsquo;installer le SDK ROCm complet&lt;/strong&gt; (&lt;code&gt;rocm-hip-sdk&lt;/code&gt;, &lt;code&gt;rocm-opencl-sdk&lt;/code&gt;) juste pour faire tourner Ollama : le paquet &lt;code&gt;ollama-rocm&lt;/code&gt; embarque déjà tout le runtime dont il a besoin via sa dépendance &lt;code&gt;hipblas&lt;/code&gt; (qui tire &lt;code&gt;hip-runtime-amd&lt;/code&gt;, &lt;code&gt;rocblas&lt;/code&gt;, &lt;code&gt;rocsolver&lt;/code&gt;&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Seuls deux outils sont utiles à installer séparément, pour le diagnostic et le monitoring :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo pacman -S rocminfo rocm-smi-lib
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="droits-daccès-au-gpu"&gt;&lt;a href="#droits-dacc%c3%a8s-au-gpu" class="header-anchor"&gt;&lt;/a&gt;Droits d&amp;rsquo;accès au GPU
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod -aG render,video $USER
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Déconnexion/reconnexion (ou reboot) obligatoire pour que ça prenne effet.&lt;/p&gt;
&lt;h3 id="identifier-le-bon-gpu"&gt;&lt;a href="#identifier-le-bon-gpu" class="header-anchor"&gt;&lt;/a&gt;Identifier le bon GPU
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rocm-smi --showproductname
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GPU[0] : Card Series: AMD Radeon RX 7900 XTX
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GPU[0] : GFX Version: gfx1100
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GPU[1] : Card Series: AMD Ryzen 7 7700X 8-Core Processor
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GPU[1] : GFX Version: gfx1036
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sur une machine avec iGPU + GPU dédié, ça liste &lt;strong&gt;deux agents&lt;/strong&gt;. Et bonne nouvelle : le &lt;code&gt;[N]&lt;/code&gt; affiché devant chaque GPU &lt;strong&gt;est directement&lt;/strong&gt; l&amp;rsquo;index attendu par &lt;code&gt;HIP_VISIBLE_DEVICES&lt;/code&gt;/&lt;code&gt;ROCR_VISIBLE_DEVICES&lt;/code&gt; - pas besoin de le déduire soi-même.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;GPU&lt;/th&gt;
					&lt;th&gt;Architecture&lt;/th&gt;
					&lt;th&gt;Compute ROCm ?&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Raphael (iGPU)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;gfx1036&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Non&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;RX 7900 XTX&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;gfx1100&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Oui&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ici : &lt;code&gt;0&lt;/code&gt; pour la 7900 XTX, &lt;code&gt;1&lt;/code&gt; pour l&amp;rsquo;iGPU. Cet index sert ensuite à forcer explicitement le bon GPU, parce qu&amp;rsquo;Ollama (comme pas mal d&amp;rsquo;outils ROCm) a parfois la mauvaise idée de vouloir utiliser tous les GPU détectés. Et on en profite pour relever tout de suite la fenêtre de contexte par défaut d&amp;rsquo;Ollama (voir plus bas pourquoi c&amp;rsquo;est indispensable) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export HIP_VISIBLE_DEVICES&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export ROCR_VISIBLE_DEVICES&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export OLLAMA_CONTEXT_LENGTH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;65536&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export OLLAMA_FLASH_ATTENTION&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export OLLAMA_KV_CACHE_TYPE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;q8_0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;0&lt;/code&gt; correspond à l&amp;rsquo;index de la RX 7900 XTX relevé à l&amp;rsquo;étape précédente - à adapter si le tien diffère.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Pourquoi &lt;code&gt;OLLAMA_FLASH_ATTENTION&lt;/code&gt; + &lt;code&gt;OLLAMA_KV_CACHE_TYPE=q8_0&lt;/code&gt;&lt;/strong&gt; : sur &lt;code&gt;gfx1100&lt;/code&gt;, la flash attention seule n&amp;rsquo;apporte aucun gain de vitesse mesurable, mais c&amp;rsquo;est le prérequis pour activer la quantization du KV-cache (&lt;code&gt;q8_0&lt;/code&gt;), qui réduit son empreinte VRAM à contexte élevé. Testé sans régression sur &lt;code&gt;qwen3.6:27b&lt;/code&gt; (18 Go au lieu de 20 à contexte &lt;code&gt;65536&lt;/code&gt;, même débit ~34 tokens/s) - utile pour laisser de la marge quand un modèle a un KV-cache plus lourd.&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Sous fish&lt;/strong&gt;, &lt;code&gt;export VAR=VALEUR&lt;/code&gt; fonctionne nativement, donc les commandes ci-dessus s&amp;rsquo;utilisent telles quelles pour la session courante. Pour les rendre persistantes, deux options :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Variables universelles&lt;/strong&gt; (recommandé, aucun fichier à éditer) : à exécuter une seule fois dans un terminal - stockées par fish, valables pour toutes les sessions présentes et futures.
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fish" data-lang="fish"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-Ux&lt;/span&gt; HIP_VISIBLE_DEVICES &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-Ux&lt;/span&gt; ROCR_VISIBLE_DEVICES &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-Ux&lt;/span&gt; OLLAMA_CONTEXT_LENGTH &lt;span style="color:#ae81ff"&gt;65536&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-Ux&lt;/span&gt; OLLAMA_FLASH_ATTENTION &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-Ux&lt;/span&gt; OLLAMA_KV_CACHE_TYPE q8_0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Via &lt;code&gt;config.fish&lt;/code&gt;&lt;/strong&gt; (si on préfère versionner ses dotfiles) : ajouter dans &lt;code&gt;~/.config/fish/config.fish&lt;/code&gt; - réexécuté à chaque nouveau shell.
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fish" data-lang="fish"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-gx&lt;/span&gt; HIP_VISIBLE_DEVICES &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-gx&lt;/span&gt; ROCR_VISIBLE_DEVICES &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-gx&lt;/span&gt; OLLAMA_CONTEXT_LENGTH &lt;span style="color:#ae81ff"&gt;65536&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-gx&lt;/span&gt; OLLAMA_FLASH_ATTENTION &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;-gx&lt;/span&gt; OLLAMA_KV_CACHE_TYPE q8_0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;/blockquote&gt;
&lt;h3 id="monitoring"&gt;&lt;a href="#monitoring" class="header-anchor"&gt;&lt;/a&gt;Monitoring
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;watch -n1 rocm-smi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Indispensable pendant l&amp;rsquo;inférence pour vérifier que c&amp;rsquo;est bien la 7900 XTX qui chauffe, et pas l&amp;rsquo;iGPU qui reste sagement à 0 %.&lt;/p&gt;
&lt;h2 id="2-ollama-avec-le-backend-rocm"&gt;&lt;a href="#2-ollama-avec-le-backend-rocm" class="header-anchor"&gt;&lt;/a&gt;2. Ollama avec le backend ROCm
&lt;/h2&gt;&lt;p&gt;Trois variantes du paquet existent : &lt;code&gt;ollama&lt;/code&gt; (CPU), &lt;code&gt;ollama-cuda&lt;/code&gt; (NVIDIA), &lt;code&gt;ollama-rocm&lt;/code&gt; (AMD). Sans surprise, c&amp;rsquo;est la troisième qu&amp;rsquo;il faut, et elle est dans les dépôts officiels - pas besoin du script &lt;code&gt;curl | sh&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo pacman -S ollama-rocm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Ne pas installer &lt;code&gt;ollama&lt;/code&gt; et &lt;code&gt;ollama-rocm&lt;/code&gt; en même temps&lt;/strong&gt; : même binaire, conflit garanti.&lt;/p&gt;
&lt;h3 id="démarrage-manuel"&gt;&lt;a href="#d%c3%a9marrage-manuel" class="header-anchor"&gt;&lt;/a&gt;Démarrage manuel
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama serve
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Écoute par défaut sur &lt;code&gt;http://localhost:11434&lt;/code&gt;. Les variables &lt;code&gt;HIP_VISIBLE_DEVICES&lt;/code&gt;/&lt;code&gt;ROCR_VISIBLE_DEVICES&lt;/code&gt;/&lt;code&gt;OLLAMA_CONTEXT_LENGTH&lt;/code&gt; doivent être exportées dans le même shell avant cette commande.&lt;/p&gt;
&lt;h3 id="option--service-systemd"&gt;&lt;a href="#option--service-systemd" class="header-anchor"&gt;&lt;/a&gt;Option : service systemd
&lt;/h3&gt;&lt;p&gt;Le paquet installe une unit &lt;code&gt;ollama.service&lt;/code&gt; prête à l&amp;rsquo;emploi :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl enable --now ollama
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour lui injecter les variables GPU de façon permanente (un service systemd ne voit pas les variables exportées dans un shell) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl edit ollama
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;HIP_VISIBLE_DEVICES=0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ROCR_VISIBLE_DEVICES=0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;OLLAMA_CONTEXT_LENGTH=65536&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;OLLAMA_FLASH_ATTENTION=1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;OLLAMA_KV_CACHE_TYPE=q8_0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl restart ollama
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="télécharger-et-tester-un-modèle"&gt;&lt;a href="#t%c3%a9l%c3%a9charger-et-tester-un-mod%c3%a8le" class="header-anchor"&gt;&lt;/a&gt;Télécharger et tester un modèle
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama pull qwen3-coder:30b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama run qwen3-coder:30b &lt;span style="color:#e6db74"&gt;&amp;#34;écris une fonction fibonacci en python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama pull devstral-small-2:24b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama run devstral-small-2:24b &lt;span style="color:#e6db74"&gt;&amp;#34;écris une fonction fibonacci en python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama pull qwen3.6:27b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama run qwen3.6:27b &lt;span style="color:#e6db74"&gt;&amp;#34;écris une fonction fibonacci en python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lister les modèles déjà téléchargés :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="vérifier-que-le-bon-gpu-travaille"&gt;&lt;a href="#v%c3%a9rifier-que-le-bon-gpu-travaille" class="header-anchor"&gt;&lt;/a&gt;Vérifier que le bon GPU travaille
&lt;/h3&gt;&lt;p&gt;Pendant l&amp;rsquo;inférence, &lt;code&gt;watch -n1 rocm-smi&lt;/code&gt; doit montrer la charge sur la 7900 XTX uniquement. Les logs (&lt;code&gt;journalctl -u ollama -f&lt;/code&gt; ou le terminal si lancé manuellement) mentionnent aussi l&amp;rsquo;architecture détectée (&lt;code&gt;gfx1100&lt;/code&gt;) au démarrage.&lt;/p&gt;
&lt;h2 id="3-opencode-branché-sur-ollama"&gt;&lt;a href="#3-opencode-branch%c3%a9-sur-ollama" class="header-anchor"&gt;&lt;/a&gt;3. OpenCode branché sur Ollama
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://opencode.ai" target="_blank" rel="noopener"
 &gt;OpenCode&lt;/a&gt; est un agent de codage open source qui tourne dans le terminal (façon Aider/Claude Code), compatible avec plus de 75 providers via &lt;a class="link" href="https://models.dev" target="_blank" rel="noopener"
 &gt;Models.dev&lt;/a&gt; - dont Ollama en local.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo pacman -S opencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Là aussi, disponible directement dans &lt;code&gt;extra&lt;/code&gt;, pas besoin de l&amp;rsquo;AUR ni du script d&amp;rsquo;install.&lt;/p&gt;
&lt;h3 id="copiercoller-session-wayland"&gt;&lt;a href="#copiercoller-session-wayland" class="header-anchor"&gt;&lt;/a&gt;Copier/coller (session Wayland)
&lt;/h3&gt;&lt;p&gt;Sous Wayland, la copie de texte sélectionné dans OpenCode (&amp;ldquo;copied to clipboard&amp;rdquo;) nécessite &lt;code&gt;wl-copy&lt;/code&gt;, absent par défaut :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo pacman -S wl-clipboard
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Redémarrer OpenCode&lt;/strong&gt; après l&amp;rsquo;installation - le process déjà lancé ne détecte pas l&amp;rsquo;outil rétroactivement.&lt;/p&gt;
&lt;h3 id="prérequis--le-contexte"&gt;&lt;a href="#pr%c3%a9requis--le-contexte" class="header-anchor"&gt;&lt;/a&gt;Prérequis : le contexte
&lt;/h3&gt;&lt;p&gt;OpenCode recommande un modèle avec &lt;strong&gt;au moins 64k tokens de contexte&lt;/strong&gt;. Ça élimine d&amp;rsquo;office pas mal de modèles &amp;ldquo;coder&amp;rdquo; historiques limités à 32K - &lt;code&gt;qwen2.5-coder:32b&lt;/code&gt; par exemple. &lt;code&gt;qwen3-coder:30b&lt;/code&gt; (256K), &lt;code&gt;devstral-small-2:24b&lt;/code&gt; (256-384K) et &lt;code&gt;qwen3.6:27b&lt;/code&gt; (256K) n&amp;rsquo;ont pas ce problème&amp;hellip; sur le papier.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Le piège&lt;/strong&gt; : peu importe le contexte annoncé par le modèle, &lt;strong&gt;Ollama charge par défaut une fenêtre de 32768 tokens seulement&lt;/strong&gt;. Ces 256K et plus ne servent donc à rien tant qu&amp;rsquo;on n&amp;rsquo;a pas explicitement augmenté &lt;code&gt;OLLAMA_CONTEXT_LENGTH&lt;/code&gt; (fait plus haut) et redémarré le service. Pire : au démarrage, Ollama (≥ 0.15.5) logue une ligne du genre &lt;code&gt;vram-based default context ... default_num_ctx=32768&lt;/code&gt; - un simple palier calculé sur la VRAM totale, affiché &lt;strong&gt;indépendamment&lt;/strong&gt; de la variable qu&amp;rsquo;on a définie. Ça ne veut pas dire que ton override n&amp;rsquo;a pas fonctionné. La seule façon fiable de vérifier le contexte réellement chargé : &lt;code&gt;ollama ps&lt;/code&gt; (colonne &lt;code&gt;CONTEXT&lt;/code&gt;) une fois le modèle en mémoire.&lt;/p&gt;
&lt;p&gt;Pour la valeur à choisir : le KV-cache du contexte consomme de la VRAM en plus des poids du modèle, sans formule simple. Avec 24 Go et &lt;code&gt;qwen3-coder:30b&lt;/code&gt; ou &lt;code&gt;qwen3.6:27b&lt;/code&gt; (~18 Go de poids, ~6 Go de marge) ou &lt;code&gt;devstral-small-2:24b&lt;/code&gt; (~15 Go de poids, ~9 Go de marge), &lt;code&gt;65536&lt;/code&gt; est un point de départ raisonnable - à monter vers &lt;code&gt;131072&lt;/code&gt; s&amp;rsquo;il reste de la marge (&lt;code&gt;rocm-smi&lt;/code&gt; pendant une session chargée), à redescendre sinon.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="configuration-persistante"&gt;&lt;a href="#configuration-persistante" class="header-anchor"&gt;&lt;/a&gt;Configuration persistante
&lt;/h3&gt;&lt;p&gt;Fichier &lt;code&gt;~/.config/opencode/opencode.json&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;$schema&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://opencode.ai/config.json&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;provider&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;ollama&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;npm&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;@ai-sdk/openai-compatible&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Ollama (local)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;options&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;baseURL&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;http://localhost:11434/v1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;models&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;qwen3-coder:30b&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Qwen3-Coder 30B-A3B&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;devstral-small-2:24b&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Devstral Small 2 24B&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;qwen3.6:27b&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Qwen3.6 27B&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;ollama/qwen3-coder:30b&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;permission&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;ask&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Chaque modèle qu&amp;rsquo;on veut voir apparaître dans OpenCode doit être listé ici explicitement - il n&amp;rsquo;y a &lt;strong&gt;pas de découverte automatique&lt;/strong&gt; des modèles Ollama installés.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;permission.bash: &amp;quot;ask&amp;quot;&lt;/code&gt; demande une approbation avant toute commande shell lancée par l&amp;rsquo;agent (&lt;code&gt;bash&lt;/code&gt; est le nom de l&amp;rsquo;outil OpenCode, il couvre toute commande quel que soit le shell système sous-jacent - bash, zsh, fish&amp;hellip;). Autres valeurs possibles : &lt;code&gt;&amp;quot;allow&amp;quot;&lt;/code&gt; (aucune confirmation) ou &lt;code&gt;&amp;quot;deny&amp;quot;&lt;/code&gt; (bloqué). Voir la &lt;a class="link" href="https://opencode.ai/docs/permissions/" target="_blank" rel="noopener"
 &gt;doc Permissions&lt;/a&gt;.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;code&gt;ollama launch opencode&lt;/code&gt; existe aussi pour lancer rapidement une session avec un modèle choisi dans un picker. Pratique pour tester, mais ça ne touche jamais &lt;code&gt;opencode.json&lt;/code&gt; : les deux mécanismes sont indépendants.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="4-le-vrai-sujet--quel-modèle-sur-24-go-de-vram"&gt;&lt;a href="#4-le-vrai-sujet--quel-mod%c3%a8le-sur-24-go-de-vram" class="header-anchor"&gt;&lt;/a&gt;4. Le vrai sujet : quel modèle sur 24 Go de VRAM
&lt;/h2&gt;&lt;p&gt;24 Go, c&amp;rsquo;est une limite dure. Modèle + contexte au-delà, et c&amp;rsquo;est le swap CPU (lent) ou le refus de charger.&lt;/p&gt;
&lt;p&gt;Voici une sélection vérifiée directement sur &lt;a class="link" href="https://ollama.com/library" target="_blank" rel="noopener"
 &gt;ollama.com/library&lt;/a&gt;, tags et tailles à jour :&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Modèle&lt;/th&gt;
					&lt;th&gt;Tag&lt;/th&gt;
					&lt;th&gt;Disque&lt;/th&gt;
					&lt;th&gt;Contexte&lt;/th&gt;
					&lt;th&gt;Remarque&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Qwen3-Coder&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;qwen3-coder:30b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;18 Go&lt;/td&gt;
					&lt;td&gt;256K&lt;/td&gt;
					&lt;td&gt;MoE 30B-A3B, tool-calling natif de première classe (parser dédié Ollama ≥ 0.12), ~113 tokens/s (le plus rapide testé), pas de mode &amp;ldquo;thinking&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Devstral Small 2 (Mistral)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;devstral-small-2:24b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;15 Go&lt;/td&gt;
					&lt;td&gt;256-384K&lt;/td&gt;
					&lt;td&gt;Modèle dense, tool-calling natif confirmé, ~41 tokens/s, pas de mode &amp;ldquo;thinking&amp;rdquo;, SWE-bench Verified 68%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Qwen3.6&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;qwen3.6:27b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;17 Go&lt;/td&gt;
					&lt;td&gt;256K&lt;/td&gt;
					&lt;td&gt;Bon si besoin de raisonnement poussé, mais latence élevée (mode &amp;ldquo;thinking&amp;rdquo;, ~1900 tokens pour une réponse simple)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Qwen2.5-Coder&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;qwen2.5-coder:32b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;20 Go&lt;/td&gt;
					&lt;td&gt;32K&lt;/td&gt;
					&lt;td&gt;-&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;DeepSeek-Coder-V2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;deepseek-coder-v2:16b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;8.9 Go&lt;/td&gt;
					&lt;td&gt;160K&lt;/td&gt;
					&lt;td&gt;⚠️ &lt;a class="link" href="https://github.com/ollama/ollama/issues/12592" target="_blank" rel="noopener"
 &gt;Ne supporte pas le tool-calling&lt;/a&gt; - inutilisable dans OpenCode malgré sa rapidité&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Codestral&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;codestral:22b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;13 Go&lt;/td&gt;
					&lt;td&gt;32K&lt;/td&gt;
					&lt;td&gt;-&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;GLM-4.7-Flash&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;glm-4.7-flash:q4_K_M&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;19 Go&lt;/td&gt;
					&lt;td&gt;198K&lt;/td&gt;
					&lt;td&gt;-&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;qwen3-coder:30b&lt;/code&gt;&lt;/strong&gt; sort du lot : architecture MoE (30B au total, 3B de paramètres actifs par token), tool-calling natif de première classe intégré à Ollama (parser dédié, pas un template bricolé), pas de mode &amp;ldquo;thinking&amp;rdquo;. Le plus rapide testé sur ce matériel (~113 tokens/s, ~10s pour une fonction simple). &lt;code&gt;devstral-small-2:24b&lt;/code&gt; reste une excellente alternative (modèle dense, SWE-bench Verified 68%) ; &lt;code&gt;qwen3.6:27b&lt;/code&gt; si le raisonnement poussé compte plus que la vitesse. &lt;code&gt;deepseek-coder-v2:16b&lt;/code&gt;, malgré son contexte généreux, est à écarter faute de tool-calling.&lt;/p&gt;
&lt;p&gt;Pour comparer soi-même plusieurs candidats avant de se fixer, télécharger les prétendants et les faire tourner sur le même prompt :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama pull qwen3-coder:30b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama pull devstral-small-2:24b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama pull qwen3.6:27b
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama run qwen3-coder:30b --verbose &lt;span style="color:#e6db74"&gt;&amp;#34;écris une fonction qui calcule fibonacci en python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama run devstral-small-2:24b --verbose &lt;span style="color:#e6db74"&gt;&amp;#34;écris une fonction qui calcule fibonacci en python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama run qwen3.6:27b --verbose &lt;span style="color:#e6db74"&gt;&amp;#34;écris une fonction qui calcule fibonacci en python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le flag &lt;code&gt;--verbose&lt;/code&gt; affiche les tokens/s en fin de réponse - un mini-benchmark maison pour comparer vitesse et style de réponse entre modèles, en gardant un œil sur &lt;code&gt;rocm-smi&lt;/code&gt; pour vérifier que la VRAM utilisée reste sous la limite (pas de swap CPU).&lt;/p&gt;
&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Pas de CUDA, pas de cloud, pas d&amp;rsquo;abonnement : une RX 7900 XTX, ROCm packagé nativement, &lt;code&gt;ollama-rocm&lt;/code&gt; et OpenCode suffisent à avoir un agent de codage local complet. Le seul vrai travail, c&amp;rsquo;est de bien identifier le GPU de compute quand il y a un iGPU dans les parages, de ne pas oublier &lt;code&gt;OLLAMA_CONTEXT_LENGTH&lt;/code&gt; (sinon les 256K de contexte annoncés restent théoriques), et de vérifier les tags de modèles avant de les recommander à l&amp;rsquo;aveugle - un contexte généreux ou un bon score de benchmark ne garantissent rien si le modèle ne supporte pas le tool-calling qu&amp;rsquo;OpenCode utilise en permanence.&lt;/p&gt;</description></item></channel></rss>