La question n'est pas « remplacer Claude ». C'est plus basique : sur une session de code de quatre heures, avec du contexte qui gonfle (codebase entière, doc, recherches web en parallèle), une fraction du travail est répétitive. Écrire un parseur, renommer une fonction à travers vingt fichiers, formuler une requête SQL, relire une traduction. Est-ce qu'un modèle open-source de 27 milliards de paramètres, loué sur un GPU communautaire, suffit pour cette fraction — à 1 % du coût d'un modèle frontière ?
La réponse courte est oui, pour une fraction qui n'est pas nulle mais pas majoritaire. La réponse longue suit.
Le modèle
On utilise Qwen 3 en version 27 milliards de paramètres, chargé via les builds quantisés d'unsloth. La quantisation 4-bit ramène l'empreinte VRAM autour de 18 Go — ça rentre largement sur une RTX 4090 24 Go, avec de la place pour un contexte de 32 k tokens et un peu de KV-cache. La famille Qwen 3 d'Alibaba est aujourd'hui la série open-source qui a le meilleur rapport capacité/ressources en dehors des modèles frontière fermés ; sur les benchmarks publics (MMLU, GPQA, LiveCodeBench), un 27B quantisé reste compétitif avec des modèles beaucoup plus lourds non quantisés.
Ce n'est pas un jouet. Ce n'est pas non plus Opus. On y reviendra.
L'infra — 0,69 $/h GPU, vLLM, Cloudflare Tunnel
Trois briques, rien d'exotique.
1. Le GPU. Un pod GPU 24 Go chez RunPod, 60 Go de volume persistant et 20 Go de container. Tarif affiché : 0,69 $/h pour le GPU en activité, 0,008 $/h pour le disque quand le pod tourne, 0,011 $/h pour le disque quand le pod est stoppé (le stockage persiste, le GPU non). On ne laisse pas le pod allumé en continu : on le démarre avant une session, on le stoppe après. Sur une semaine chargée — 40 heures actives, 128 heures stoppées — le total tombe à environ 28 $. Une semaine calme descend vers 15-20 $.
2. Le serveur d'inférence. vLLM expose une API OpenAI-compatible. Un docker run avec le bon tag, --served-model-name qwen3-27b, le pod écoute sur :8000/v1/chat/completions. Temps de chargement du modèle en 4-bit : ~3 minutes pour la première requête, ensuite stable autour de 15 à 20 tokens/seconde en génération.
3. L'accès. Deux options : port TCP exposé par RunPod directement, ou Cloudflare Tunnel pour un sous-domaine fixe et du TLS propre. On utilise le tunnel — pod IP change à chaque relance, mais l'URL reste la même côté client.
Le branchement dans Claude Code
Claude Code lit la variable ANTHROPIC_BASE_URL et accepte par défaut le format messages d'Anthropic. Pour parler à un backend OpenAI-compatible, on passe par une fine couche de traduction — claude-code-router ou équivalent — qui convertit les appels Anthropic en appels /v1/chat/completions. Trois variables d'env, le CLI redémarre, et c'est branché :
ANTHROPIC_BASE_URL=https://qwen.tunnel.example/v1
ANTHROPIC_API_KEY=sk-local-…
ANTHROPIC_MODEL=qwen3-27b
Les outils, les agents, les hooks, les skills — tout continue de fonctionner sans modification. Le routeur relaie les appels de tool use, le modèle répond en JSON structuré, Claude Code traite la réponse comme si elle venait d'un provider officiel.
Ce qui marche bien
Code local, tâches structurées. Écrire un script Python, un Dockerfile, une requête SQL, un composant React isolé. Le modèle formule correctement, respecte la signature demandée, produit une première passe utilisable. Sur ce registre, on est entre 85 et 90 % de la qualité d'un modèle frontière — suffisant pour itérer ensuite.
Navigation de codebase. grep, lecture ciblée, retrouver l'appel d'une fonction, résumer ce que fait un module. Dans un contexte < 15 k tokens, Qwen s'en sort honnêtement. Au-delà, il commence à oublier ce qu'il a vu au début.
Édition textuelle bilingue. Relire un article, repérer des répétitions, proposer une reformulation. Le FR est propre, l'EN correct — pas stylistiquement distinctif, mais lisible.
Ce qui casse
Les tâches multi-contraintes. Dès qu'on demande de jongler avec plus de trois contraintes en même temps — architecture avec trade-offs, refacto qui doit préserver une API publique tout en modifiant la structure interne, debug qui exige de garder cinq hypothèses en tête — la qualité chute. Le modèle simplifie, choisit une contrainte dominante et oublie les autres.
Les hallucinations de détail. Noms de fonctions qui n'existent pas, chemins de fichiers inventés, versions de librairie approximatives. Opus hallucine aussi, mais moins souvent sur des détails techniques. Il faut vérifier systématiquement avant d'exécuter la moindre commande proposée.
Le contexte long. Au-delà de 20 k tokens injectés, la cohérence baisse nettement. Lui donner un article complet + son CSS + le JS associé, c'est déjà trop ; il perd des informations du début. Le modèle est annoncé à 32 k, on le considère utilisable jusqu'à 20.
Le travail d'agent long. Enchaîner dix tool calls avec mémoire du résultat de chacun, c'est le point faible. Les premiers appels sont bons, le contexte interne se pollue, et au cinquième ou sixième le modèle produit des arguments incohérents avec ce qu'il vient de lire. C'est précisément le régime où Claude Code brille avec un modèle frontière.
Preuve par l'exemple
Un premier brouillon de cette note a été rédigé par le modèle lui-même, en direct dans la session Claude Code qui tourne sur Qwen. Des coquilles types sont passées — « plaent » pour « placent », « transborder » pour un verbe qui n'existe pas, un paragraphe qui mélangeait deux idées. On les a corrigées dans cette version publiée, mais la structure de l'article, les arguments, l'estimation des coûts, tout ça vient du modèle. C'est exactement le niveau : un assistant sérieux qui demande une relecture. Pas un rédacteur autonome.
40 heures de pod actives · 40 × (0,69 $ GPU + 0,008 $ disk running) = 27,92 $. 128 heures stoppées, GPU non facturé, disk seul · 128 × 0,011 $ = 1,41 $. Total 29,33 $. Bande passante : négligeable (Cloudflare Tunnel gratuit). Volume : 60 Go persistant pour garder les weights entre sessions, 20 Go de container. Comparaison directe impossible à l'identique avec un provider frontière — les workflows ne sont pas les mêmes — mais on note qu'une seule session intensive Opus peut approcher la semaine entière de Qwen.
La conclusion honnête
Qwen 3 27B self-hébergé ne remplace pas un modèle frontière. Il n'est pas au niveau sur les tâches difficiles, et l'opérationnel (démarrer un pod, surveiller le tunnel, gérer les reprises) ajoute un coût caché en friction. Mais pour 30 à 50 % d'un workflow de studio — génération de boilerplate, recherche dans une base, reformulation éditoriale, scripts ponctuels — il fait largement le job, à un coût qui change la psychologie du travail. On n'hésite plus à demander. On essaie, on jette, on recommence.
Le modèle ouvert ne ferme pas la frontière, il ouvre un deuxième étage. Les deux cohabitent. Quand on revient à Opus pour un debug subtil, on le sent — et on comprend ce qu'on paie. Ce contraste, à lui seul, justifie le montage.