<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Blog CARouter</title>
<link>https://carouter.ai/fr/blog</link>
<description>Notes de la plateforme d'IA canadienne : ce que nous avons mesuré, ce que nous avons changé, avec qui nous travaillons, et pourquoi.</description>
<language>fr-CA</language>
<lastBuildDate>Mon, 19 Oct 2026 12:00:00 GMT</lastBuildDate>
<atom:link href="https://carouter.ai/fr/blog/feed.xml" rel="self" type="application/rss+xml" />
<item>
<title>LFM2.5 24B-A2B face à Qwen3.6 35B-A3B : banc d'essai sur un DGX Spark</title>
<link>https://carouter.ai/fr/blog/lfm2-5-24b-a2b-vs-qwen3-6-35b-a3b-on-a-gb10</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/lfm2-5-24b-a2b-vs-qwen3-6-35b-a3b-on-a-gb10</guid>
<pubDate>Mon, 19 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Liquid AI dit son nouveau LFM2.5 24B-A2B plus rapide que le Qwen3.6 35B-A3B que nous servons. Sur un DGX Spark, c'est vrai sur llama.cpp, 105 tokens par seconde contre 65, mais sur vLLM, le moteur avec lequel nous servons, Qwen reste devant à 118 contre 96. À 4 bits, LFM2.5 programme aussi bien, suit mieux les consignes et appelle les outils de façon moins fiable.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/lfm2-5-24b-a2b-vs-qwen3-6-35b-a3b-on-a-gb10/illustration.png" alt="Recherche : LFM2.5 24B-A2B face à Qwen3.6 35B-A3B, banc d'essai sur un DGX Spark. Une requête sur llama.cpp : 105 tokens par seconde contre 65. Une requête sur vLLM : 96 contre 118. Consignes suivies : 95 % contre 89 %. Les deux à 4 bits sur un NVIDIA DGX Spark." /></p><p>Liquid AI a publié LFM2.5 24B-A2B le 13 octobre. Il compte 24 milliards de paramètres et en lit environ 2.4 milliards pour chaque token qu&#x27;il écrit.</p><p>Liquid le compare à Qwen3.6 35B-A3B, le modèle derrière le point d&#x27;accès de programmation de CARouter Cloud, et le dit plus rapide et meilleur pour le travail d&#x27;agent. Nous avons mesuré les deux sur des GB10, la puce sur laquelle tourne CARouter Cloud, à 4 bits comme nous servons nos propres modèles, pour vérifier ces deux affirmations.</p><p><a href="https://carouter.ai/fr/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10">Le dernier modèle testé de cette façon : Kolibri-1 face à Qwen3.6 35B-A3B.</a></p><h2>En bref</h2><ul><li><strong>Vitesse, sur le moteur de Liquid.</strong> Sur llama.cpp, où Liquid a mesuré ses propres chiffres, LFM2.5 écrit 105 tokens par seconde pour une requête et Qwen 65. L&#x27;affirmation de Liquid tient.</li><li><strong>Vitesse, sur le nôtre.</strong> Sur vLLM, le moteur avec lequel CARouter Cloud sert ses modèles, Qwen reste devant : 118 contre 96 pour une requête, 486 contre 387 avec seize à la fois.</li><li><strong>Réponses.</strong> LFM2.5 écrit environ 40 % de tokens de moins pour les mêmes réponses. Une réponse de programmation typique arrive en 33 secondes, contre 40, pour un utilisateur seul.</li><li><strong>Qualité.</strong> À égalité en programmation, 30 problèmes sur 50 chacun. Meilleur pour suivre des consignes, 95 % contre 89 %. Moins bon pour appeler des outils, 70 % contre 81 %, et sur les questions scientifiques, 73 % contre 83 %.</li><li><strong>Mémoire.</strong> LFM2.5 à 4 bits occupe 12.9 Gio de poids, contre 22.0 Gio pour Qwen.</li><li><strong>Notre décision.</strong> CARouter Cloud garde Qwen3.6 35B-A3B. LFM2.5 lit deux fois moins de contexte, ne prend pas d&#x27;images, et appelle plusieurs outils à la fois de façon moins fiable.</li></ul><h2>Deux moteurs, deux courses différentes</h2><p>llama.cpp est conçu pour faire tourner un modèle sur un ordinateur, pour une personne. vLLM est conçu pour servir beaucoup de personnes à la fois depuis une machine, et c&#x27;est ce que fait tourner CARouter Cloud.</p><p>Qwen3.6 est aussi livré avec un petit assistant qui propose les quelques tokens suivants au modèle principal, qui les vérifie, ce qui le rend environ une fois et demie plus rapide sur vLLM. Liquid a annoncé un assistant de ce genre pour LFM2.5, pour un autre moteur, et ne l&#x27;a pas encore publié.</p><h2>Quel LFM2.5 nous avons fait tourner</h2><p>Liquid publie une version de LFM2.5 à 4 bits pour llama.cpp et une à 8 bits, en FP8, pour vLLM. Pour vLLM à 4 bits, le format dans lequel nous servons Qwen, nous avons pris deux versions produites par la communauté.</p><p>Elles nous ont appris quelque chose sur ce modèle. Deux cinquièmes des paramètres que LFM2.5 utilise pour chaque token se trouvent hors de ses experts, les réseaux spécialisés que les versions à 4 bits compressent d&#x27;habitude. Une version ne compresse que les experts et écrit 58 tokens par seconde. L&#x27;autre compresse presque tout et en écrit 96.</p><p>Même modèle, même moteur, 1.65 fois la vitesse. Compresser le reste n&#x27;a rien coûté de mesurable sur le code ou les consignes, et un peu de justesse sur les appels d&#x27;outils : 349 sur 500 contre 371. Dans la suite, LFM2.5 sur vLLM désigne la version la plus rapide, celle que nous servirions.</p><h2>Mémoire</h2><p>À 4 bits, les poids de LFM2.5 pèsent 9 Gio de moins que ceux de Qwen. Avec les mêmes 28 Gio réservés aux conversations, il retient 41.7 Gio en tout, contre 52.6 Gio.</p><p>Par token de conversation, les deux coûtent à peu près la même chose. LFM2.5 loge plus de conversations dans cet espace seulement parce que chacune peut être deux fois plus courte : 131 072 tokens contre 262 144.</p><h2>Vitesse</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/lfm2-5-24b-a2b-vs-qwen3-6-35b-a3b-on-a-gb10/01-one-request-two-engines.png" alt="Une requête seule sur un GB10, tokens écrits par seconde. Sur llama.cpp en Q4_K_M, la configuration des chiffres de Liquid AI : LFM2.5 24B-A2B 105, Qwen3.6 35B-A3B 65. Sur vLLM à 4 bits, comme sert CARouter Cloud : LFM2.5 96, Qwen3.6 118." loading="lazy"/><figcaption>Une requête seule sur un GB10, tokens écrits par seconde. Sur llama.cpp en Q4_K_M, la configuration des chiffres de Liquid AI : LFM2.5 24B-A2B 105, Qwen3.6 35B-A3B 65. Sur vLLM à 4 bits, comme sert CARouter Cloud : LFM2.5 96, Qwen3.6 118.</figcaption></figure><p>Sur llama.cpp, LFM2.5 est 1.6 fois plus rapide que Qwen et lit une requête 1.74 fois plus vite. Liquid annonce 114 contre 67 tokens par seconde sur un AMD Ryzen AI Max+ 395, une machine dont la mémoire est à peu près aussi rapide que celle du GB10. Nous avons trouvé le même écart.</p><p>Sur vLLM, l&#x27;ordre s&#x27;inverse. Son assistant place Qwen de 20 % à 28 % devant, quelle que soit la charge. Sans son assistant, Qwen écrit 76 tokens par seconde seul sur cette même machine, moins que les 96 de LFM2.5.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/lfm2-5-24b-a2b-vs-qwen3-6-35b-a3b-on-a-gb10/02-decode-by-streams.png" alt="Tokens écrits par seconde sur un GB10, d&#x27;une à seize requêtes simultanées : Qwen3.6 35B-A3B sur vLLM de 118 à 486, LFM2.5 24B-A2B sur vLLM de 96 à 387, LFM2.5 sur llama.cpp de 105 à 250, LFM2.5 en FP8 sur vLLM de 54 à 173." loading="lazy"/><figcaption>Tokens écrits par seconde sur un GB10, d&#x27;une à seize requêtes simultanées : Qwen3.6 35B-A3B sur vLLM de 118 à 486, LFM2.5 24B-A2B sur vLLM de 96 à 387, LFM2.5 sur llama.cpp de 105 à 250, LFM2.5 en FP8 sur vLLM de 54 à 173.</figcaption></figure><p>llama.cpp partage mal une machine. Avec seize requêtes à la fois, LFM2.5 y totalise 250 tokens par seconde, contre 387 sur vLLM.</p><p>LFM2.5 lit aussi les requêtes plus vite sur vLLM : environ 9 900 tokens par seconde contre 6 500 pour Qwen. La version FP8 de Liquid a été la plus lente de toutes sur cette puce, à 54 tokens par seconde pour une requête seule.</p><p>Les tokens par seconde ne disent pas tout, car LFM2.5 écrit moins. Pour les mêmes 50 problèmes de programmation, il a écrit 173 mille tokens et Qwen 291 mille. Une réponse typique a pris 33 secondes pour un utilisateur seul sur vLLM, contre 40 pour Qwen.</p><h2>Qualité</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/lfm2-5-24b-a2b-vs-qwen3-6-35b-a3b-on-a-gb10/03-five-tests.png" alt="Part de chaque test réussie, les deux modèles à 4 bits, LFM2.5 24B-A2B puis Qwen3.6 35B-A3B : programmation 60 % et 60 %, suivi de consignes 95 % et 89 %, appels d&#x27;outils 70 % et 81 %, questions scientifiques 73 % et 83 %, retrouver un fait dans un long texte 75 % et 100 %." loading="lazy"/><figcaption>Part de chaque test réussie, les deux modèles à 4 bits, LFM2.5 24B-A2B puis Qwen3.6 35B-A3B : programmation 60 % et 60 %, suivi de consignes 95 % et 89 %, appels d&#x27;outils 70 % et 81 %, questions scientifiques 73 % et 83 %, retrouver un fait dans un long texte 75 % et 100 %.</figcaption></figure><p>Nous utilisons les mêmes 50 problèmes BigCodeBench pour chaque modèle que nous évaluons : le modèle écrit une fonction Python, que l&#x27;on exécute ensuite contre des tests. Les deux en ont résolu 30, dont 26 identiques.</p><p>IFEval propose 541 requêtes dont les consignes peuvent être vérifiées par un programme, comme un nombre de mots ou un format imposé. LFM2.5 a suivi toutes les consignes de 95 % d&#x27;entre elles, Qwen de 89 %. L&#x27;écart est trop grand pour être dû au hasard, et c&#x27;est celui qu&#x27;annonce Liquid.</p><p>Pour les appels d&#x27;outils, c&#x27;est l&#x27;inverse. Sur 500 requêtes du banc d&#x27;essai d&#x27;appel de fonctions de Berkeley, LFM2.5 en a réussi 70 % et Qwen 81 %. Avec un appel par requête, LFM2.5 fait aussi bien. Quand une requête demande plusieurs appels à la fois, il n&#x27;en fait généralement qu&#x27;un, et il appelle plus souvent un outil quand aucun ne convient.</p><p>Sur 198 questions scientifiques de niveau universitaire avancé (GPQA Diamond), LFM2.5 a répondu juste à 73 % et Qwen à 83 %. Le tableau de Liquid montre le même écart, et Liquid recommande d&#x27;associer le modèle à une recherche sur le web pour les questions de connaissances. C&#x27;est aussi le seul test où LFM2.5 a écrit plus que Qwen.</p><p>Nous avons aussi caché une phrase, qui nomme le premier groupe à avoir joué sur la Lune, dans des documents de 16 000 à 100 000 tokens, puis nous l&#x27;avons redemandée. Qwen l&#x27;a retrouvée 12 fois sur 12, LFM2.5 9. Une fois, LFM2.5 a répondu The Beatles. Sa fenêtre s&#x27;arrête par ailleurs à 131 072 tokens, contre 262 144 pour Qwen : on ne peut pas du tout l&#x27;interroger sur des documents plus longs.</p><h2>Ce que nous ne pouvons pas vous dire</h2><ul><li>Comment LFM2.5 se comporte dans un agent. Liquid l&#x27;a entraîné dans OpenClaw, Hermes Agent, Pi et OpenCode, et nous n&#x27;avons fait tourner aucun d&#x27;eux.</li><li>Sa vitesse avec son assistant. Liquid ne l&#x27;a pas publié.</li><li>Ce qu&#x27;il donne dans les quinze autres langues pour lesquelles il a été entraîné. Nous n&#x27;avons testé que l&#x27;anglais.</li><li>Si un écart de quelques points sur nos plus petits tests est réel. Cinquante problèmes de programmation ne suffisent pas à classer deux modèles aussi proches.</li></ul><h2>Ce que cela change pour CARouter</h2><p>Le GB10 de CARouter Cloud garde Qwen3.6 35B-A3B. Sur le moteur qui sert nos clients, LFM2.5 écrit moins vite mais écrit moins, programme aussi bien et suit mieux les consignes. Il lit aussi deux fois moins de contexte, ne prend pas d&#x27;images, appelle plusieurs outils à la fois de façon moins fiable, et sa licence n&#x27;autorise l&#x27;usage commercial qu&#x27;aux entreprises de moins de 10 millions de dollars américains de chiffre d&#x27;affaires annuel.</p><p>Liquid l&#x27;a conçu pour une personne sur une machine, et là il fait ce que Liquid annonce : 105 tokens par seconde sur un GB10 avec llama.cpp, 1.6 fois Qwen.</p>]]></content:encoded>
</item>
<item>
<title>Comment nous avons rendu nos modèles 79 % plus rapides sur les GPU Intel</title>
<link>https://carouter.ai/fr/blog/qwen3-6-35b-a3b-79-percent-faster-on-intel-arc-pro-b60</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/qwen3-6-35b-a3b-79-percent-faster-on-intel-arc-pro-b60</guid>
<pubDate>Mon, 12 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Nos deux cartes Intel Arc Pro B60 servent Qwen3.6 35B-A3B. L'essentiel de chaque étape se passait dans Python, sur le processeur du serveur, et non sur les cartes. Le moteur enregistre maintenant le calcul du modèle une fois et le rejoue : avec deux requêtes sur une carte, chacune reçoit 64 tokens par seconde au lieu de 36, avec quatre 55 au lieu de 35, et avec huit 44 au lieu de 35, sur le même matériel.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-79-percent-faster-on-intel-arc-pro-b60/illustration.png" alt="Recherche : comment nous avons rendu nos modèles 79 % plus rapides sur les GPU Intel. Qwen3.6 35B-A3B sur une Intel Arc Pro B60, tokens par seconde pour chaque requête, avant et maintenant : 36 et 64 avec deux requêtes, 35 et 55 avec quatre, 35 et 44 avec huit. Même modèle, même matériel." /></p><p>CARouter Cloud sert Qwen3.6 35B-A3B sur deux cartes graphiques Intel Arc Pro B60 à Ottawa, à côté de son GB10. Les mêmes cartes écrivent maintenant jusqu&#x27;à 79 % de tokens de plus par seconde pour chaque requête.</p><p>Le matériel, le modèle et sa forme à 4 bits n&#x27;ont pas changé. Le temps se perdait sur le processeur du serveur, pas sur les cartes.</p><p><a href="https://carouter.ai/fr/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60">L&#x27;article qui a présenté ce serveur : Qwen3.6 35B-A3B sur deux cartes Intel Arc Pro B60.</a></p><h2>En bref</h2><ul><li><strong>Ce que voit un client.</strong> Avec deux requêtes sur une carte, chacune reçoit 64 tokens par seconde au lieu de 36. Avec quatre, 55 au lieu de 35. Avec huit, 44 au lieu de 35. Seule, 72 au lieu de 60.</li><li><strong>Ce que nous avons changé.</strong> Le moteur enregistre maintenant le calcul du modèle une fois et le rejoue. Avant, il faisait passer chaque étape par Python.</li><li><strong>Ce qui faisait obstacle.</strong> Deux appels de journalisation dans la version de vLLM d&#x27;Intel. Nous les retirons quand nous construisons notre propre image.</li><li><strong>Comment nous l&#x27;avons testé.</strong> 450 prompts dans les deux modes, un appel d&#x27;outil, une question de raisonnement, et des prompts de 29 000 et 101 000 tokens.</li><li><strong>Ce que ça coûte.</strong> Un premier démarrage plus long, et environ 6 % de place en moins pour les prompts que le moteur garde en mémoire.</li></ul><h2>Où passe le temps d&#x27;une requête</h2><p>Nos moteurs comptent ce qu&#x27;ils font. Écrire la réponse représente environ neuf dixièmes du temps d&#x27;une requête, et une carte écrit le plus souvent pour environ deux requêtes à la fois.</p><p>C&#x27;est là que ce serveur était le plus faible. Une requête seule recevait 60 tokens par seconde. De deux à huit requêtes sur une carte, chacune en recevait environ 35.</p><h2>La carte attendait Python</h2><p>Notre premier article sur ce serveur notait qu&#x27;un seul fil d&#x27;exécution du processeur donne la cadence à chaque moteur. Cette fois, nous avons regardé ce que fait ce fil.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-79-percent-faster-on-intel-arc-pro-b60/02-where-a-step-went.png" alt="Où passait le temps d&#x27;une étape du moteur sur le processeur du serveur, avant le changement, avec 8 requêtes sur une carte : 41 % dans l&#x27;interpréteur Python, 28 % dans l&#x27;intendance propre à PyTorch, 24 % à confier le travail à la carte, et 7 % ailleurs." loading="lazy"/><figcaption>Où passait le temps d&#x27;une étape du moteur sur le processeur du serveur, avant le changement, avec 8 requêtes sur une carte : 41 % dans l&#x27;interpréteur Python, 28 % dans l&#x27;intendance propre à PyTorch, 24 % à confier le travail à la carte, et 7 % ailleurs.</figcaption></figure><p>Environ 70 % de chaque étape allaient à l&#x27;interpréteur Python et à l&#x27;intendance propre à PyTorch, sur ce seul fil. Environ un quart servait à confier le travail à la carte. La carte elle-même avait du temps libre.</p><p>Cela explique ce 35 qui ne bougeait pas. L&#x27;essentiel du coût d&#x27;une étape était fixe, quel que soit le nombre de requêtes.</p><h2>Enregistrer une fois, puis rejouer</h2><p>vLLM peut enregistrer le calcul du modèle une fois, sous forme de graphe, et le rejouer à chaque étape. Rejouer évite l&#x27;essentiel du travail de Python.</p><p>La version de vLLM d&#x27;Intel est livrée avec ce mode désactivé, et pour ce modèle il ne démarrait pas. La cause était petite : deux appels de journalisation se trouvent dans du code que le compilateur de PyTorch doit suivre, et le compilateur s&#x27;arrête dessus.</p><p>Nous retirons ces deux appels quand nous construisons notre propre image. <a href="https://github.com/intel/llm-scaler/issues/699" target="_blank" rel="noreferrer">Le problème, tel qu&#x27;il a été signalé à Intel.</a></p><h2>Ce que nous avons mesuré</h2><p>Même carte, même jour, dans les deux modes, pendant que l&#x27;autre carte servait des clients.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-79-percent-faster-on-intel-arc-pro-b60/01-each-request-before-and-now.png" alt="Tokens écrits par seconde pour chaque requête sur une Arc Pro B60, avant et maintenant. Une requête : 60 et 72. Deux requêtes sur la carte : 36 et 64. Quatre : 35 et 55. Huit : 35 et 44." loading="lazy"/><figcaption>Tokens écrits par seconde pour chaque requête sur une Arc Pro B60, avant et maintenant. Une requête : 60 et 72. Deux requêtes sur la carte : 36 et 64. Quatre : 35 et 55. Huit : 35 et 44.</figcaption></figure><p>Avec deux requêtes sur une carte, chacune reçoit 64 tokens par seconde au lieu de 36, soit 79 % de plus. Avec quatre, c&#x27;est 55 au lieu de 35, et avec huit 44 au lieu de 35. Une requête seule reçoit 72 au lieu de 60.</p><p>Au total, une carte écrit 129 tokens par seconde avec deux requêtes au lieu de 72, et 349 avec huit au lieu de 282. La lecture d&#x27;un prompt est aussi rapide qu&#x27;avant, environ 5 900 tokens par seconde.</p><p>L&#x27;assistant intégré au modèle, qui n&#x27;était pas payant sur ce serveur, l&#x27;est maintenant pour une ou deux requêtes : 111 et 88 tokens par seconde chacune. À partir de quatre requêtes, il est plus lent que sans lui, donc il reste désactivé.</p><h2>Ce que nous avons vérifié avant de le servir</h2><p>Intel décrit ce mode comme pas encore pris en charge dans cette version. Nous n&#x27;avons donc pas cru la vitesse sur parole.</p><p>Nous avons envoyé 450 prompts différents aux deux modes et compté les réponses qui contiennent une longue suite d&#x27;un même caractère répété, un signe connu de défaut. Il y en avait 3 dans chaque mode, toutes des traits de tableau.</p><p>Un appel d&#x27;outil, une question de raisonnement, et un fait caché dans des prompts de 29 000 et 101 000 tokens sont revenus justes dans les deux modes. Un échantillon de cette taille montrerait un défaut fréquent, pas un défaut rare.</p><p>Nous avons ensuite basculé une carte à la fois, après avoir déplacé son trafic vers l&#x27;autre carte.</p><h2>Ce que ça coûte</h2><p>Le moteur met environ deux fois plus de temps à démarrer la première fois, parce qu&#x27;il prépare les graphes, et il les garde pour le démarrage suivant.</p><p>Il laisse aussi environ 6 % de place en moins pour les prompts qu&#x27;il garde en mémoire.</p><p>Sur une petite carte, la première chose à mesurer est le processeur qui se trouve à côté.</p>]]></content:encoded>
</item>
<item>
<title>AirLLM fait tourner Qwen3.6 35B-A3B en pleine précision sur une carte de 24 Go : un token toutes les 10 à 68 secondes</title>
<link>https://carouter.ai/fr/blog/airllm-qwen3-6-35b-a3b-full-precision-on-a-24-gb-card</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/airllm-qwen3-6-35b-a3b-full-precision-on-a-24-gb-card</guid>
<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>AirLLM est une bibliothèque libre qui fait passer un modèle par une carte graphique, une couche à la fois. Avec elle, Qwen3.6 35B-A3B en pleine précision, un modèle de 67 Gio, a tourné sur une carte de 24 Go : dans moins de 3 Gio pour un prompt court, une image ou une vidéo, et avec toute sa fenêtre quand le prompt est lu par morceaux. Il écrit un token toutes les 10 secondes sur un GB10 limité à 24 Go et un toutes les 68 secondes sur une Intel Arc Pro B60, là où le service du modèle à 4 bits écrit de 60 à 75 tokens par seconde.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/airllm-qwen3-6-35b-a3b-full-precision-on-a-24-gb-card/illustration.png" alt="Recherche : AirLLM fait tourner Qwen3.6 35B-A3B en pleine précision sur une carte de 24 Go, un token toutes les 10 à 68 secondes. Le modèle pèse 67 Gio et occupe moins de 3 Gio de la carte. Il est de 760 à 4 100 fois plus lent que le même modèle servi à 4 bits." /></p><p>CARouter Cloud sert Qwen3.6 35B-A3B sur son propre matériel, au Canada. Nous le servons à 4 bits, une forme compressée d&#x27;environ 20 Gio qui tient sur une carte graphique de 24 Go.</p><p>En pleine précision, le même modèle pèse 67 Gio. AirLLM est une bibliothèque libre qui dit faire tourner un tel modèle sur une petite carte, sans le compresser.</p><p>Nous l&#x27;avons vérifié sur ce modèle. Tourne-t-il dans 24 Go, avec les images, la vidéo et toute la fenêtre du modèle, et à quelle vitesse ?</p><p><a href="https://carouter.ai/fr/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60">L&#x27;article précédent : ce modèle servi à 4 bits sur deux cartes Intel Arc Pro B60.</a></p><h2>En bref</h2><ul><li><strong>Le résultat.</strong> AirLLM fait tourner le modèle en pleine précision dans moins de 3 Gio d&#x27;une carte de 24 Go. Le texte, les images et la vidéo fonctionnent, et les réponses sont celles qu&#x27;écrit notre moteur de service.</li><li><strong>Le prix.</strong> Un token toutes les 10 secondes sur un GB10 limité à 24 Go, et un toutes les 68 secondes sur une Intel Arc Pro B60. Une réponse de 500 tokens prend 1 heure 25 minutes, ou 9 heures 27 minutes.</li><li><strong>Par rapport au service.</strong> Servi à 4 bits, le modèle écrit 74.9 tokens par seconde sur notre GB10 et de 59 à 62 sur une Arc Pro B60. AirLLM est environ 760 et 4 100 fois plus lent.</li><li><strong>La fenêtre.</strong> Tel qu&#x27;il est livré, AirLLM lit un prompt d&#x27;environ 78 000 tokens dans 24 Go, sur les 262 144 que le modèle accepte. Avec une courte boucle de notre cru autour de lui, un prompt qui remplit presque la fenêtre est lu, en 15 minutes sur le GB10 et en 47 sur l&#x27;Arc Pro B60.</li><li><strong>Notre lecture.</strong> C&#x27;est un moyen d&#x27;obtenir une réponse de référence du modèle complet sur une petite carte. Ce n&#x27;est pas un moyen de servir.</li></ul><h2>Comment un modèle de 67 Gio passe par une petite carte</h2><p>Un modèle est un empilement de couches, 40 pour celui-ci, et chaque token se calcule en les traversant dans l&#x27;ordre. Un moteur de service comme vLLM garde toutes les couches sur la carte graphique : la carte doit donc être aussi grande que le modèle.</p><p>AirLLM garde le modèle sur le disque, un fichier par couche. Pour chaque token, il copie une couche sur la carte, l&#x27;exécute, la libère, puis passe à la suivante.</p><p>La carte ne contient jamais plus qu&#x27;une couche et le travail en cours. En échange, chaque token fait passer tout le modèle, 65 Gio, par la carte.</p><h2>Ce que nous avons fait tourner</h2><p>AirLLM 4.0.0 sur les fichiers en pleine précision de Qwen3.6 35B-A3B publiés par Qwen, une requête à la fois, sur deux machines.</p><p>La première est un GB10 loué, la puce de notre propre machine, avec 128 Go de mémoire partagée entre le processeur et le graphique. Nous avons limité le logiciel à 24 Gio de mémoire graphique : il se comporte comme une carte de 24 Go dans une machine qui a beaucoup de mémoire.</p><p>La seconde est une vraie carte de 24 Go : une Intel Arc Pro B60 dans le serveur de l&#x27;article précédent, qui a 32 Go de mémoire. Son autre carte a continué de servir des clients pendant l&#x27;essai.</p><p>L&#x27;exemple en une ligne d&#x27;AirLLM n&#x27;a pas chargé ce modèle, absent de sa liste. Sa propre classe pour un modèle voisin, Qwen3.8 27B, désignée à la main, l&#x27;a chargé. Nous n&#x27;avons rien changé dans AirLLM.</p><h2>Il tient, et il répond comme notre moteur</h2><p>Un prompt court, une image et un court extrait vidéo ont chacun culminé sous 3 Gio de mémoire graphique. Le pilote de l&#x27;Arc Pro B60 a compté de 3.5 à 4 Gio utilisés, sur 24.</p><p>Nous avons envoyé les mêmes prompts à vLLM, chargé des mêmes fichiers en pleine précision. Les 24 tokens de texte, la phrase sur l&#x27;image et la réponse sur l&#x27;extrait étaient identiques, au caractère près.</p><h2>Un token toutes les 10 secondes, ou toutes les 68</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/airllm-qwen3-6-35b-a3b-full-precision-on-a-24-gb-card/01-time-for-an-answer.png" alt="Temps pour écrire une réponse de 500 tokens, une requête seule. Servi à 4 bits : 7 secondes sur le GB10 et 8 secondes sur une Arc Pro B60. En pleine précision avec vLLM sur un GB10 qui utilise toute sa mémoire : 17 secondes. En pleine précision avec AirLLM : 1 heure 25 minutes sur un GB10 limité à 24 Go, et 9 heures 27 minutes sur une Arc Pro B60." loading="lazy"/><figcaption>Temps pour écrire une réponse de 500 tokens, une requête seule. Servi à 4 bits : 7 secondes sur le GB10 et 8 secondes sur une Arc Pro B60. En pleine précision avec vLLM sur un GB10 qui utilise toute sa mémoire : 17 secondes. En pleine précision avec AirLLM : 1 heure 25 minutes sur un GB10 limité à 24 Go, et 9 heures 27 minutes sur une Arc Pro B60.</figcaption></figure><p>Sur le GB10 limité à 24 Go, AirLLM écrit un token toutes les 10 secondes. Une réponse de 500 tokens, environ une page, prend 1 heure 25 minutes. Notre GB10 sert le modèle à 4 bits à 74.9 tokens par seconde : la même réponse en 7 secondes.</p><p>Sur l&#x27;Arc Pro B60, un token prend 68 secondes et la réponse 9 heures 27 minutes. La même carte sert le modèle à 4 bits à 59 à 62 tokens par seconde.</p><p>Ce n&#x27;est pas la pleine précision qui coûte le plus. vLLM, avec les mêmes fichiers en pleine précision sur un GB10 qui utilise toute sa mémoire, écrit 29.6 tokens par seconde : la réponse en 17 secondes.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/airllm-qwen3-6-35b-a3b-full-precision-on-a-24-gb-card/02-where-a-token-goes.png" alt="Où va le temps d&#x27;un token avec AirLLM. Sur le GB10 limité à 24 Go, sur 10 secondes : 5.7 pour amener la couche suivante sur la carte, 4.1 pour libérer celle qui vient de tourner, 0.3 de calcul. Sur une Arc Pro B60, sur 68 secondes : 63.0 pour amener la couche suivante sur la carte, 4.3 pour libérer, 0.3 de calcul." loading="lazy"/><figcaption>Où va le temps d&#x27;un token avec AirLLM. Sur le GB10 limité à 24 Go, sur 10 secondes : 5.7 pour amener la couche suivante sur la carte, 4.1 pour libérer celle qui vient de tourner, 0.3 de calcul. Sur une Arc Pro B60, sur 68 secondes : 63.0 pour amener la couche suivante sur la carte, 4.3 pour libérer, 0.3 de calcul.</figcaption></figure><p>Presque tout le temps passe à déplacer le modèle. Sur les 10 secondes du GB10, 5.7 amènent la couche suivante sur la carte, 4.1 libèrent la précédente, et 0.3 sert au calcul.</p><p>Les deux machines diffèrent par l&#x27;endroit où se trouvent les fichiers. La mémoire du GB10 contient leurs 65 Gio : une couche se copie depuis la mémoire. Le serveur de la B60 a 32 Go : chaque token relit tout le modèle sur le disque, à environ 1.1 Go par seconde.</p><h2>La fenêtre : 78 000 tokens tel que livré, toute la fenêtre par morceaux</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/airllm-qwen3-6-35b-a3b-full-precision-on-a-24-gb-card/03-memory-by-prompt-length.png" alt="Mémoire graphique utilisée au maximum, selon la longueur du prompt, sur un GB10 limité à 24 Gio. Avec tout le prompt en un seul passage, comme AirLLM est livré : 2.7 Gio pour 894 tokens, 15.7 Gio pour 61 908, 19.1 Gio pour 77 923, puis mémoire insuffisante à partir de 93 938. Avec le composant optionnel : 22.8 Gio pour 126 007 tokens, mémoire insuffisante à 198 087. En lisant 8 192 tokens à la fois : 19.2 Gio pour 260 199 tokens, presque la fenêtre du modèle, qui est de 262 144." loading="lazy"/><figcaption>Mémoire graphique utilisée au maximum, selon la longueur du prompt, sur un GB10 limité à 24 Gio. Avec tout le prompt en un seul passage, comme AirLLM est livré : 2.7 Gio pour 894 tokens, 15.7 Gio pour 61 908, 19.1 Gio pour 77 923, puis mémoire insuffisante à partir de 93 938. Avec le composant optionnel : 22.8 Gio pour 126 007 tokens, mémoire insuffisante à 198 087. En lisant 8 192 tokens à la fois : 19.2 Gio pour 260 199 tokens, presque la fenêtre du modèle, qui est de 262 144.</figcaption></figure><p>Le modèle accepte jusqu&#x27;à 262 144 tokens à la fois : c&#x27;est sa fenêtre. AirLLM donne tout le prompt au modèle en un seul passage, et la mémoire utilisée grandit avec le prompt, d&#x27;environ 0.2 Gio par millier de tokens.</p><p>Dans 24 Gio, un prompt de 77 923 tokens est passé, et un de 93 938 non. Un composant optionnel que le code d&#x27;AirLLM mentionne, flash-linear-attention, a repoussé la limite : 126 007 tokens sont passés, 198 087 non.</p><p>Sur l&#x27;Arc Pro B60, un prompt de 30 094 tokens est passé en un seul passage. Un de 61 908 tokens a rempli la carte, et nous avons arrêté cet essai.</p><p>Nous avons ensuite écrit une courte boucle autour d&#x27;AirLLM. Elle donne le prompt au modèle 8 192 tokens à la fois et conserve, entre deux passages, ce que le modèle retient de ce qu&#x27;il a lu.</p><p>Avec elle, un prompt de 260 199 tokens, presque toute la fenêtre, a été lu en 15 minutes dans 19.2 Gio sur le GB10, et un fait placé à son début a été retrouvé.</p><p>Sur l&#x27;Arc Pro B60, le même prompt a été lu en 47 minutes, avec 16.3 Gio de la carte utilisés au maximum, et le fait a été retrouvé là aussi.</p><p>Chaque morceau est un passage complet sur le modèle. vLLM lit le même prompt en une minute environ.</p><h2>Le mode 4 bits d&#x27;AirLLM</h2><p>AirLLM a son propre mode de compression, à 4 bits, annoncé comme jusqu&#x27;à trois fois plus rapide.</p><p>Tel que livré, il n&#x27;a pas démarré sur ce modèle. Sa vérification de l&#x27;espace disque libre a demandé 238 Go pour un modèle de 67 Gio, et l&#x27;option qui saute cette vérification s&#x27;est arrêtée sur son premier fichier.</p><p>Une fois cette vérification contournée à la main, il a tourné sur le GB10 à un token toutes les 129 secondes : 13 fois plus lent que sans compression.</p><p>Nous ne voyons qu&#x27;un seul usage à AirLLM : vérifier ce que répond un modèle en pleine précision à un prompt donné, sur une machine qui ne peut pas le contenir.</p>]]></content:encoded>
</item>
<item>
<title>Qwen3.6 35B-A3B sur deux cartes Intel Arc Pro B60 : 818 tokens par seconde au total</title>
<link>https://carouter.ai/fr/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60</guid>
<pubDate>Fri, 09 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Nous avons mis à l'essai un serveur équipé de deux cartes Intel Arc Pro B60. Avec Qwen3.6 35B-A3B à 4 bits et un moteur par carte, il écrit 818 tokens par seconde au total pour 32 requêtes à la fois, et 558 pour 16, là où notre GB10 en écrit 479. Le GB10 reste plus rapide pour une requête seule. Ce serveur rejoindra nos serveurs chez CARouter Cloud.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60/illustration.png" alt="Recherche : Qwen3.6 35B-A3B sur deux cartes Intel Arc Pro B60, 818 tokens par seconde au total. Avec 32 requêtes à la fois : 818 tokens par seconde, soit 409 par carte et environ 26 par requête. Avec 16 à la fois : 558, environ 35 par requête, contre 342 pour le GB10, ou 479 avec son assistant. Une requête seule : de 59 à 62, contre 74.9 pour le GB10, ou 114.9 avec son assistant. Un prompt de 12 000 tokens est lu à environ 5 900 tokens par seconde, contre environ 6 400 sur le GB10." /></p><p>CARouter Cloud sert des modèles ouverts sur son propre matériel, au Canada. Sa première machine repose sur un GB10 de NVIDIA, avec 128 Go de mémoire unifiée.</p><p>Nous avons mis à l&#x27;essai une deuxième sorte de machine, à Ottawa : un serveur équipé de deux cartes graphiques Intel Arc Pro B60 de 24 Go chacune. Nous y avons fait tourner le modèle que sert le GB10, Qwen3.6 35B-A3B, à 4 bits.</p><p><a href="https://carouter.ai/fr/blog/qwen3-6-mtp-head-one-and-a-half-times-faster">L&#x27;article précédent : ce modèle et son assistant intégré sur le GB10.</a></p><h2>En bref</h2><ul><li><strong>Le résultat.</strong> Avec 16 requêtes sur chaque carte, les deux cartes écrivent 818 tokens par seconde au total.</li><li><strong>À charge égale.</strong> Avec 16 requêtes en tout, elles écrivent 558 tokens par seconde, soit environ 35 par requête. Le GB10 en écrit 342, ou 479 avec l&#x27;assistant intégré au modèle.</li><li><strong>Une requête seule.</strong> Le GB10 garde l&#x27;avantage : 74.9 tokens par seconde, ou 114.9 avec l&#x27;assistant, contre 59 à 62 sur une B60.</li><li><strong>Deux cartes en une seule réserve.</strong> Le noyau Linux le refuse sur cette génération de processeurs. Une fois cette seule vérification levée pour un test, la réserve commune a fonctionné, plus lentement qu&#x27;une seule carte, et elle a demandé une seconde fois la taille du modèle dans la mémoire du serveur.</li><li><strong>Le processeur.</strong> Un seul fil d&#x27;exécution du processeur donne la cadence à chaque moteur. Des cœurs plus rapides devraient accélérer une requête seule, mais nous ne l&#x27;avons pas mesuré.</li><li><strong>Et ensuite.</strong> Ce serveur rejoindra nos serveurs chez CARouter Cloud.</li></ul><h2>Trois moteurs sur une carte</h2><p>Un moteur est le logiciel qui charge un modèle et répond aux requêtes. Nous en avons essayé trois sur une carte : llama.cpp avec son backend SYCL (son backend Vulkan était 2.8 fois plus lent), la version de vLLM publiée par Intel (llm-scaler) et OpenVINO Model Server.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60/01-one-request-by-engine.png" alt="Une requête seule, en tokens écrits par seconde. Sur une Arc Pro B60 : de 67 à 70 pour llama.cpp, de 59 à 62 pour le vLLM d&#x27;Intel et 53 pour OpenVINO Model Server. Sur le GB10 : 74.9, ou 114.9 avec l&#x27;assistant du modèle." loading="lazy"/><figcaption>Une requête seule, en tokens écrits par seconde. Sur une Arc Pro B60 : de 67 à 70 pour llama.cpp, de 59 à 62 pour le vLLM d&#x27;Intel et 53 pour OpenVINO Model Server. Sur le GB10 : 74.9, ou 114.9 avec l&#x27;assistant du modèle.</figcaption></figure><p>Une requête seule reçoit de 67 à 70 tokens par seconde avec llama.cpp, de 59 à 62 avec le vLLM d&#x27;Intel et 53 avec OpenVINO. Le GB10 en donne 74.9, ou 114.9 avec l&#x27;assistant du modèle, qui rédige les prochains tokens pour que le modèle les vérifie.</p><p>Ici, cet assistant n&#x27;a pas été payant. Avec le vLLM d&#x27;Intel, il a fait gagner 6 % à une requête seule et a plafonné le total entre 135 et 180 tokens par seconde.</p><p>Quand les requêtes arrivent nombreuses, le classement change. llama.cpp ne les traite pas par lots : deux requêtes dans un même serveur avancent moins vite, au total, qu&#x27;une seule. Le vLLM d&#x27;Intel écrit 300 tokens par seconde au total avec 8 requêtes et environ 410 à partir de 16, OpenVINO 212 et 256.</p><p>llama.cpp accepte une requête allant jusqu&#x27;à 262 144 tokens, soit toute la fenêtre du modèle, mais une seule à la fois. Le vLLM d&#x27;Intel partage sa fenêtre entre les requêtes en cours, et avec le modèle entier chargé il lui reste de la place pour environ 95 000 tokens. C&#x27;est la mémoire qui est comptée : sur les 23.9 Gio de chaque carte, les poids à 4 bits en occupent 19.2.</p><p>Nous avons poursuivi avec le vLLM d&#x27;Intel : c&#x27;est lui qui abat le plus de travail quand les requêtes sont nombreuses.</p><h2>Deux cartes, un moteur chacune</h2><p>Nous avons lancé un moteur vLLM sur chaque carte et mesuré les deux au même instant. Chaque carte donne autant que lorsqu&#x27;elle travaille seule : 409 tokens par seconde avec 16 requêtes, donc 818 en tout et environ 26 par requête.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60/02-total-by-requests.png" alt="Tokens écrits par seconde au total, selon le nombre de requêtes simultanées. Une B60 : de 59 pour une requête à environ 410 à partir de seize. Deux B60 : 113 pour deux requêtes, 558 pour seize et 818 pour trente-deux. Le GB10 avec seize requêtes : 342, ou 479 avec l&#x27;assistant du modèle." loading="lazy"/><figcaption>Tokens écrits par seconde au total, selon le nombre de requêtes simultanées. Une B60 : de 59 pour une requête à environ 410 à partir de seize. Deux B60 : 113 pour deux requêtes, 558 pour seize et 818 pour trente-deux. Le GB10 avec seize requêtes : 342, ou 479 avec l&#x27;assistant du modèle.</figcaption></figure><p>Avec 8 requêtes par carte, le total est de 558, soit environ 35 par requête. Le GB10 en écrit 342 au total avec 16 requêtes, ou 479 avec son assistant, c&#x27;est-à-dire 21 et 30 par requête.</p><p>Cette machine n&#x27;est donc pas plus rapide que le GB10 pour une requête seule. Elle ajoute de la capacité : quand les requêtes sont nombreuses, elle abat plus de travail au total, et chaque requête reçoit encore environ 35 tokens par seconde.</p><h2>Ce que permet cette génération de processeurs</h2><p>Le serveur repose sur une plateforme de 2018 : un Intel Core i9-9900K, processeur de 9e génération à 8 cœurs et 16 fils d&#x27;exécution, sur une carte mère ASUS PRIME Z390-A, avec 32 Go de mémoire. Il fonctionne sous Ubuntu 24.04, avec le noyau Linux 7.0.</p><p>Le vLLM d&#x27;Intel sait répartir un modèle sur deux cartes, qui doivent pour cela s&#x27;échanger de la mémoire directement (DMA pair à pair). Entre deux cartes branchées sur des ports racine distincts, comme ici, le noyau Linux ne l&#x27;autorise que si le pont hôte de la plateforme figure sur sa liste de ponts reconnus fiables.</p><p>Le pont hôte de cette génération de processeurs n&#x27;y figure pas, dans le noyau 7.0 comme dans la branche principale la plus récente que nous avons lue. Les plateformes AMD Zen et les plateformes Xeon y figurent. Avec un noyau standard, deux cartes font donc ici deux moteurs de 24 Go chacun, et non une seule réserve commune de 48 Go.</p><p>La B60 est une carte PCIe 5.0 à 8 voies, et sur cette carte mère chaque carte se connecte en PCIe 3.0. Cela n&#x27;a pas limité la vitesse de génération dans nos essais. Cela compterait pour le chargement du modèle et pour tout échange entre des cartes mises en commun.</p><p>Un seul fil d&#x27;exécution du processeur donne la cadence à chaque moteur. De 1 à 16 requêtes simultanées, chaque moteur vLLM a occupé pleinement un fil, et un seul, tandis que les 16 fils n&#x27;étaient occupés qu&#x27;à 13 % dans l&#x27;ensemble. Huit cœurs ont suffi pour deux moteurs.</p><p>De 2 à 8 requêtes simultanées, chaque requête garde la même vitesse, environ 35 à 38 tokens par seconde. C&#x27;est la signature d&#x27;un coût fixe par étape du côté de l&#x27;hôte, et non d&#x27;un travail de la carte, qui ne sature que vers 16 requêtes.</p><h2>Réunir quand même les deux cartes, à titre de test</h2><p>Pour savoir si la carte mère elle-même était l&#x27;obstacle, nous avons levé cette seule vérification. Un petit module de noyau, destiné uniquement au test, a fait accepter au noyau le pont hôte de ce serveur. Ce n&#x27;est pas un noyau recompilé, il exige de désactiver Secure Boot, et un redémarrage le retire.</p><p>La réserve commune a alors fonctionné. Un petit modèle, Qwen3-0.6B, réparti sur les deux cartes a donné 6 réponses sur 6 identiques à celles d&#x27;une seule carte et a passé un banc d&#x27;essai, sans aucune erreur dans le journal du noyau. Le matériel achemine bien le trafic.</p><p>Elle était plus lente qu&#x27;une seule carte, avec le même modèle et les mêmes réglages :</p><ul><li>Une requête seule : 36.8 tokens par seconde en réserve commune, contre 44.2 sur une carte.</li><li>Huit requêtes à la fois : 298.8 au total, contre 356.6.</li><li>Lecture d&#x27;un prompt de 12 000 tokens : 16 555 tokens par seconde, contre 25 793.</li></ul><p>La vraie limite est la mémoire du serveur. Tout ce que les deux cartes partagent, les poids comme le cache, y occupe aussi sa taille, et l&#x27;espace d&#x27;échange ne l&#x27;absorbe pas. Un modèle de 29 Go a épuisé les 32 Go de cette machine pendant son chargement.</p><p>Nous n&#x27;avons pas réuni les cartes pour Qwen3.6 35B-A3B lui-même.</p><h2>Ce qu&#x27;une plateforme plus récente apporterait probablement</h2><p>Rien de ce qui suit n&#x27;est mesuré. C&#x27;est ce que les chiffres ci-dessus nous laissent attendre.</p><ul><li>Un processeur plus récent, aux cœurs plus rapides, devrait augmenter la vitesse d&#x27;une requête seule et des petits lots.</li><li>Une plateforme inscrite sur la liste du noyau réunirait les deux cartes sans module de test.</li><li>Davantage de mémoire permettrait à la réserve commune d&#x27;accueillir un grand modèle : à peu près autant, en plus, que ce que les deux cartes partagent.</li><li>Des emplacements PCIe 5.0 relieraient les cartes à la vitesse qu&#x27;elles acceptent, ce qui devrait aider le chargement et le trafic entre cartes réunies.</li></ul><h2>Longs prompts et images</h2><p>Le vLLM d&#x27;Intel lit un prompt de 12 000 tokens à environ 5 900 tokens par seconde, contre environ 6 400 pour le GB10 et de 590 à 700 pour llama.cpp.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-on-two-intel-arc-pro-b60/03-reading-a-prompt.png" alt="À gauche : un prompt de 12 000 tokens est lu à un rythme de 590 à 700 tokens par seconde par llama.cpp sur une B60, d&#x27;environ 5 900 par le vLLM d&#x27;Intel sur une B60 et d&#x27;environ 6 400 par le GB10. À droite : avec le vLLM d&#x27;Intel sur une B60, un prompt de 11 400 tokens reçoit sa réponse en 2.9 secondes, un prompt de 55 216 tokens en 18.6 secondes, un prompt de 87 923 tokens en 39.2 secondes et un prompt de 132 606 tokens en 78.8 secondes." loading="lazy"/><figcaption>À gauche : un prompt de 12 000 tokens est lu à un rythme de 590 à 700 tokens par seconde par llama.cpp sur une B60, d&#x27;environ 5 900 par le vLLM d&#x27;Intel sur une B60 et d&#x27;environ 6 400 par le GB10. À droite : avec le vLLM d&#x27;Intel sur une B60, un prompt de 11 400 tokens reçoit sa réponse en 2.9 secondes, un prompt de 55 216 tokens en 18.6 secondes, un prompt de 87 923 tokens en 39.2 secondes et un prompt de 132 606 tokens en 78.8 secondes.</figcaption></figure><p>La lecture ralentit à mesure que le prompt s&#x27;allonge. Sur une carte, une requête seule reçoit sa réponse en 2.9 secondes pour un prompt de 11 400 tokens, en 18.6 secondes pour 55 216 tokens, en 39.2 secondes pour 87 923 tokens et en 78.8 secondes pour 132 606 tokens.</p><p>Les images fonctionnent avec le vLLM d&#x27;Intel : une image de 1024 sur 1024 représente environ 1 050 tokens et prend moins d&#x27;une seconde.</p><p>Chargés sans la partie du modèle qui lit les images, les poids occupent 18.4 Gio au lieu de 19.2. Cela laisse tout juste la place, sur une carte, pour toute la fenêtre du modèle, soit 262 144 tokens.</p><h2>Chaleur : testez avec beaucoup de requêtes</h2><p>La deuxième carte est arrivée avec un ventilateur qui ne tournait pas, et elle a atteint de 93 à 96 °C en charge. Une requête seule gardait sa vitesse : 62.4 tokens par seconde, contre 61.5 une fois le ventilateur réparé. Avec 8 requêtes, le total tombait de 298.8 à 98.2.</p><p>Une fois le ventilateur réparé, les cartes culminent entre 68 et 74 °C environ lorsque les deux sont à pleine charge. Un problème thermique ne se voit pas avec une seule requête : testez avec beaucoup.</p><h2>Et ensuite</h2><p>Ce serveur rejoindra nos serveurs chez CARouter Cloud.</p>]]></content:encoded>
</item>
<item>
<title>Decision 2.0 et Vela 2.0 contre Kev-4B : benchmark sur un GB10</title>
<link>https://carouter.ai/fr/blog/decision-2-and-vela-2-vs-kev</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/decision-2-and-vela-2-vs-kev</guid>
<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>vLLM Semantic Router a publié deux familles de modèles de décision ouverts, Decision 2.0 et Vela 2.0. Sur un GB10, Vela 2.0 4B a reconnu le bon type de tâche sur 96,6 % de nos 328 requêtes, contre 92,4 % pour Kev-4B, pour trois fois plus d'attente. Son petit frère de 0,3 milliard de paramètres atteint 85,7 % sans GPU.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/decision-2-and-vela-2-vs-kev/illustration.png" alt="Recherche : Decision 2.0 et Vela 2.0 contre Kev-4B, benchmark sur un GB10. Type de tâche bien reconnu sur nos 328 requêtes : Decision 2.0 Nox-4B 93,0 % en 194 ms et 11 Go, Vela 2.0 4B 96,6 % en 319 ms et 23 Go, Kev-4B 92,4 % en 99 ms et 14 Go, Vela 2.0 0.3B sans GPU 85,7 % en 92 ms et 4 Go. Le Qwen3.5-4B d'OpenJev, sans entraînement, reste en tête à 97,0 %, en 192 ms et 9 Go." /></p><p>Le projet vLLM Semantic Router a publié deux familles de modèles de décision ouverts : Decision 2.0, puis Vela 2.0 cette semaine. Comme Jev et Kev, ils répondent à des questions typées sur un texte.</p><p>Nous en avons passé trois sur nos deux benchmarks à côté de Kev, sur un GB10 de NVIDIA, la machine qui sert Kev-4B à l&#x27;adresse /v1/decisions. Ce sont Decision 2.0 Nox-4B, Vela 2.0 4B et Vela 2.0 0.3B, assez petit pour se passer de GPU.</p><p>C&#x27;est le cinquième article de la série. Son tableau réunit tous les modèles de décision que nous avons testés jusqu&#x27;ici, et ses dernières sections disent à quoi chacun peut servir.</p><p><a href="https://carouter.ai/fr/blog/jev-kev-laya-decision-models">Lire le premier benchmark.</a> <a href="https://carouter.ai/fr/blog/kev-available-on-carouter">Lire le deuxième, paru avec le lancement de Kev.</a> <a href="https://carouter.ai/fr/blog/openjev-vs-kev">Lire le troisième, sur OpenJev.</a> <a href="https://carouter.ai/fr/blog/clef-strands-decider-vs-kev">Lire le quatrième, sur Clef et Strands Decider.</a></p><h2>En bref</h2><ul><li><strong>Sur nos requêtes.</strong> Vela 2.0 4B a reconnu le bon type de tâche sur 96,6 % de nos 328 requêtes, contre 93,0 % pour Decision 2.0 Nox-4B et 92,4 % pour Kev-4B. C&#x27;est le plus juste des modèles entraînés que nous avons testés, à une requête du Qwen3.5-4B d&#x27;OpenJev, qui n&#x27;a reçu aucun entraînement.</li><li><strong>Là où Vela prend l&#x27;avantage.</strong> Il a reconnu toutes les conversations courantes et 29 des 32 étapes d&#x27;agent. Or CARouter reconnaît une étape d&#x27;agent à la requête elle-même. Notés de cette façon, Vela 2.0 4B est à 97,6 % et Kev-4B à 97,3 % : une seule requête les sépare.</li><li><strong>Sans GPU.</strong> Sur un processeur seul, Vela 2.0 0.3B atteint 85,7 %, devant les 80,2 % de Kev-0.8B sur un GPU. Une décision courte y prend 92 millisecondes.</li><li><strong>Sur les requêtes publiques.</strong> Vela 2.0 4B atteint 80 % en anglais et 76 % en français, Nox-4B 79 % et 78 %. Kev-4B est à 76 % et 70 %.</li><li><strong>L&#x27;assurance.</strong> Sur les requêtes publiques en anglais, Nox-4B ne s&#x27;est trompé en étant sûr de lui à 90 % ou plus que sur 0,7 % des requêtes, contre 3 % pour Kev-4B et 7 % pour Vela 2.0 4B.</li><li><strong>Vitesse.</strong> Pour une requête courte, une décision à trois questions prend 99 millisecondes avec Kev-4B, 194 avec Nox-4B et 319 avec Vela 2.0 4B.</li><li><strong>Mémoire.</strong> Vela 2.0 4B occupe 23 des 121 Go du GB10, Kev-4B 14 et Nox-4B 11. Le 0.3B occupe 1,5 Go sur le GPU.</li></ul><h2>Qui sont les nouveaux venus</h2><p>Decision 2.0 est une famille de six modèles, de 0,6 à 27 milliards de paramètres. Nous avons testé son modèle 4B, Nox, publié sous licence Apache 2.0. Il est affiné à partir de Qwen3.5-4B-Base, la base de Kev-4B, et répond aux trois mêmes types de questions que Jev : un choix, un oui ou non, une note. <a href="https://huggingface.co/vllm-sr/Decision-2.0-Nox-4B" target="_blank" rel="noreferrer">Les poids de Nox-4B.</a></p><p>Les grands modèles de Vela 2.0 partent de Decision 2.0. Ils sont entraînés à ce qu&#x27;un routeur doit savoir d&#x27;une requête avant de l&#x27;envoyer où que ce soit : son sujet, si c&#x27;est une attaque, si elle contient des renseignements personnels, si une réponse s&#x27;appuie bien sur ses sources. <a href="https://vllm-sr.ai/blog/vela-2-0-open-foundation-routing-models/" target="_blank" rel="noreferrer">L&#x27;annonce.</a> <a href="https://huggingface.co/vllm-sr/Vela-2.0-4B" target="_blank" rel="noreferrer">Les poids de Vela 2.0 4B.</a></p><p>Vela 2.0 ajoute deux types de réponses. Une question d&#x27;ensemble renvoie toutes les étiquettes qui s&#x27;appliquent. Une question de repérage renvoie les mots exacts trouvés, avec leur position dans le texte.</p><p>Vela 2.0 0.3B est construit autrement. C&#x27;est un encodeur de 0,3 milliard de paramètres, le genre de modèle qui lit un texte sans pouvoir en écrire, et il tourne sur un processeur. Ses poids sont sous licence Apache 2.0, mais son tokenizer reste soumis aux conditions d&#x27;utilisation de Gemma, de Google.</p><p>Leurs auteurs le disent : cette spécialisation a un prix. Sur le Jev Decision Index, une série publique de tâches de décision générales, les fiches annoncent environ 32 pour Vela 2.0 4B et environ 44 pour le Nox-4B dont il est issu. Nous nous attendions à ce que Vela comprenne nos requêtes moins bien que Nox. C&#x27;est le contraire qui s&#x27;est produit.</p><p>Les deux modèles 4B lisent jusqu&#x27;à 16 384 tokens, et le 0.3B 8 192, questions comprises. Decision 2.0 refuse une requête trop longue ; Vela 2.0 la coupe. Aucune de nos requêtes de test n&#x27;a atteint ces limites.</p><h2>Comment nous avons testé</h2><p>La machine de test est un GB10, le même modèle que celle qui sert Kev, avec 121 Go de mémoire que se partagent le processeur et le GPU. Chaque modèle y a tourné seul, une requête à la fois, avec le code de ses auteurs. Kev a tourné comme notre serveur le fait tourner.</p><p>Les deux benchmarks sont ceux des articles précédents. Sur les 1 020 requêtes publiques, chaque modèle répond à une seule question, avec neuf types de tâche. Sur nos 328 requêtes, il répond à trois questions : le type de tâche, sa difficulté, et si la réponse sera longue.</p><p>Un seul script a noté tous les modèles : celui de l&#x27;article précédent. Avant de noter quoi que ce soit de nouveau, il recalcule les chiffres publiés dans les articles précédents, et s&#x27;arrête si un seul diffère.</p><p>Les modèles des articles précédents gardent les chiffres que nous avons publiés. Kev-4B a tourné de nouveau sur cette machine de test, comme référence. Il a choisi la même réponse que la dernière fois pour 1 016 des 1 020 requêtes publiques et pour 325 de nos 328 requêtes, et ses temps sont à moins de 2 % de ceux du dernier article.</p><p>Sur l&#x27;exemple de leur propre fiche, les deux modèles Vela ont donné les réponses qui y sont publiées, à 0,001 près. Decision 2.0 ne publie aucune réponse à laquelle se comparer. Avant de se charger, il vérifie chacun de ses fichiers par rapport à un manifeste, et sa réponse à l&#x27;exemple de sa fiche est sensée.</p><p>Le 0.3B a tourné de trois façons : sur le GPU, puis sur le processeur seul avec deux moteurs d&#x27;inférence. Les trois ont choisi la même réponse pour chaque requête : sa justesse tient donc en une ligne, et sa vitesse en deux.</p><p>Jev est un service hébergé payant, que nous n&#x27;avons pas rappelé. Ses chiffres sur les requêtes publiques sont ceux du premier benchmark, et il n&#x27;a jamais été passé sur nos requêtes.</p><h2>Ce que nous avons trouvé : la justesse</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/decision-2-and-vela-2-vs-kev/01-accuracy-both-benchmarks.png" alt="Type de tâche bien reconnu, en anglais et en français, pour tous les modèles du tableau. Sur les 1 020 requêtes publiques : Jev 81 % et 76 %, Kev-9B 74 % et 67 %, Kev-4B 76 % et 70 %, Kev-0.8B 70 % et 64 %, OpenJev Qwen3.5-4B 79 % et 81 %, Strands Decider 80 % et 68 %, Clef-flash 82 % et 78 %, Clef 82 % et 76 %, Decision 2.0 Nox-4B 79 % et 78 %, Vela 2.0 4B 80 % et 76 %, Vela 2.0 0.3B 71 % et 64 %. Sur nos 328 requêtes : Kev-4B 93 % et 92 %, Kev-0.8B 80 % et 81 %, OpenJev Qwen3.5-4B 97 % et 97 %, Strands Decider 89 % et 85 %, Clef-flash 90 % et 90 %, Clef 95 % et 94 %, Decision 2.0 Nox-4B 93 % et 93 %, Vela 2.0 4B 96 % et 97 %, Vela 2.0 0.3B 87 % et 85 %. Jev et Kev-9B n&#x27;ont pas été passés sur nos requêtes." loading="lazy"/><figcaption>Type de tâche bien reconnu, en anglais et en français, pour tous les modèles du tableau. Sur les 1 020 requêtes publiques : Jev 81 % et 76 %, Kev-9B 74 % et 67 %, Kev-4B 76 % et 70 %, Kev-0.8B 70 % et 64 %, OpenJev Qwen3.5-4B 79 % et 81 %, Strands Decider 80 % et 68 %, Clef-flash 82 % et 78 %, Clef 82 % et 76 %, Decision 2.0 Nox-4B 79 % et 78 %, Vela 2.0 4B 80 % et 76 %, Vela 2.0 0.3B 71 % et 64 %. Sur nos 328 requêtes : Kev-4B 93 % et 92 %, Kev-0.8B 80 % et 81 %, OpenJev Qwen3.5-4B 97 % et 97 %, Strands Decider 89 % et 85 %, Clef-flash 90 % et 90 %, Clef 95 % et 94 %, Decision 2.0 Nox-4B 93 % et 93 %, Vela 2.0 4B 96 % et 97 %, Vela 2.0 0.3B 87 % et 85 %. Jev et Kev-9B n&#x27;ont pas été passés sur nos requêtes.</figcaption></figure><p>Vela 2.0 4B obtient 317 bonnes réponses sur nos 328 requêtes. Le Qwen3.5-4B d&#x27;OpenJev en obtient 318, Clef 310, Nox-4B 305 et Kev-4B 303.</p><p>Nous avons rédigé les questions posées sur nos requêtes avec les réponses de Kev-4B sous les yeux, sur les trois cinquièmes des requêtes. Sur les 137 requêtes mises de côté, Vela 2.0 4B n&#x27;en manque qu&#x27;une : 99,3 %, contre 98,5 % pour OpenJev, 94,9 % pour Nox-4B et 93,4 % pour Kev-4B.</p><p>Sur les requêtes publiques, les nouveaux venus rejoignent les meilleurs des modèles déjà testés. Vela 2.0 4B atteint 80 % en anglais et Nox-4B 79 %, autour des 81 % de Jev, le service hébergé, et devant Kev-4B, à 76 %.</p><p>Le français n&#x27;y coûte qu&#x27;un point à Nox-4B : 78 % au lieu de 79 %. C&#x27;est le plus faible recul de tous les modèles entraînés du tableau. Vela 2.0 4B perd cinq points, comme Jev, et Kev-4B six.</p><div class="vela-table" role="region" aria-label="Tous les modèles de décision que nous avons testés, sur les deux benchmarks et sur le GB10" tabindex="0"><table><caption>Tous les modèles de décision que nous avons testés, sur les deux benchmarks et sur le GB10</caption><thead><tr><th scope="col">Modèle</th><th scope="col">Requêtes publiques, anglais</th><th scope="col">Requêtes publiques, français</th><th scope="col">Erreurs assurées, publiques, anglais</th><th scope="col">Nos 328 requêtes</th><th scope="col">Nos 328 requêtes, étapes d&#x27;agent lues dans la requête</th><th scope="col">Décision courte</th><th scope="col">Mémoire</th></tr></thead><tbody><tr><th scope="row">Jev (hosted)</th><td>80,9 %</td><td>76,0 %</td><td>11,7 %</td><td class="none">non testé</td><td class="none">non testé</td><td class="none">non testé</td><td class="none">non testé</td></tr><tr><th scope="row">Kev-9B</th><td>74,3 %</td><td>66,5 %</td><td>4,8 %</td><td class="none">non testé</td><td class="none">non testé</td><td class="none">non testé</td><td class="none">non testé</td></tr><tr><th scope="row">Kev-4B</th><td>75,7 %</td><td>69,8 %</td><td>3,3 %</td><td>92,4 %</td><td>97,3 %</td><td>99 ms</td><td>14 Go</td></tr><tr><th scope="row">Kev-0.8B</th><td>69,6 %</td><td>63,7 %</td><td>0,0 %</td><td>80,2 %</td><td>86,3 %</td><td>23 ms</td><td>4 Go</td></tr><tr><th scope="row">OpenJev Qwen3.5-4B</th><td>79,3 %</td><td>80,8 %</td><td>19,3 %</td><td>97,0 %</td><td>97,6 %</td><td>192 ms</td><td>9 Go</td></tr><tr><th scope="row">Strands Decider 2B</th><td>80,4 %</td><td>67,7 %</td><td>0,2 %</td><td>87,2 %</td><td>91,2 %</td><td>108 ms</td><td>4 Go</td></tr><tr><th scope="row">Clef-flash (9B)</th><td>82,0 %</td><td>77,9 %</td><td>8,9 %</td><td>89,6 %</td><td>95,1 %</td><td>173 ms</td><td>18 Go</td></tr><tr><th scope="row">Clef (27B)</th><td>81,9 %</td><td>75,8 %</td><td>8,1 %</td><td>94,5 %</td><td>95,7 %</td><td>562 ms</td><td>52 Go</td></tr><tr class="lead"><th scope="row">Decision 2.0 Nox-4B</th><td>78,9 %</td><td>77,7 %</td><td>0,7 %</td><td>93,0 %</td><td>96,6 %</td><td>194 ms</td><td>11 Go</td></tr><tr class="lead"><th scope="row">Vela 2.0 4B</th><td>80,4 %</td><td>75,6 %</td><td>6,7 %</td><td>96,6 %</td><td>97,6 %</td><td>319 ms</td><td>23 Go</td></tr><tr class="lead"><th scope="row">Vela 2.0 0.3B, sur processeur</th><td>71,1 %</td><td>64,0 %</td><td>3,3 %</td><td>85,7 %</td><td>88,4 %</td><td>92 ms</td><td>4 Go</td></tr></tbody></table></div><p>Vela 2.0 0.3B obtient 281 bonnes réponses sur nos requêtes, soit 85,7 %. C&#x27;est 18 de plus que Kev-0.8B et 5 de moins que Strands Decider, deux modèles qui ont besoin d&#x27;un GPU. Sur les requêtes publiques, il fait jeu égal avec Kev-0.8B : 71 % en anglais et 64 % en français.</p><h2>D&#x27;où viennent les écarts</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/decision-2-and-vela-2-vs-kev/03-by-kind.png" alt="Type de tâche bien reconnu sur nos 328 requêtes, type par type, pour Kev-4B, OpenJev Qwen3.5-4B, Clef, Decision 2.0 Nox-4B, Vela 2.0 4B et Vela 2.0 0.3B. Conversation : 87 %, 100 %, 83 %, 93 %, 100 % et 97 %. Étape d&#x27;agent : 50 %, 94 %, 88 %, 63 %, 91 % et 72 %. Recherche : 82 %, 75 %, 71 %, 75 %, 71 % et 21 %. Résumé : 100 % pour tous, sauf le 0.3B à 85 %. Extraction : 100 %, 97 %, 97 %, 94 %, 100 % et 94 %. Mathématiques et rédaction d&#x27;affaires : 100 % pour tous, sauf le 0.3B à 91 % et 86 %. Les six atteignent 100 % sur le code et la traduction." loading="lazy"/><figcaption>Type de tâche bien reconnu sur nos 328 requêtes, type par type, pour Kev-4B, OpenJev Qwen3.5-4B, Clef, Decision 2.0 Nox-4B, Vela 2.0 4B et Vela 2.0 0.3B. Conversation : 87 %, 100 %, 83 %, 93 %, 100 % et 97 %. Étape d&#x27;agent : 50 %, 94 %, 88 %, 63 %, 91 % et 72 %. Recherche : 82 %, 75 %, 71 %, 75 %, 71 % et 21 %. Résumé : 100 % pour tous, sauf le 0.3B à 85 %. Extraction : 100 %, 97 %, 97 %, 94 %, 100 % et 94 %. Mathématiques et rédaction d&#x27;affaires : 100 % pour tous, sauf le 0.3B à 91 % et 86 %. Les six atteignent 100 % sur le code et la traduction.</figcaption></figure><p>Vela 2.0 4B fait un sans-faute sur sept des neuf types. Il a reconnu les 30 conversations courantes, quand Nox-4B en reconnaît 28 et Kev-4B 26.</p><p>C&#x27;est sur les étapes d&#x27;agent qu&#x27;il creuse l&#x27;écart. Il en a reconnu 29 sur 32, contre 20 pour Nox-4B et 16 pour Kev-4B. Le dernier message d&#x27;une étape d&#x27;agent est le résultat d&#x27;un outil, qui ressemble à du code ou à une page web.</p><p>C&#x27;est aussi le seul type que CARouter ne demande pas à un modèle. Une requête qui contient des définitions d&#x27;outils est une étape d&#x27;agent, et notre plateforme le voit comme elle voit la langue. Notés de cette façon, Vela 2.0 4B reconnaît 97,6 % des requêtes, Kev-4B 97,3 % et Nox-4B 96,6 %.</p><p>La recherche est le seul type où Kev-4B devance les nouveaux venus : 23 sur 28, contre 21 pour Nox-4B et 20 pour Vela 2.0 4B. Le 0.3B n&#x27;en reconnaît que 6, et range 14 des autres dans la conversation.</p><h2>Ce que nous avons trouvé : l&#x27;assurance</h2><p>Un modèle qui décide à la place de quelqu&#x27;un ne devrait agir que lorsqu&#x27;il est sûr de lui. Nous comptons donc les réponses fausses que chacun donne avec au moins 90 % d&#x27;assurance.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/decision-2-and-vela-2-vs-kev/02-confidence.png" alt="L&#x27;assurance sur les deux benchmarks. Sur les requêtes publiques en anglais, justesse et réponses fausses données avec 90 % de confiance ou plus : Jev 81 % de réponses justes et 12 % d&#x27;erreurs assurées, Kev-9B 74 % et 5 %, Kev-4B 76 % et 3 %, Kev-0.8B 70 % et 0 %, OpenJev Qwen3.5-4B 79 % et 19 %, Strands Decider 80 % et 0,2 %, Clef-flash 82 % et 9 %, Clef 82 % et 8 %, Decision 2.0 Nox-4B 79 % et 0,7 %, Vela 2.0 4B 80 % et 7 %, Vela 2.0 0.3B 71 % et 3 %. Sur nos 328 requêtes, réponses données avec 90 % de confiance ou plus : Kev-4B 187, aucune fausse ; Kev-0.8B 2, aucune fausse ; OpenJev Qwen3.5-4B 292, dont 4 fausses ; Strands Decider 131, aucune fausse ; Clef-flash 227, dont 2 fausses ; Clef 213, aucune fausse ; Decision 2.0 Nox-4B 59, aucune fausse ; Vela 2.0 4B 269, dont 2 fausses ; Vela 2.0 0.3B 172, aucune fausse." loading="lazy"/><figcaption>L&#x27;assurance sur les deux benchmarks. Sur les requêtes publiques en anglais, justesse et réponses fausses données avec 90 % de confiance ou plus : Jev 81 % de réponses justes et 12 % d&#x27;erreurs assurées, Kev-9B 74 % et 5 %, Kev-4B 76 % et 3 %, Kev-0.8B 70 % et 0 %, OpenJev Qwen3.5-4B 79 % et 19 %, Strands Decider 80 % et 0,2 %, Clef-flash 82 % et 9 %, Clef 82 % et 8 %, Decision 2.0 Nox-4B 79 % et 0,7 %, Vela 2.0 4B 80 % et 7 %, Vela 2.0 0.3B 71 % et 3 %. Sur nos 328 requêtes, réponses données avec 90 % de confiance ou plus : Kev-4B 187, aucune fausse ; Kev-0.8B 2, aucune fausse ; OpenJev Qwen3.5-4B 292, dont 4 fausses ; Strands Decider 131, aucune fausse ; Clef-flash 227, dont 2 fausses ; Clef 213, aucune fausse ; Decision 2.0 Nox-4B 59, aucune fausse ; Vela 2.0 4B 269, dont 2 fausses ; Vela 2.0 0.3B 172, aucune fausse.</figcaption></figure><p>Sur les requêtes publiques, Nox-4B se trompe avec assurance sur 0,7 % des requêtes en anglais, et sur aucune en français. Vela 2.0 4B est à 7 %, entre Kev-4B, à 3 %, et Clef, à 8 %.</p><p>Sur nos requêtes, Vela 2.0 4B a donné 269 réponses à ce niveau d&#x27;assurance, dont deux fausses. Le 0.3B en a donné 172, Kev-4B 187 et Nox-4B 59, sans aucune erreur.</p><p>Chaque modèle calcule son assurance à sa façon, et celle de Decision 2.0 est la plus sévère : elle baisse dès qu&#x27;une deuxième option reçoit un peu de probabilité. Recalculée avec la formule de Kev, l&#x27;assurance de Nox-4B atteint ce niveau pour 144 réponses, et ses erreurs assurées sur les requêtes publiques en anglais passent de 0,7 % à 5 %.</p><h2>Difficulté et réponses longues</h2><p>Les deux nouveaux modèles 4B évaluent mieux la difficulté que Kev-4B. Nox-4B place une requête à un niveau près du nôtre 94 % du temps et Vela 2.0 4B 92 %, contre 88 % pour Kev-4B et 81 % pour le 0.3B. Clef reste en tête, à 98 %.</p><p>Dix de nos 328 requêtes demandent une réponse longue. Nox-4B a repéré les dix, avec cinq fausses alertes. Vela 2.0 4B en a trouvé huit, avec huit fausses alertes. Kev-4B en a trouvé sept, sans fausse alerte.</p><p>Le 0.3B ne sait pas répondre à cette question. Il n&#x27;a trouvé que quatre des dix, et a signalé 154 requêtes qui ne demandaient pas de réponse longue.</p><h2>Vitesse et mémoire sur un GB10</h2><p>Nous avons chronométré la décision à trois questions des articles précédents, chaque fois sur une requête nouvelle, de la requête courte à celle de 4 000 tokens.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/decision-2-and-vela-2-vs-kev/04-latency-memory-gb10.png" alt="Temps médian d&#x27;une décision à trois questions selon la longueur de la requête sur le GB10, en échelles logarithmiques, et mémoire occupée au maximum. Kev-4B : de 99 à 631 ms, 14,4 Go. Decision 2.0 Nox-4B : de 194 ms à 3,1 s, et 1,1 s sur la requête la plus longue avec son option de contexte partagé, 11,2 Go. Vela 2.0 4B : de 319 ms à 1,3 s, 22,8 Go. Vela 2.0 0.3B sur le GPU : de 11 à 243 ms, 1,5 Go. Vela 2.0 0.3B sur le processeur seul : de 92 ms à 3,9 s, 3,8 Go." loading="lazy"/><figcaption>Temps médian d&#x27;une décision à trois questions selon la longueur de la requête sur le GB10, en échelles logarithmiques, et mémoire occupée au maximum. Kev-4B : de 99 à 631 ms, 14,4 Go. Decision 2.0 Nox-4B : de 194 ms à 3,1 s, et 1,1 s sur la requête la plus longue avec son option de contexte partagé, 11,2 Go. Vela 2.0 4B : de 319 ms à 1,3 s, 22,8 Go. Vela 2.0 0.3B sur le GPU : de 11 à 243 ms, 1,5 Go. Vela 2.0 0.3B sur le processeur seul : de 92 ms à 3,9 s, 3,8 Go.</figcaption></figure><p>Kev-4B reste le plus rapide des modèles 4B : 99 millisecondes pour une requête courte, 631 pour une longue. Vela 2.0 4B prend 319 millisecondes et 1,3 seconde. Nox-4B prend 194 millisecondes et 3,1 secondes.</p><p>Nox-4B est lent sur les requêtes longues parce qu&#x27;il relit la requête pour chaque question. Une option lui permet de ne la lire qu&#x27;une fois : la requête longue descend alors à 1,1 seconde, et aucune de ses réponses n&#x27;a changé sur nos deux benchmarks.</p><p>Avec une seule question, Nox-4B est le plus rapide des modèles 4B de cet article : 72 millisecondes pour une requête courte, contre 83 pour Kev-4B.</p><p>Le 0.3B joue dans une autre catégorie. Sur le GPU, il prend 11 millisecondes pour une requête courte et 243 pour une longue, dans 1,5 Go.</p><p>Sur le processeur seul, avec dix de ses vingt cœurs, il prend 92 millisecondes pour une requête courte, 581 pour une requête de 1 000 tokens et 3,9 secondes pour une de 4 000. Dans notre troisième article, le modèle le plus rapide sur le processeur d&#x27;un GB10 était Kev-0.8B : 1,3 seconde pour une requête courte, sur des cœurs partagés avec d&#x27;autres tâches.</p><p>Vela 2.0 4B occupe 23 Go, parce que le code de ses auteurs garde ses poids en nombres de 32 bits. Kev-4B occupe 14 Go et Nox-4B 11. Sur un processeur, le 0.3B occupe 4 Go de mémoire ordinaire.</p><p>Ces temps sont le meilleur cas pour chaque modèle : seul sur la machine, sans réseau entre les deux. En production, Kev-4B partage son GB10 avec d&#x27;autres modèles et répond à travers une API : la même décision y prend 143 millisecondes et 1 seconde.</p><h2>À quoi sert chaque modèle</h2><p>Un modèle de décision répond à une question fermée sur un texte, et dit à quel point il est sûr de lui. Après cinq articles, voici où chaque modèle du tableau trouve sa place.</p><ul><li><strong>Choisir un modèle pour chaque requête.</strong> C&#x27;est ce que mesurent nos 328 requêtes. Le Qwen3.5-4B d&#x27;OpenJev, Vela 2.0 4B et Clef sont ceux qui les comprennent le mieux. Quand les étapes d&#x27;agent sont lues dans la requête, Kev-4B n&#x27;est qu&#x27;à une requête de Vela, et il répond trois fois plus vite.</li><li><strong>Décider dans votre propre application.</strong> Il s&#x27;agit de trier des demandes de soutien, d&#x27;acheminer un message vers la bonne équipe, de vérifier une condition avant d&#x27;agir ou d&#x27;évaluer une urgence. Kev-4B le fait aujourd&#x27;hui à l&#x27;adresse /v1/decisions. Nox-4B convient là où le français compte, ou quand l&#x27;erreur commise avec assurance est celle qui coûte cher.</li><li><strong>Décider sans GPU.</strong> Vela 2.0 0.3B répond sur un processeur pendant qu&#x27;un appelant attend, pourvu que la requête soit courte. Il est fiable sur les types bien tranchés, comme le code, la traduction et l&#x27;extraction, mais pas sur la recherche ni sur les réponses longues. Laya, dans notre premier article, répondait lui aussi en une fraction de seconde sur un processeur, mais ne reconnaissait le bon type de tâche que sur 58 % des requêtes publiques en anglais, contre 71 % ici.</li><li><strong>Décider à côté d&#x27;un grand modèle.</strong> Quand la mémoire du GPU est réservée à un modèle de langage, ce sont les petits qui comptent : le 0.3B dans 1,5 Go, Kev-0.8B et Strands Decider dans 4 Go.</li><li><strong>Vérifier une requête avant qu&#x27;elle parte.</strong> Vela 2.0 a été entraîné à repérer les renseignements personnels, les attaques par injection, les contenus dangereux et les affirmations non étayées, dans la même lecture que ses autres questions. Nous n&#x27;avons rien testé de cela ici. Sur CARouter, le filtre de renseignements personnels et le filtre de contenu font ce travail avec deux modèles distincts.</li><li><strong>Les images et la vidéo.</strong> Clef est le seul modèle de cet article qui sait les lire, et nous n&#x27;avons testé que du texte.</li><li><strong>Ne rien héberger.</strong> Jev est un service hébergé : il n&#x27;y a aucun modèle à servir, et chaque requête quitte votre infrastructure.</li></ul><h2>Ce que cela ne prouve pas</h2><ul><li>Chaque modèle n&#x27;a tourné qu&#x27;une fois, sur deux ensembles de requêtes. Un type compte de 20 à 66 de nos requêtes : pour le plus petit, une seule erreur déplace le chiffre de cinq points.</li><li>Nous avons rédigé et étiqueté les 328 requêtes, et réglé leurs questions sur Kev-4B. Les deux benchmarks ne demandent qu&#x27;une chose : de quel type de travail relève une requête. Sur des tâches de décision générales, les auteurs de Vela 2.0 le mesurent eux-mêmes sous Decision 2.0.</li><li>Nous n&#x27;avons pas testé ce pour quoi Vela 2.0 a été conçu. Rien ici ne dit s&#x27;il repère bien les renseignements personnels, les attaques par injection ou les affirmations non étayées, en anglais comme en français.</li><li>Les nouveaux modèles ont tourné avec le code publié par leurs auteurs. Le chemin le plus rapide de Decision 2.0 est écrit pour les GPU d&#x27;AMD et ne s&#x27;appliquait pas au GPU NVIDIA du GB10, alors que le code qui sert Kev est optimisé pour cette machine. Les écarts de temps en disent autant sur le logiciel que sur les modèles.</li><li>Le 0.3B a été chronométré sur le processeur du GB10, une puce Arm à vingt cœurs. Un autre processeur donnera d&#x27;autres temps.</li><li>Nous n&#x27;avons pas rappelé Jev. Ses chiffres viennent du premier benchmark, et il n&#x27;a jamais été passé sur nos requêtes.</li></ul><h2>Ce que cela change pour CARouter</h2><p>Kev-4B reste derrière /v1/decisions pour l&#x27;instant. Noté comme notre plateforme lit une requête, Vela 2.0 4B ne le devance que d&#x27;une requête, pour trois fois plus d&#x27;attente et 8 Go de mémoire de plus, sur une machine qui sert d&#x27;autres modèles.</p><p>Vela 2.0 4B reste pourtant le résultat à retenir de cet article. C&#x27;est le premier modèle entraîné qui comprend nos requêtes à peu près aussi bien que le Qwen3.5-4B que personne n&#x27;a entraîné, et il pourrait répondre aux questions de routage et aux questions de sécurité en une seule lecture. Avant d&#x27;en tirer quoi que ce soit, nous devons tester nous-mêmes ce second volet, dans les deux langues.</p><p>Nox-4B devance Kev-4B de deux requêtes. Il est plus constant en français, et meilleur pour la difficulté et les réponses longues. Il est aussi deux fois plus lent sur nos trois questions, et cela ne suffit pas pour changer de modèle.</p><p>Le 0.3B remet en cause une de nos conclusions. Dans notre troisième article, nous écrivions qu&#x27;un processeur n&#x27;était pas la place de Kev ni d&#x27;OpenJev pendant qu&#x27;un appelant attend. Le 0.3B y répond en un dixième de seconde pour une requête courte : c&#x27;est un candidat partout où un déploiement n&#x27;a pas de GPU à lui consacrer.</p><p>Toutes les mesures derrière cet article sont conservées, et nous les partagerons avec quiconque le demande.</p>]]></content:encoded>
</item>
<item>
<title>Mistral Large 4 face à GLM-5.3 : l'Europe est-elle toujours dans la course ?</title>
<link>https://carouter.ai/fr/blog/mistral-large-4-vs-glm-5-3-is-europe-still-in-the-game</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/mistral-large-4-vs-glm-5-3-is-europe-still-in-the-game</guid>
<pubDate>Tue, 06 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Le nouveau modèle phare de Mistral a résolu 56 des 148 problèmes de programmation difficiles, contre 62 pour GLM-5.3, le modèle phare chinois. L'écart peut être dû au hasard, et Mistral Large 4 a écrit dix-sept fois moins de tokens pour y arriver.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/mistral-large-4-vs-glm-5-3-is-europe-still-in-the-game/illustration.png" alt="Recherche : Mistral Large 4 face à GLM-5.3, l'Europe est-elle toujours dans la course ? Problèmes résolus sur 148 : 56 contre 62. Tokens écrits : 0,18 million contre 3,14 millions. Coût des 148 réponses : 0,41 $ US contre 14,58 $ US." /></p><p>Mistral a publié Mistral Large 4 le 6 octobre. Nous l&#x27;avons comparé à GLM-5.3, le modèle phare du chinois Z.ai, sur 148 problèmes de programmation difficiles, pour voir si le meilleur modèle européen tient encore tête aux meilleurs modèles ouverts venus d&#x27;ailleurs.</p><p><a href="https://carouter.ai/fr/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10">Publié le même jour : l&#x27;allemand Kolibri-1 sur un GB10.</a></p><h2>En bref</h2><ul><li><strong>Le score.</strong> Mistral Large 4 a résolu 56 des 148 problèmes. GLM-5.3 en a résolu 62 et son petit frère GLM-5.3-Flash 64. Un écart aussi faible peut être dû au hasard.</li><li><strong>L&#x27;effort.</strong> Mistral Large 4 a écrit 0,18 million de tokens pour répondre. GLM-5.3 en a écrit 3,14 millions, soit dix-sept fois plus.</li><li><strong>La facture.</strong> Au prix catalogue, les 148 réponses ont coûté 0,41 $ US avec Mistral Large 4, 14,58 $ US avec GLM-5.3 et 1,03 $ US avec GLM-5.3-Flash.</li><li><strong>Le verdict.</strong> L&#x27;Europe est toujours dans la course. Son modèle phare fait jeu égal avec celui de la Chine sur ce test, et ses réponses coûtent beaucoup moins cher.</li></ul><h2>Les trois modèles</h2><ul><li><strong>Mistral Large 4.</strong> Il est français, compte 1 050 milliards de paramètres et en lit 49 milliards par token. Il répond directement, sauf si on lui demande de raisonner d&#x27;abord. Nous l&#x27;avons testé des deux façons.</li><li><strong>GLM-5.3.</strong> C&#x27;est le modèle phare de Z.ai, avec environ 750 milliards de paramètres. Par défaut, il raisonne avant chaque réponse.</li><li><strong>GLM-5.3-Flash.</strong> C&#x27;est le petit frère, avec 320 milliards de paramètres dont 18 milliards lus par token, vendu environ neuf fois moins cher.</li></ul><h2>Le test</h2><p>Nous avons utilisé BigCodeBench-Hard, un ensemble de 148 problèmes. Le modèle écrit une fonction Python, puis des tests vérifient cette fonction. Chaque modèle a répondu une fois à chaque problème, avec les réglages par défaut de son éditeur.</p><p>Mistral Large 4 était servi par Mistral. Les deux modèles GLM étaient servis par des hébergeurs indépendants.</p><h2>Ce qui en ressort</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/mistral-large-4-vs-glm-5-3-is-europe-still-in-the-game/01-solved-and-cost.png" alt="Problèmes de programmation difficiles résolus sur 148 : 56 pour Mistral Large 4, avec ou sans raisonnement, 62 pour GLM-5.3 et 64 pour GLM-5.3-Flash. Coût de ces réponses au prix catalogue : 0,41 $ US, 1,57 $ US avec raisonnement, 14,58 $ US et 1,03 $ US." loading="lazy"/><figcaption>Problèmes de programmation difficiles résolus sur 148 : 56 pour Mistral Large 4, avec ou sans raisonnement, 62 pour GLM-5.3 et 64 pour GLM-5.3-Flash. Coût de ces réponses au prix catalogue : 0,41 $ US, 1,57 $ US avec raisonnement, 14,58 $ US et 1,03 $ US.</figcaption></figure><p>Les modèles sont le plus souvent d&#x27;accord. Mistral Large 4 et GLM-5.3 ont obtenu le même résultat sur 126 des 148 problèmes. Mistral en a résolu 8 que GLM-5.3 a manqués, et GLM-5.3 en a résolu 14 que Mistral a manqués. Le hasard seul donne une telle répartition environ trois fois sur dix.</p><p>C&#x27;est sur l&#x27;effort qu&#x27;ils se distinguent. GLM-5.3 raisonne longuement avant de répondre, et sur certains problèmes il a déroulé les exemples à la main pendant des dizaines de milliers de tokens. Un problème type a pris 15 secondes à Mistral Large 4 et environ une minute et demie à GLM-5.3.</p><p>Le raisonnement n&#x27;a pas aidé Mistral Large 4. Il a résolu 56 problèmes dans les deux cas, et le raisonnement a coûté quatre fois plus de tokens.</p><p>GLM-5.3-Flash a fait aussi bien que GLM-5.3 pour un quatorzième du coût. Sur ce test, la taille supplémentaire du modèle phare n&#x27;a rien apporté de mesurable.</p><p>Le test est difficile pour tous. 66 des 148 problèmes ont résisté à tous les essais, et 42 ont été résolus à chaque fois.</p><h2>Ce que nous ne pouvons pas vous dire</h2><ul><li>Si un écart de six problèmes est réel. Pour trancher, il faudrait plusieurs fois plus de problèmes.</li><li>Ce que valent ces modèles en dehors de la programmation en anglais. Nous n&#x27;avons testé ni le français, ni l&#x27;allemand, ni les images, ni les longues tâches d&#x27;agent.</li><li>Comment les modèles GLM se comportent sur le service de Z.ai lui-même. Nous n&#x27;avons pas vérifié comment chaque hébergeur indépendant fait tourner les poids.</li><li>Où se situerait un modèle américain. Nous n&#x27;en avons testé aucun.</li></ul><h2>L&#x27;Europe est-elle toujours dans la course ?</h2><p>D&#x27;après ces résultats, oui. Le modèle phare français fait jeu égal avec celui de la Chine sur des problèmes de programmation difficiles, et il y parvient avec une fraction des tokens.</p><p>Cela compte pour nous pour une raison pratique. CARouter achemine les requêtes vers des fournisseurs canadiens, et ce sont les poids ouverts qui permettent à un fournisseur canadien d&#x27;héberger un modèle. Mistral présente Mistral Large 4 comme un modèle à poids ouverts, et ses poids n&#x27;étaient pas encore publiés au moment de ce test.</p>]]></content:encoded>
</item>
<item>
<title>Kolibri-1 face à Qwen3.6 35B-A3B : banc d'essai sur un GB10</title>
<link>https://carouter.ai/fr/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10</guid>
<pubDate>Tue, 06 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Kolibri-1, le nouveau modèle à poids ouverts d'Aleph Alpha, lit environ 3 milliards de paramètres par token, comme le Qwen3.6 35B-A3B que nous servons. Sur un GB10 et à 4 bits, il a résolu de 29 à 32 de nos 50 problèmes de programmation, contre 33 pour Qwen, avec deux fois plus de mémoire et une vitesse deux fois moindre.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10/illustration.png" alt="Recherche : Kolibri-1 face à Qwen3.6 35B-A3B, banc d'essai sur un GB10. Poids en mémoire : 42,7 Gio contre 21,9. Une requête seule : 53 tokens par seconde contre 117. Problèmes de programmation résolus : de 29 à 32 contre 33 sur 50. Conversations de longueur maximale tenues dans les mêmes 28 Gio : 9,9 contre 4,8." /></p><p>Aleph Alpha a publié Kolibri-1 le 3 octobre. C&#x27;est un modèle allemand à poids ouverts, sous licence Apache 2.0, conçu pour l&#x27;allemand et l&#x27;anglais. Il compte 78 milliards de paramètres et n&#x27;en lit qu&#x27;environ 3,5 milliards pour chaque token qu&#x27;il écrit.</p><p>C&#x27;est ce dernier chiffre qui a retenu notre attention. Qwen3.6 35B-A3B, le modèle qui répond aux requêtes de programmation sur CARouter Cloud, lit environ 3 milliards de paramètres par token sur 35 milliards. Les deux modèles fournissent un travail comparable par token, et l&#x27;un est plus de deux fois plus gros que l&#x27;autre. Nous les avons fait tourner sur le même GB10 pour voir ce que coûte cette taille et ce qu&#x27;elle rapporte.</p><p><a href="https://carouter.ai/fr/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b">Un article précédent : pourquoi nous servons Qwen3.6 35B-A3B.</a></p><h2>En bref</h2><ul><li><strong>Mémoire.</strong> À 4 bits, les poids de Kolibri-1 occupent 42,7 Gio, contre 21,9 Gio pour Qwen. Dans la version FP8 que publie Aleph Alpha, ils occupent 73,5 Gio et le modèle retient 103 Gio sur une machine qui en compte 121,6.</li><li><strong>Vitesse.</strong> Une requête seule reçoit 53 tokens par seconde de Kolibri-1 et 117 de Qwen. Avec seize requêtes à la fois, les totaux sont de 290 et de 486.</li><li><strong>Programmation.</strong> Sur nos 50 problèmes de programmation, Kolibri-1 en a résolu de 29 à 32 selon la version, et Qwen 33. Cinquante problèmes ne suffisent pas à départager ces résultats.</li><li><strong>Longues conversations.</strong> Kolibri-1 les retient pour moitié moins cher : les mêmes 28 Gio contiennent 9,9 conversations de 262 144 tokens, contre 4,8 pour Qwen.</li><li><strong>Notre décision.</strong> Nous n&#x27;ajoutons pas Kolibri-1 à la machine de CARouter Cloud. Il lui faudrait deux fois plus de mémoire pour répondre à peu près aussi bien aux requêtes de programmation, deux fois moins vite.</li></ul><h2>Deux modèles qui lisent autant l&#x27;un que l&#x27;autre par token</h2><p>Les deux modèles sont des mélanges d&#x27;experts. Chaque couche contient des centaines de petits réseaux spécialisés, et chaque token n&#x27;est confié qu&#x27;à quelques-uns. Tous doivent tenir en mémoire, mais seuls ceux qui sont choisis sont lus.</p><p>Kolibri-1 garde 384 experts par couche et en sollicite 6 par token. Qwen3.6 35B-A3B en garde 256 et en sollicite 8. Le travail par token est voisin : la vitesse devrait donc l&#x27;être aussi, et la mémoire non.</p><h2>Quel Kolibri-1 nous avons testé</h2><p>Aleph Alpha publie Kolibri-1 en FP8, soit 8 bits par poids. Nous servons nos propres modèles à 4 bits, et Aleph Alpha ne propose aucune version à 4 bits. Nous en avons donc retenu deux, produites par la communauté dès les premiers jours :</p><ul><li>La plus téléchargée, un fichier Q4_K_M au format GGUF. Elle tourne sur llama.cpp, moyennant un correctif fourni par son auteur, car llama.cpp ne connaît pas encore cette architecture.</li><li>Une version NVFP4. Elle tourne sur vLLM, le logiciel avec lequel nous servons nos modèles, dans le même format à 4 bits que notre Qwen. C&#x27;est elle qui permet de comparer à conditions égales.</li></ul><p>Nous avons aussi testé la version FP8 d&#x27;origine, pour distinguer ce qui tient au modèle de ce qui tient à sa compression. Chaque modèle était seul sur la machine, avec les réglages par défaut de son éditeur et le raisonnement activé.</p><h2>Mémoire</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10/01-memory-held.png" alt="Mémoire retenue sur un GB10, avec les mêmes 28 Gio réservés aux conversations : 52,1 Gio pour Qwen3.6 35B-A3B à 4 bits, 73,5 Gio pour Kolibri-1 à 4 bits et 103,1 Gio pour Kolibri-1 en FP8, sur 121,6 Gio." loading="lazy"/><figcaption>Mémoire retenue sur un GB10, avec les mêmes 28 Gio réservés aux conversations : 52,1 Gio pour Qwen3.6 35B-A3B à 4 bits, 73,5 Gio pour Kolibri-1 à 4 bits et 103,1 Gio pour Kolibri-1 en FP8, sur 121,6 Gio.</figcaption></figure><p>À 4 bits, Kolibri-1 demande 21 Gio de plus que Qwen, et ce ne sont que des poids. Sur une machine qui sert aussi des embeddings, un modèle de reclassement et notre modèle de décision, c&#x27;est exactement la place qu&#x27;occupent ces autres modèles.</p><p>La version FP8 tient sur la machine, mais elle y tient seule. Il ne restait que 10 Gio de libres.</p><p>Sur l&#x27;autre versant de la mémoire, l&#x27;avantage va à Kolibri-1. Un modèle doit aussi retenir chaque conversation en cours, et la plupart des couches de Kolibri-1 ne regardent que les 512 derniers tokens. Avec les mêmes 28 Gio, il retient 2,59 millions de tokens de conversation, contre 1,25 million pour Qwen.</p><h2>Vitesse</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10/02-decode-by-streams.png" alt="Tokens écrits par seconde sur un GB10, d&#x27;une à seize requêtes simultanées : Qwen3.6 35B-A3B de 117 à 486, Kolibri-1 NVFP4 de 53 à 290, Kolibri-1 Q4_K_M sur llama.cpp de 64 à 228, Kolibri-1 FP8 de 49 à 161." loading="lazy"/><figcaption>Tokens écrits par seconde sur un GB10, d&#x27;une à seize requêtes simultanées : Qwen3.6 35B-A3B de 117 à 486, Kolibri-1 NVFP4 de 53 à 290, Kolibri-1 Q4_K_M sur llama.cpp de 64 à 228, Kolibri-1 FP8 de 49 à 161.</figcaption></figure><p>Qwen est de 1,6 à 2,2 fois plus rapide, quelle que soit la charge. Il le doit en partie à une fonction que Kolibri-1 n&#x27;a pas : Qwen est livré avec un petit assistant qui rédige les prochains tokens pour que le modèle principal les vérifie, ce qui lui fait gagner moitié plus de vitesse sur cette machine. Sans cet assistant, Qwen écrivait 75 tokens par seconde pour une requête seule, ce qui reste au-dessus des 53 de Kolibri-1.</p><p>Pour un utilisateur seul, une réponse type à l&#x27;un de nos problèmes de programmation prenait 37 secondes à Qwen. Le même problème en demandait environ 91 à Kolibri-1.</p><p>Pour la lecture du prompt, les deux modèles font jeu égal. Sur vLLM, l&#x27;un comme l&#x27;autre lit un prompt de 12 000 tokens à un rythme de 6 400 à 6 800 tokens par seconde.</p><p>La version GGUF, sur un autre moteur, se comporte tout autrement. Seule, c&#x27;est le Kolibri-1 le plus rapide, avec 64 tokens par seconde. Elle partage mal la machine, avec des totaux irréguliers entre deux et huit requêtes, et elle lit un prompt trois fois moins vite. Sur vLLM, passer de 8 à 4 bits a aussi accéléré Kolibri-1, jusqu&#x27;à 80 % sous charge.</p><h2>Qualité</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/kolibri-1-vs-qwen3-6-35b-a3b-on-a-gb10/03-coding-problems.png" alt="Problèmes de programmation résolus sur 50 : Qwen3.6 35B-A3B 33, Kolibri-1 NVFP4 29, Kolibri-1 Q4_K_M 32, Kolibri-1 FP8 31. Tokens écrits pour y répondre : 262 000, 337 000, 438 000 et 412 000." loading="lazy"/><figcaption>Problèmes de programmation résolus sur 50 : Qwen3.6 35B-A3B 33, Kolibri-1 NVFP4 29, Kolibri-1 Q4_K_M 32, Kolibri-1 FP8 31. Tokens écrits pour y répondre : 262 000, 337 000, 438 000 et 412 000.</figcaption></figure><p>Nous soumettons les mêmes 50 problèmes de BigCodeBench à chaque modèle que nous étudions : le modèle écrit une fonction Python, puis cette fonction est exécutée contre des tests. Qwen en a résolu 33, comme sur notre propre machine en août.</p><p>Kolibri-1 en a résolu 32 dans la version Q4_K_M, 29 en NVFP4 et 31 en FP8. Les modèles s&#x27;accordent sur la plupart des problèmes : Q4_K_M et Qwen ont donné le même résultat pour 47 des 50. Sur 50 problèmes, aucun de ces écarts n&#x27;est statistiquement significatif.</p><p>Kolibri-1 réfléchit plus longtemps pour y arriver. Pour les mêmes 50 réponses, il a écrit de 1,3 à 1,7 fois plus de tokens que Qwen. Or ce sont les tokens qu&#x27;un client paie, et ce sont eux qu&#x27;il attend.</p><p>Nous avons aussi caché une phrase dans des documents allant jusqu&#x27;à 220 000 tokens, puis demandé au modèle de la retrouver. Chaque modèle y est parvenu chaque fois qu&#x27;il est allé au bout de sa réponse. Quatre fois sur quarante-huit, un modèle a épuisé en raisonnement tout le budget alloué à la réponse : Qwen une fois, Kolibri-1 trois fois.</p><p>Les résultats publiés par Aleph Alpha vont dans le même sens. Ils placent Kolibri-1 légèrement devant Qwen3.6 35B-A3B dans une épreuve de programmation, et derrière lui dans une autre.</p><h2>Ce que nous ne pouvons pas vous dire</h2><ul><li>Ce que vaut Kolibri-1 en allemand. C&#x27;est sa première langue et son principal argument, et nous ne l&#x27;avons pas testée. Nous n&#x27;avons pas testé le français non plus.</li><li>Si un écart de quelques problèmes est réel. Pour détecter une différence aussi faible, il en faudrait plusieurs centaines.</li><li>Comment se comporterait une version officielle à 4 bits. Les deux que nous avons testées viennent de la communauté, sans le concours d&#x27;Aleph Alpha.</li><li>Ce que fait Kolibri-1 au-delà de 262 144 tokens. Aleph Alpha le valide jusqu&#x27;à un million.</li><li>Ce qu&#x27;il obtient en raisonnant davantage. Nous avons laissé l&#x27;effort de raisonnement à sa valeur par défaut, alors que les résultats publiés par Aleph Alpha utilisent le réglage le plus élevé.</li></ul><h2>Ce que cela change pour CARouter</h2><p>La machine de CARouter Cloud garde Qwen3.6 35B-A3B. Pour programmer en anglais, Kolibri-1 nous a donné à peu près les mêmes réponses, avec deux fois plus de mémoire et plus de deux fois plus d&#x27;attente.</p><p>Ce verdict vaut pour une machine et pour un usage. Kolibri-1 est un modèle sous licence Apache 2.0, entraîné de zéro en Europe. Il gère les longues conversations à peu de frais, et son allemand est justement ce que nous n&#x27;avons pas mesuré. Un usage en allemand, ou un fournisseur disposant de plus de mémoire par machine, pèserait ces chiffres autrement.</p>]]></content:encoded>
</item>
<item>
<title>Qwen3.6 35B-A3B est maintenant 1,5 fois plus rapide sur CARouter Cloud</title>
<link>https://carouter.ai/fr/blog/qwen3-6-mtp-head-one-and-a-half-times-faster</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/qwen3-6-mtp-head-one-and-a-half-times-faster</guid>
<pubDate>Fri, 02 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Produit</category>
<description>Notre modèle de programmation est livré avec un assistant intégré qui rédige les prochains tokens pour que le modèle principal les vérifie. Nous l'avons activé avec une ligne de configuration : 115 tokens par seconde pour un utilisateur au lieu de 75, et 479 au lieu de 342 avec seize requêtes à la fois, sur le même DGX Spark.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/qwen3-6-mtp-head-one-and-a-half-times-faster/illustration.png" alt="Plus rapide maintenant : Qwen3.6 35B-A3B est maintenant 1,5 fois plus rapide sur CARouter Cloud. Une requête : 115 tokens par seconde, 75 avant. Seize à la fois : 479, 342 avant. Une longue réponse de code : 41 secondes, 63 avant. Coût : 2,3 Gio de mémoire." /></p><p>Il y a cinq semaines, nous avons mis un modèle plus rapide derrière le point d&#x27;accès de code de CARouter Cloud. Il contenait une fonction d&#x27;accélération que nous n&#x27;avions pas activée. C&#x27;est fait : le même modèle, sur la même machine, au même prix, écrit environ une fois et demie plus vite. Il a suffi d&#x27;une ligne de configuration.</p><p><a href="https://carouter.ai/fr/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b">L&#x27;article précédent : pourquoi nous servons désormais Qwen3.6 35B-A3B plutôt que Qwen3.8 27B.</a></p><h2>En bref</h2><ul><li><strong>Ce que voit un client.</strong> 115 tokens par seconde au lieu de 75. Une longue réponse de code arrive en 41 secondes au lieu de 63.</li><li><strong>Ce que nous avons changé.</strong> Une ligne. Elle active un petit assistant déjà présent dans le fichier du modèle, qui rédige les trois prochains tokens pour que le modèle principal les vérifie.</li><li><strong>Quand la machine est occupée.</strong> Avec seize requêtes à la fois, 479 tokens par seconde au total au lieu de 342.</li><li><strong>Ce que ça coûte.</strong> 2,3 Gio de mémoire sur 121. Aucun nouveau matériel, aucun nouveau téléchargement.</li><li><strong>Comment nous l&#x27;avons testé.</strong> Sur une machine identique louée, pour 1,03 dollar américain. La production a redémarré une seule fois, pendant six minutes.</li></ul><h2>Un assistant qui rédige, un modèle qui vérifie</h2><p>Un modèle de langage écrit un token à la fois, un token étant un mot ou un morceau de mot. Chaque token coûte un passage complet du modèle.</p><p>Avec le décodage spéculatif, un petit assistant rédige les quelques tokens suivants et le grand modèle les vérifie tous en un seul passage. Il garde ceux avec lesquels il est d&#x27;accord et réécrit le premier qui ne lui convient pas. Le grand modèle a le dernier mot sur chaque token : l&#x27;assistant fait gagner du temps sans faire baisser la qualité.</p><p>Qwen3.6 35B-A3B est livré avec un tel assistant dans son propre fichier, appelé tête de prédiction multi-tokens. Il nous avait échappé quand nous avons évalué le modèle en août.</p><h2>Ce que nous avons mesuré</h2><p>Même machine, même fichier de modèle, même budget de mémoire. Nous avons mesuré, redémarré le point d&#x27;accès une fois avec l&#x27;assistant activé, puis mesuré de nouveau le même soir.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-mtp-head-one-and-a-half-times-faster/01-decode-by-streams.png" alt="Tokens écrits par seconde sur un DGX Spark, avec et sans l&#x27;assistant : 115 contre 75 pour une requête, 479 contre 342 pour seize." loading="lazy"/><figcaption>Tokens écrits par seconde sur un DGX Spark, avec et sans l&#x27;assistant : 115 contre 75 pour une requête, 479 contre 342 pour seize.</figcaption></figure><p>L&#x27;assistant rédige trois tokens à la fois, et environ sept sur dix sont acceptés. Chaque passage produit environ trois tokens au lieu d&#x27;un et coûte environ deux fois plus cher : cela donne une fois et demie plus vite.</p><p>Le gain est de 1,53 fois pour un utilisateur et de 1,40 fois pour seize. Dans tout ce que nous avons mesuré, il reste entre 1,35 et 1,58 fois.</p><h2>Ce que cela change pour la personne qui attend</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-mtp-head-one-and-a-half-times-faster/02-seconds-to-answer.png" alt="Secondes avant que la réponse soit complète, sans l&#x27;assistant et avec lui : 63 et 41 pour une longue réponse de code." loading="lazy"/><figcaption>Secondes avant que la réponse soit complète, sans l&#x27;assistant et avec lui : 63 et 41 pour une longue réponse de code.</figcaption></figure><p>Une réponse courte arrive deux secondes plus tôt, une longue réponse de code vingt-deux secondes plus tôt. Quand huit personnes utilisent le point d&#x27;accès, chacune reçoit cette longue réponse en 99 secondes au lieu de 145.</p><p>Un agent de programmation appelle le modèle des centaines de fois pour une seule tâche. Un tiers d&#x27;attente en moins à chaque appel, cela finit par compter.</p><h2>Ce que ça coûte</h2><p>Le point d&#x27;accès occupe 2,3 Gio de mémoire de plus, que la machine avait en réserve. La lecture du prompt est 1 % plus lente.</p><p>Il retient aussi un peu moins de conversation à la fois : 4,8 conversations de longueur maximale au lieu de 5,5. Notre trafic est bien en dessous, et nous n&#x27;avons changé aucune limite.</p><h2>Comment nous l&#x27;avons testé sans rien éteindre</h2><p>Chaque redémarrage du point d&#x27;accès de code représente six minutes pendant lesquelles il ne répond à personne. Essayer chaque réglage en production en aurait demandé quatre.</p><p>Nous avons donc loué à l&#x27;heure une machine dotée de la même puce, et nous y avons fait tourner notre propre logiciel sans rien changer. Nous avons essayé l&#x27;assistant avec un, deux et trois tokens. Trois l&#x27;a emporté, et la soirée a coûté 1,03 dollar américain.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-mtp-head-one-and-a-half-times-faster/03-rehearsal-predicted-production.png" alt="Gain de vitesse du point d&#x27;accès avec l&#x27;assistant, sur la machine louée et sur la nôtre : entre 1,40 et 1,62 fois sur les deux." loading="lazy"/><figcaption>Gain de vitesse du point d&#x27;accès avec l&#x27;assistant, sur la machine louée et sur la nôtre : entre 1,40 et 1,62 fois sur les deux.</figcaption></figure><p>Nous avons ensuite changé une ligne en production et redémarré une seule fois. La machine louée avait prédit le résultat à quelques pour cent près.</p><h2>Ce que nous ne pouvons pas vous dire</h2><p>Nous n&#x27;avons pas refait le banc d&#x27;essai de programmation. Le grand modèle décide toujours de chaque token, et nous avons vérifié que la conversation, le raisonnement, les appels d&#x27;outils et les images fonctionnent encore.</p><p>Nous ne pouvons pas montrer deux réponses identiques. Même en supprimant tout hasard, ce logiciel ne se répète pas toujours, avec l&#x27;assistant ou sans lui. Nous n&#x27;avons trouvé aucune différence causée par l&#x27;assistant, et nous ne pouvons pas prouver qu&#x27;il n&#x27;y en a aucune.</p><p>Il reste une option plus rapide : une routine de calcul écrite pour cette puce. Elle a des défauts ouverts dans le logiciel dont nous dépendons, et nous ne l&#x27;utilisons donc pas.</p><h2>Ce qui tourne maintenant</h2><p>Qwen3.6 35B-A3B avec son assistant de prédiction, sur le même GB10, sous le même nom, qwen3.6-35b-a3b, au même prix. Le contexte, les images, les outils et le raisonnement sont inchangés.</p>]]></content:encoded>
</item>
<item>
<title>Une tarification qui a du sens</title>
<link>https://carouter.ai/fr/blog/models-pricing-that-makes-sense</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/models-pricing-that-makes-sense</guid>
<pubDate>Thu, 01 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Produit</category>
<description>Pour les modèles que nous hébergeons nous-mêmes, nos prix reposent sur une référence de marché ajustée pour la souveraineté, des hypothèses de coûts explicites et une capacité à investir pendant que la demande grandit. La tarification des autres fournisseurs reste inchangée.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/models-pricing-that-makes-sense/illustration.png" alt="Tarification de CARouter Cloud : les offres comparables, ajustées pour la souveraineté, donnent la référence de marché. Les scénarios de coûts servent à évaluer la viabilité, et les révisions trimestrielles ne changent pas automatiquement les prix." /></p><p>Cette politique concerne uniquement les modèles que nous hébergeons nous-mêmes dans CARouter Cloud. Pour les modèles servis par d’autres fournisseurs, vous continuez de payer leur tarif publié, converti en dollars canadiens, auquel s’ajoute la majoration de votre forfait. Cette politique ne change pas leur tarification.</p><p>Nous voulons une méthode cohérente pour fixer les prix des modèles offerts aujourd’hui et de ceux qui s’ajouteront. Une référence de marché guide le positionnement de chaque offre, les coûts estimés nous aident à en évaluer la viabilité et des décisions explicites encadrent les tarifs de lancement pendant que la demande grandit.</p><h2>Ce que nous appelons la référence de marché</h2><p>La référence de marché porte sur l’hébergement des mêmes poids de modèle. Par défaut, nous partons de la moyenne des offres admissibles sur OpenRouter, convertie en dollars canadiens, puis nous ajoutons une majoration de 10 % pour une inférence opérée au Canada par une entreprise canadienne. Cette comparaison concerne l’hébergement des modèles; le routage et les services de notre plateforme sont tarifés séparément.</p><p>Pour estimer cette majoration, nous accordons le même poids aux observations tarifaires retenues chez Google Cloud, OUTSCALE, Microsoft Azure et AWS : (5 % + 20 % + 0 % + environ 15 %) / 4 = environ 10 %.</p><div class="table-wrap blog-table-wrap" role="region" aria-label="Offre retenue" tabindex="0"><table class="data"><thead><tr><th scope="col">Offre retenue</th><th scope="col" class="num">Majoration retenue</th></tr></thead><tbody><tr><td><a href="https://cloud.google.com/assured-workloads/pricing">Google Cloud — EU Data Boundary and Support</a></td><td class="num">5%</td></tr><tr><td><a href="https://en.outscale.com/pricing/">OUTSCALE — mémoire vive et GPU H100, région secteur public comparée à la région européenne ordinaire</a></td><td class="num">20%</td></tr><tr><td><a href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/sovereignty/executive-strategy#5-what-does-sovereignty-cost">Microsoft Azure — Sovereign Public Cloud, majoration de base</a></td><td class="num">0%</td></tr><tr><td><a href="https://www.tecracer.com/blog/2026/01/aws-european-sovereign-cloud-esc-launch-pricing-and-whats-next.html">AWS — European Sovereign Cloud comparé à Francfort, estimation de janvier 2026</a></td><td class="num">~15 %</td></tr></tbody></table></div><p>Il s’agit de notre référence fondée sur les offres retenues. Leurs garanties diffèrent, et la moyenne exclut les taxes, les abonnements de soutien distincts et les services de sécurité supplémentaires. Le zéro d’Azure concerne la majoration de base, et non le coût total d’un déploiement souverain. L’estimation pour AWS vient de la comparaison avec Francfort publiée par tecRacer en janvier 2026, après conversion des devises; nous ne l’avons pas actualisée de façon indépendante. Nous retenons 10 % comme hypothèse initiale de positionnement et réexaminons ce choix chaque trimestre.</p><p>Ces tarifs d’infrastructure et de contrôles ne supposent ni des certifications équivalentes ni un service de routage canadien équivalent. Le choix des offres change la moyenne : avec un ensemble de contrôles réglementaires de Google à 20 %, elle serait d’environ 13,75 %. Notre hypothèse de départ retient plutôt son offre régionale de résidence des données et de soutien.</p><p>Nous comparons le contexte, la performance, le cache, la disponibilité et la résidence des données. Si une offre présente déjà des garanties de souveraineté comparables, nous utilisons son tarif sans ajouter cette majoration une seconde fois.</p><p>La majoration de souveraineté fait partie du tarif de base de l’inférence CARouter Cloud. Celle de votre forfait s’ajoute séparément pour le routage, la facturation et l’exploitation de la plateforme.</p><h2>Quand il n’existe pas d’offre comparable</h2><p>Nous estimons un tarif de départ à partir de la capacité réservée par le modèle et du travail qu’il effectue : mémoire, débit mesuré, matériel, hébergement et électricité. Nous appliquons un objectif commun de contribution, puis nous comparons le résultat aux autres façons d’accomplir la même tâche.</p><p>Le coût par token dépend du taux d’utilisation de la capacité. Notre hypothèse initiale est de 10 %. Nous examinons aussi des scénarios à 5 % et à 20 %, en conservant les mêmes prix de vente. Ce sont des hypothèses de planification; les coûts réels par token dépendent des charges de travail et de l’utilisation mesurée.</p><h2>Investir pendant que la demande grandit</h2><p>Comme entreprise en démarrage, nous pouvons choisir un tarif de lancement inférieur au coût estimé d’un service viable. Nous consignons la raison, fixons une date de révision et prévoyons un budget pour la capacité dont les coûts ne sont pas encore couverts. Une machine peu utilisée ne rend pas automatiquement votre prochaine requête plus chère.</p><p>Lorsqu’un déploiement coûte trop cher, nous pouvons regrouper davantage de requêtes, réduire la mémoire réservée ou changer de matériel. Nous évaluons ces possibilités en même temps que le prix. Le service doit rester intéressant au tarif payé par les clients.</p><h2>Ce que cela change sur votre facture</h2><p>Nous fixons ensemble les tarifs des tokens entrants, des tokens entrants en cache et des tokens sortants. Réutiliser un prompt en cache évite de le traiter à nouveau : les tokens dont la réutilisation est confirmée bénéficient donc d’un rabais. La génération de la réponse continue de mobiliser des ressources de calcul.</p><p>L’effet dépend de votre utilisation. Les conversations et les agents qui réemploient le même contexte peuvent profiter du rabais sur le cache. Les tâches qui produisent de longues réponses avec peu de cache peuvent coûter plus cher. Avant de modifier les tarifs, nous vérifions des requêtes représentatives et l’utilisation existante.</p><h2>Exemple : Qwen3.6 35B A3B</h2><p>Dans notre relevé du 1er octobre 2026, nous convertissons les tarifs moyens d’OpenRouter en dollars canadiens au taux de 1,4243, puis nous appliquons la majoration de souveraineté de 10 % et arrondissons à quatre décimales. Ces tarifs illustratifs sont en dollars canadiens par million de tokens, avant la majoration du forfait.</p><div class="table-wrap blog-table-wrap" role="region" aria-label="Exemple : Qwen3.6 35B A3B" tabindex="0"><table class="data"><thead><tr><th scope="col">Étape du calcul</th><th scope="col" class="num">Entrée hors cache</th><th scope="col" class="num">Entrée en cache</th><th scope="col" class="num">Sortie générée</th></tr></thead><tbody><tr><td>Référence d’hébergement en CAD</td><td class="num">0.2178</td><td class="num">0.0943</td><td class="num">1.5800</td></tr><tr><td>Tarif de base après la majoration de 10 %</td><td class="num">0.2396</td><td class="num">0.1037</td><td class="num">1.7380</td></tr></tbody></table></div><p>Pour un prompt de 12 000 tokens et une réponse de 100 tokens, le coût est de 0,003049 $ CA sans cache, ou d’environ 0,001554 $ CA si 11 000 tokens du prompt sont confirmés en cache, avant la majoration du forfait et l’arrondi de facturation.</p><p>Nous vérifions aussi la viabilité : avec une utilisation de 10 % dans notre scénario de colocation, le coût estimé par million de tokens est de 0,0804 $ CA pour l’entrée hors cache, de 0,0031 $ pour l’entrée en cache et de 1,4897 $ pour la sortie. Ces estimations excluent les frais généraux de l’entreprise; lorsque la demande est plus faible, les coûts de capacité non couverts font partie de notre budget de lancement.</p><p><a href="https://carouter.ai/docs">Consultez les tarifs en vigueur dans la documentation.</a></p><h2>Des révisions trimestrielles et des changements annoncés</h2><p>Tous les trois mois, nous réexaminons les références de marché, les coûts du service, la performance et la demande. Nous pouvons décider de conserver les prix. Une révision ne modifie pas automatiquement le tarif de vos requêtes.</p><p>Nous annonçons les hausses aux clients concernés avant leur entrée en vigueur, avec une date d’application et une estimation fondée sur leur utilisation. Les baisses peuvent s’appliquer immédiatement. La documentation est générée à partir du catalogue utilisé pour la facturation : c’est là que vous trouverez les tarifs applicables.</p>]]></content:encoded>
</item>
<item>
<title>Clef et Strands Decider contre Kev-4B : benchmark sur un GB10</title>
<link>https://carouter.ai/fr/blog/clef-strands-decider-vs-kev</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/clef-strands-decider-vs-kev</guid>
<pubDate>Thu, 01 Oct 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Clef, de Cloudflare, et Strands Decider, de Strands Labs, sont deux nouveaux modèles de décision ouverts. Sur un GB10, Clef a reconnu le bon type de tâche sur 94,5 % de nos 328 requêtes, contre 92,4 % pour Kev-4B, pour cinq fois plus de temps et près de quatre fois plus de mémoire. Le Qwen3.5-4B d'OpenJev, sans entraînement, reste en tête à 97,0 %.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/clef-strands-decider-vs-kev/illustration.png" alt="Recherche : Clef et Strands Decider contre Kev-4B, benchmark sur un GB10. Type de tâche bien reconnu sur nos 328 requêtes : Clef 94,5 % en 562 ms et 52 Go, Clef-flash 89,6 % en 173 ms et 18 Go, Kev-4B 92,4 % en 101 ms et 14 Go, Strands Decider 87,2 % en 108 ms et 4 Go. Le Qwen3.5-4B d'OpenJev, sans entraînement, reste en tête à 97,0 %, en 192 ms et 9 Go." /></p><p>Deux nouveaux modèles de décision ouverts viennent de sortir. Cloudflare a publié Clef et son petit frère Clef-flash, et Strands Labs a publié Strands Decider. Comme Jev et Kev, tous trois répondent à des questions typées sur un texte.</p><p>Nous les avons passés sur nos deux benchmarks à côté de Kev, sur un GB10 de NVIDIA, la machine qui sert Kev-4B à l&#x27;adresse /v1/decisions. Nous avons mesuré la justesse de chacun, la fréquence de ses erreurs commises avec assurance, le temps d&#x27;une décision et la mémoire qu&#x27;il occupe.</p><p><a href="https://carouter.ai/fr/blog/jev-kev-laya-decision-models">Lire le premier benchmark.</a> <a href="https://carouter.ai/fr/blog/kev-available-on-carouter">Lire le deuxième, paru avec le lancement de Kev.</a> <a href="https://carouter.ai/fr/blog/openjev-vs-kev">Lire le troisième, sur OpenJev.</a></p><h2>En bref</h2><ul><li><strong>Sur nos requêtes.</strong> Clef a reconnu le bon type de tâche sur 94,5 % de nos 328 requêtes, contre 92,4 % pour Kev-4B, 89,6 % pour Clef-flash et 87,2 % pour Strands Decider.</li><li><strong>Là où Clef prend l&#x27;avantage.</strong> L&#x27;écart est de sept requêtes, et il vient des étapes d&#x27;agent : Clef en a reconnu 28 sur 32, Kev-4B 16. Or CARouter reconnaît une étape d&#x27;agent à la requête elle-même. Notés de cette façon, Kev-4B est à 97,3 % et Clef à 95,7 %.</li><li><strong>Sur les requêtes publiques.</strong> Les trois nouveaux venus atteignent de 80 à 82 % en anglais, à égalité avec Jev, le service hébergé, et devant Kev-4B, à 76 %. En français, Clef-flash arrive en tête à 78 % et Strands Decider tombe à 68 %.</li><li><strong>L&#x27;assurance.</strong> Sur les requêtes publiques, Clef et Clef-flash se sont trompés en étant sûrs d&#x27;eux à 90 % ou plus sur 8 % et 9 % des requêtes, contre 12 % pour Jev, 3 % pour Kev-4B et 0,2 % pour Strands Decider.</li><li><strong>Vitesse.</strong> Pour une requête courte, une décision à trois questions prend 101 millisecondes avec Kev-4B, 108 avec Strands Decider, 173 avec Clef-flash et 562 avec Clef.</li><li><strong>Mémoire.</strong> Clef occupe 52 des 121 Go du GB10, Clef-flash 18, Kev-4B 14 et Strands Decider 4.</li><li><strong>Le modèle que personne n&#x27;a entraîné.</strong> Le Qwen3.5-4B d&#x27;OpenJev, repassé sur la même machine, reste en tête sur nos requêtes : 97,0 %, en 192 millisecondes et 9 Go.</li></ul><h2>Qui sont les nouveaux venus</h2><p>Clef est la famille de modèles de décision de Cloudflare, publiée sous licence Apache 2.0, avec ses poids sur Hugging Face. Clef repose sur Qwen3.8-27B, et Clef-flash sur Qwen3.5-9B. <a href="https://blog.cloudflare.com/clef-decision-models/" target="_blank" rel="noreferrer">L&#x27;annonce de Cloudflare.</a> <a href="https://huggingface.co/Cloudflare/clef" target="_blank" rel="noreferrer">Les poids de Clef.</a></p><p>Cloudflare a ajouté une petite tête au-dessus de chaque modèle de conversation. Elle lit la dernière couche du modèle et note en un seul passage chaque option de chaque question. Clef accepte la même requête que Jev. Il sait aussi lire des images et de la vidéo, ce que nous n&#x27;avons pas testé.</p><p>Strands Decider vient de Strands Labs, le volet expérimental du projet Strands Agents, lui aussi sous licence Apache 2.0. Il compte 1,9 milliard de paramètres : un adaptateur et une petite tête posés sur Qwen3.5-2B-Base. Kev est construit de la même façon, et cette base se situe entre celles de Kev-0.8B et de Kev-4B. <a href="https://github.com/strands-labs/strands-decider" target="_blank" rel="noreferrer">Code source.</a></p><p>Les trois ne lisent pas la même longueur de texte. La fenêtre de Strands Decider est de 4 096 tokens, celle de Kev de 8 192 tel que nous le servons, et celle de Clef de 16 384 tel qu&#x27;il est publié. Clef et Strands Decider coupent un texte trop long et n&#x27;en gardent que le début ; notre moteur Kev, lui, refuse la requête. Aucune de nos requêtes de test n&#x27;a atteint ces limites.</p><h2>Comment nous avons testé</h2><p>La machine de test est un GB10, le même modèle que celle qui sert Kev, avec 121 Go de mémoire que se partagent le processeur et le GPU. Chaque modèle y a tourné seul, une requête à la fois, avec le code de ses auteurs. Kev a tourné comme notre serveur le fait tourner.</p><p>Les deux benchmarks sont ceux des articles précédents. Sur les 1 020 requêtes publiques, chaque modèle répond à une seule question, avec neuf types de tâche. Sur nos 328 requêtes, il répond à trois questions : le type de tâche, sa difficulté, et si la réponse sera longue.</p><p>Un seul script a noté tous les modèles : celui de l&#x27;article précédent. Avant de noter quoi que ce soit de nouveau, il recalcule les chiffres publiés dans les articles précédents, et s&#x27;arrête si un seul diffère.</p><p>Nous avons vérifié notre montage de trois façons. Sur l&#x27;exemple de sa propre fiche, Strands Decider a donné les réponses qui y sont publiées, à 0,004 près. OpenJev a donné la réponse publiée par ses auteurs sur ses 144 décisions de test. Enfin, sur la machine de test, Kev-4B a choisi la même réponse qu&#x27;en production pour 1 015 des 1 020 requêtes publiques et pour 327 de nos 328 requêtes.</p><p>Cloudflare ne publie pas les réponses de Clef une à une : nous n&#x27;avons donc pas pu le vérifier de la même façon. Il s&#x27;est chargé comme le décrit sa fiche, et ses réponses aux exemples de cette fiche sont sensées.</p><p>Jev est un service hébergé payant, que nous n&#x27;avons pas rappelé. Ses chiffres sur les requêtes publiques sont ceux du premier benchmark, et il n&#x27;a jamais été passé sur nos requêtes.</p><p>Une chose a changé depuis l&#x27;article sur OpenJev. Nous avons reformulé deux options de la question sur le type de tâche, la conversation et la recherche. Une étape d&#x27;agent montre aussi désormais la tâche demandée par l&#x27;utilisateur, à côté du résultat de l&#x27;outil. Tous les modèles ont répondu ici à cette nouvelle formulation.</p><p>Les chiffres de cet article sur nos requêtes répondaient à l&#x27;ancienne formulation, et ne se comparent pas à ceux-ci. Avec la nouvelle, Kev-4B est passé de 88,7 % à 92,4 %, et le Qwen3.5-4B d&#x27;OpenJev de 95,7 % à 97,0 %.</p><h2>Ce que nous avons trouvé : la justesse</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/clef-strands-decider-vs-kev/01-accuracy-both-benchmarks.png" alt="Type de tâche bien reconnu, en anglais et en français. Sur les 1 020 requêtes publiques : Jev 81 % et 76 %, Kev-9B 74 % et 67 %, Kev-4B 76 % et 70 %, Kev-0.8B 70 % et 64 %, OpenJev Qwen3.5-4B 79 % et 81 %, Strands Decider 80 % et 68 %, Clef-flash 82 % et 78 %, Clef 82 % et 76 %. Sur nos 328 requêtes : Kev-4B 93 % et 92 %, Kev-0.8B 80 % et 81 %, OpenJev Qwen3.5-4B 97 % et 97 %, Strands Decider 89 % et 85 %, Clef-flash 90 % et 90 %, Clef 95 % et 94 %. Jev et Kev-9B n&#x27;ont pas été passés sur nos requêtes." loading="lazy"/><figcaption>Type de tâche bien reconnu, en anglais et en français. Sur les 1 020 requêtes publiques : Jev 81 % et 76 %, Kev-9B 74 % et 67 %, Kev-4B 76 % et 70 %, Kev-0.8B 70 % et 64 %, OpenJev Qwen3.5-4B 79 % et 81 %, Strands Decider 80 % et 68 %, Clef-flash 82 % et 78 %, Clef 82 % et 76 %. Sur nos 328 requêtes : Kev-4B 93 % et 92 %, Kev-0.8B 80 % et 81 %, OpenJev Qwen3.5-4B 97 % et 97 %, Strands Decider 89 % et 85 %, Clef-flash 90 % et 90 %, Clef 95 % et 94 %. Jev et Kev-9B n&#x27;ont pas été passés sur nos requêtes.</figcaption></figure><p>Sur nos requêtes, Clef est le plus juste des modèles entraînés : 310 bonnes réponses sur 328, contre 303 pour Kev-4B. Clef-flash en obtient 294, et Strands Decider 286.</p><p>Sur les requêtes publiques, l&#x27;ordre change. Clef-flash, Clef et Strands Decider atteignent 82 %, 82 % et 80 % en anglais, autour des 81 % de Jev, le service hébergé. Kev-4B reste à 76 %.</p><p>Le français les départage. Clef-flash garde 78 % et Clef 76 %, comme Jev. Strands Decider recule à 68 %, sous les 70 % de Kev-4B. Sur nos requêtes, il perd moins : 89 % en anglais et 85 % en français.</p><div class="clef-table" role="region" aria-label="Tous les modèles sur les deux benchmarks, et sur le GB10" tabindex="0"><table><caption>Tous les modèles sur les deux benchmarks, et sur le GB10</caption><thead><tr><th scope="col">Modèle</th><th scope="col">Requêtes publiques, anglais</th><th scope="col">Requêtes publiques, français</th><th scope="col">Erreurs assurées, publiques, anglais</th><th scope="col">Nos 328 requêtes</th><th scope="col">Décision courte</th><th scope="col">Mémoire</th></tr></thead><tbody><tr><th scope="row">Jev (hosted)</th><td>80,9 %</td><td>76,0 %</td><td>11,7 %</td><td class="none">non testé</td><td class="none">non testé</td><td class="none">non testé</td></tr><tr><th scope="row">Kev-9B</th><td>74,3 %</td><td>66,5 %</td><td>4,8 %</td><td class="none">non testé</td><td class="none">non testé</td><td class="none">non testé</td></tr><tr class="lead"><th scope="row">Kev-4B</th><td>75,7 %</td><td>69,8 %</td><td>3,3 %</td><td>92,4 %</td><td>101 ms</td><td>14 Go</td></tr><tr><th scope="row">Kev-0.8B</th><td>69,6 %</td><td>63,7 %</td><td>0,0 %</td><td>80,2 %</td><td>23 ms</td><td>4 Go</td></tr><tr><th scope="row">OpenJev Qwen3.5-4B</th><td>79,3 %</td><td>80,8 %</td><td>19,3 %</td><td>97,0 %</td><td>192 ms</td><td>9 Go</td></tr><tr><th scope="row">Strands Decider 2B</th><td>80,4 %</td><td>67,7 %</td><td>0,2 %</td><td>87,2 %</td><td>108 ms</td><td>4 Go</td></tr><tr><th scope="row">Clef-flash (9B)</th><td>82,0 %</td><td>77,9 %</td><td>8,9 %</td><td>89,6 %</td><td>173 ms</td><td>18 Go</td></tr><tr class="lead"><th scope="row">Clef (27B)</th><td>81,9 %</td><td>75,8 %</td><td>8,1 %</td><td>94,5 %</td><td>562 ms</td><td>52 Go</td></tr></tbody></table></div><p>Nous avons rédigé les questions posées sur nos requêtes avec les réponses de Kev-4B sous les yeux, sur les trois cinquièmes des requêtes. Sur les 137 requêtes mises de côté, l&#x27;ordre reste le même : OpenJev 98,5 %, Clef 95,6 %, Kev-4B 93,4 %, Clef-flash 91,2 % et Strands Decider 88,3 %.</p><h2>D&#x27;où viennent les écarts</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/clef-strands-decider-vs-kev/03-by-kind.png" alt="Type de tâche bien reconnu sur nos 328 requêtes, type par type, pour Kev-4B, OpenJev Qwen3.5-4B, Strands Decider, Clef-flash et Clef. Conversation : 87 %, 100 %, 57 %, 93 % et 83 %. Étape d&#x27;agent : 50 %, 94 %, 59 %, 44 % et 88 %. Recherche : 82 %, 75 %, 89 %, 50 % et 71 %. Résumé : 100 %, 100 %, 95 %, 100 % et 100 %. Extraction : 100 %, 97 %, 63 %, 100 % et 97 %. Les cinq atteignent 100 % sur le code, les mathématiques, la rédaction d&#x27;affaires et la traduction." loading="lazy"/><figcaption>Type de tâche bien reconnu sur nos 328 requêtes, type par type, pour Kev-4B, OpenJev Qwen3.5-4B, Strands Decider, Clef-flash et Clef. Conversation : 87 %, 100 %, 57 %, 93 % et 83 %. Étape d&#x27;agent : 50 %, 94 %, 59 %, 44 % et 88 %. Recherche : 82 %, 75 %, 89 %, 50 % et 71 %. Résumé : 100 %, 100 %, 95 %, 100 % et 100 %. Extraction : 100 %, 97 %, 63 %, 100 % et 97 %. Les cinq atteignent 100 % sur le code, les mathématiques, la rédaction d&#x27;affaires et la traduction.</figcaption></figure><p>Tous les modèles font un sans-faute sur le code, les mathématiques, la rédaction d&#x27;affaires et la traduction. Les écarts tiennent à trois types de requêtes : les étapes d&#x27;agent, la conversation courante et la recherche.</p><p>C&#x27;est sur les étapes d&#x27;agent que Clef prend l&#x27;avantage. Il en a reconnu 28 sur 32, quand Strands Decider en reconnaît 19, Kev-4B 16 et Clef-flash 14. Le dernier message d&#x27;une étape d&#x27;agent est le résultat d&#x27;un outil, qui ressemble à du code ou à une page web.</p><p>C&#x27;est aussi le seul type que CARouter ne demande pas à un modèle. Une requête qui contient des définitions d&#x27;outils est une étape d&#x27;agent, et notre plateforme le voit comme elle voit la langue. Notés de cette façon, Kev-4B reconnaît 97,3 % des requêtes, Clef 95,7 %, Clef-flash 95,1 % et Strands Decider 91,2 %.</p><p>En recherche, Strands Decider et Kev-4B font mieux que les deux modèles Clef : 89 % et 82 %, contre 71 % pour Clef et 50 % pour Clef-flash, qui range une requête de recherche dans l&#x27;extraction ou le résumé. Les points faibles de Strands Decider sont la conversation, à 57 %, et l&#x27;extraction, à 63 %.</p><h2>Ce que nous avons trouvé : l&#x27;assurance</h2><p>Un modèle qui décide à la place de quelqu&#x27;un ne devrait agir que lorsqu&#x27;il est sûr de lui. Nous comptons donc les réponses fausses que chacun donne avec au moins 90 % d&#x27;assurance.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/clef-strands-decider-vs-kev/02-confidence.png" alt="L&#x27;assurance sur les deux benchmarks. Sur les requêtes publiques en anglais, justesse et réponses fausses données avec 90 % de confiance ou plus : Jev 81 % de réponses justes et 12 % d&#x27;erreurs assurées, Kev-9B 74 % et 5 %, Kev-4B 76 % et 3 %, Kev-0.8B 70 % et 0 %, OpenJev Qwen3.5-4B 79 % et 19 %, Strands Decider 80 % et 0,2 %, Clef-flash 82 % et 9 %, Clef 82 % et 8 %. Sur nos 328 requêtes, réponses données avec 90 % de confiance ou plus : Kev-4B 187, aucune fausse ; Kev-0.8B 2, aucune fausse ; OpenJev Qwen3.5-4B 292, dont 4 fausses ; Strands Decider 131, aucune fausse ; Clef-flash 227, dont 2 fausses ; Clef 213, aucune fausse." loading="lazy"/><figcaption>L&#x27;assurance sur les deux benchmarks. Sur les requêtes publiques en anglais, justesse et réponses fausses données avec 90 % de confiance ou plus : Jev 81 % de réponses justes et 12 % d&#x27;erreurs assurées, Kev-9B 74 % et 5 %, Kev-4B 76 % et 3 %, Kev-0.8B 70 % et 0 %, OpenJev Qwen3.5-4B 79 % et 19 %, Strands Decider 80 % et 0,2 %, Clef-flash 82 % et 9 %, Clef 82 % et 8 %. Sur nos 328 requêtes, réponses données avec 90 % de confiance ou plus : Kev-4B 187, aucune fausse ; Kev-0.8B 2, aucune fausse ; OpenJev Qwen3.5-4B 292, dont 4 fausses ; Strands Decider 131, aucune fausse ; Clef-flash 227, dont 2 fausses ; Clef 213, aucune fausse.</figcaption></figure><p>Sur les requêtes publiques, Clef et Clef-flash se trompent avec assurance sur 8 % et 9 % des requêtes en anglais. C&#x27;est mieux que Jev, à 12 %, et moins bien que Kev-4B, à 3 %. Strands Decider ne s&#x27;est trompé avec assurance qu&#x27;une fois sur 540 requêtes.</p><p>Sur nos requêtes, presque aucun modèle ne se trompe quand il est sûr de lui. Ce qui les distingue, c&#x27;est le nombre de fois où ils le sont. Clef-flash a donné 227 réponses à ce niveau d&#x27;assurance, dont deux fausses. Clef en a donné 213, Kev-4B 187 et Strands Decider 131, sans aucune erreur.</p><p>Chaque modèle calcule son assurance à sa façon. Kev et Strands Decider la corrigent selon le nombre d&#x27;options, alors que Clef donne la probabilité de son premier choix. Recalculée avec la formule de Kev, l&#x27;assurance de Clef atteint ce niveau pour 197 réponses, et celle de Clef-flash pour 218. L&#x27;ordre ne change pas.</p><h2>Difficulté et réponses longues</h2><p>Clef et Clef-flash sont les meilleurs pour évaluer la difficulté. Tous deux placent une requête à un niveau près du nôtre 98 % du temps, contre 90 % pour Strands Decider et 88 % pour Kev-4B. Ils tombent sur le niveau exact 46 % du temps, contre 41 % pour Kev-4B.</p><p>Dix de nos 328 requêtes demandent une réponse longue. Clef a repéré les dix, et en a signalé deux autres à tort. Kev-4B en a repéré sept, sans fausse alerte. Clef-flash a aussi trouvé les dix, avec 13 fausses alertes. Strands Decider en a trouvé huit, avec 58 fausses alertes.</p><h2>Vitesse et mémoire sur un GB10</h2><p>Nous avons chronométré la décision à trois questions des articles précédents, chaque fois sur une requête nouvelle, de la requête courte à celle de 4 000 tokens.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/clef-strands-decider-vs-kev/04-latency-memory-gb10.png" alt="Temps médian d&#x27;une décision à trois questions selon la longueur de la requête sur le GB10, en échelles logarithmiques, et mémoire occupée au maximum. Kev-0.8B : de 23 à 171 ms, 4,0 Go. Kev-4B : de 101 à 639 ms, 14,4 Go. Strands Decider : de 108 à 820 ms, 4,0 Go, sa requête la plus longue étant coupée à sa fenêtre de 4 096 tokens. Clef-flash : de 173 ms à 1,4 s, 18,4 Go. OpenJev Qwen3.5-4B : de 192 ms à 1,1 s, 8,7 Go. Clef : de 562 ms à 4,4 s, 52,1 Go. Pour comparaison, Kev-4B tel qu&#x27;il est servi en production : de 143 ms à 1 s." loading="lazy"/><figcaption>Temps médian d&#x27;une décision à trois questions selon la longueur de la requête sur le GB10, en échelles logarithmiques, et mémoire occupée au maximum. Kev-0.8B : de 23 à 171 ms, 4,0 Go. Kev-4B : de 101 à 639 ms, 14,4 Go. Strands Decider : de 108 à 820 ms, 4,0 Go, sa requête la plus longue étant coupée à sa fenêtre de 4 096 tokens. Clef-flash : de 173 ms à 1,4 s, 18,4 Go. OpenJev Qwen3.5-4B : de 192 ms à 1,1 s, 8,7 Go. Clef : de 562 ms à 4,4 s, 52,1 Go. Pour comparaison, Kev-4B tel qu&#x27;il est servi en production : de 143 ms à 1 s.</figcaption></figure><p>Kev-4B est le plus rapide des grands modèles : 101 millisecondes pour une requête courte, 639 pour une longue. Strands Decider, deux fois plus petit, prend 108 et 820 millisecondes. Le code qui sert Kev prépare ses calculs à l&#x27;avance, ce que ne fait pas le code de référence de Strands Decider.</p><p>Clef-flash prend 173 millisecondes et 1,4 seconde. Clef prend 562 millisecondes et 4,4 secondes, soit de cinq à sept fois plus que Kev-4B.</p><p>Dans ses propres tests, Cloudflare annonce un temps médian de 209 millisecondes pour Clef et de 39 pour Clef-flash. Sur le GB10, une décision à une seule question sur les requêtes publiques a pris 428 et 141 millisecondes en médiane. Un GB10 est une machine de bureau, pas un GPU de centre de données.</p><p>Sur cette machine, la mémoire compte davantage, parce que le processeur et le GPU puisent dans la même réserve. Clef en occupe 52 Go, plus des deux cinquièmes, et met environ six minutes à se charger. Clef-flash occupe 18 Go, Kev-4B 14 Go et Strands Decider 4 Go, autant que Kev-0.8B.</p><p>Ces temps sont le meilleur cas pour chaque modèle : seul sur la machine, sans réseau entre les deux. En production, Kev-4B partage son GB10 avec d&#x27;autres modèles et répond à travers une API : la même décision y prend 143 millisecondes et 1 seconde.</p><h2>Le modèle que personne n&#x27;a entraîné</h2><p>L&#x27;article précédent laissait une question ouverte : la vitesse du Qwen3.5-4B d&#x27;OpenJev sur le GPU qui sert Kev. OpenJev n&#x27;entraîne rien : il demande à un modèle de conversation ordinaire de choisir la lettre d&#x27;une option. Nous l&#x27;avons repassé sur la même machine, avec les questions reformulées.</p><p>Il reste le modèle le plus juste sur nos requêtes : 97,0 %, en anglais comme en français. Il reconnaît toutes les conversations courantes et 30 des 32 étapes d&#x27;agent. Quand les étapes d&#x27;agent sont lues dans la requête, il est à 97,6 % et Kev-4B à 97,3 % : une seule requête les sépare.</p><p>Il reste aussi le plus sûr de lui. Il a donné 292 réponses avec 90 % de confiance ou plus, dont quatre fausses. Sur les requêtes publiques, il se trompe avec assurance sur 19 % des requêtes, le chiffre le plus élevé du tableau.</p><p>Sur le GPU du GB10, sa décision à trois questions prend 192 millisecondes pour une requête courte et 1,1 seconde pour une longue, dans 9 Go. C&#x27;est environ le double de Kev-4B pour une requête courte, et plus rapide que Clef.</p><h2>Ce que cela ne prouve pas</h2><ul><li>Chaque modèle n&#x27;a tourné qu&#x27;une fois, sur deux ensembles de requêtes. Un type compte de 20 à 66 de nos requêtes : pour le plus petit, une seule erreur déplace le chiffre de cinq points.</li><li>Nous avons rédigé et étiqueté les 328 requêtes, et réglé leurs questions sur Kev-4B. Les deux benchmarks ne demandent qu&#x27;une chose : de quel type de travail relève une requête. Les tableaux de Cloudflare couvrent une quarantaine d&#x27;autres tâches, du choix d&#x27;un outil à la lecture de contrats, et placent Clef devant Jev et Kev-9B sur la plupart d&#x27;entre elles.</li><li>Clef et Strands Decider ont tourné avec le code publié par leurs auteurs. Le code qui sert Kev est optimisé pour la vitesse, et celui que Cloudflare exploite en production l&#x27;est sans doute aussi. Les écarts de temps en disent autant sur le logiciel que sur les modèles.</li><li>Nous n&#x27;avons testé que du texte. Clef lit aussi des images et de la vidéo, ce que ne fait aucun autre modèle de cet article.</li><li>Nous n&#x27;avons pas rappelé Jev. Ses chiffres viennent du premier benchmark, et il n&#x27;a jamais été passé sur nos requêtes.</li></ul><h2>Ce que cela change pour CARouter</h2><p>Kev-4B reste derrière /v1/decisions. Clef n&#x27;est plus juste sur nos requêtes que là où notre plateforme connaît déjà la réponse. Sur une machine qui sert d&#x27;autres modèles, il prendrait 52 Go et cinq fois plus de temps.</p><p>Clef-flash est le plus pratique des deux. Il arrive en tête sur les requêtes publiques dans les deux langues et évalue mieux la difficulté que Kev, pour 18 Go et moins de 200 millisecondes sur une requête courte. Mais il prend la moitié de nos requêtes de recherche pour autre chose.</p><p>Du côté des petits modèles, Strands Decider est celui à suivre. Dans les 4 Go qu&#x27;occupe Kev-0.8B, il gagne sept points de justesse sur nos requêtes et onze sur les requêtes publiques en anglais, sans jamais se tromper avec assurance sur les nôtres. Il est aussi près de cinq fois plus lent que Kev-0.8B, et moins bon en français.</p><p>La question ouverte reste celle du dernier article. Un Qwen3.5-4B que personne n&#x27;a entraîné est celui qui comprend le mieux nos requêtes, et nous savons maintenant ce qu&#x27;il coûte sur le GPU : 192 millisecondes et 9 Go. Son assurance sur d&#x27;autres types de requêtes reste à vérifier, et le test de sélection complet reste à passer avec lui.</p><p>Toutes les mesures derrière cet article sont conservées, et nous les partagerons avec quiconque le demande.</p>]]></content:encoded>
</item>
<item>
<title>OpenJev contre Kev-4B : benchmark sur plusieurs matériels CPU et GPU</title>
<link>https://carouter.ai/fr/blog/openjev-vs-kev</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/openjev-vs-kev</guid>
<pubDate>Wed, 23 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>OpenJev demande à un Qwen3.5-4B ordinaire de choisir la lettre d'une option, sans aucun entraînement pour la tâche. Sur les deux benchmarks qui nous ont fait choisir Kev-4B, il a reconnu le bon type de tâche sur 95,7 % de nos 328 requêtes, contre 88,7 % pour Kev-4B, mais il s'est trompé avec assurance bien plus souvent sur les requêtes publiques.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/openjev-vs-kev/illustration.png" alt="Recherche : OpenJev contre Kev-4B, benchmark sur plusieurs matériels CPU et GPU. Type de tâche bien reconnu sur nos 328 requêtes : 95,7 % pour OpenJev, 88,7 % pour Kev-4B. Conversation courante reconnue 97 % du temps, contre 33 %. Erreurs commises avec assurance sur les requêtes publiques : 19 %, contre 3 %." /></p><p>Kev-4B est le modèle de décision que CARouter sert à l&#x27;adresse /v1/decisions. Nous l&#x27;avons choisi sur 1 020 requêtes publiques, puis mesuré sur 328 requêtes rédigées à l&#x27;image du travail que nous envoient nos clients.</p><p>OpenJev prend un autre chemin : il n&#x27;entraîne rien. Il demande à un modèle de conversation ordinaire de choisir la lettre d&#x27;une option, puis lit la probabilité de chaque lettre. Nous l&#x27;avons passé sur les deux benchmarks, noté par le même script que Kev, pour savoir s&#x27;il aurait été le meilleur choix.</p><p><a href="https://carouter.ai/fr/blog/jev-kev-laya-decision-models">Lire le premier benchmark.</a> <a href="https://carouter.ai/fr/blog/kev-available-on-carouter">Lire le deuxième, paru avec le lancement de Kev.</a></p><h2>En bref</h2><ul><li><strong>Sur nos requêtes.</strong> Le Qwen3.5-4B d&#x27;OpenJev a reconnu le bon type de tâche sur 95,7 % de nos 328 requêtes, contre 88,7 % pour Kev-4B. Il obtient le même score en anglais et en français.</li><li><strong>Les points faibles de Kev.</strong> Il a reconnu la conversation courante 97 % du temps, et une étape isolée du travail d&#x27;un agent 88 % du temps. Kev-4B n&#x27;y voit juste qu&#x27;une fois sur trois et une fois sur deux.</li><li><strong>Sur les requêtes publiques.</strong> Il y arrive aussi en tête, à 79 % en anglais et 81 % en français, à égalité avec Jev, le service hébergé. Mais il s&#x27;y est trompé avec assurance sur 19 % des requêtes, contre 3 % pour Kev-4B.</li><li><strong>L&#x27;assurance sur nos requêtes.</strong> Il était sûr à 90 % ou plus de 294 réponses, et deux d&#x27;entre elles étaient fausses. Kev-4B l&#x27;était de 183 réponses, sans jamais se tromper.</li><li><strong>Le fichier du navigateur.</strong> Le fichier de 3 Go que télécharge openjev.com fait aussi bien que le modèle complet. Les deux petits modèles que propose le site sont loin derrière, et se trompent souvent avec assurance.</li><li><strong>Vitesse.</strong> Sur le GPU de ce portable, le fichier du navigateur rend une décision à trois questions en 267 millisecondes pour une requête courte. Sur le seul processeur d&#x27;un serveur, il lui faut de 9 à 12 secondes, plus qu&#x27;aux deux modèles Kev, alors que Kev-4B répond en 143 millisecondes sur le GPU qui le sert.</li></ul><h2>Ce qu&#x27;est OpenJev</h2><p>OpenJev est un projet libre et indépendant, rebaptisé SemIf par son auteur, sans lien avec TypeSafe, l&#x27;entreprise derrière Jev. Son code est sous licence MIT, et openjev.com le fait tourner directement dans le navigateur. <a href="https://openjev.com" target="_blank" rel="noreferrer">openjev.com</a> · <a href="https://github.com/TheoLeeCJ/SemIf" target="_blank" rel="noreferrer">Code source.</a></p><p>Il place le texte et la question dans une invite, présente les options sous forme de lettres A, B, C, et demande au modèle de répondre par une seule lettre. Le modèle n&#x27;écrit jamais rien. OpenJev lit la probabilité que le modèle attribue à chaque lettre : ce sont les probabilités de la réponse.</p><p>Son meilleur modèle est Qwen3.5-4B. Kev-4B a été entraîné à partir de la version de base de ce même modèle. Ce test pose donc aussi une question simple : l&#x27;entraînement de Kev fait-il mieux que ce que Qwen sait déjà faire après son propre ajustement aux instructions ?</p><h2>Comment nous avons testé</h2><p>Nous avons posé à OpenJev exactement les questions posées à Kev. Sur les requêtes publiques, c&#x27;est une seule question, avec neuf types de tâche. Sur nos requêtes, ce sont trois questions : le type de tâche, sa difficulté, et si la réponse sera longue.</p><p>Un seul script a noté tous les modèles. Avant de noter quoi que ce soit de nouveau, il recalcule les chiffres des deux articles précédents à partir de leurs réponses brutes, et s&#x27;arrête si un seul diffère.</p><p>OpenJev a tourné avec son propre code, dans une version figée. Pour vérifier notre montage, nous avons d&#x27;abord passé ses 144 décisions de test. Nous avons obtenu la réponse publiée par ses auteurs sur les 144, et le même score de 0,813.</p><p>Chaque modèle d&#x27;OpenJev a tourné deux fois : en pleine précision, d&#x27;où viennent ses scores publiés, puis sous la forme du fichier allégé que le site télécharge vraiment. OpenJev prend une question à la fois avec une liste d&#x27;options. Une échelle de difficulté est donc devenue cinq options, et une question fermée, Oui et Non.</p><p>Nous avons aussi passé Kev-0.8B et les deux modèles Laya sur nos 328 requêtes, que seul Kev-4B avait vues. Jev et Kev-9B n&#x27;y figurent pas : Jev est un service hébergé payant que nous n&#x27;avons pas rappelé, et Kev-9B ne tient pas sur le portable que nous avons utilisé.</p><h2>Ce que nous avons trouvé : la justesse</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/openjev-vs-kev/01-accuracy-both-benchmarks.png" alt="Type de tâche bien reconnu, en anglais et en français. Sur les 1 020 requêtes publiques : Jev 81 % et 76 %, Kev-9B 74 % et 67 %, Kev-4B 76 % et 70 %, Kev-0.8B 70 % et 64 %, Laya 58 % et 47 %, Laya multilingue 55 % et 47 %, OpenJev Qwen3.5-4B 79 % et 81 %, son fichier du navigateur 80 % et 80 %, OpenJev MiniCPM5-2B 76 % et 75 %, OpenJev Qwen3-0.6B 60 % et 46 %. Sur nos 328 requêtes : Kev-4B 89 % et 88 %, Kev-0.8B 82 % et 84 %, Laya 56 % et 46 %, Laya multilingue 48 % et 37 %, OpenJev Qwen3.5-4B 96 % et 96 %, son fichier du navigateur 98 % et 97 %, OpenJev MiniCPM5-2B 76 % et 74 %, OpenJev Qwen3-0.6B 56 % et 63 %." loading="lazy"/><figcaption>Type de tâche bien reconnu, en anglais et en français. Sur les 1 020 requêtes publiques : Jev 81 % et 76 %, Kev-9B 74 % et 67 %, Kev-4B 76 % et 70 %, Kev-0.8B 70 % et 64 %, Laya 58 % et 47 %, Laya multilingue 55 % et 47 %, OpenJev Qwen3.5-4B 79 % et 81 %, son fichier du navigateur 80 % et 80 %, OpenJev MiniCPM5-2B 76 % et 75 %, OpenJev Qwen3-0.6B 60 % et 46 %. Sur nos 328 requêtes : Kev-4B 89 % et 88 %, Kev-0.8B 82 % et 84 %, Laya 56 % et 46 %, Laya multilingue 48 % et 37 %, OpenJev Qwen3.5-4B 96 % et 96 %, son fichier du navigateur 98 % et 97 %, OpenJev MiniCPM5-2B 76 % et 74 %, OpenJev Qwen3-0.6B 56 % et 63 %.</figcaption></figure><p>Sur nos requêtes, le Qwen3.5-4B d&#x27;OpenJev est le modèle le plus juste que nous ayons mesuré : 95,7 % en pleine précision et 97,3 % avec le fichier du navigateur, contre 88,7 % pour Kev-4B. L&#x27;anglais et le français obtiennent le même score.</p><p>Sur les requêtes publiques, il égale Jev et dépasse Kev-4B de quatre points en anglais et de onze en français. Dans le premier benchmark, le français coûtait de cinq à huit points à chaque modèle. À OpenJev, il n&#x27;a rien coûté.</p><div class="openjev-table" role="region" aria-label="Tous les modèles sur les deux benchmarks" tabindex="0"><table><caption>Tous les modèles sur les deux benchmarks</caption><thead><tr><th scope="col">Modèle</th><th scope="col">Requêtes publiques, anglais</th><th scope="col">Requêtes publiques, français</th><th scope="col">Erreurs assurées, publiques, anglais</th><th scope="col">Nos 328 requêtes</th><th scope="col">Erreurs assurées, nos requêtes</th></tr></thead><tbody><tr><th scope="row">Jev<small>hébergé</small></th><td>80,9 %</td><td>76,0 %</td><td>11,7 %</td><td class="none">non testé</td><td class="none">non testé</td></tr><tr><th scope="row">Kev-9B</th><td>74,3 %</td><td>66,5 %</td><td>4,8 %</td><td class="none">non testé</td><td class="none">non testé</td></tr><tr class="lead"><th scope="row">Kev-4B</th><td>75,7 %</td><td>69,8 %</td><td>3,3 %</td><td>88,7 %</td><td>0,0 %</td></tr><tr><th scope="row">Kev-0.8B</th><td>69,6 %</td><td>63,7 %</td><td>0,0 %</td><td>82,9 %</td><td>0,0 %</td></tr><tr><th scope="row">Laya</th><td>57,6 %</td><td>46,9 %</td><td>0,0 %</td><td>50,9 %</td><td>0,0 %</td></tr><tr><th scope="row">Laya multilingual</th><td>55,0 %</td><td>47,1 %</td><td>3,7 %</td><td>42,4 %</td><td>3,0 %</td></tr><tr class="lead"><th scope="row">OpenJev Qwen3.5-4B<small>modèle complet</small></th><td>79,3 %</td><td>80,8 %</td><td>19,3 %</td><td>95,7 %</td><td>0,6 %</td></tr><tr><th scope="row">OpenJev Qwen3.5-4B<small>fichier du navigateur</small></th><td>80,4 %</td><td>80,3 %</td><td>19,0 %</td><td>97,3 %</td><td>0,9 %</td></tr><tr><th scope="row">OpenJev Qwen3.5-4B<small>fichier du navigateur, formulation de la page</small></th><td>79,3 %</td><td>77,4 %</td><td>20,5 %</td><td>92,7 %</td><td>1,8 %</td></tr><tr><th scope="row">OpenJev MiniCPM5-2B<small>modèle complet</small></th><td>76,3 %</td><td>75,0 %</td><td>20,2 %</td><td>75,0 %</td><td>13,7 %</td></tr><tr><th scope="row">OpenJev MiniCPM5-2B<small>fichier du navigateur</small></th><td>73,0 %</td><td>74,6 %</td><td>13,0 %</td><td>77,1 %</td><td>9,1 %</td></tr><tr><th scope="row">OpenJev Qwen3-0.6B<small>modèle complet</small></th><td>59,8 %</td><td>45,6 %</td><td>35,6 %</td><td>59,1 %</td><td>23,5 %</td></tr><tr><th scope="row">OpenJev Qwen3-0.6B<small>fichier du navigateur</small></th><td>59,6 %</td><td>45,8 %</td><td>34,1 %</td><td>61,9 %</td><td>19,5 %</td></tr></tbody></table></div><p>Les petits modèles du site changent la donne. MiniCPM5-2B, choisi par défaut sur un ordinateur, tient bon sur les requêtes publiques mais tombe à 75 % sur les nôtres. Qwen3-0.6B, proposé pour les téléphones, arrive derrière tous les modèles sauf Laya.</p><h2>D&#x27;où vient l&#x27;écart</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/openjev-vs-kev/03-kev-openjev-by-kind.png" alt="Type de tâche bien reconnu sur nos 328 requêtes, Kev-4B contre le Qwen3.5-4B d&#x27;OpenJev : conversation 33 % et 97 %, étape d&#x27;agent 53 % et 88 %, recherche 93 % et 82 %, résumé 100 % et 85 %, extraction 100 % et 97 %, et 100 % pour les deux sur le code, les mathématiques, la rédaction d&#x27;affaires et la traduction." loading="lazy"/><figcaption>Type de tâche bien reconnu sur nos 328 requêtes, Kev-4B contre le Qwen3.5-4B d&#x27;OpenJev : conversation 33 % et 97 %, étape d&#x27;agent 53 % et 88 %, recherche 93 % et 82 %, résumé 100 % et 85 %, extraction 100 % et 97 %, et 100 % pour les deux sur le code, les mathématiques, la rédaction d&#x27;affaires et la traduction.</figcaption></figure><p>L&#x27;écart tient à deux types de requêtes. OpenJev a reconnu la conversation courante 97 % du temps, et les étapes isolées d&#x27;un agent 88 % du temps. Kev-4B, lui, prend une question de culture générale pour de la recherche, et la prochaine étape d&#x27;un agent pour du code.</p><p>Kev-4B s&#x27;en sort mieux avec les documents : 93 % contre 82 % en recherche, et 100 % contre 85 % pour les résumés. OpenJev a tendance à prendre une longue requête de recherche pour de la rédaction d&#x27;affaires. Les deux font un sans-faute sur le code, les mathématiques, la rédaction d&#x27;affaires et la traduction.</p><h2>Ce que nous avons trouvé : l&#x27;assurance</h2><p>Un modèle qui décide à la place de quelqu&#x27;un ne devrait agir que lorsqu&#x27;il est sûr de lui. Le premier article mesurait la part des réponses fausses données avec au moins 90 % d&#x27;assurance. Sur ce point, les deux benchmarks ne disent pas la même chose d&#x27;OpenJev.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/openjev-vs-kev/02-confident-mistakes.png" alt="Justesse et erreurs assurées, une erreur assurée étant une réponse fausse donnée avec 90 % de confiance ou plus. Requêtes publiques en anglais : Jev 81 % de réponses justes et 12 % d&#x27;erreurs assurées, Kev-4B 76 % et 3 %, Kev-0.8B 70 % et 0 %, OpenJev Qwen3.5-4B 79 % et 19 %, OpenJev MiniCPM5-2B 76 % et 20 %, OpenJev Qwen3-0.6B 60 % et 36 %. Nos requêtes : Kev-4B 89 % et 0 %, Kev-0.8B 83 % et 0 %, OpenJev Qwen3.5-4B 96 % et 0,6 %, OpenJev MiniCPM5-2B 75 % et 14 %, OpenJev Qwen3-0.6B 59 % et 24 %." loading="lazy"/><figcaption>Justesse et erreurs assurées, une erreur assurée étant une réponse fausse donnée avec 90 % de confiance ou plus. Requêtes publiques en anglais : Jev 81 % de réponses justes et 12 % d&#x27;erreurs assurées, Kev-4B 76 % et 3 %, Kev-0.8B 70 % et 0 %, OpenJev Qwen3.5-4B 79 % et 19 %, OpenJev MiniCPM5-2B 76 % et 20 %, OpenJev Qwen3-0.6B 60 % et 36 %. Nos requêtes : Kev-4B 89 % et 0 %, Kev-0.8B 83 % et 0 %, OpenJev Qwen3.5-4B 96 % et 0,6 %, OpenJev MiniCPM5-2B 75 % et 14 %, OpenJev Qwen3-0.6B 59 % et 24 %.</figcaption></figure><p>Sur nos requêtes, OpenJev était aussi sûr de lui pour 294 réponses sur 328, et s&#x27;est trompé deux fois, en prenant chaque fois une requête de recherche pour de la rédaction d&#x27;affaires. Kev-4B l&#x27;était pour 183 réponses, sans jamais se tromper. Avec un seuil à 90 %, OpenJev déciderait seul de neuf requêtes sur dix, et Kev-4B d&#x27;un peu plus de la moitié.</p><p>Sur les requêtes publiques, OpenJev s&#x27;est trompé avec assurance sur 19 % des requêtes en anglais, contre 3 % pour Kev-4B et 12 % pour Jev. Beaucoup de ces étiquettes se discutent.</p><p>Le jeu de données range « How many U.S. Presidents have served in the military? » parmi les remue-méninges. OpenJev y a vu une question factuelle, sûr à 99,8 %, et nous l&#x27;avons comptée fausse, comme pour tous les modèles.</p><p>Les étiquettes n&#x27;expliquent pas tout. Compté par famille de tâches, là où ces désaccords ne pèsent plus, OpenJev se trompe encore avec assurance sur 15 % des requêtes publiques. Son assurance a tenu sur des requêtes comme les nôtres ; ailleurs, elle reste à vérifier.</p><h2>Le fichier du navigateur et les petits modèles</h2><p>Le fichier de 3 Go que télécharge openjev.com est une copie de Qwen3.5-4B en 4 bits. Il obtient 97,3 % sur nos requêtes et 80 % sur les requêtes publiques dans les deux langues, aussi bien que le modèle complet.</p><p>Deux choses changent dans le navigateur. La page pose sa question dans ses propres mots, et avec eux, le même fichier obtient 92,7 % sur nos requêtes au lieu de 97,3 %, toujours devant Kev-4B. Elle ne donne aussi au modèle qu&#x27;une fenêtre de 2 048 tokens, où 14 de nos 328 requêtes ne tiennent pas.</p><p>Les deux petits modèles sont moins justes, et trop sûrs d&#x27;eux en plus. MiniCPM5-2B s&#x27;est trompé avec assurance sur 14 % de nos requêtes et Qwen3-0.6B sur 24 %, alors que Kev-4B et Kev-0.8B ne l&#x27;ont jamais fait.</p><h2>Difficulté et réponses longues</h2><p>Sur les deux autres questions, les deux modèles 4B se tiennent. OpenJev place une requête exactement à notre niveau de difficulté 36 % du temps, contre 41 % pour Kev-4B, et à un niveau près, 87 % contre 88 %.</p><p>Ni l&#x27;un ni l&#x27;autre ne prévoit bien une réponse longue. Seules 10 de nos 328 requêtes en demandent une : OpenJev en a repéré 4, et Kev-4B 3.</p><h2>Vitesse et mémoire</h2><p>OpenJev pose une question par passage sur le texte. Trois questions demandent donc trois passages, ou un passage sur le texte suivi de trois courts, le mode le plus rapide qu&#x27;offre son code. Kev lit le texte une seule fois et répond à toutes les questions à partir de ce passage.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/openjev-vs-kev/04-latency-laptop.png" alt="Temps médian d&#x27;une décision à trois questions selon la longueur de la requête, en échelles logarithmiques, sur le GPU RTX 4060 d&#x27;un portable et sur six de ses cœurs de processeur. Sur le GPU, OpenJev avec les fichiers de son navigateur : Laya multilingue de 19 à 103 ms, Kev-0.8B de 55 ms à 1,6 s, OpenJev Qwen3-0.6B de 59 à 787 ms, MiniCPM5-2B de 133 ms à 1,2 s, Qwen3.5-4B de 267 ms à 2,2 s, et Kev-4B de 58 ms à 1 s sur une L40S de centre de données, de 1,3 à 14 s sur un MacBook Air M4 avec MLX, et de 3,6 à 20 s avec PyTorch jusqu&#x27;à mille tokens. Sur six cœurs : Laya multilingue de 0,26 à 2,2 s jusqu&#x27;à mille tokens, Kev-0.8B de 1,2 à 43 s, et Kev-4B 48 s et 125 s sur les deux requêtes les plus courtes." loading="lazy"/><figcaption>Temps médian d&#x27;une décision à trois questions selon la longueur de la requête, en échelles logarithmiques, sur le GPU RTX 4060 d&#x27;un portable et sur six de ses cœurs de processeur. Sur le GPU, OpenJev avec les fichiers de son navigateur : Laya multilingue de 19 à 103 ms, Kev-0.8B de 55 ms à 1,6 s, OpenJev Qwen3-0.6B de 59 à 787 ms, MiniCPM5-2B de 133 ms à 1,2 s, Qwen3.5-4B de 267 ms à 2,2 s, et Kev-4B de 58 ms à 1 s sur une L40S de centre de données, de 1,3 à 14 s sur un MacBook Air M4 avec MLX, et de 3,6 à 20 s avec PyTorch jusqu&#x27;à mille tokens. Sur six cœurs : Laya multilingue de 0,26 à 2,2 s jusqu&#x27;à mille tokens, Kev-0.8B de 1,2 à 43 s, et Kev-4B 48 s et 125 s sur les deux requêtes les plus courtes.</figcaption></figure><p>Sur le GPU de ce portable, le fichier du navigateur du Qwen3.5-4B d&#x27;OpenJev rend une décision à trois questions en 267 millisecondes pour une requête courte, et en 2,2 secondes pour une requête de 4 000 tokens. Kev-4B ne tient pas sur ce GPU : les deux modèles 4B n&#x27;ont donc jamais été chronométrés côte à côte. Sur le GPU de centre de données du premier benchmark, Kev-4B prenait 58 millisecondes et 1 seconde.</p><p>Kev-4B tient en revanche sur un MacBook Air équipé de la puce M4 d&#x27;Apple et de 24 Go de mémoire, que son GPU partage avec le processeur. Avec MLX, la bibliothèque d&#x27;apprentissage automatique d&#x27;Apple, que Kev prend en charge, la même décision y a pris 1,3 seconde pour une requête courte et 14 secondes pour une requête de 4 000 tokens.</p><p>Avec PyTorch, la bibliothèque qui fait tourner Kev sur notre propre serveur, il a fallu 3,6 secondes pour une requête courte et 20 secondes pour une requête de 1 000 tokens. Sur un Mac, PyTorch n&#x27;a pas de version rapide des couches récurrentes de Kev et relit le texte pour chaque question. À 4 000 tokens, il lui fallait plus de mémoire que n&#x27;en a le Mac. Sur six requêtes de contrôle, les deux ont donné les mêmes réponses que le GPU de centre de données.</p><p>Le Qwen3.5-4B complet demande 8,7 Go pour ses poids, plus que ce que contient le GPU de ce portable. Nous avons donc mesuré sa justesse en gardant une partie du modèle en mémoire système, sans le chronométrer.</p><p>Le fichier du navigateur occupe environ 3 Go sur le GPU, tout compris. Kev-4B montait jusqu&#x27;à 17 Go sur le GPU du premier benchmark, et tient sous 9 Go sur la machine qui le sert.</p><h2>Sur le processeur seul</h2><p>Nous avons chronométré la même décision à trois questions sur deux processeurs de serveur, sans aucun GPU à portée. Le premier est une machine virtuelle avec quatre cœurs AMD EPYC (Milan) et huit fils d&#x27;exécution. Le second, ce sont huit des dix cœurs Arm rapides de la machine GB10 qui sert Kev, à la priorité la plus basse, à côté des modèles qu&#x27;elle sert. Kev a tourné comme notre serveur le fait tourner : il lit le texte une fois, puis chaque question. OpenJev a utilisé le fichier de son navigateur, dans le plus rapide de ses deux modes. Les pointillés montrent Kev sur le GPU du GB10, pour les mêmes requêtes.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/openjev-vs-kev/05-latency-server-cpus.png" alt="Temps médian d&#x27;une décision à trois questions selon la longueur de la requête, sur le processeur seul, en échelles logarithmiques. Sur quatre cœurs AMD EPYC et huit fils d&#x27;exécution : Kev-0.8B de 1,8 à 22 s, Kev-4B de 10 à 110 s, OpenJev Qwen3.5-4B de 12 à 114 s. Sur huit cœurs Arm du GB10 : Kev-0.8B de 1,3 à 15 s, Kev-4B de 6,1 à 53 s, OpenJev Qwen3.5-4B de 8,9 à 87 s. Sur le GPU du GB10, pour comparaison : Kev-0.8B de 52 à 293 ms, Kev-4B de 143 ms à 1 s." loading="lazy"/><figcaption>Temps médian d&#x27;une décision à trois questions selon la longueur de la requête, sur le processeur seul, en échelles logarithmiques. Sur quatre cœurs AMD EPYC et huit fils d&#x27;exécution : Kev-0.8B de 1,8 à 22 s, Kev-4B de 10 à 110 s, OpenJev Qwen3.5-4B de 12 à 114 s. Sur huit cœurs Arm du GB10 : Kev-0.8B de 1,3 à 15 s, Kev-4B de 6,1 à 53 s, OpenJev Qwen3.5-4B de 8,9 à 87 s. Sur le GPU du GB10, pour comparaison : Kev-0.8B de 52 à 293 ms, Kev-4B de 143 ms à 1 s.</figcaption></figure><p>Sur un processeur, le fichier 4B d&#x27;OpenJev est le plus lent des trois. Sur les cœurs du GB10, il a pris 8,9 secondes pour une requête courte et 87 secondes pour une requête de 4 000 tokens, contre 6,1 et 53 secondes pour Kev-4B, et 1,3 et 15 secondes pour Kev-0.8B. Sur les cœurs EPYC, OpenJev et Kev-4B se tenaient, à 12 et 10 secondes pour une requête courte, et Kev-0.8B prenait 1,8 seconde.</p><p>Rien de tout cela ne convient quand quelqu&#x27;un attend la réponse. Sur le GPU de la même machine, Kev-0.8B répond en 52 à 293 millisecondes et Kev-4B en 143 millisecondes à 1 seconde : environ 25 à 50 fois plus vite que le même modèle sur son processeur le plus rapide.</p><p>Deux détails comptent sur un processeur. L&#x27;EPYC n&#x27;a pas d&#x27;arithmétique rapide pour les nombres sur 16 bits dans lesquels Kev est stocké : Kev-0.8B y a tourné de sept à huit fois plus lentement que sur 32 bits. Les cœurs Arm du GB10 ont cette arithmétique, et les deux formats y ont tourné à peu près à la même vitesse. Par ailleurs, les huit fils d&#x27;exécution de la machine EPYC ne représentent que quatre cœurs : avec quatre fils, Kev n&#x27;était qu&#x27;environ 20 % plus lent.</p><p>Sur le GB10, passer un modèle sur le processeur ne libérerait pas non plus de mémoire : processeur et GPU puisent dans la même réserve, et un modèle y occupe la même place d&#x27;un côté comme de l&#x27;autre. Kev-4B lit en outre ses poids en nombres sur 32 bits, environ 16 Go, pour y intégrer exactement son adaptateur. Cela ne tient pas à côté des modèles que sert la machine : sur son processeur, nous avons donc chronométré Kev-4B sur 16 bits, avec l&#x27;adaptateur à part.</p><h2>Ce que cela ne prouve pas</h2><ul><li>Chaque modèle n&#x27;a tourné qu&#x27;une fois, sur deux ensembles de requêtes. Pour un type qui compte 20 requêtes, une seule erreur déplace le chiffre de cinq points.</li><li>Nous avons rédigé et étiqueté nous-mêmes les 328 requêtes. Sur les 144 décisions de test d&#x27;OpenJev, la fiche du modèle Kev rapporte l&#x27;inverse : 0,896 pour Kev-4B contre 0,813 pour le Qwen3.5-4B d&#x27;OpenJev. Le gagnant dépend donc des requêtes.</li><li>Le fichier du navigateur a tourné avec llama.cpp sur le GPU du portable, pas dans un navigateur. Sa justesse reste la même, mais pas sa vitesse : les auteurs d&#x27;OpenJev ont mesuré 3,3 secondes pour une décision dans Chrome, sur une RTX 3090.</li><li>Les temps sur portable viennent de deux portables, et ceux des processeurs d&#x27;une seule machine EPYC et d&#x27;un seul GB10, mesurés une fois chacun avec cinq requêtes par longueur. Les cœurs du GB10 servaient en même temps ses autres modèles.</li></ul><h2>Ce que cela change pour CARouter</h2><p>Nous avons choisi Kev-4B parce qu&#x27;il était le modèle ouvert le plus juste sur les requêtes publiques, et le plus franc sur ses doutes. Sur des requêtes comme celles de nos clients, un Qwen3.5-4B sans entraînement les comprend mieux, y compris les deux types que Kev-4B rate le plus.</p><p>Pour l&#x27;instant, Kev-4B reste derrière /v1/decisions, sur le GPU : aucun de ces modèles n&#x27;a sa place sur un processeur quand quelqu&#x27;un attend la réponse. Avant tout changement, nous mesurerons ce Qwen3.5-4B sur le GPU qui sert Kev, à la vitesse que verrait un client, et nous passerons le test de sélection complet dont a besoin le choix automatique du modèle. Toutes les mesures derrière cet article sont conservées, et nous les partagerons avec quiconque le demande.</p>]]></content:encoded>
</item>
<item>
<title>Kev, un modèle du calibre de Jev, est disponible sur CARouter (+ benchmarks)</title>
<link>https://carouter.ai/fr/blog/kev-available-on-carouter</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/kev-available-on-carouter</guid>
<pubDate>Wed, 23 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Produit</category>
<description>Kev 4B, un modèle de décision ouvert qui répond à des questions typées comme le fait Jev de TypeSafe, s'appelle désormais sur /v1/decisions, depuis notre propre matériel au Canada. Sur des requêtes tenues à l'écart de tous nos choix de conception, il a nommé le bon type de tâche 98,5 % du temps, et choisir un modèle à partir de ses réponses a donné un résultat à deux requêtes près du meilleur modèle unique, pour 25 % de coût en moins.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/kev-available-on-carouter/illustration.png" alt="Maintenant offert : Kev, un modèle du calibre de Jev, est disponible sur CARouter. Type de tâche bien nommé 98,5 % du temps sur des requêtes tenues à l'écart (98,6 % en anglais, 98,4 % en français) ; aucune réponse fausse sur les 76 données avec 90 % de confiance ou plus ; le choix du modèle pour chaque requête a coûté 25 % de moins et pris 35 % de temps en moins, à 2 réponses sur 137 du meilleur modèle unique." /></p><p>Kev 4B est maintenant disponible sur CARouter, à l&#x27;adresse /v1/decisions. C&#x27;est un modèle de décision : il lit un texte et répond à des questions typées à son sujet, avec une probabilité pour chaque réponse, comme le fait Jev, le service hébergé de TypeSafe. Il tourne sur notre propre matériel, au Canada.</p><p>Nous l&#x27;avons mesuré sur 328 nouvelles requêtes en anglais et en français, puis nous nous sommes servis de ses réponses pour choisir un modèle pour chaque requête parmi les modèles conversationnels que nous servons. Voici ce qu&#x27;il réussit, ce qu&#x27;il coûte, et ce que vaut un choix de modèle fait de cette façon.</p><h2>En bref</h2><ul><li>Sur les 137 requêtes tenues à l&#x27;écart de tous nos choix de conception, Kev a nommé le bon type de tâche 98,5 % du temps : 98,6 % en anglais et 98,4 % en français.</li><li>Kev a donné 76 de ces réponses avec au moins 90 % de confiance, et aucune n&#x27;était fausse.</li><li>Choisir un modèle pour chaque requête à partir des réponses de Kev donne un résultat à deux requêtes près du meilleur modèle unique, pour 25 % de coût et 35 % d&#x27;attente en moins.</li><li>Une décision à trois questions prend 146 millisecondes sur une requête courte et 1,2 seconde sur une requête de 4 000 mots.</li><li>Il coûte 0,0532 $ CA par million de tokens en entrée, et la sortie est gratuite.</li></ul><h2>Ce que fait Kev</h2><p>Un modèle conversationnel répond par des phrases qu&#x27;il faut ensuite lire. Kev, lui, n&#x27;écrit jamais rien. Vous lui envoyez un état, texte ou objet JSON, avec jusqu&#x27;à 32 questions de trois types : un choix parmi des options nommées, une note sur une échelle ordonnée, ou un oui ou non.</p><p>Chaque réponse revient avec ses probabilités et un niveau de confiance. Kev lit tout en une seule passe et ne génère rien : il ne peut donc pas inventer une réponse qui ne figure pas parmi vos options.</p><p>Voici un courriel adressé au service à la clientèle, soumis à Kev avec trois questions.</p><pre class="code-block">curl https://carouter.ai/v1/decisions \
  -H &quot;Authorization: Bearer $CAROUTER_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#x27;{
    &quot;model&quot;: &quot;kev-4b&quot;,
    &quot;state&quot;: &quot;Hi, I was charged twice for invoice 2026-0417 this month. Can you refund the second charge before Friday? Our accounts close then.&quot;,
    &quot;questions&quot;: {
      &quot;intent&quot;: {&quot;type&quot;: &quot;choice&quot;, &quot;instructions&quot;: &quot;What is the customer asking for?&quot;,
                 &quot;criteria&quot;: {&quot;refund&quot;: &quot;money back for a charge&quot;,
                              &quot;invoice_copy&quot;: &quot;a copy of an invoice&quot;,
                              &quot;cancellation&quot;: &quot;ending their subscription&quot;}},
      &quot;urgent&quot;: {&quot;type&quot;: &quot;noul&quot;, &quot;instructions&quot;: &quot;Does the customer need an answer within the week?&quot;},
      &quot;tone&quot;:   {&quot;type&quot;: &quot;score&quot;, &quot;instructions&quot;: &quot;How upset is the customer?&quot;,
                 &quot;criteria&quot;: [&quot;calm&quot;, &quot;annoyed&quot;, &quot;angry&quot;]}
    }
  }&#x27;</pre><p>Kev a répondu que le client veut un remboursement, avec une probabilité de 98 %, que la demande est urgente, à 88 %, et que le client est agacé plutôt que fâché. Il a lu 111 tokens pour y arriver.</p><pre class="code-block">{
  &quot;object&quot;: &quot;decision&quot;,
  &quot;model&quot;: &quot;kev-4b&quot;,
  &quot;answers&quot;: {
    &quot;intent&quot;: {&quot;type&quot;: &quot;choice&quot;, &quot;choice&quot;: &quot;refund&quot;, &quot;confidence&quot;: 0.9752,
               &quot;probabilities&quot;: {&quot;refund&quot;: 0.9835, &quot;invoice_copy&quot;: 0.0077, &quot;cancellation&quot;: 0.0088}},
    &quot;urgent&quot;: {&quot;type&quot;: &quot;noul&quot;, &quot;noul&quot;: 0.8772},
    &quot;tone&quot;:   {&quot;type&quot;: &quot;score&quot;, &quot;score&quot;: 1.1696, &quot;confidence&quot;: 0.8253,
               &quot;legend&quot;: {&quot;0&quot;: &quot;calm&quot;, &quot;1&quot;: &quot;annoyed&quot;, &quot;2&quot;: &quot;angry&quot;},
               &quot;probabilities&quot;: {&quot;0&quot;: 0.0899, &quot;1&quot;: 0.6507, &quot;2&quot;: 0.2594}}
  },
  &quot;usage&quot;: {&quot;prompt_tokens&quot;: 111, &quot;total_tokens&quot;: 111},
  &quot;served_region&quot;: &quot;CA-ON&quot;
}</pre><p>La requête reprend le format de l&#x27;API SystemOne de TypeSafe, avec en plus le champ model que porte toute requête CARouter. L&#x27;état peut compter jusqu&#x27;à 8 192 tokens. Au-delà, Kev refuse la requête plutôt que de la tronquer, car il garderait le début d&#x27;un long texte et en perdrait la fin.</p><h2>Les mêmes réponses que pendant notre recherche</h2><p>Avant d&#x27;ouvrir Kev à nos clients, nous avons rejoué les 1 020 requêtes de notre benchmark précédent sur la machine qui le sert maintenant. Il a choisi la même réponse que la machine de test pour 1 017 d&#x27;entre elles, et sa justesse est identique à la troisième décimale, dans les deux langues.</p><p>Les trois écarts étaient des quasi-égalités, sous 45 % de confiance sur l&#x27;une comme sur l&#x27;autre machine. Le modèle que vous appelez est bien celui que nous avons mesuré.</p><h2>Un nouveau benchmark, plus proche du vrai travail</h2><p>Les jeux de données publics ne contiennent pas ce que nos clients envoient : une revue de code, une question de taxes sur une facture québécoise, la prochaine étape d&#x27;un agent après le résultat d&#x27;un outil, une loi ou un communiqué statistique collé au complet. Nous avons donc rédigé 328 requêtes de ce genre, moitié en anglais, moitié en français.</p><p>Le français a été écrit pour un lecteur du Québec ou de l&#x27;Ontario, et non traduit de l&#x27;anglais. Les longs documents proviennent de sources sous licence ouverte, comme des lois fédérales, des communiqués de Statistique Canada, Wikipédia et des livres du domaine public. Chaque requête indique d&#x27;où viennent ses mots.</p><p>Nous avons posé à Kev les trois questions dont un sélecteur automatique de modèle a besoin : de quel type de tâche il s&#x27;agit, à quel point elle est difficile, et si une bonne réponse sera longue. Il voyait le début des instructions, le nom des outils, ainsi que le début et la fin du dernier message, ou la tâche de l&#x27;utilisateur quand ce message est le résultat d&#x27;un outil.</p><p>Nous avons écrit ces questions et les règles d&#x27;aiguillage sur trois cinquièmes des requêtes. Tous les chiffres qui suivent viennent des deux autres cinquièmes : 137 requêtes qu&#x27;aucun de ces choix n&#x27;avait vues.</p><h2>Ce que nous avons trouvé</h2><p>Kev a nommé le bon type de tâche 98,5 % du temps sur ces 137 requêtes. Il a eu juste sur toutes les requêtes dans sept des neuf types, et n&#x27;a manqué qu&#x27;une requête de recherche et une requête de conversation.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/kev-available-on-carouter/01-accuracy-by-kind.png" alt="Type de tâche bien nommé sur 137 requêtes tenues à l&#x27;écart : 100 % sur le code, les mathématiques, la rédaction d&#x27;affaires, l&#x27;extraction, le résumé, la traduction et les étapes d&#x27;agent, 88,9 % sur la recherche et 91,7 % sur la conversation." loading="lazy"/><figcaption>Type de tâche bien nommé sur 137 requêtes tenues à l&#x27;écart : 100 % sur le code, les mathématiques, la rédaction d&#x27;affaires, l&#x27;extraction, le résumé, la traduction et les étapes d&#x27;agent, 88,9 % sur la recherche et 91,7 % sur la conversation.</figcaption></figure><p>Les étapes d&#x27;agent sont lues dans la requête elle-même. Une requête qui porte des définitions d&#x27;outils est une étape du travail d&#x27;un agent, et le routeur le voit comme il voit la langue et la longueur. Kev seul n&#x27;en reconnaissait que la moitié, car le dernier message est le résultat d&#x27;un outil qui ressemble à du code ou à une page web.</p><p>La frontière entre une question rapide et une question de recherche relève du jugement, et les étiquettes sont les nôtres. Une autre personne aurait pu déplacer ces deux chiffres de quelques points.</p><h2>Franc sur ses doutes</h2><p>Pour un modèle qui décide à la place de quelqu&#x27;un, le chiffre qui compte le plus est la fréquence à laquelle il se trompe en étant sûr de lui. Kev a donné 76 réponses avec au moins 90 % de confiance, et les 76 étaient justes.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/kev-available-on-carouter/02-confidence.png" alt="Part des réponses justes de Kev selon la confiance donnée, sur les requêtes tenues à l&#x27;écart hors étapes d&#x27;agent : 100 % sous 30 % de confiance (2 réponses), 87 % de 30 à 60 % (15), 100 % de 60 à 90 % (30) et 100 % à 90 % et plus (76)." loading="lazy"/><figcaption>Part des réponses justes de Kev selon la confiance donnée, sur les requêtes tenues à l&#x27;écart hors étapes d&#x27;agent : 100 % sous 30 % de confiance (2 réponses), 87 % de 30 à 60 % (15), 100 % de 60 à 90 % (30) et 100 % à 90 % et plus (76).</figcaption></figure><p>Toutes les réponses que Kev a données avec au moins 60 % de confiance étaient justes, et 86 % de ses réponses ont atteint ce seuil. En dessous, un sélecteur devrait envoyer la requête vers un modèle par défaut plutôt que de se fier à cette lecture.</p><h2>Difficulté et réponses longues</h2><p>Kev situe une requête à un niveau près de notre cote de difficulté 85 % du temps. C&#x27;est la moins précise des trois lectures, et notre table d&#x27;aiguillage ne s&#x27;en sert pas encore.</p><p>Une requête qui annonce elle-même sa longueur, par exemple au moins 1 000 mots ou un module complet, est lue comme demandant une réponse longue d&#x27;après sa formulation. Avec Kev, cela a permis de repérer 3 des 5 requêtes tenues à l&#x27;écart qui en demandent une ; les réponses longues demandent encore du travail.</p><h2>Choisir le modèle de chaque requête</h2><p>Nous avons ensuite soumis chaque requête aux quatre modèles conversationnels que nous servons depuis le Canada : Qwen3.6 35B A3B et Qwen3 0.6B sur notre propre matériel, ainsi que Tofino 3 et Rosedale 1 d&#x27;Augure. Chaque réponse a été notée par un test, un résultat exact ou une grille d&#x27;évaluation.</p><p>Le code a été exécuté contre ses tests, et les mathématiques et l&#x27;extraction comparées à la bonne réponse. La prose a été notée selon une grille par Qwen3.6 35B A3B, réflexion désactivée : ce juge a recalé 2 des 122 bonnes réponses et n&#x27;a laissé passer aucune des 122 mauvaises.</p><p>À partir des trois cinquièmes servant à la conception, nous avons écrit une table d&#x27;aiguillage par type de travail. Tofino 3 prend les étapes d&#x27;agent, les mathématiques, la traduction et la conversation, où il égale ou devance les autres en quelques secondes et pour une fraction du prix. Qwen3.6 prend tout le reste, ainsi que toute requête sur laquelle Kev hésite.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/kev-available-on-carouter/04-picking-the-model.png" alt="Réponses réussies selon leur coût, sur 137 requêtes tenues à l&#x27;écart : Qwen3.6 35B A3B 83,2 % pour 0,555 $ CA, Rosedale 1 81,0 % pour 2,708 $ CA, Tofino 3 75,9 % pour 0,406 $ CA, le choix avec Kev 81,8 % pour 0,417 $ CA, et le meilleur modèle pour chaque requête 94,2 %." loading="lazy"/><figcaption>Réponses réussies selon leur coût, sur 137 requêtes tenues à l&#x27;écart : Qwen3.6 35B A3B 83,2 % pour 0,555 $ CA, Rosedale 1 81,0 % pour 2,708 $ CA, Tofino 3 75,9 % pour 0,406 $ CA, le choix avec Kev 81,8 % pour 0,417 $ CA, et le meilleur modèle pour chaque requête 94,2 %.</figcaption></figure><p>Sur les 137 requêtes tenues à l&#x27;écart, le choix du modèle avec Kev a donné 81,8 % de réponses réussies, contre 83,2 % pour le meilleur modèle unique, Qwen3.6. C&#x27;est deux requêtes d&#x27;écart, pour 25 % de coût en moins, et chaque réponse a pris 33 secondes en moyenne au lieu de 51.</p><p>Le plafond est plus haut. Choisir après coup le meilleur modèle pour chaque requête donnerait 94,2 % de réponses réussies : une table par type de travail laisse donc de la qualité qu&#x27;une politique plus fine pourrait récupérer.</p><h2>Vitesse et coût</h2><p>Kev tourne sur un NVIDIA GB10 en Ontario, qui sert aussi nos autres modèles ouverts. Il occupe moins de 9 Go de mémoire et traite une requête à la fois.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/kev-available-on-carouter/03-latency.png" alt="Latence médiane d&#x27;une décision à trois questions selon le nombre de tokens lus : 146 ms à 277 tokens, 177 ms à 503, 362 ms à 1 397, 650 ms à 2 588 et 1,22 s à 4 969 sur le GB10 de CARouter, comparée au L40S loué du benchmark précédent." loading="lazy"/><figcaption>Latence médiane d&#x27;une décision à trois questions selon le nombre de tokens lus : 146 ms à 277 tokens, 177 ms à 503, 362 ms à 1 397, 650 ms à 2 588 et 1,22 s à 4 969 sur le GB10 de CARouter, comparée au L40S loué du benchmark précédent.</figcaption></figure><p>Une décision courte prend environ 150 millisecondes, et une requête de 4 000 mots, environ 1,2 seconde. Le GPU de centre de données de notre test précédent était plus rapide sur les requêtes courtes, et proche sur les longues.</p><p>Le prix est de 0,0532 $ CA par million de tokens en entrée, et la sortie est gratuite. C&#x27;est le prix que TypeSafe publie pour Jev, moins dix pour cent. Une décision à trois questions sur une requête de 500 tokens coûte moins de trois millièmes de cent.</p><p>Kev facture chaque token qu&#x27;il lit : l&#x27;état une fois, puis chaque question avec ses options. TypeSafe ne publie pas la façon dont Jev compte ses tokens : les deux prix sont donc proches, sans qu&#x27;on puisse les dire identiques.</p><h2>Confidentialité</h2><p>Kev ne conserve rien. Chaque requête est lue une fois, puis oubliée avec sa réponse. Rien n&#x27;est partagé entre clients, pas même un cache dont les délais pourraient trahir ce qu&#x27;un autre a envoyé.</p><p>Les requêtes sont servies au Canada. Avec une clé qui exige notre filtre de renseignements personnels, ceux que contient l&#x27;état sont pseudonymisés avant que Kev ne les voie.</p><h2>Ce que cela ne prouve pas</h2><ul><li>Il s&#x27;agit d&#x27;une seule exécution, sur 328 requêtes que nous avons rédigées et étiquetées nous-mêmes, et les chiffres viennent des 137 tenues à l&#x27;écart. Dans un type qui compte 10 requêtes tenues à l&#x27;écart, chaque erreur fait bouger le chiffre de dix points.</li><li>Le juge est aussi l&#x27;un des quatre modèles qu&#x27;il note, ce qui pourrait avantager Qwen3.6 sur la prose. Nous avons vérifié le juge sur des réponses que nous savions justes ou fausses, pas sur des erreurs subtiles.</li><li>La sélection a été simulée à partir des réponses de Kev et de notre table d&#x27;aiguillage. Le mode auto de notre plateforme devra réussir le même test avant de choisir quoi que ce soit pour vous.</li><li>Les latences ont été mesurées par un client situé sur la même machine. Une requête qui passe par notre API depuis ailleurs au Canada y ajoute le temps réseau.</li></ul><h2>Et ensuite</h2><p>Kev est la première moitié d&#x27;auto, le mode où une requête ne nomme aucun modèle et où CARouter en choisit un, au prix ou à la vitesse de votre choix. Avant qu&#x27;auto choisisse quoi que ce soit à votre place, nous voulons une politique d&#x27;aiguillage plus fine qui comble une plus grande part de l&#x27;écart avec 94 %, une meilleure détection des réponses longues, et notre propre mode auto qui réussit ce test.</p><p>D&#x27;ici là, vous pouvez appeler Kev directement pour trier des demandes de soutien, qualifier des prospects, aiguiller des requêtes, ou pour toute décision que vous préférez ne pas confier à la prose d&#x27;un modèle conversationnel. Toutes les mesures derrière cet article sont conservées, et nous les communiquerons à quiconque les demande.</p>]]></content:encoded>
</item>
<item>
<title>Routage intelligent avec Kev : notre benchmark</title>
<link>https://carouter.ai/fr/blog/jev-kev-laya-decision-models</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/jev-kev-laya-decision-models</guid>
<pubDate>Mon, 21 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Une requête adressée à CARouter pourrait ne nommer aucun modèle et tomber quand même sur le bon, au prix ou à la vitesse de votre choix. Nous avons testé trois modèles de décision capables de faire ce choix, sur 1 020 requêtes en anglais et en français. Kev est le candidat le plus solide ; voici ce que son déploiement demanderait.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/jev-kev-laya-decision-models/illustration.png" alt="Recherche : routage intelligent avec Kev, notre benchmark. Jev, hébergé, 0,81 de justesse et 12 % d'erreurs confiantes ; Kev-4B, poids ouverts, 0,76 de justesse, 3 % d'erreurs confiantes, 17 Go, 58 ms ; Kev-0.8B 0,70 de justesse, 0 % d'erreurs confiantes, 3,4 Go, 43 ms." /></p><p>Aujourd&#x27;hui, chaque requête adressée à CARouter nomme le modèle qui y répond. Nous voulons en offrir une qui n&#x27;en nomme aucun : écrivez auto, et CARouter choisit le modèle qui convient le mieux à la requête, puis la sert selon votre préférence, le moins cher, le plus rapide ou l&#x27;équilibre des deux.</p><p>Cela demande un modèle de décision, un petit modèle dont le seul travail est de lire une requête et de dire de quel type de tâche il s&#x27;agit, en quelques millisecondes. Nous avons testé trois candidats sur 1 020 requêtes réelles, en anglais et en français, pour savoir si l&#x27;un d&#x27;eux est assez bon pour qu&#x27;on lui confie ce choix, et ce qu&#x27;il coûterait de le faire tourner.</p><h2>En bref</h2><ul><li><strong>La justesse.</strong> Jev, un modèle commercial hébergé, identifie correctement le type de requête 81 % du temps en anglais et 76 % en français. Kev-4B, un modèle ouvert que nous pouvons faire tourner nous-mêmes, atteint 76 % et 70 %. Son petit frère Kev-0.8B atteint 70 % et 64 %. Laya, le troisième candidat, reste sous 60 % tel quel.</li><li><strong>Les erreurs confiantes.</strong> Jev se trompe en affirmant être sûr de lui sur une requête sur huit. Kev-4B, sur une sur trente ; Kev-0.8B, jamais. Pour un système qui ne doit agir que lorsqu&#x27;il est sûr, cela compte davantage que l&#x27;écart de justesse.</li><li><strong>Plus gros n&#x27;est pas meilleur.</strong> Le plus gros Kev, à 9 milliards de paramètres, ne fait pas mieux que celui à 4 milliards et demande deux fois plus de mémoire. Le 4B est le bon compromis.</li><li><strong>Vitesse.</strong> Sur un GPU de centre de données, une décision prend 43 millisecondes sur Kev-0.8B et 58 sur Kev-4B, un délai qu&#x27;un client ne remarquera pas. Sans GPU, seul Laya répond assez vite pour être utilisable, et c&#x27;est le moins juste.</li><li><strong>Le meilleur candidat.</strong> Kev-4B : assez juste, honnête sur ses doutes, ouvert, et rapide sur un GPU. Reste à savoir s&#x27;il est assez bon pour choisir des modèles au nom de nos clients, une question que ce test ne peut pas trancher, parce qu&#x27;aucun jeu de données public ne contient les types de requêtes qu&#x27;ils envoient. C&#x27;est le prochain test à construire.</li></ul><h2>Pourquoi choisir le modèle à votre place</h2><p>CARouter donne accès à un catalogue de modèles ouverts, tous servis depuis le Canada, par une seule API. La plupart des clients choisissent un modèle au moment de l&#x27;intégration et n&#x27;y reviennent jamais. Or corriger un bout de code, traduire un paragraphe et résumer un contrat ne demandent pas le même modèle, et le meilleur pour chacun est rarement le plus cher.</p><p>Aujourd&#x27;hui, un client peut déjà nous dire comment servir un modèle donné : au prix le plus bas, à la vitesse la plus élevée, ou entre les deux. Cette préférence choisit parmi les fournisseurs qui servent le modèle que le client a nommé. Elle ne peut pas choisir le modèle lui-même, et elle ne peut jamais faire sortir une requête du Canada. La sélection automatique ajouterait la première de ces deux choses en conservant la seconde.</p><h2>Ce qu&#x27;est un modèle de décision</h2><p>Demandez à un modèle conversationnel de classer un billet de soutien : il répond par une phrase, qu&#x27;il faut ensuite lire et interpréter. Un modèle de décision n&#x27;écrit pas. Il reçoit un texte et une question typée, laquelle de ces catégories, combien sur cette échelle, oui ou non, et renvoie la réponse avec un score de confiance, en une seule passe.</p><p>Il n&#x27;y a rien à interpréter et rien qu&#x27;il puisse inventer, puisqu&#x27;il ne génère jamais. C&#x27;est ce qui en fait le bon outil à placer devant chaque requête : rapide, prévisible, et honnête sur son degré de certitude.</p><p>Jev est la version commerciale de cette idée, vendue par TypeSafe comme service hébergé. Kev en est une reproduction ouverte, en trois tailles, que chacun peut faire tourner sur son propre matériel. Laya est un second modèle ouvert qui répond aux mêmes types de questions avec une conception différente.</p><h2>Comment nous avons testé</h2><p>Nous avons posé à chaque modèle une seule question sur 1 020 requêtes : quel type de tâche l&#x27;utilisateur demande-t-il, parmi neuf types tels qu&#x27;écrire du code, résoudre un problème de mathématiques, résumer un passage ou trouver des idées. Les requêtes et leurs bonnes réponses viennent de trois jeux de données publics, rédigés et étiquetés à la main par des personnes, et non par nous.</p><p>Les mêmes requêtes existent en anglais et en français, si bien que les deux langues sont comparées sur un matériel identique. Ni Kev ni Laya n&#x27;avaient jamais vu ces jeux de données. Les données d&#x27;entraînement de Jev ne sont pas publiques ; il les a peut-être vues.</p><p>La vitesse a été mesurée à part, sur trois machines : le seul processeur d&#x27;un portable, le petit GPU du même portable, et un GPU de centre de données loué. Chaque requête était inédite, donc aucun raccourci ni cache ne pouvait aider.</p><h2>Ce que nous avons trouvé : la justesse</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/jev-kev-laya-decision-models/01-accuracy-en-fr.png" alt="Justesse sur 1 020 requêtes : Jev 0,81 en anglais et 0,76 en français, Kev-9B 0,74 et 0,67, Kev-4B 0,76 et 0,70, Kev-0.8B 0,70 et 0,64, Laya 0,58 et 0,47, Laya multilingue 0,55 et 0,47." loading="lazy"/><figcaption>Justesse sur 1 020 requêtes : Jev 0,81 en anglais et 0,76 en français, Kev-9B 0,74 et 0,67, Kev-4B 0,76 et 0,70, Kev-0.8B 0,70 et 0,64, Laya 0,58 et 0,47, Laya multilingue 0,55 et 0,47.</figcaption></figure><p>Jev mène, Kev suit à cinq ou six points, Laya traîne. Deux choses valent pour tous les modèles. Le code et les mathématiques sont faciles : Jev et Kev-4B ne se trompent sur aucune requête anglaise, et Kev-4B garde un score parfait en mathématiques en français. Et le français coûte cinq à huit points à tout le monde, Jev compris ; c&#x27;est donc une propriété de la tâche, pas d&#x27;un modèle.</p><p>Les scores comptent une réponse comme juste quand elle tombe dans la bonne famille de tâches. Les jeux de données eux-mêmes étiquettent le même type de requête de plusieurs façons, une question sur un passage étant appelée résumé ici et question de lecture là ; le score plus fin à neuf classes est donc plus bas pour tous les modèles, dans le même ordre.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/jev-kev-laya-decision-models/02-confident-errors.png" alt="Justesse contre erreurs confiantes, en anglais : Jev à 0,81 avec 11,7 % d&#x27;erreurs confiantes, Kev-9B à 0,74 avec 4,8 %, Kev-4B à 0,76 avec 3,3 %, Kev-0.8B à 0,70 sans aucune, Laya à 0,58 sans aucune, Laya multilingue à 0,55 avec 3,7 %." loading="lazy"/><figcaption>Justesse contre erreurs confiantes, en anglais : Jev à 0,81 avec 11,7 % d&#x27;erreurs confiantes, Kev-9B à 0,74 avec 4,8 %, Kev-4B à 0,76 avec 3,3 %, Kev-0.8B à 0,70 sans aucune, Laya à 0,58 sans aucune, Laya multilingue à 0,55 avec 3,7 %.</figcaption></figure><p>C&#x27;est le deuxième graphique qui tranche. Un système qui choisit un modèle au nom d&#x27;un client ne doit le faire que lorsqu&#x27;il est sûr, et sinon se rabattre sur un choix par défaut raisonnable. Cela suppose un seuil de confiance. Une mauvaise réponse donnée avec une confiance élevée franchit ce seuil sans peine ; ce qui compte, ce n&#x27;est donc pas seulement la fréquence des erreurs, mais celle des erreurs commises avec assurance.</p><p>Jev est à la fois le plus juste et le plus sûr de lui : 12 % de ses réponses sont des erreurs confiantes. Kev-4B est à 3 % et Kev-0.8B à 0 %. Un seuil de confiance attrape les erreurs de Kev et laisse passer celles de Jev.</p><h2>Ce que nous avons trouvé : la vitesse, et où chacun peut tourner</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/jev-kev-laya-decision-models/03-latency-cpu-gpu.png" alt="Temps d&#x27;une décision selon la longueur de la requête, échelle logarithmique. Sur un processeur de portable, Kev-0.8B passe de 1,2 s à 43 s et Laya de 0,26 s à 2,2 s. Sur un GPU de centre de données, Kev-0.8B reste entre 43 et 46 ms jusqu&#x27;à un millier de mots et atteint 250 ms à quatre mille ; Kev-4B passe de 58 ms à environ une seconde ; Kev-9B de 62 ms à 1,45 s ; Laya reste entre 19 et 33 ms mais ne peut pas lire au-delà d&#x27;un millier de mots." loading="lazy"/><figcaption>Temps d&#x27;une décision selon la longueur de la requête, échelle logarithmique. Sur un processeur de portable, Kev-0.8B passe de 1,2 s à 43 s et Laya de 0,26 s à 2,2 s. Sur un GPU de centre de données, Kev-0.8B reste entre 43 et 46 ms jusqu&#x27;à un millier de mots et atteint 250 ms à quatre mille ; Kev-4B passe de 58 ms à environ une seconde ; Kev-9B de 62 ms à 1,45 s ; Laya reste entre 19 et 33 ms mais ne peut pas lire au-delà d&#x27;un millier de mots.</figcaption></figure><p>Sur un GPU de centre de données, tous les modèles sont assez rapides. Kev-0.8B répond en 45 millisecondes environ, quelle que soit la longueur jusqu&#x27;à un millier de mots. Kev-4B demande 58 millisecondes sur une requête courte et environ une seconde sur une très longue. Un GPU de portable donne les mêmes réponses deux à sept fois plus lentement, et ne peut pas charger Kev-4B du tout.</p><p>Sans GPU, le tableau change. Kev-0.8B prend plus d&#x27;une seconde par décision sur un processeur de portable, et Kev-4B près d&#x27;une minute. Seul Laya répond en un quart de seconde, soit environ quatre décisions par seconde et par machine, et c&#x27;est le moins juste des six.</p><p>La mémoire décide du reste. Kev-0.8B a besoin de 3,4 Go de mémoire GPU, Kev-4B de 17 Go et Kev-9B de 32 Go. Sur une machine qui sert aussi un modèle de langue, cette mémoire est prise sur les requêtes des clients eux-mêmes.</p><h2>Ce que déployer chacun d&#x27;eux impliquerait</h2><ul><li><strong>Comme service de décision, sur un GPU qui a de la marge : Kev-4B.</strong> Cinq à six points derrière Jev, quatre fois moins souvent sûr de lui à tort, libre d&#x27;utilisation sous licence ouverte, et compatible avec l&#x27;API de Jev : une équipe qui utilise déjà Jev pourrait changer en modifiant une adresse. Le prix serait de 17 Go de mémoire GPU et 58 millisecondes, et c&#x27;est la mémoire qui coûte vraiment sur une machine qui sert aussi des modèles de langue.</li><li><strong>Comme service de décision quand la mémoire est comptée : Kev-0.8B.</strong> 3,4 Go, 45 millisecondes, jamais sûr de lui à tort dans notre test. Il céderait six points de justesse au 4B, et c&#x27;est tout le compromis.</li><li><strong>Derrière la sélection automatique du modèle : Kev, sous un seuil de confiance, une fois un dernier test réussi.</strong> Les 45 millisecondes qu&#x27;il ajouterait avant le début d&#x27;une réponse sont acceptables, et ses erreurs sont de celles qu&#x27;un seuil de confiance attrape. Ce que notre test ne montre pas, c&#x27;est la justesse sur les types de requêtes que nos clients envoient réellement, dont le travail d&#x27;agents en plusieurs étapes et les très longs documents, parce qu&#x27;aucun jeu de données public ne les contient. Ce test doit exister, et être réussi, avant que les requêtes de quiconque soient routées sur la parole de Kev.</li><li><strong>Tourner sans GPU : Laya, une fois entraîné pour la tâche.</strong> C&#x27;est le seul candidat qui répond vite sur un processeur ordinaire. Tel quel, il identifie la bonne tâche à peine une fois sur deux, et ses auteurs disent que sa justesse vient de l&#x27;entraînement sur vos propres exemples, ce que nous n&#x27;avons pas fait.</li><li><strong>Jev : la référence, pas un candidat.</strong> C&#x27;est le modèle le plus juste du test, et un service hébergé par une entreprise de San Francisco qui ne dit rien de l&#x27;endroit où les requêtes sont traitées, ce qui règle la question pour un produit dont toute la promesse est que les requêtes restent au Canada. C&#x27;est aussi le plus sûr de lui, le seul défaut qu&#x27;un seuil de confiance ne peut pas corriger.</li></ul><h2>Pourquoi le choix doit tenir</h2><p>Une conversation est une suite de requêtes, chacune portant tout ce qui a été dit avant elle. La plupart des fournisseurs gardent en mémoire, pour un temps, ce début commun, si bien que le tour suivant coûte moins cher et arrive plus vite s&#x27;il atteint le même fournisseur. CARouter garde déjà une conversation chez le fournisseur qui détient cette mémoire, tant qu&#x27;elle dure.</p><p>Si le modèle choisi pour une conversation changeait d&#x27;un tour à l&#x27;autre, cette économie serait perdue à chaque fois, et le ton des réponses changerait en pleine conversation. La sélection automatique doit donc s&#x27;en tenir à son choix : elle retient le modèle retenu pour une conversation et n&#x27;en change que lorsque le modèle de décision la contredit avec assurance.</p><p>Voilà pourquoi le taux d&#x27;erreurs confiantes est le chiffre autour duquel tourne tout ce test. Un seul seuil de confiance décide de deux choses : si un choix est digne de confiance, et si un tour ultérieur peut le changer. Et si le modèle de décision venait à être indisponible, les requêtes partent vers un modèle par défaut plutôt que d&#x27;être refusées.</p><h2>Ce que cela ne prouve pas</h2><p>Une question, une exécution, un jeu de requêtes. Une question formulée autrement ou un autre jeu pourrait réordonner le milieu du tableau. Cela ne suffirait ni à ramener Laya dans la course ni à déloger Jev du sommet.</p><p>Les chiffres sur processeur viennent d&#x27;un portable, et un processeur de serveur ferait mieux. Il leur manque aussi le code optimisé pour lequel Kev a été écrit, qui n&#x27;existe que pour les GPU. Ils donnent donc un plafond à la lenteur de Kev sans GPU, pas une prédiction pour un serveur donné.</p><p>Jev a été chronométré depuis le Canada, par l&#x27;internet public, à 185 millisecondes par décision. C&#x27;est ce qu&#x27;un client d&#x27;ici verrait, pas la vitesse propre du modèle.</p><h2>Où cela nous mène</h2><p>Kev-4B est le candidat que nous déploierions, et les deux questions encore ouvertes sont pratiques : quelle machine peut lui céder 17 Go, et tient-il sur un test bâti à partir des requêtes que nos clients envoient vraiment. Un service de décision que les clients appellent directement, comme ils appellent aujourd&#x27;hui les plongements ou le reclassement, n&#x27;a besoin que de la première réponse ; la sélection automatique du modèle a besoin des deux. Chaque mesure derrière cet article est conservée, et nous la partagerons avec qui le demande.</p>]]></content:encoded>
</item>
<item>
<title>CKKS peut-il rendre l’IA confidentielle accessible?</title>
<link>https://carouter.ai/fr/blog/ckks-gpu-benchmark</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/ckks-gpu-benchmark</guid>
<pubDate>Sat, 12 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>CARouter</dc:creator>
<category>Recherche</category>
<description>Nous avons testé des bibliothèques CKKS actuelles sur GPU avec les dimensions du modèle Qwen. Les opérations matricielles et le traitement par lots progressent; un service complet de conversation confidentielle reste à démontrer.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/ckks-gpu-benchmark/illustration.png" alt="Recherche : CKKS sur des GPU non fiables. Une projection chiffrée de 9,89 ms, le traitement SIMD par lots et un seuil de conversation de 10 tokens/s. Tests de composants seulement; aucun déploiement confidentiel démontré." /></p><p>Notre première expérience a généré du texte à travers des opérations linéaires chiffrées, avec un débit très inférieur à notre seuil interactif. Ce nouvel essai examine si les bibliothèques CKKS sur GPU offrent de meilleures bases pour une IA confidentielle.</p><p><a href="https://carouter.ai/fr/blog/homomorphic-encryption-community-gpus">Lire notre premier benchmark d’inférence homomorphe.</a></p><p>Sur un A100 80 GB SXM, une projection compacte de 512 → 2 048 a pris 23,43 ms avec FIDESlib et 9,89 ms avec Cheddar. Le regroupement des vecteurs a aussi augmenté le débit total. Ces mesures matricielles sont validées : nous n’avons pas généré de réponse LLM complète avec CKKS, et aucun de ces montages n’a démontré la confidentialité face à l’hôte.</p><h2>Pourquoi tester CKKS?</h2><p>CKKS désigne le schéma de Cheon, Kim, Kim et Song pour le calcul approché sur des nombres chiffrés. Il peut regrouper des valeurs dans un même texte chiffré et les traiter ensemble. Cette propriété convient aux opérations matricielles des réseaux neuronaux, mais introduit une erreur numérique qu’il faut mesurer. <a href="https://eprint.iacr.org/2016/421" target="_blank" rel="noreferrer">L’article scientifique à l’origine de CKKS.</a></p><p>Nous avons compilé des révisions figées de FIDESlib et de Cheddar. FIDESlib propose des opérations CKKS sur GPU interopérables avec OpenFHE. Cheddar fournit une implémentation GPU avec des transformations linéaires optimisées. Le moteur de calcul diffère donc de celui de notre première expérience; il ne s’agit pas d’une option de chiffrement à activer dans vLLM. <a href="https://github.com/CAPS-UMU/FIDESlib" target="_blank" rel="noreferrer">FIDESlib.</a> <a href="https://github.com/scale-snu/cheddar-fhe" target="_blank" rel="noreferrer">Cheddar.</a></p><h2>Ce que nous avons mesuré</h2><p>Les dimensions du test proviennent de Qwen3.6-35B-A3B. Les vecteurs et les poids étaient synthétiques et publics. Les valeurs d’entrée ont été tirées uniformément entre −1 et 1; les poids utilisaient la même plage, divisée par la racine carrée de la largeur d’entrée. Nous avons mesuré des produits entre vecteurs chiffrés et matrices en clair, en réutilisant les poids préparés d’un essai à l’autre.</p><p>Chaque configuration comprenait 1 essai de chauffe, puis 3 essais mesurés. Nous avons synchronisé le GPU avant et après chaque évaluation, puis comparé toutes les sorties à une référence en clair. L’erreur absolue maximale autorisée était fixée à 0,0001. Les résultats ci-dessous présentent les médianes; le graphique et le tableau matriciels affichent aussi les minimums et maximums observés, sans prétendre représenter des intervalles de confiance.</p><p>L’évaluation GPU exclut la génération des clés, la préparation des poids, l’encodage, le chiffrement, le déchiffrement et le transport réseau. Les deux clients cryptographiques fonctionnaient sur la VM GPU. Le contrôleur CPU séparé gérait la collecte et la suppression; il ne jouait pas le rôle de client cryptographique de confiance. Ces montages convenaient à des données de test publiques, pas aux requêtes privées des clients.</p><p>La configuration matricielle FIDES imposait la vérification HEStd_128_classic d’OpenFHE, avec une dimension d’anneau de 16 384, une profondeur de 2 et des modules de mise à l’échelle de 40 bits. Cheddar utilisait les paramètres bootparam_40 du projet au niveau 2, avec une dimension d’anneau de 65 536 et une arithmétique de 32 bits. Les paramètres et les chemins d’évaluation diffèrent : la comparaison porte sur nos configurations et n’isole pas le seul effet de la bibliothèque.</p><h2>Le rangement des valeurs compte aussi</h2><p>Nous avons d’abord complété les matrices rectangulaires pour obtenir des dispositions carrées. Un rangement plus dense des diagonales et la combinaison des sommes partielles ont réduit le calcul inutile. Avec FIDES, la projection 512 → 2 048 est passée de 83,13 ms à 23,43 ms. Le tableau utilise cette disposition plus dense pour les deux bibliothèques. Cheddar emprunte le chemin alternatif qui minimise les changements de clé et qui a réussi nos vérifications numériques.</p><figure class="ckks-chart"><img src="https://carouter.ai/blog/ckks-gpu-benchmark/matrix-fr.png" alt="Évaluation de matrices chiffrées sur un A100" width="1600" height="960" loading="lazy"/><figcaption>Lot de 1. Échelle linéaire; une valeur plus basse est préférable. Les points représentent les médianes, et les barres les plages observées. Paramètres cryptographiques différents; mesures de composants seulement.</figcaption></figure><div class="ckks-table" role="region" aria-label="Temps des opérations matricielles CKKS" tabindex="0"><table><caption>Millisecondes GPU médianes (minimum–maximum observés)</caption><thead><tr><th scope="col">Largeur d’entrée → de sortie</th><th scope="col">FIDESlib</th><th scope="col">Cheddar</th></tr></thead><tbody><tr><th scope="row">512 → 2 048</th><td>23,43 <small>(23,4–23,46)</small></td><td>9,89 <small>(9,88–9,89)</small></td></tr><tr><th scope="row">2 048 → 512</th><td>24,37 <small>(24,32–24,38)</small></td><td>10,07 <small>(10,07–10,09)</small></td></tr><tr><th scope="row">2 048 → 1 024</th><td>48,64 <small>(43,82–49,6)</small></td><td>14,33 <small>(14,32–14,36)</small></td></tr><tr><th scope="row">2 048 → 2 048</th><td>83,15 <small>(82,87–90,52)</small></td><td>23,28 <small>(23,28–23,28)</small></td></tr><tr><th scope="row">4 096 → 2 048</th><td>83,94 <small>(83,69–86,56)</small></td><td>23,5 <small>(23,47–23,51)</small></td></tr><tr><th scope="row">2 048 → 4 096</th><td>82,38 <small>(82,05–84,04)</small></td><td>23,29 <small>(23,29–23,31)</small></td></tr></tbody></table></div><p>Nous avons aussi récupéré une seule matrice de projection de porte dans le checkpoint figé, sans télécharger le modèle complet. FIDES a évalué cette projection 2 048 → 512 en 23,74 ms, avec une erreur absolue maximale inférieure à 0,000001 lors des essais mesurés. Les activations restaient synthétiques. Ce test valide une opération avec de vrais poids, pas un bloc de transformeur, du texte généré ou la qualité du modèle.</p><h2>Le débit par lots n’est pas la vitesse d’une conversation</h2><p>Pour la projection 2 048 → 1 024 de Cheddar, le regroupement de 16 vecteurs indépendants dans un même texte chiffré a maintenu l’évaluation GPU près de 14,4 ms. Le débit limité à cette évaluation est passé de 69 à 1 111 vecteurs/s. Tous les vecteurs partageaient la même matrice publique et le même contexte de chiffrement; nous n’avons pas testé le regroupement de clients distincts possédant des clés différentes.</p><figure class="ckks-chart"><img src="https://carouter.ai/blog/ckks-gpu-benchmark/batch-fr.png" alt="Plus de vecteurs par seconde, une latence GPU semblable" width="1600" height="960" loading="lazy"/><figcaption>Cheddar, 2 048 → 1 024. Le débit des vecteurs est calculé à partir de la taille du lot et de la durée médiane; il ne s’agit pas de tokens LLM/s. Les étapes client s’exécutaient sur la même VM.</figcaption></figure><p>En incluant l’encodage, le chiffrement, le déchiffrement et le décodage, le composant mesuré avec un lot de 16 a pris 63,23 ms, pour un débit de 253 vecteurs/s. La préparation des poids réutilisables a pris 52,3 secondes, exclues de ces mesures. Nous n’avons pas démontré que tous les poids préparés du modèle complet peuvent rester en cache, ni mesuré les coûts de transport réseau et d’attente.</p><h2>Les essais rejetés comptent</h2><p>Notre première configuration de transformation matricielle fusionnée de Cheddar a produit des résultats incorrects, malgré un chiffrement/déchiffrement précis et une rotation isolée correcte. Une configuration sans BSGS et le chemin alternatif minimisant les changements de clé ont réussi le petit test. Les résultats publiés utilisent ce dernier. Nous n’avons pas établi la cause du problème ni conclu que toutes les configurations du projet échouent.</p><p>Nous avons aussi testé le bootstrap de FIDES, qui renouvelle un texte chiffré pour permettre de poursuivre le calcul. Le déchiffrement a échoué avec la configuration de 40 bits. Les configurations de précision supérieure ont produit des erreurs maximales d’environ 0,000207 et 0,000127, toutes deux au-dessus de notre seuil fixe de 0,0001. Ces essais se sont arrêtés pendant la chauffe; leurs durées ne sont donc pas présentées comme des performances de bootstrap validées.</p><p>Le client fourni avec Cheddar avertit explicitement qu’il est destiné aux tests et qu’il n’est pas sécurisé. Il conserve les secrets de test sur le GPU. La vérification des paramètres de FIDES est utile, mais notre client installé sur la même VM exposait tout de même sa clé privée au propriétaire de l’hôte. Réussir un test numérique ne valide pas la confidentialité d’un déploiement. <a href="https://github.com/scale-snu/cheddar-fhe/blob/8df8b26ce5411a68b68f0e7c2fb7e9a2f05f3e94/include/UserInterface.h" target="_blank" rel="noreferrer">L’avertissement du client Cheddar.</a></p><h2>Ce que cela signifie pour le seuil de 10 tokens/s</h2><p>Notre seuil laisse 100 ms par token généré. Pour donner un ordre de grandeur, la somme séquentielle des médianes Cheddar mesurées pour les projections gate, up et down de l’expert partagé, sur les 40 couches du modèle, représente 1,2 secondes de travail GPU. Ce calcul illustratif exclut les experts sélectionnés, l’attention, les opérations non linéaires, l’état de la conversation, la projection du vocabulaire et les coûts client. Ce n’est ni un débit de modèle mesuré ni une limite minimale universelle : la fusion, le traitement par lots et une autre implémentation pourraient le modifier.</p><figure class="ckks-chart"><img src="https://carouter.ai/blog/ckks-gpu-benchmark/budget-fr.png" alt="Le budget d’un token face à une estimation partielle" width="1600" height="960" loading="lazy"/><figcaption>Le budget de conversation de 100 ms et une somme séquentielle illustrative des projections d’experts partagés. L’estimation ne mesure pas un token complet et exclut la majorité du travail du modèle.</figcaption></figure><p>Nous avons donc arrêté l’expérience au test des composants, sans prétendre avoir mesuré une inférence CKKS complète. Cette expérience ne fournit aucun résultat CKKS en tokens/s ni en coût par million de tokens. Pour une projection par lots seulement, le coût de l’évaluation GPU par million de vecteurs est de 1 000 000 × P × t / (3 600 × B), où P est le tarif horaire du GPU, t la durée d’évaluation en secondes et B la taille du lot. La préparation, le travail client, le transport et le reste du modèle s’ajoutent.</p><h2>Souveraineté et GPU disponibles : une piste de recherche, pas encore un service</h2><p>Pouvoir calculer sans fournir des requêtes lisibles à l’exploitant du GPU pourrait élargir le parc de matériel utilisable à l’échelle mondiale. Cette expérience montre que les bibliothèques CKKS actuelles méritent d’être étudiées davantage dans cette direction. Elle n’établit ni une solution pratique à la pénurie de GPU ni une garantie complète de souveraineté. Le surcroît de calcul cryptographique peut aussi demander davantage de capacité GPU par réponse utile.</p><p>Un système utilisable exige encore une frontière de confiance pour le client et ses clés, une attention et un état chiffrés validés, des approximations non linéaires adaptées, une qualité de réponse acceptable et une politique sur les fuites liées au choix des experts et aux caractéristiques du trafic. La confidentialité seule ne peut pas non plus obliger un hôte à renvoyer une réponse correcte, à rester disponible ou à effacer ses copies. Terraform et dstack peuvent gérer les machines; ces propriétés exigent un protocole d’inférence conçu et testé pour les assurer.</p><p>La poursuite des travaux homomorphes nécessiterait un bloc chiffré complet et validé avec un client de confiance séparé, puis des essais de qualité du modèle et de latence de bout en bout si cette étape réussit. Nous reportons ces travaux. Les résultats actuels ne justifient pas le lancement d’un service de conversation chiffrée sur GPU communautaires à notre seuil interactif.</p><h2>Une suite possible : des VM confidentielles avec GPU protégés</h2><p>Une machine virtuelle chiffrée pourrait-elle rendre l’inférence sur GPU communautaires viable? Tout dépend de ce que le chiffrement protège. Les disques chiffrés protègent les fichiers stockés, tandis qu’une VM classique ou un hyperviseur de type 2 ajouté laisse la mémoire en cours d’utilisation accessible à l’hôte externe. Une VM confidentielle protégée par le matériel peut protéger la mémoire CPU, mais le simple passage direct du GPU à la VM n’étend pas cette protection à sa mémoire et à ses calculs.</p><p>L’architecture à évaluer associe une VM CPU confidentielle, un GPU fonctionnant dans un mode de calcul confidentiel pris en charge et une connexion protégée entre les deux. Un vérificateur indépendant contrôlerait des preuves récentes d’attestation du CPU et du GPU, le logiciel invité approuvé et l’identité de sa session avant de libérer des clés ou d’envoyer des requêtes privées. Le passage direct du GPU fait partie de cette configuration; il ne constitue pas à lui seul la garantie de sécurité. <a href="https://docs.nvidia.com/enterprise-reference-architectures/deploying-proprietary-models-confidential-compute-self-hosted-vms/latest/reference-implementations.html" target="_blank" rel="noreferrer">Architecture de référence pour VM et GPU confidentiels.</a></p><p>Contrairement à l’évaluation homomorphe, cette approche permettrait à un moteur classique comme vLLM de calculer sur des données en clair à l’intérieur de l’environnement protégé. Elle évite de transformer les opérations du modèle en calculs homomorphes, mais ses performances sur notre charge de travail restent à mesurer. La confiance repose alors sur la protection matérielle, le micrologiciel, le logiciel invité approuvé et les services d’attestation et de remise des clés.</p><p>Des hôtes communautaires compatibles pourraient ainsi contribuer sans que leurs outils habituels d’administration donnent accès aux requêtes en clair. Cela ne rend pas n’importe quel matériel admissible : la plateforme doit prendre en charge et exposer l’ensemble du chemin protégé. Le propriétaire peut toujours interrompre le service ou conserver des copies chiffrées, et la garantie ne couvre pas toutes les attaques physiques ni tous les canaux auxiliaires. La confidentialité n’établit pas non plus, à elle seule, la résidence géographique ou la souveraineté. <a href="https://docs.nvidia.com/enterprise-reference-architectures/deploying-proprietary-models-confidential-compute-self-hosted-vms/latest/trust-and-threat-model.html" target="_blank" rel="noreferrer">Modèle de menace et limites du calcul confidentiel.</a></p><p>Il s’agit d’une proposition de suivi, reportée pour le moment. Nous n’avons pas réalisé cette expérience sur VM confidentielle et ne présentons aucun résultat de débit ni de validation de sécurité pour cette architecture. Si nous y revenons, nous vérifierons d’abord l’attestation et le refus des configurations non prises en charge, puis comparerons le même modèle et la même charge de travail avec et sans mode confidentiel, en mesurant la latence du premier token, la vitesse de décodage et le coût.</p><p>Les crédits de calcul de Denvr ont soutenu ce travail. Les mesures et les conclusions sont les nôtres. Le GPU et le contrôleur ont été supprimés après récupération et vérification des résultats et des archives de sources; la matrice Qwen téléchargée et les bibliothèques compilées n’ont pas été conservées.</p><p><a href="https://carouter.ai/contact">Contactez-nous pour obtenir les données du benchmark et les fichiers sources.</a></p>]]></content:encoded>
</item>
<item>
<title>Répondre aux enjeux de souveraineté et de pénurie de GPU par l’inférence homomorphe des LLM</title>
<link>https://carouter.ai/fr/blog/homomorphic-encryption-community-gpus</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/homomorphic-encryption-community-gpus</guid>
<pubDate>Sat, 12 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>CARouter</dc:creator>
<category>Recherche</category>
<description>Nous avons testé l’inférence homomorphe assistée par un client, de GPT-2 à Qwen3.6-35B-A3B, avec un client CPU de confiance séparé. Méthodologie, débit mesuré, limites de confidentialité et leçons pour une IA confidentielle.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/homomorphic-encryption-community-gpus/illustration.png" alt="Qwen3.6-35B-A3B sur A100 : environ 17 tokens/s avec vLLM natif et 0,006 tokens/s avec opérations linéaires chiffrées. Longueurs de sortie différentes; chiffrement partiel, sans preuve de sécurité FHE complète." /></p><p>CARouter pourrait-elle utiliser des GPU exploités par des personnes auxquelles nous ne faisons pas confiance, tout en protégeant les requêtes de ses clients? Le chiffrement homomorphe rend cette question intéressante. Nous avons commencé avec GPT-2 sur un H100, puis testé Qwen/Qwen3.6-35B-A3B sur un A100 de Denvr doté de 80 Go de mémoire GPU. Ce deuxième essai porte sur un modèle beaucoup plus représentatif d’un service d’IA.</p><p>Notre seuil pour une conversation interactive était d’au moins 10 tokens sortants par seconde et par requête. La génération validée de 16 tokens avec calcul linéaire chiffré a atteint 0,00598 tokens/s, après 35,5 minutes d’attente avant le premier token : un débit environ 1 673 fois inférieur au seuil. Un token est un petit fragment de texte, souvent une partie de mot. Nous ne bâtirions pas un service de conversation confidentielle interactive sur cette implémentation.</p><p>Merci à Denvr : son programme AI Ascend a accordé à CARouter 1 000 $ en crédits de calcul, qui ont rendu ces expériences possibles. Ces crédits ont financé les essais GPU du modèle moderne et le contrôleur CPU dédié. Nous remercions Denvr pour ce soutien matériel; les mesures et les conclusions sont les nôtres.</p><p><a href="https://www.denvr.com/ai-ascend" target="_blank" rel="noreferrer">Découvrir Denvr AI Ascend.</a></p><h2>Le problème de confidentialité commence en mémoire</h2><p>Le chiffrement protège une connexion ou un disque, mais l’inférence ordinaire manipule toujours les requêtes et l’état de la conversation en clair dans la mémoire de travail. L’administrateur d’un hôte classique peut avoir accès à cette mémoire, y compris au cache KV. Chiffrer un volume au démarrage ne l’en empêche pas, et supprimer une VM ne prouve pas que son propriétaire a effacé toutes les copies.</p><p>Le chiffrement homomorphe permet à une machine de calculer sur des valeurs chiffrées et de renvoyer un résultat chiffré. Le chiffrement entièrement homomorphe, ou FHE, étend ce principe au calcul général. Il faut un moteur de calcul compatible : Terraform et dstack peuvent gérer le cycle de vie des VM, mais placer vLLM dans un conteneur chiffré ne rend pas ses calculs homomorphes.</p><h2>Du petit modèle exploratoire au checkpoint moderne</h2><p>Le premier essai sur H100 utilisait GPT-2 pour vérifier que nous pouvions générer du texte avec des opérations linéaires chiffrées et contrôler les résultats. La meilleure variante validée pour une requête, avec les poids préparés en cache, a atteint 0,16 tokens/s et environ 33,2 secondes avant le premier token. Ces essais courts, après échauffement, ont permis de tester le mécanisme. GPT-2 ne représente toutefois pas la qualité de modèle attendue aujourd’hui.</p><p>Pour l’expérience chez Denvr, nous avons fixé les versions du checkpoint public BF16, du tokenizer et des logiciels. Nous avons utilisé PyTorch 2.9.1+cu128, Transformers 5.17.0 et Concrete ML Extensions 0.1.9 de Zama. La bibliothèque de Zama assurait les opérations linéaires chiffrées; les autres calculs du modèle s’exécutaient côté client. Nous avons d’abord vérifié le chargement du vrai checkpoint, sans paramètres manquants ou incompatibles dans le modèle de texte. Les essais sur un minuscule modèle aléatoire ne validaient que l’intégration; ils n’ont fourni aucun chiffre de performance du modèle cible.</p><p>Le modèle repose sur un mélange d’experts : chaque token n’active que certains réseaux experts. Nous avons intercepté les produits linéaires fonctionnels en plus des modules linéaires ordinaires, pour inclure les projections des experts sélectionnés et celle du vocabulaire de sortie. L’attention, les opérations non linéaires, l’état récurrent, les embeddings et la sélection des tokens restaient en clair côté client. Il s’agit d’une inférence linéaire chiffrée assistée par un client, et non d’un transformer entièrement chiffré.</p><h2>Comment nous avons mesuré les performances</h2><p>Nous avons établi une référence de service avec vLLM, une référence de génération native dans le même framework, puis une référence quantifiée en clair utilisant les mêmes calculs que l’adaptateur chiffré. Celui-ci quantifie les activations et les poids en valeurs signées sur 8 bits; la mention BF16 du checkpoint ne signifie donc pas que les calculs chiffrés se font en BF16. La référence de service utilisait une génération déterministe, le raisonnement désactivé et une exécution sans graphes CUDA, avec des requêtes courtes et longues répétées ainsi qu’un groupe simultané. Les préfixes pouvaient être réutilisés; nous ne cherchions pas la capacité maximale.</p><p>Pour la génération chiffrée, les requêtes synthétiques publiques contenaient 21 tokens après mise en forme conversationnelle. La requête longue demandait pourquoi le chiffrement est important; la courte demandait combien font deux plus deux. Nous avons mesuré séparément l’attente du premier token, le décodage suivant et la durée totale de la requête. Le débit de décodage exclut le premier token. Le chargement du modèle, la création des clés, l’envoi de la clé publique et le démarrage des VM sont exclus de ces durées.</p><p>Le premier déploiement plaçait le client et l’évaluateur sur la même VM GPU pour mesurer le calcul. Son propriétaire pouvait lire la clé du client et sa mémoire en clair. Nous avons ensuite séparé l’évaluateur et un client limité à 4 CPU et 12 Gio de mémoire. La clé privée restait dans la mémoire du processus CPU; le GPU recevait une clé publique de compression et des activations chiffrées. L’attention et l’état KV restaient sur la VM CPU.</p><h2>Résultats mesurés avec le modèle moderne</h2><figure class="fhe-chart"><img src="https://carouter.ai/blog/homomorphic-encryption-community-gpus/throughput-fr.png" alt="Le débit face à l’objectif interactif" width="1600" height="768" loading="lazy"/><figcaption>Échelle logarithmique : un même intervalle représente un facteur dix. Le décodage exclut le premier token; les longueurs de sortie et l’arithmétique diffèrent.</figcaption></figure><div class="fhe-benchmark" role="region" aria-label="Performances d’inférence mesurées" tabindex="0"><table><caption>Même checkpoint sur un A100 de 80 Go; modes d’exécution et longueurs de sortie différents.</caption><thead><tr><th scope="col">Mode d’exécution</th><th scope="col">Tokens sortants</th><th scope="col">Tokens sortants/s</th><th scope="col">Premier token (s)</th></tr></thead><tbody><tr><th scope="row">vLLM natif, requêtes courtes</th><td>Jusqu’à 64</td><td>17,06</td><td>0,15</td></tr><tr><th scope="row">Opérations linéaires chiffrées, même VM</th><td>16</td><td>0,00598</td><td>2 132,13</td></tr><tr><th scope="row">Opérations linéaires chiffrées, client CPU séparé</th><td>2 (dont fin de séquence)</td><td>0,0056</td><td>2 231,13</td></tr></tbody></table></div><p>La génération chiffrée longue s’est terminée et tous les scores de sortie conservés correspondaient exactement à la référence quantifiée. Elle a atteint sa limite de longueur au milieu d’un paragraphe; il ne s’agissait pas d’une évaluation de la qualité d’une réponse complète. Nous avons volontairement arrêté la répétition supplémentaire après validation indépendante de la requête terminée. Elle n’ajoute aucun échantillon de débit.</p><p>L’essai avec client séparé a renvoyé « 4 », puis le token de fin de séquence. Tous deux comptent dans sa sortie de deux tokens, ce qui laisse une seule étape de décodage après le traitement de la requête. Cette étape a pris 178,5 secondes. C’est un essai réseau court, pas une estimation du débit sur une longue conversation. Tous ses scores conservés correspondaient eux aussi exactement à la référence.</p><p>La référence de service native a atteint environ 17,06 tokens/s par requête courte. Cela montre que le matériel loué peut servir ce checkpoint; les calculs diffèrent toutefois de ceux de l’adaptateur quantifié. Le débit natif simultané et les lots de matrices synthétiques ne constituent pas des mesures du débit chiffré du modèle par lots, que nous n’avons pas mesuré ici.</p><p>Les débits natifs sont estimés à partir du contenu diffusé et du nombre de tokens déclaré; la colonne du premier token correspond au premier contenu reçu. Les modes chiffrés chronomètrent chaque passage du modèle et la sélection du token. Nous conservons ces conventions et les échantillons bruts de service dans nos archives de benchmark.</p><figure class="fhe-chart"><img src="https://carouter.ai/blog/homomorphic-encryption-community-gpus/first-token-fr.png" alt="L’attente avant le premier token" width="1600" height="768" loading="lazy"/><figcaption>Échelle logarithmique. Le mode natif mesure le premier contenu reçu; le mode chiffré mesure le premier token généré. Le chargement et la préparation sont exclus.</figcaption></figure><h2>La justesse avant la vitesse</h2><p>Nos premiers essais de précision ont révélé des réglages qui généraient du texte sans réussir la comparaison numérique. Les essais du modèle moderne ont repris les précisions supérieures validées pour le stockage des chiffrés et le changement de clé. Nous avons contrôlé les produits entiers chiffrés lors de l’audit du modèle complet, puis enregistré et relu indépendamment les tenseurs de scores de chaque requête chiffrée terminée. La tolérance est restée à 0,005; l’écart maximal observé était nul.</p><p>Cela établit l’accord avec la référence quantifiée testée. Cela ne prouve pas une qualité de réponse égale à celle du checkpoint original : les suites de texte natives et quantifiées différaient. Nous n’avons mené ni évaluation de qualité sur un ensemble de tâches, ni examen cryptographique indépendant. Les échecs de configuration, l’erreur de sérialisation et les interruptions volontaires restent dans les archives, sans être comptés comme des inférences réussies.</p><h2>Le réseau n’était pas la principale source d’attente</h2><p>L’étape de décodage avec client séparé a passé 167,5 secondes dans le traitement chronométré par l’évaluateur. L’écart avec le temps aller-retour mesuré côté client était de 2,2 secondes, regroupant transport, sérialisation et ordonnancement. Ce n’est pas une mesure de latence réseau pure. Le calcul chiffré et le traitement des poids dominaient le délai; changer d’orchestrateur de VM ne supprimerait pas ce travail.</p><p>L’essai réseau a transféré 53,3 Mo de données applicatives pendant cette étape de décodage, au fil de 1 031 appels linéaires séquentiels. L’envoi initial de la clé publique de compression a ajouté 536,9 Mo et pris 2,09 secondes, séparément de l’inférence. Ces volumes excluent le surdébit HTTP, SSH et TCP. La comparaison avec l’essai sur une seule VM n’isole pas non plus le réseau : l’exécution côté client et les contrôles de produits entiers différaient aussi.</p><p>Nous avons testé séparément la mise en cache des poids préparés sur le GPU. Elle a amélioré certains temps de calcul sur une seule ligne, mais ce microbenchmark ne générait pas de texte avec le modèle complet et ses poids en cache. L’accélération d’un noyau isolé ne peut pas être présentée comme un nouveau débit du modèle.</p><figure class="fhe-chart"><img src="https://carouter.ai/blog/homomorphic-encryption-community-gpus/decode-breakdown-fr.png" alt="Répartition du temps d’un pas de décodage avec client séparé" width="1600" height="768" loading="lazy"/><figcaption>Échelle linéaire. Le temps client restant est calculé par différence. La catégorie transport comprend la sérialisation et l’ordonnancement; il ne s’agit pas de la seule latence réseau.</figcaption></figure><h2>Ce que coûte une réponse</h2><p>Au tarif GPU relevé de 1,45 $/heure, la génération longue a consommé environ 1,87 $ de temps d’exécution mesuré. Son débit de décodage correspondrait à environ 67 394 $ par million de tokens sortants, sans traitement initial de la requête ni préparation. En incluant la VM CPU séparée, la requête réseau courte a consommé environ 1,24 $ de temps d’exécution. Il s’agit de calculs selon le tarif, pas de factures ni de tests de capacité sur un million de tokens.</p><p>Le calcul estimé pour l’expérience chez Denvr, en incluant les tentatives échouées, le provisionnement et la durée de vie du contrôleur, s’élève à 7,75 $. Cette estimation repose sur les périodes d’allocation et les tarifs horaires; elle exclut le stockage, le réseau, les arrondis de facturation et les taxes. Nous n’avons pas consommé la totalité de la subvention. Les crédits ont permis de répondre à la question technique avant d’investir dans un système plus vaste.</p><h2>Ce que cela implique pour l’inférence confidentielle de CARouter</h2><p>Avec le moteur et la configuration testés, le seuil de performance interactive n’a pas été atteint. Ce résultat déconseille de bâtir aujourd’hui l’orchestration de production autour de cette implémentation; il ne prouve pas que tous les schémas homomorphes ou toutes les optimisations futures seront lents. Un autre moteur devra démontrer une vitesse utile, une qualité de réponse acceptable et une protection complète sur la charge de travail visée.</p><p>Le client séparé laisse aussi des hypothèses de confiance explicites. L’évaluateur voit les identifiants des experts sélectionnés, les dimensions des tenseurs et les durées. La VM CPU ordinaire suppose que son propre exploitant est digne de confiance. Nos requêtes synthétiques figuraient dans le code public des essais : l’expérience ne démontre donc pas que leur texte était inconnu de l’hôte GPU. Elle ne rend pas n’importe quelle machine communautaire sûre pour des requêtes clients.</p><p>Pour l’inférence native, une autre piste est le calcul confidentiel avec protection compatible du CPU et du GPU, attestation et remise des clés liée à la charge de travail vérifiée. Nous n’avons ni déployé ni mesuré cette architecture ici. Le nom d’un modèle de GPU ne suffit pas à établir ces protections. La confidentialité ne certifie pas non plus l’emplacement d’une machine et ne remplace pas les règles de résidence et de consentement aux fournisseurs de CARouter.</p><p>Un contrôleur CPU indépendant gérait les échéances des allocations et recueillait les résultats : une déconnexion du portable ne commandait donc pas la facturation GPU. Nous avons récupéré le code et les preuves, vérifié leurs empreintes et confirmé par l’API de Denvr la suppression de toutes les VM de l’expérience, y compris le contrôleur contenant les identifiants du compte. Les tenseurs de sortie sont conservés pour les vérifications futures, mais pas les poids des modèles ni les binaires compilés. Une suppression confirmée par API reste un constat opérationnel, pas une preuve d’effacement physique ni une protection contre un hôte ayant déjà vu des données en clair.</p><h2>Où en est la technologie aujourd’hui</h2><p>En septembre 2026, des systèmes de recherche s’attaquent aux caches KV chiffrés et à l’exécution hybride combinant chiffrement homomorphe et calcul confidentiel. Ce sont des pistes concrètes, mais les résultats dépendent de la taille du modèle, des hypothèses de confiance et de la nature des chiffres : génération réellement mesurée ou estimation à partir de composants. Nous n’avons pas reproduit ces systèmes; leurs vitesses annoncées ne valident donc pas notre charge de travail.</p><p><a href="https://arxiv.org/html/2602.11470v1" target="_blank" rel="noreferrer">Cachemir</a> · <a href="https://arxiv.org/html/2606.17421v1" target="_blank" rel="noreferrer">Bifrost</a></p><p>Face aux enjeux mondiaux de souveraineté, le chiffrement peut réduire la dépendance à la capacité ou à la volonté d’un exploitant distant de protéger les données en clair. Il n’établit pas à lui seul la souveraineté. La maîtrise des clés et du client de confiance, les lieux de calcul autorisés, l’exposition des métadonnées, l’intégrité du modèle et la continuité du service restent des exigences distinctes. Un calcul confidentiel à l’étranger ne respecte pas automatiquement la politique de résidence d’un client.</p><p>Face à la pénurie de GPU, la mesure pertinente est le nombre de réponses utiles par unité de calcul. Le chiffrement pourrait rendre utilisable un plus grand ensemble de machines jusque-là inadaptées, mais son surcoût doit rester inférieur à la capacité ainsi débloquée. Le moteur testé consomme beaucoup plus de temps de calcul par réponse. Ajouter des machines sans modifier cette implémentation séquentielle ne démontrerait pas une conversation individuelle plus rapide.</p><p>Notre constat : les briques cryptographiques existent, mais les preuves que nous avons examinées n’établissent pas encore un service généraliste d’inférence chiffrée de LLM modernes, économiquement utile sur des GPU communautaires quelconques. Pour l’immédiat, nous privilégions le calcul de confiance et l’évaluation séparée de déploiements confidentiels attestés. Nous réexaminerons l’inférence homomorphe communautaire lorsqu’un système complet démontrera le débit requis par requête, la qualité des réponses, la protection de l’état et des métadonnées, ainsi qu’un fonctionnement capable de reprendre après incident. Cela répondrait à une partie du problème de souveraineté; son intérêt face à la pénurie de GPU resterait à démontrer.</p><h2>Obtenir les fichiers du benchmark</h2><p>Ces conclusions décrivent nos expériences de septembre 2026. Nous conservons les mesures détaillées et les fichiers sources pour les travaux de suivi. L’essai H100 initial utilisait un autre modèle et un autre matériel; ces résultats ne comparent donc pas les générations de GPU.</p><p><a href="https://carouter.ai/contact">Contactez-nous pour obtenir les données du benchmark et les fichiers sources.</a></p><h2>Pour aller plus loin</h2><ul><li><a href="https://docs.zama.org/concrete-ml/llms/inference" target="_blank" rel="noreferrer">Documentation de l’inférence assistée par un client dans Concrete ML.</a></li><li><a href="https://github.com/zama-ai/concrete-ml-extensions/tree/6d3fdd1fab324874e3a2fc4a42cb3a708d5a80b4" target="_blank" rel="noreferrer">Code source de l’extension CUDA de calcul chiffré.</a></li><li><a href="https://docs.nvidia.com/attestation/attestation-client-tools-sdk/latest/gpu_and_switch_attestation.html" target="_blank" rel="noreferrer">Prérequis NVIDIA pour l’attestation en calcul confidentiel.</a></li></ul>]]></content:encoded>
</item>
<item>
<title>L’ajout de l’affinité de cache pour réduire les coûts et accélérer les réponses</title>
<link>https://carouter.ai/fr/blog/cache-affinity</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/cache-affinity</guid>
<pubDate>Thu, 10 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Produit</category>
<description>Un fournisseur d’IA peut traiter des instructions répétées plus vite et à moindre coût s’il peut réutiliser le travail déjà effectué. L’affinité de cache favorise cette réutilisation après un changement de fournisseur, tout en respectant vos règles de routage.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/cache-affinity/illustration.png" alt="Ajout du cache persistant aux conversations : un modèle, deux fournisseurs souverains, quatre requêtes. La troisième reste chez le fournisseur qui détient le cache encore chaud au lieu de retourner aussitôt au premier choix du catalogue ; plus tard, l'ordre du catalogue reprend." /></p><p>Un assistant d’IA reçoit souvent les mêmes instructions et l’historique de la conversation à chaque nouvelle question. Traiter à nouveau ce contenu prend du temps et peut alourdir la facture. La mise en cache des prompts permet au fournisseur de réutiliser temporairement le travail déjà effectué, avec un potentiel de réponses plus rapides et de coûts d’entrée réduits.</p><p>L’affinité de cache de CARouter vise à préserver cet avantage lorsqu’une requête doit passer à un autre fournisseur. Le fournisseur qui vient de répondre est privilégié pour les requêtes suivantes utilisant la même clé API et le même modèle. L’activation dépend de la vérification de la durée de cache publiée par chaque fournisseur.</p><h2>Pourquoi un changement de fournisseur compte</h2><p>Prenons un assistant de service à la clientèle en pleine conversation. Son fournisseur habituel est occupé. CARouter confie donc la requête suivante à un autre fournisseur autorisé qui sert le même modèle. Celui-ci traite la conversation et peut mettre le contenu répété en cache pour le réutiliser.</p><p>Sans affinité de cache, la requête suivante peut retourner au fournisseur habituel dès qu’il est disponible. Le travail effectué chez le fournisseur de remplacement ne peut pas y être réutilisé. Confier la suite au fournisseur qui vient de répondre permet de profiter de son cache, s’il est encore disponible.</p><h2>Vos règles de routage restent prioritaires</h2><ul><li>Résidence des données et fiabilité : cette préférence ne place jamais un fournisseur étranger devant un fournisseur souverain. Elle respecte vos autorisations et vos règles de passage à l’étranger, et ne privilégie pas un fournisseur dégradé face à un fournisseur en bon état dans la même catégorie de résidence.</li><li>Maîtrise des coûts : si votre clé API privilégie le coût, le tarif affiché le plus bas reste prioritaire. L’affinité de cache départage seulement les offres au même prix.</li><li>Mémoire de routage limitée : cette fonction retient le fournisseur qui a répondu en dernier pour une clé API et un modèle. Elle ne conserve ni copie ni empreinte de votre prompt. Le fournisseur gère son propre cache.</li><li>Préférence temporaire : chaque requête réussie renouvelle la préférence pour la durée de cache vérifiée du fournisseur. À l’expiration, le routage habituel reprend. Il s’applique aussi si la préférence ne peut pas être consultée.</li></ul><h2>À quoi vous attendre</h2><p>Les instructions répétées et les conversations suivies offrent le meilleur potentiel. Les économies et les gains de rapidité ne sont pas garantis : le fournisseur doit prendre en charge le cache, reconnaître du contenu réutilisable et l’avoir encore à disposition. CARouter ne crée pas de cache et n’en transfère pas entre fournisseurs.</p><p>Lorsqu’un fournisseur indique la quantité de tokens entrants servis depuis son cache et publie un tarif correspondant, ce tarif est utilisé pour calculer le coût de la requête. La documentation affiche les tarifs des entrées en cache lorsqu’ils sont disponibles, afin que votre équipe puisse en évaluer l’intérêt.</p><p>L’affinité de cache s’active uniquement pour les fournisseurs dont la durée de cache a été vérifiée. Sans cette vérification, les requêtes suivent les règles de routage existantes.</p><p><a href="https://carouter.ai/docs">Comparer les modèles et les tarifs disponibles.</a> <a href="https://carouter.ai/llms-full.txt">Consulter les règles techniques de routage.</a></p>]]></content:encoded>
</item>
<item>
<title>Des tokens plus verts : l'empreinte carbone de chaque modèle, avant de le choisir</title>
<link>https://carouter.ai/fr/blog/environment-indicator</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/environment-indicator</guid>
<pubDate>Mon, 07 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Produit</category>
<description>Chaque offre de notre documentation affiche désormais une estimation des émissions de carbone par million de tokens, avec une couleur selon le réseau électrique utilisé. Voici pourquoi nous la publions, les données et la formule du calcul, ainsi que ses limites.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/environment-indicator/illustration.png" alt="Des tokens plus verts, par conception : deux modèles ancrés au Canada sur le réseau ontarien, chaque lieu d'hébergement portant une feuille verte et ses grammes de CO₂e par million de tokens, au-dessus des trois catégories de réseau." /></p><p>Chaque offre de notre page de documentation porte désormais une petite feuille. À côté, un chiffre : une estimation du carbone émis pour servir un million de tokens avec ce modèle, chez ce fournisseur. Ce billet explique pourquoi nous le publions, comment il est calculé, et ce qu&#x27;il laisse de côté.</p><h2>Pourquoi un chiffre, et pourquoi maintenant</h2><p>La consommation électrique de l&#x27;IA est devenue une question publique, et une question légitime. Ceux qui choisissent CARouter font déjà un choix délibéré sur la destination de leurs données. Ils méritent la même clarté sur ce que leurs requêtes coûtent au réseau électrique, pour que souverain et durable soient une seule décision plutôt que deux.</p><p>Le 3 septembre, le gouvernement du Canada a lancé ses Principes pour le développement responsable des centres de données. Deux des cinq demandent aux centres de données de réduire au minimum leurs impacts environnementaux et d&#x27;en rendre compte de façon transparente. Nous ne construisons pas de centres de données. Nous y acheminons des requêtes. À notre échelle, la transparence, c&#x27;est un chiffre à côté de chaque offre, avec sa méthode et ses sources, pour qu&#x27;un client puisse en tenir compte. <a href="https://www.canada.ca/en/innovation-science-economic-development/news/2026/09/government-of-canada-launches-canadas-responsible-data-centre-development-principles.html" target="_blank" rel="noreferrer">Les principes, sur canada.ca.</a></p><h2>Ce que dit la feuille</h2><ul><li><strong>Le chiffre.</strong> Des grammes d&#x27;équivalent CO₂ par million de tokens, électricité d&#x27;exploitation seulement, arrondis à deux chiffres significatifs.</li><li><strong>La couleur.</strong> La catégorie du réseau qui alimente le service : vert sous 100 g de CO₂e par kWh, ambre jusqu&#x27;à 300, rouge au-delà. Le réseau plutôt que le chiffre, parce que c&#x27;est sur le réseau que vous avez prise en choisissant d&#x27;où un modèle est servi.</li><li><strong>Par offre, pas par modèle.</strong> Pour un même modèle, les émissions peuvent varier de deux ordres de grandeur entre le Québec et l&#x27;Alberta. Une moyenne par modèle ne correspondrait à aucun des réseaux réellement utilisés.</li><li><strong>Ou rien.</strong> Aucune feuille n&#x27;est affichée si le nombre de paramètres du modèle ou l&#x27;intensité carbone du réseau ne sont pas documentés. Nous ne remplaçons pas une donnée manquante par celle d&#x27;une région voisine.</li></ul><h2>Comment il est calculé</h2><p>Deux données vérifiées et une formule publiée.</p><p>L&#x27;énergie découle du nombre de paramètres actifs du modèle, celui que son concepteur publie sur la fiche du modèle. Une passe avant coûte deux opérations en virgule flottante par paramètre actif et par token, autant pour le préremplissage, le décodage, les plongements que le reclassement. Avec les constantes de service de classe H100 publiées par Epoch AI, cela donne environ 0,006 kWh par milliard de paramètres actifs et par million de tokens, refroidissement et distribution compris.</p><p>L&#x27;intensité carbone découle du réseau de la région d&#x27;où le fournisseur déclare servir : le chiffre de la Régie de l&#x27;énergie du Canada pour chaque province, celui de RTE pour la France, celui de l&#x27;Energy Information Administration pour les États-Unis. Chaque ligne indique l&#x27;année qu&#x27;elle décrit et l&#x27;adresse où le chiffre a été lu. Un fournisseur qui ne déclare que le Canada, sans province, est compté sur la moyenne nationale.</p><p>On multiplie les deux. Pour un modèle de 100 milliards de paramètres actifs, 0,59 kWh par million de tokens devient, selon les chiffres publiés des réseaux :</p><ul><li>0,7 g au Québec, 8 g en Colombie-Britannique, 21 g en Ontario ;</li><li>59 g sur la moyenne nationale canadienne ;</li><li>220 g sur la moyenne américaine, et 280 g en Alberta.</li></ul><figure class="blog-figure"><img src="https://carouter.ai/blog/environment-indicator/01-one-model-seven-grids.png" alt="Le même million de tokens d&#x27;un modèle de 100 milliards de paramètres actifs sur sept réseaux, de moins d&#x27;un gramme au Québec à des centaines de grammes en Alberta." loading="lazy"/><figcaption>Le même million de tokens d&#x27;un modèle de 100 milliards de paramètres actifs sur sept réseaux, de moins d&#x27;un gramme au Québec à des centaines de grammes en Alberta.</figcaption></figure><p>Pour un même modèle et les mêmes tokens, les émissions varient d&#x27;un facteur quatre cents entre le réseau le moins polluant et le plus polluant. Cet écart justifie de publier une estimation pour chaque offre.</p><h2>Ce qu&#x27;il ne compte pas</h2><ul><li>Les émissions liées à la fabrication du matériel, et le réseau entre les deux. C&#x27;est l&#x27;électricité de l&#x27;inférence, rien d&#x27;autre.</li><li>Le matériel réel du fournisseur. Toutes les offres utilisent les mêmes constantes H100 : l&#x27;estimation permet de les comparer, sans mesurer la consommation de leurs serveurs. Elle surestime celle des puces plus récentes et sous-estime celle des plus anciennes, d&#x27;un facteur constant.</li><li>Les certificats d&#x27;énergie renouvelable et les contrats d&#x27;approvisionnement. Le chiffre du réseau est géographique : une prise en Alberta tire le mélange albertain quoi que disent les papiers, et un chiffre géographique ne se manipule pas.</li><li>L&#x27;actualité des données. Les chiffres des réseaux sont des moyennes annuelles qui évoluent. Chaque ligne indique l&#x27;année de référence, et nous nous engageons à consulter régulièrement les sources.</li></ul><h2>S&#x27;en servir pour choisir</h2><p>Deux habitudes rapportent. Choisir le plus petit modèle qui fait le travail, parce que l&#x27;énergie suit le nombre de paramètres actifs et qu&#x27;un petit modèle sur un réseau propre est le token le moins cher qui soit. Et quand un modèle est servi depuis plusieurs endroits, préférer l&#x27;offre la plus verte. Au Canada, cela entre rarement en conflit avec la souveraineté : les provinces hydroélectriques offrent les deux.</p><p>L&#x27;estimation figure aussi dans la version lisible par machine de notre documentation, avec la méthode complète, pour qu&#x27;un agent qui choisit un modèle à votre place puisse en tenir compte lui aussi. <a href="https://carouter.ai/docs">La page de documentation affiche la feuille à côté de chaque offre qui en a une.</a></p>]]></content:encoded>
</item>
<item>
<title>CARouter rejoint Denvr AI Ascend : des crédits infonuagiques pour mesurer les performances sur du matériel canadien</title>
<link>https://carouter.ai/fr/blog/denvr-ai-ascend</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/denvr-ai-ascend</guid>
<pubDate>Sat, 05 Sep 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Partenariats</category>
<description>CARouter rejoint Denvr AI Ascend, le programme de démarrage d'un fournisseur infonuagique canadien qui exploite ses propres GPU à Calgary. Les crédits serviront à mesurer les modèles sur du matériel de centre de données, et ces mesures nourriront le routeur. Denvr loue des GPU à l'heure et n'offre pas de point d'accès d'inférence : rien ne change donc sur la plateforme.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/denvr-ai-ascend/illustration.png" alt="CARouter.ai admis dans le programme de démarrage de Denvr. Denvr Dataworks est un fournisseur infonuagique souverain de l'Alberta. Les crédits soutiendront le développement du produit." /></p><p>CARouter a été admis dans Denvr AI Ascend, le programme de démarrage de Denvr Dataworks.</p><p>Denvr est un fournisseur infonuagique souverain de l&#x27;Alberta : une entreprise canadienne qui exploite ses propres grappes de GPU à Calgary. C&#x27;est exactement ce que nous exigeons de chaque fournisseur présent sur notre plateforme. Le choix allait de soi.</p><h2>Ce qu&#x27;est Denvr</h2><p>Denvr répond aux deux questions que nous posons à tout fournisseur : qui possède l&#x27;entreprise, et où se trouvent les machines.</p><p>Denvr nous a dit en août ce qu&#x27;il vend : des GPU à l&#x27;heure, sans API d&#x27;inférence. Les points d&#x27;accès hébergés ne sont pas à leur feuille de route cette année, et Denvr ne figure donc pas parmi les fournisseurs listés sur notre page de documentation.</p><p>Cette annonce n&#x27;y change rien. Aucune requête passant par notre plateforme ne tourne chez Denvr. Un programme de démarrage n&#x27;est pas une entente de partenariat. Ce sont des crédits, et des crédits achètent du temps de machine.</p><h2>À quoi servira ce temps de machine</h2><p>Jusqu&#x27;ici, tout ce que nous avons publié sur ce blog a été mesuré sur une seule machine de bureau, celle de classe DGX Spark qui fait tourner CARouter Cloud. Elle nous apprend beaucoup sur les petits modèles en mémoire unifiée, et rien sur les serveurs de classe H100 qu&#x27;exploitent réellement les fournisseurs canadiens.</p><p>Les crédits iront donc à la mesure. Trois chantiers :</p><ul><li><strong>Des modèles à poids ouverts sur du matériel canadien.</strong> Les mêmes tests de débit, la même évaluation comparative de code et les mêmes essais de contexte long que sur le Spark, cette fois sur des GPU de centre de données à Calgary.</li><li><strong>Des chiffres utiles au routeur.</strong> Aujourd&#x27;hui, les candidats sont classés par résidence, puis par priorité, puis par prix. Le routeur ne sait rien du comportement d&#x27;une offre sous charge. Mesurer la latence et le débit de chaque modèle, c&#x27;est ce qui transforme cette règle en décision éclairée.</li><li><strong>Publié ici, erreurs comprises.</strong> Chaque campagne de mesures deviendra un article : le protocole, les graphiques tirés des mêmes chiffres, les réserves. Une mesure que personne ne peut reproduire n&#x27;est qu&#x27;un argument marketing.</li></ul><h2>Ce que nous ne promettons pas</h2><p>Il existe une seule façon pour du matériel Denvr de servir un jour le trafic de nos clients : que CARouter Cloud fasse tourner sa propre pile de service sur des GPU loués à Calgary. Du matériel canadien, dans un centre de données canadien, exploité par nous. Chaque engagement de notre plateforme tiendrait.</p><p>Notre étude de capacité prévoit d&#x27;ailleurs un nœud Denvr réservé comme solution de repli, si le matériel que nous comptons acheter ne tient pas ses promesses. Nous le notons par souci de transparence. Ce n&#x27;est pas un projet en cours, et ce programme ne le finance pas. Denvr restera absent de la page de documentation tant que rien de concret n&#x27;aura changé.</p><p>Merci à l&#x27;équipe de Denvr pour son accueil. <a href="https://carouter.ai/docs">La documentation présente chaque fournisseur de notre plateforme et ce qu&#x27;il garantit aujourd&#x27;hui.</a></p>]]></content:encoded>
</item>
<item>
<title>Partenariat avec Augure : deux modèles entraînés au Canada et servis exclusivement au Canada</title>
<link>https://carouter.ai/fr/blog/augure-partnership</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/augure-partnership</guid>
<pubDate>Mon, 31 Aug 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Partenariats</category>
<description>Rosedale One et Tofino 3 sont en service sur notre plateforme. Servis au Canada ou refusés, jamais basculés à l'étranger, et aucune requête conservée une fois traitée. Voici ce qu'il y a derrière les trois mentions de notre carte.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/augure-partnership/illustration.png" alt="CARouter et Augure : une IA véritablement canadienne, détenue et servie au Canada. Rosedale One et Tofino 3 sont en service dans le cadre d'une entente contraignante sur la protection des données : aucune conservation, aucun basculement à l'étranger, l'en-tête X-CARouter-Region sur chaque réponse." /></p><p>Nous annonçons aujourd&#x27;hui un partenariat avec Augure, une entreprise d&#x27;IA torontoise. Rosedale One et Tofino 3 sont dès maintenant en service sur notre plateforme.</p><p>Notre carte de partage porte trois mentions. Chacune s&#x27;appuie sur une entente signée. Voici ce qu&#x27;elles veulent dire concrètement.</p><h2>En bref</h2><ul><li><strong>Qui.</strong> Augure est une entreprise canadienne, établie à Toronto, sans aucune société mère étrangère. Elle post-entraîne ses propres modèles à partir de bases à poids ouverts et les sert sur des GPU situés au Canada.</li><li><strong>Quoi.</strong> Rosedale One est le modèle de raisonnement : un million de tokens de contexte et une phase de réflexion. Tofino 3 est le modèle léger : rapide, sans réflexion, 256K de contexte. Les deux prennent en charge les outils, la sortie JSON structurée et les images. Nous l&#x27;avons vérifié nous-mêmes.</li><li><strong>Où.</strong> Au Canada, par contrat. Une requête est servie sur une infrastructure canadienne ou elle est refusée. Jamais de basculement, de réplication ni de débordement à l&#x27;étranger.</li><li><strong>Conservation.</strong> Requêtes et réponses sont effacées dès qu&#x27;elles ont été traitées. Les métadonnées, qui n&#x27;en contiennent rien, sont conservées trente jours au plus. Nous publions ces deux garanties séparément.</li><li><strong>Preuve.</strong> Chaque réponse porte l&#x27;en-tête X-CARouter-Region. Pour ces deux modèles, sa valeur provient de ce qu&#x27;Augure déclare pour la requête elle-même, et non d&#x27;une étiquette fixée une fois pour toutes.</li></ul><h2>Servi au Canada, ou refusé</h2><p>Augure s&#x27;engage à ne traiter les requêtes que CARouter lui achemine, pour ces deux modèles, que sur une infrastructure située au Canada. Quand la capacité canadienne est épuisée, Augure renvoie une erreur plutôt que de servir la requête ailleurs. Il n&#x27;est pas acceptable, ni pour Augure ni pour nous, qu&#x27;une requête franchisse le territoire canadien, alors même que nous avons assuré au client qu&#x27;elle ne le ferait pas.</p><p>De notre côté, la même promesse. CARouter ne bascule jamais une requête d&#x27;un pays à un autre, sauf si la clé API l&#x27;autorise expressément. Quand Augure est saturé, le client reçoit une erreur provider_at_capacity accompagnée d&#x27;un en-tête Retry-After. Une plateforme moins rigoureuse servirait discrètement un autre modèle depuis un autre pays. Nous préférons expliquer une erreur plutôt qu&#x27;une substitution.</p><h2>D&#x27;où vient l&#x27;en-tête de région</h2><p>L&#x27;API d&#x27;Augure indique, sur chaque réponse, où le modèle a réellement tourné. Nous lisons cette valeur à chaque requête et la publions dans l&#x27;en-tête X-CARouter-Region. Mesurés avec notre propre identifiant, les deux modèles répondent depuis Waterloo, en Ontario.</p><p>Le lieu de traitement est donc vérifié à chaque requête. Si nous ne savons pas situer la valeur reçue, nous indiquons UNVERIFIED au lieu de reprendre la région déclarée par le fournisseur.</p><p>En diffusion continue, l&#x27;en-tête part avant qu&#x27;Augure ait répondu. La valeur corrigée est donc envoyée dans une trame carouter.region finale et consignée dans le journal des requêtes.</p><h2>Zéro conservation, noir sur blanc</h2><p>La page sécurité d&#x27;Augure promettait déjà zéro conservation. L&#x27;entente y ajoute un engagement qui ne peut pas changer sans préavis : le contenu des requêtes et des réponses n&#x27;est pas conservé une fois la requête traitée, et rien n&#x27;en sert à entraîner, à affiner ni à évaluer un modèle. Les métadonnées de requête, qui ne contiennent aucun contenu, sont conservées trente jours au plus, et nous publions cette garantie à part.</p><h2>Pour l&#x27;utiliser</h2><p>Augure est désactivé par défaut dans chaque espace de travail, et aucun déploiement ne l&#x27;activera à votre place. L&#x27;activer dans les Paramètres vaut acceptation des conditions d&#x27;Augure. Un interrupteur déjà activé serait un consentement que personne n&#x27;a donné.</p><p>Une fois activé, les deux modèles répondent au point d&#x27;accès habituel :</p><pre class="code-block">curl https://carouter.ai/v1/chat/completions \
  -H &quot;Authorization: Bearer $CAROUTER_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#x27;{&quot;model&quot;: &quot;tofino-3&quot;, &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Bonjour&quot;}]}&#x27; \
  -i | grep -i x-carouter-region</pre><p>Les tarifs sont les tarifs de base majorés selon votre forfait, comme pour toute autre offre. <a href="https://carouter.ai/docs">La documentation présente les deux modèles et leurs tarifs en vigueur.</a></p><h2>Et ensuite</h2><p>D&#x27;autres modèles suivront à mesure qu&#x27;Augure les ancrera au Canada. Chacun ne sera publié qu&#x27;une fois qu&#x27;Augure aura confirmé par écrit qu&#x27;il est servi au Canada, sans basculement à l&#x27;étranger. Aucun modèle n&#x27;entre sur notre plateforme sans cette garantie. C&#x27;est tout l&#x27;objet du partenariat.</p>]]></content:encoded>
</item>
<item>
<title>Qwen3.8-Flash-Next sur le DGX Spark de CARouter : de meilleures réponses, mais dix fois plus d'attente</title>
<link>https://carouter.ai/fr/blog/qwen3-8-flash-next-ten-times-the-wait</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/qwen3-8-flash-next-ten-times-the-wait</guid>
<pubDate>Sat, 29 Aug 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>L'aperçu de l'architecture Qwen4 de Qwen domine les palmarès de codage, et sa plus petite version servable pèse 125,9 Gio face à une machine qui en compte 121,6 au total. 38 % de son poids est une table de correspondance : il tourne donc quand même - diffusé depuis le SSD, sur un moteur rapiécé, seul sur la machine. Il est environ trois fois plus lent, tient le quart des conversations et écrit trois fois et demie plus de tokens par problème. Il code probablement mieux que ce que nous servons, et sur ce matériel cet avantage coûte 13 minutes par réponse.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/qwen3-8-flash-next-ten-times-the-wait/illustration.png" alt="176 milliards de paramètres sur une machine de bureau : il entre en lisant 38 % de lui-même depuis le disque, et coûte 13 minutes par réponse et 4,1 fois moins de sessions pour résoudre un problème de plus sur quarante." /></p><p>Qwen a publié Qwen3.8-Flash-Next le 26 août, un premier aperçu de l&#x27;architecture sur laquelle reposera la famille Qwen4, et il s&#x27;est hissé d&#x27;emblée en tête des palmarès de codage : 91,9 sur LiveCodeBench v6 contre 80,4 pour le modèle que fait tourner notre propre point d&#x27;accès de codage. Trois jours plus tard, nous le servions sur la machine de bureau qui sert CARouter Cloud, et nous ne l&#x27;avons pas gardé. Voici tous les chiffres que nous avons mesurés, et ce qu&#x27;ils coûtent.</p><p><a href="https://carouter.ai/fr/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b">Le billet précédent : pourquoi le point d&#x27;accès de codage fait tourner Qwen3.6 35B-A3B, un modèle plus ancien et moins bien classé, plutôt que Qwen3.8 27B.</a></p><h2>En bref</h2><ul><li><strong>Il n&#x27;entre pas.</strong> La plus petite version que nous puissions servir pèse 125,9 Gio. La machine dispose de 121,6 Gio de mémoire au total. C&#x27;est le premier modèle que nous examinons qui soit plus gros que l&#x27;ordinateur, avant même d&#x27;avoir stocké un seul token de conversation.</li><li><strong>38 % de son poids n&#x27;est pas un modèle.</strong> C&#x27;est une table de correspondance : 20 000 000 de lignes de plongements de n-grammes, 51,2 milliards de paramètres, 47,7 Gio. Un token en touche 16 lignes. Diffusez-les depuis le SSD au lieu de les garder en mémoire et ce qui doit rester résident tombe à 78,2 Gio, ce qui entre.</li><li><strong>Le nombre de paramètres annoncé l&#x27;omet.</strong> La fiche du modèle annonce 125 milliards. Les poids en contiennent 180 milliards. La différence, c&#x27;est cette table, plus la tête de brouillon et la tour de vision, toutes comptées à part.</li><li><strong>Il est environ trois fois plus lent.</strong> 21,3 tokens par seconde sur 1 flux contre 62,2, et 129,8 contre 367,2 avec 16 flux simultanés. Le préremplissage est 3,7 fois plus lent. Il tient le quart des conversations simultanées de 262K tokens : 1,7 contre 7,0.</li><li><strong>Il code probablement mieux.</strong> Sur les 40 problèmes qu&#x27;il a terminés dans un budget de 32 768 tokens, il en a résolu 29, contre 27 pour le modèle que nous servons et 26 pour celui d&#x27;avant. Il a dépassé le budget sur les 10 autres. Aucun des deux écarts n&#x27;est statistiquement significatif.</li><li><strong>Mais l&#x27;attente est dix fois plus longue.</strong> Il écrit 16 751 tokens par problème là où le modèle en place en écrit 4 738. À sa propre vitesse de décodage, cela donne une réponse de 13 minutes contre 76 secondes, pour au mieux 1 problème résolu de plus sur 40.</li></ul><h2>Un modèle plus gros que l&#x27;ordinateur</h2><p>Le point d&#x27;accès auto-hébergé de CARouter Cloud tourne sur un seul ASUS Ascent GX10, une machine de bureau de classe DGX Spark : une puce GB10 avec 128 Go de mémoire partagée entre le processeur et la partie graphique, dont 121,6 Gio réellement adressables. Chaque modèle que nous avons mis en service devait y entrer, aux côtés des 2 modèles de plongement et du reclasseur que le produit sert également.</p><p>Qwen3.8-Flash-Next n&#x27;y entre pas. 9 personnes différentes en avaient publié des versions quantifiées en 72 heures, et nous les avons toutes vérifiées : la plus petite que nous puissions réellement servir pèse 125,9 Gio de poids. C&#x27;est 4,3 Gio de plus que ce que contient la machine entière, avant le système d&#x27;exploitation, avant le moteur d&#x27;inférence, avant d&#x27;avoir stocké un seul mot de la conversation de qui que ce soit.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-8-flash-next-ten-times-the-wait/02-bigger-than-the-box.png" alt="Le checkpoint publié pèse 125,9 Gio face à une machine de 121,6 Gio. Diffuser la table de n-grammes de 47,7 Gio depuis le SSD laisse 78,2 Gio résidents, ce qui entre." loading="lazy"/><figcaption>Le checkpoint publié pèse 125,9 Gio face à une machine de 121,6 Gio. Diffuser la table de n-grammes de 47,7 Gio depuis le SSD laisse 78,2 Gio résidents, ce qui entre.</figcaption></figure><p>Normalement l&#x27;histoire s&#x27;arrête là, et notre procédure de présélection est conçue pour y mettre fin en 10 minutes environ, à partir des métadonnées publiques, sans rien télécharger. Ce qui a valu la peine de continuer ici, c&#x27;est d&#x27;avoir lu la liste réelle des tenseurs du fichier plutôt que la fiche du modèle.</p><p>La fiche annonce 125 milliards de paramètres. Les poids en contiennent 180 milliards. L&#x27;écart tient dans une énorme table de correspondance - les plongements de n-grammes, exactement 20 000 000 de lignes de 2 560 nombres chacune, 51,2 milliards de paramètres et 47,7 Gio même après que tous les quantificateurs en circulation s&#x27;y sont essayés, et pas un seul ne l&#x27;a comprimée sous les 8 bits. Elle représente 38 % du fichier. Ajoutez la tête de brouillon et la tour de vision, elles aussi comptées hors du chiffre annoncé, et 125 milliards deviennent 180 milliards.</p><p>Une table de correspondance n&#x27;est pas une multiplication de matrices. Produire un token touche 16 de ces 20 000 000 de lignes, environ 2,5 Ko. Elle n&#x27;a donc pas besoin d&#x27;être en mémoire du tout : elle peut rester sur le SSD et être lue au besoin. Quelqu&#x27;un l&#x27;avait déjà fait - un projet public qui corrige le moteur officiel pour projeter la table en mémoire depuis le disque - et avec lui les poids résidents tombent à 78,2 Gio et le modèle tourne sur une seule machine, seul.</p><h2>Ce qu&#x27;il a fallu pour le faire tourner tout court</h2><p>6 correctifs par-dessus l&#x27;image officielle, aucun de nous : la table projetée en mémoire, deux corrections pour les noyaux d&#x27;attention linéaire sur cette puce précise, une protection contre une course à la copie d&#x27;état, une correction du cache de préfixes qui restaurait silencieusement un état entièrement nul à chaque succès de cache, et le remplacement d&#x27;un noyau d&#x27;attention creuse qui renvoie des réponses différentes à la même question. Le moteur lui-même n&#x27;est pas une version publiée - c&#x27;est une compilation issue d&#x27;une branche, parce que l&#x27;architecture est trop récente pour figurer dans une version publiée, y compris celle que nous épinglons.</p><p>Il ne peut pas non plus partager la machine. Notre point d&#x27;accès fait normalement tourner 4 services à la fois : le modèle de codage, 2 modèles de plongement et un reclasseur. Qwen3.8-Flash-Next prend la machine entière. Chaque mesure ci-dessous a été prise avec le reste de l&#x27;inférence du produit à l&#x27;arrêt.</p><h2>Le débit</h2><p>Nous avons lancé le même banc d&#x27;essai que sur tout le reste, sans le modifier : la même consigne, les mêmes 20 secondes de mise en train et 40 secondes de fenêtre de mesure, les mêmes compteurs lus depuis le moteur lui-même.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-8-flash-next-ten-times-the-wait/01-decode-by-streams.png" alt="Débit de décodage à 1, 2, 4, 8 et 16 flux. Qwen3.6 35B-A3B atteint 62, 115, 181, 263 et 367 tokens par seconde ; Qwen3.8-Flash-Next atteint 21, 39, 54, 88 et 130." loading="lazy"/><figcaption>Débit de décodage à 1, 2, 4, 8 et 16 flux. Qwen3.6 35B-A3B atteint 62, 115, 181, 263 et 367 tokens par seconde ; Qwen3.8-Flash-Next atteint 21, 39, 54, 88 et 130.</figcaption></figure><p>Entre 2,8 et 3,4 fois plus lent à tous les niveaux de simultanéité, 3,7 fois plus lent à lire une consigne, et tenant 1,7 conversation de pleine longueur à la fois là où le modèle que nous servons en tient 7,0. Ce qui rend le résultat pire qu&#x27;il n&#x27;y paraît, c&#x27;est le handicap : Qwen3.8-Flash-Next tournait avec du décodage spéculatif - une tête de brouillon intégrée à ses propres poids, acceptant 51 % de ses suppositions et livrant 2,02 tokens par étape - sur le noyau rapide de cette puce. Le modèle qui l&#x27;a battu ne dispose d&#x27;aucun modèle brouillon et tourne sur un noyau de repli que nous n&#x27;avons jamais réussi à remplacer.</p><h2>La note de codage</h2><p>50 problèmes de codage, les mêmes 50 sur lesquels nous notons chaque modèle, exécutés à l&#x27;identique : mêmes problèmes, même budget, mêmes réglages, un modèle après l&#x27;autre sur la même machine.</p><p>La première chose que l&#x27;essai mesure n&#x27;est pas la qualité, c&#x27;est la longueur. Flash-Next est un modèle de raisonnement et il écrit 16 751 tokens sortants par problème, contre 4 738 pour le modèle que nous servons. Notre budget était de 32 768 tokens, et il a dépassé ce plafond sur 10 des 50 problèmes - coupé en pleine réponse, avec zéro à chaque fois. Ce ne sont pas de mauvaises réponses : l&#x27;ensemble comparable est donc celui des 40 qu&#x27;il a terminés dans le budget.</p><p>Sur ces 40, c&#x27;est lui qui arrive en tête : 29 résolus, contre 27 pour le modèle que nous servons et 26 pour celui d&#x27;avant. C&#x27;est le même ordre que les palmarès publics, et aucun des deux écarts n&#x27;est statistiquement significatif - détecter l&#x27;écart de 11,5 points annoncé par les palmarès demanderait environ 88 problèmes appariés. À lire comme compatible avec l&#x27;hypothèse que Flash-Next code mieux, et comme un échantillon trop petit pour la démontrer.</p><p>Le taux de dépassement est un résultat à part entière, et sans doute celui qui vous concernera le plus : 20 % des problèmes de codage ordinaires demandent à ce modèle plus de 32 768 tokens. Quel que soit le budget que vous fixez, il l&#x27;atteindra plus souvent que les modèles dont vous avez l&#x27;habitude, et une réponse tronquée est pire qu&#x27;une réponse lente.</p><h2>Ce que l&#x27;on attend vraiment</h2><p>Le bavardage n&#x27;est pourtant pas un artefact de notre banc d&#x27;essai. C&#x27;est le produit.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-8-flash-next-ten-times-the-wait/03-the-answer-you-wait-for.png" alt="Par problème de codage, Qwen3.6 35B-A3B écrit 4 738 tokens et répond en environ 76 secondes ; Qwen3.8-Flash-Next en écrit 16 751 et prend environ 13 minutes." loading="lazy"/><figcaption>Par problème de codage, Qwen3.6 35B-A3B écrit 4 738 tokens et répond en environ 76 secondes ; Qwen3.8-Flash-Next en écrit 16 751 et prend environ 13 minutes.</figcaption></figure><p>3,5x les tokens, au tiers de la vitesse, cela fait 10x l&#x27;attente. Soixante-seize secondes deviennent 13 minutes, pour une réponse au mieux meilleure d&#x27;1 problème sur 40 et le plus souvent identique. Et un modèle qui dépasse un budget de 32 768 tokens sur un cinquième des problèmes de codage ordinaires le fera aussi à un client payant, pas seulement à notre banc d&#x27;essai - une réponse tronquée est pire qu&#x27;une réponse lente.</p><h2>La réserve honnête</h2><p>40 problèmes ne peuvent pas trancher si un modèle écrit du code 10 % mieux qu&#x27;un autre, et nous n&#x27;affirmons pas que Qwen3.8-Flash-Next est moins bon. Nous pensons qu&#x27;il est probablement meilleur. Ce que nous avons mesuré, c&#x27;est que sur ce matériel son avantage est hors d&#x27;atteinte : il arrive dix fois plus tard, dans le quart des conversations parallèles, sur un moteur compilé depuis une branche, sans rien d&#x27;autre qui tourne sur la machine.</p><p>Une autre machine change entièrement cette réponse. 2 de ces machines, ou une avec plus de mémoire, et la table reste en mémoire, le modèle ne partage le matériel avec rien, et la comparaison devient un combat loyal qu&#x27;il pourrait fort bien gagner. 3 des modèles que nous avons écartés ce mois-ci l&#x27;ont été pour la même raison, ce qui n&#x27;est pas vraiment un fait au sujet des modèles.</p><h2>Ce qui nous ferait changer d&#x27;avis</h2><ul><li><strong>Une table quantifiée.</strong> Personne n&#x27;a comprimé les plongements de n-grammes sous les 8 bits, y compris ceux qui ont quantifié tout le reste à 4. À 4 bits, le fichier perd 23,8 Gio et reste en mémoire.</li><li><strong>Un chemin d&#x27;attention linéaire quantifié.</strong> 43 % de ce que le modèle lit par token, ce sont des projections que toutes les versions publiées laissent en pleine largeur. Les diviser par deux double à peu près le plafond.</li><li><strong>L&#x27;architecture dans un moteur publié.</strong> L&#x27;architecture n&#x27;est disponible que sur une branche et nécessite un correctif de noyau que le projet principal n&#x27;a pas intégré pour cette puce. Une version officielle permettrait de remplacer notre assemblage de correctifs par une version standard.</li><li><strong>Une deuxième machine.</strong> La configuration qu&#x27;utilisent tous ceux qui font tourner ce modèle avec succès.</li></ul><p>En attendant l&#x27;un de ces changements, le point d&#x27;accès de codage continue de faire tourner un modèle plus petit, plus ancien et moins bien classé, qui répond en 76 secondes et tient 7 conversations à la fois. Tout ce qui précède est reproductible depuis notre dépôt d&#x27;infrastructure : la présélection et son arithmétique, le script de banc d&#x27;essai, et la configuration d&#x27;évaluation.</p>]]></content:encoded>
</item>
<item>
<title>Pourquoi nous servons désormais Qwen3.6 35B-A3B plutôt que Qwen3.8 27B</title>
<link>https://carouter.ai/fr/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b</guid>
<pubDate>Sat, 29 Aug 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Produit</category>
<description>Un modèle dense de 27B doit lire ses 23,4 Go au complet pour écrire un seul token, ce qui, sur notre DGX Spark, plafonne à environ 12 tokens par seconde avant toute spéculation. Un MoE de 35B n'en active que 3B et en lit 2,0 Go. Il est 1,5 à 1,9 fois plus rapide à tous les niveaux de simultanéité, préremplit 3,2 fois plus vite et tient 2,26 fois plus de sessions - et sur nos 50 problèmes BigCodeBench appariés, il fait 33 contre 33, pour la moitié des tokens.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b/illustration.png" alt="35B, dont 3B lus par token, est plus rapide que 27B, dont 27B lus par token - sur 273 Go/s de mémoire unifiée." /></p><p>Pendant quatre jours, CARouter Cloud a servi Qwen3.8 27B, et les trois billets qui précèdent racontent comment nous l&#x27;avons accéléré : un meilleur modèle brouillon, puis de meilleurs réglages pour ce brouillon, qui ensemble l&#x27;ont fait passer de 20,8 à 34,8 tokens par seconde et par flux. Cela n&#x27;a pas suffi. Un modèle dense de 27B sur une machine offrant 273 Go/s de bande passante mémoire doit lire ses 23,4 Go au complet pour produire un seul token, et aucun réglage ne change cette arithmétique. Depuis aujourd&#x27;hui, le point d&#x27;accès de codage fait tourner Qwen3.6 35B-A3B à la place - un modèle plus ancien, moins bien classé sur les palmarès publics de codage, et plus gros : 35B contre 27B. Il est aussi une fois et demie à deux fois plus rapide sur tout ce que nous avons mesuré, et nous n&#x27;avons pas réussi à trouver la qualité que nous étions censés y perdre.</p><p><a href="https://carouter.ai/fr/blog/tuning-speculative-decoding-on-dgx-spark">Le billet précédent : régler le décodage spéculatif sur la même machine, des réponses de codage deux tiers plus rapides.</a></p><h2>En bref</h2><ul><li><strong>Le problème.</strong> Un modèle dense lit chacun de ses paramètres pour chaque token qu&#x27;il écrit. Sur les 273 Go/s du GB10, cela imposait à Qwen3.8 27B un plafond d&#x27;environ 12 tokens par seconde avant toute spéculation, et la conséquence concrète était l&#x27;attente : sur une plateforme agentique automatisée, une compilation de codage ordinaire prenait une heure.</li><li><strong>La solution, qui semble absurde.</strong> Un modèle plus gros. Qwen3.6 35B-A3B compte 35B de paramètres mais n&#x27;en active que 3B par token : il lit donc 2,0 Go par passe avant plutôt que 23,4. Il occupe les mêmes 21,8 Gio sur disque.</li><li><strong>Le débit.</strong> 62,2 tokens par seconde en flux unique contre 34,8, et 367 contre 241 avec seize flux simultanés - de 1,5x à 1,9x à chaque niveau de concurrence mesuré. Le préremplissage est 3,2x plus rapide : environ 6 600 tokens par seconde contre 2 088 sur une invite de 12K. La compilation qui prenait une heure en prend dix minutes.</li><li><strong>Les sessions simultanées.</strong> À partir du même budget KV de 36 Gio, il retient 1 837 064 tokens contre 813 427 - 7,0 sessions complètes de 262K tokens à la fois contre 3,1. Seules 10 de ses 40 couches conservent un cache qui grandit avec la conversation ; les 30 autres gardent une taille constante.</li><li><strong>La qualité que nous pensions perdre.</strong> Les palmarès publics le placent une dizaine de points derrière sur LiveCodeBench v6. Sur les cinquante problèmes BigCodeBench que nous exécutons nous-mêmes, appariés sur les mêmes problèmes et la même machine, il obtient 33/50 contre 32/50 pour le 27B - un écart d&#x27;un seul problème, avec un p exact de McNemar de 1,000. Sur la récupération en contexte long, il fait mieux : 10/10 contre 9/10, et 10/10 contre 8/10 à 220K tokens.</li><li><strong>La réserve honnête.</strong> Cinquante problèmes ne peuvent pas détecter un écart de dix points ; il en faudrait environ 218. L&#x27;affirmation n&#x27;est donc pas que les deux modèles sont aussi intelligents l&#x27;un que l&#x27;autre - c&#x27;est que nous avons cherché la différence sur notre propre charge de travail sans la trouver, alors que l&#x27;écart de vitesse était impossible à manquer.</li></ul><h2>Pourquoi un modèle dense finit par plafonner</h2><p>Générer un token consiste à lire les poids du modèle en mémoire et à multiplier. Pour un modèle dense, c&#x27;est la totalité des poids, à chaque fois. Qwen3.8 27B en NVFP4 en représente 23,4 Go, et le GB10 déplace environ 273 Go/s : au mieux, il peut donc écrire 273 divisé par 23,4 - environ 12 tokens par seconde. Tout ce que les deux billets précédents ont obtenu, c&#x27;est du décodage spéculatif qui contourne ce chiffre sans le changer : un modèle brouillon devine plusieurs tokens d&#x27;avance, le gros modèle les vérifie en une passe, et ceux qui sont acceptés sortent d&#x27;un coup. Cela nous a menés à 34,8 tokens par seconde, soit environ trois tokens acceptés par étape à 12 par seconde.</p><p>Un modèle épars à mélange d&#x27;experts casse l&#x27;arithmétique au lieu de la contourner. Qwen3.6 35B-A3B contient 256 experts et achemine chaque token vers 8 d&#x27;entre eux : bien que les 35B de paramètres résident tous en mémoire, seuls 3B environ sont lus par passe avant - 2,0 Go au lieu de 23,4. Le plafond passe de 12 tokens par seconde à environ 140. Le modèle est plus gros et le fichier sur disque fait la même taille ; ce qui change, c&#x27;est la quantité qu&#x27;il faut toucher pour produire un mot.</p><h2>Ce que nous avons mesuré</h2><p>Les deux modèles sur la même machine, le même budget KV de 36 Gio, la même limite de 16 séquences, l&#x27;un remplacé par l&#x27;autre puisqu&#x27;ils ne tiennent pas ensemble. Décodage agrégé selon le nombre de flux simultanés :</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b/01-decode-by-streams.png" alt="Décodage agrégé sur un DGX Spark selon le nombre de flux simultanés : Qwen3.6 35B-A3B à 62, 115, 181, 263 et 367 tokens par seconde contre Qwen3.8 27B à 35, 60, 100, 163 et 241." loading="lazy"/><figcaption>Décodage agrégé sur un DGX Spark selon le nombre de flux simultanés : Qwen3.6 35B-A3B à 62, 115, 181, 263 et 367 tokens par seconde contre Qwen3.8 27B à 35, 60, 100, 163 et 241.</figcaption></figure><p>Deux détails font que ce graphique sous-estime le résultat. Le 35B-A3B tournait sans aucun décodage spéculatif, alors que le 27B disposait du brouillon DFlash2 à sept tokens livré dans le billet précédent, qui obtient environ 3,9 tokens acceptés par étape. Et ses experts tournaient sur le noyau Marlin de vLLM, qui décompresse les poids 4 bits et les multiplie en 16 bits, là où le 27B bénéficie du chemin CUTLASS de FlashInfer. Ce second point tient au checkpoint et non à la machine : NVIDIA quantifie ce modèle en W4A16, des poids sur quatre bits contre des activations sur seize, et les noyaux CUTLASS veulent aussi les activations en FP4, accompagnées de facteurs de calibration qu&#x27;un checkpoint W4A16 ne porte jamais. Ce sont donc des planchers sur les deux plans.</p><p>La mémoire est l&#x27;autre moitié, et sur une machine à mémoire partagée c&#x27;est celle qui détermine combien de personnes vous pouvez servir à la fois :</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b/02-what-the-memory-buys.png" alt="À partir du même budget KV de 36 Gio : 7,01 sessions simultanées de 262K contre 3,10, un préremplissage de 6 600 tokens par seconde contre 2 088, et 237 mille tokens sortants pour les mêmes cinquante problèmes contre 558 mille." loading="lazy"/><figcaption>À partir du même budget KV de 36 Gio : 7,01 sessions simultanées de 262K contre 3,10, un préremplissage de 6 600 tokens par seconde contre 2 088, et 237 mille tokens sortants pour les mêmes cinquante problèmes contre 558 mille.</figcaption></figure><p>Le nombre de sessions simultanées provient du journal de démarrage du moteur lui-même : 1 837 064 tokens en cache contre 813 427 à budget identique. La raison est architecturale. Seules 10 des 40 couches du 35B-A3B utilisent le type d&#x27;attention dont le cache grandit avec la longueur de la conversation ; les 30 autres sont des couches à attention linéaire qui gardent un état de taille fixe par session, quelle que soit sa durée. Le 27B dense conserve un cache croissant sur 16 de ses 64 couches, et chacune coûte davantage par token. Deux fois plus de sessions, à mémoire égale, n&#x27;est pas un gain de réglage - c&#x27;est ce que donne la disposition des couches.</p><h2>La partie qui devait faire mal</h2><p>Qwen3.6 appartient à une génération antérieure à Qwen3.8, et les évaluations de codage publiées le disent : LiveCodeBench v6 place le modèle épars à 80,4 contre 90,3 pour le modèle dense. Dix points ne sont pas une erreur d&#x27;arrondi, et nous ne voulions pas le découvrir en production.</p><p>Nous avons donc soumis les deux modèles aux mêmes cinquante problèmes BigCodeBench, sur la même machine, dans le même bac à sable Docker, sans plafond de tokens et avec des réglages identiques. Puis nous avons fait ce que nous aurions dû faire plus tôt : remesurer le 27B au lieu de nous fier à son score d&#x27;il y a quatre jours. Cet ancien chiffre avait été obtenu avec un autre brouillon, une autre version de vLLM, et lors d&#x27;une exécution que le bogue de délai d&#x27;attente de l&#x27;outil d&#x27;évaluation avait morcelée et relancée. Réexécuté proprement, le modèle dense obtient 32/50 là où il obtenait 33/50 auparavant.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/qwen3-6-35b-a3b-instead-of-qwen3-8-27b/03-quality-did-not-drop.png" alt="BigCodeBench 33/50 pour le modèle épars contre 32/50 pour le dense ; récupération niah-256k de 10 sur 10 contre 9, et 10 contre 8 à 220K tokens." loading="lazy"/><figcaption>BigCodeBench 33/50 pour le modèle épars contre 32/50 pour le dense ; récupération niah-256k de 10 sur 10 contre 9, et 10 contre 8 à 220K tokens.</figcaption></figure><p>Appariés sur les mêmes cinquante problèmes, les deux modèles s&#x27;accordent sur 43 d&#x27;entre eux - 29 résolus par les deux, 14 échoués par les deux. Le modèle épars en résout quatre à lui seul, le dense trois, et un test exact de McNemar sur ces sept désaccords donne un p bilatéral de 1,000. C&#x27;est le résultat le plus plat qu&#x27;un test apparié puisse produire.</p><p>La récupération en contexte long est allée exactement dans l&#x27;autre sens. Nous cachons un fait dans une botte de foin allant jusqu&#x27;à 220 000 tokens et demandons au modèle de le retrouver, à trois profondeurs pour chacune des quatre longueurs. Le modèle dense obtient 9 sur 10 au total et descend à 8 à la longueur maximale. Le modèle épars obtient 10 sur 10, à chaque longueur et à chaque profondeur. C&#x27;était le résultat le plus susceptible de le disqualifier - nous vendons un contexte de 262 144 tokens, et un modèle qui répond vite mais perd le fil au fond d&#x27;un long fichier serait une régression qu&#x27;aucun score de codage ne révélerait - et c&#x27;est celui qui est revenu le plus solide.</p><p>Il atteint aussi le même score avec beaucoup moins de mots : 236 949 tokens sortants pour les cinquante problèmes contre 558 275, avec un échantillon médian de 4 773 tokens contre 9 142. Le modèle dense a atteint notre plafond de 32 768 tokens sur au moins un problème ; le modèle épars n&#x27;a jamais dépassé 12 253. Les deux modèles raisonnaient - l&#x27;épars a enregistré 219 951 tokens de raisonnement sur les cinquante échantillons - il s&#x27;agit donc de concision et non d&#x27;un mode de réflexion resté désactivé. Pour un point d&#x27;accès facturé au token et qui conserve un contexte par session, arriver à la même réponse en moins de la moitié des mots vaut autant que les tokens par seconde.</p><h2>Ce que nous ne pouvons pas vous dire</h2><p>Cinquante problèmes ne suffisent pas à détecter une différence de dix points. Détecter un effet aussi faible avec une puissance de 80 % exige environ 218 problèmes appariés, et les exécuter coûte une journée de machine pendant laquelle le point d&#x27;accès ne sert personne. Notre résultat ne réfute donc pas le palmarès ; il signifie que sur la seule évaluation de codage que nous exécutons nous-mêmes, les deux modèles étant mesurés la même semaine sur le même matériel, nous n&#x27;avons pas trouvé l&#x27;écart.</p><p>Nous n&#x27;avons par ailleurs mesuré que le codage et la récupération en contexte long, rien d&#x27;autre. Le raisonnement général, le suivi d&#x27;instructions et le comportement agentique multitour ne sont pas testés ici, et les écarts publiés sur ces plans sont peut-être bien réels. Ce que nous pouvons dire, c&#x27;est que sur une <a href="https://github.com/scalevisor-io/openvisor" target="_blank" rel="noreferrer noopener">plateforme agentique automatisée</a> qui exécute de longues compilations autonomes, plusieurs tâches de codage simples qui prenaient une heure sur le modèle dense se terminent en une dizaine de minutes sur celui-ci, sans baisse de qualité visible dans le résultat.</p><p>La forme honnête de la décision est celle-ci : nous avons échangé une différence que nous ne pouvions pas mesurer contre une différence que nous ne pouvions pas manquer. Une requête qui attend en file, ou qui défile à demi-vitesse, est un moins bon résultat pour la personne qui attend qu&#x27;une réponse légèrement plus faible arrivée rapidement - et un modèle trop lent pour répondre à la demande ne vaut rien du tout pour les requêtes qu&#x27;il refuse.</p><h2>Ce qui tourne maintenant</h2><p>Qwen3.6 35B-A3B en NVFP4, sur le même GB10 derrière le même proxy TLS, au même prix : 0,20 $ par million de tokens entrants et 0,80 $ par million en sortie. Il répond au nom qwen3.6-35b-a3b, conserve le contexte complet de 262 144 tokens, lit les images, appelle les outils et renvoie son raisonnement. Qwen3.8 27B est retiré du catalogue et, comme il n&#x27;était servi que depuis notre propre matériel, il disparaît simplement au lieu d&#x27;être acheminé ailleurs.</p><p>Son fichier de configuration reste dans le dépôt, et revenir en arrière tient en une ligne. Deux chantiers restent ouverts, et nous nous étions trompés sur les deux à la parution de ce billet. Le modèle brouillon n&#x27;a besoin d&#x27;être publié par personne : ce checkpoint porte déjà une tête de prédiction multi-tokens, une couche d&#x27;attention et d&#x27;experts entraînée à deviner le token d&#x27;après, inutilisée dans des poids que nous avions déjà téléchargés. Et le noyau ne consiste pas à réclamer CUTLASS, qu&#x27;aucun checkpoint W4A16 ne peut utiliser ; il faudrait soit une version de ce modèle quantifiée pour des activations FP4, soit le noyau SM12x fusionné de vLLM, écrit précisément pour cette puce et simplement jamais retenu automatiquement. Ce sont des mesures que nous vous devons et non des gains que nous pouvons revendiquer, et tous les chiffres ci-dessus ont été mesurés sans l&#x27;un ni l&#x27;autre.</p>]]></content:encoded>
</item>
<item>
<title>Régler le décodage spéculatif sur le DGX Spark de CARouter : des réponses de code deux tiers plus rapides, à matériel constant</title>
<link>https://carouter.ai/fr/blog/tuning-speculative-decoding-on-dgx-spark</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/tuning-speculative-decoding-on-dgx-spark</guid>
<pubDate>Thu, 27 Aug 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Le décodage spéculatif fait deviner à un petit modèle « brouillon » les tokens à venir, pour que le gros puisse en vérifier plusieurs d'un coup. Quelles suppositions il fait, et comment elles sont vérifiées, étaient deux réglages laissés à leur valeur par défaut. Les changer a fait passer notre point d'accès de code auto-hébergé de 20,8 à 34,8 tokens par seconde et par flux, sur la même machine - et a renversé la longueur de bloc que nous avions déployée une semaine plus tôt, qui s'est révélée être un fait sur le réglage par défaut plutôt que sur le matériel.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/tuning-speculative-decoding-on-dgx-spark/illustration.png" alt="Le même DGX Spark écrivant une réponse de code à trois vitesses : le prédicteur intégré au modèle à 20,8 tokens par seconde, le brouillon de la semaine dernière à 28,5, et la configuration en service aujourd'hui à 34,8." /></p><p>Le décodage spéculatif fait deviner à un petit modèle « brouillon » plusieurs tokens d&#x27;avance, pour que le gros puisse tous les vérifier en une seule passe et garder ceux avec lesquels il est d&#x27;accord. Quelles suppositions le brouillon fait, et comment elles sont vérifiées, se révèlent être deux réglages que nous avions laissés à leur valeur par défaut. Les changer - deux clés dans un fichier de configuration, aucun matériel neuf, aucun changement à ce que le modèle écrit - a fait passer le point d&#x27;accès de code de notre machine auto-hébergée de 20,8 à 34,8 tokens par seconde et par flux : deux tiers plus vite que le prédicteur intégré au modèle, et 22 % plus vite que ce que nous avions déployé la semaine dernière. Voici ce que fait chaque réglage, pourquoi chacun est une perte tout seul, et la conclusion de la semaine dernière que les deux ensemble ont renversée.</p><p><a href="https://carouter.ai/fr/blog/dflash2-draft-on-dgx-spark">L&#x27;article précédent : MTP contre DFlash2 sur le DGX Spark de CARouter, 35 % de tokens en plus par étape, et non une étape plus rapide.</a></p><h2>En bref</h2><ul><li><strong>Ce que voit un client.</strong> Le point d&#x27;accès de code écrit une réponse deux tiers plus vite qu&#x27;avant tout ce réglage : un token toutes les 29 ms au lieu de 48, une réponse typique de 460 tokens en 13 secondes environ au lieu de 22. Rien ne change dans les réponses elles-mêmes.</li><li><strong>Le réglage efficace.</strong> draft_sample_method: &quot;probabilistic&quot; fait échantillonner le brouillon dans sa propre distribution à la température de la requête, secoué par le même bruit aléatoire que l&#x27;échantillonnage du gros modèle, au lieu de toujours prendre sa meilleure supposition. Le test d&#x27;acceptation compare alors deux vraies distributions au lieu de lire une probabilité sur une certitude.</li><li><strong>Les deux réglages doivent être combinés.</strong> La vérification par bloc, la règle d&#x27;acceptation sans perte que nous recommandions à la fin du dernier article, perd toute seule : 22 % de moins à deux flux et 11 % de moins à huit, à la température que les clients obtiennent par défaut. Le brouillon probabiliste seul gagne à partir de deux flux et abandonne un dixième du décodage à flux unique, qui est exactement là où se trouve un agent de code. Ensemble, ils se couvrent l&#x27;un l&#x27;autre.</li><li><strong>Notre erreur nous a aussi appris quelque chose.</strong> La semaine dernière, nous avons mesuré les suppositions les plus profondes du brouillon, constaté qu&#x27;elles ne se rentabilisaient pas, et déployé un bloc raccourci. C&#x27;était vrai du réglage par défaut, dont nous n&#x27;avions pas remarqué qu&#x27;il était une prémisse.</li><li><strong>La longueur de bloc optimale a donc changé.</strong> Le brouillon échantillonné de façon probabiliste, nous avons relancé le balayage des longueurs de bloc sur quatre, cinq, six et sept. Le bloc natif de sept tokens du brouillon l&#x27;a emporté : 34,8 tokens/s à flux unique contre 29,3 pour le bloc de cinq, et 28,6 contre 24,7 à la température que les clients obtiennent par défaut.</li><li><strong>Le coût.</strong> Rien de mesurable. La distribution mise en cache du brouillon pèse environ 106 Mio, absorbés ; le chargement des poids est inchangé à 24,92 Gio ; le budget de cache cède 3 % au cache du bloc plus profond ; le traitement du prompt ne bouge pas.</li></ul><h2>Ce que nous avons dit la semaine dernière, et pourquoi c&#x27;était conditionnel</h2><p>Le balayage de la semaine dernière a trouvé que les positions quatre à sept du bloc natif du brouillon étaient acceptées 28 %, 22 %, 15 % et 12 % du temps. Ces quatre positions ajoutaient 0,77 token accepté par étape, ce qui est gratuit à un ou deux flux et du vrai travail à seize ; raccourcir le bloc à cinq gardait donc le gain à flux unique et rendait le régime par lots positif à toutes les tailles. Nous avons écrit « un cinq statique fait l&#x27;affaire sur cette machine » et l&#x27;avons déployé.</p><p>Relisez cela avec une semaine de recul. Chaque chiffre y est un chiffre d&#x27;acceptation, et l&#x27;acceptation n&#x27;est pas une propriété de la machine, ni du modèle, ni de la charge de travail seule. C&#x27;est une propriété de la façon dont le brouillon est produit et vérifié. Nous avons mesuré une seule règle de brouillon - prendre la meilleure supposition, à chaque fois - et tiré une conclusion sur la profondeur du bloc comme si profondeur et brouillon étaient indépendants. Ils ne le sont pas, et c&#x27;est la partie de tout l&#x27;exercice qui se généralise : chaque fois que la règle de brouillon change, la question de la profondeur doit être reposée.</p><h2>Le réglage : échantillonner le brouillon comme le modèle échantillonne</h2><p>La configuration spéculative de vLLM a une clé que nous avions écartée. draft_sample_method vaut &quot;greedy&quot; par défaut : le brouillon propose son unique continuation la plus probable, et le test d&#x27;acceptation traite cette proposition comme une certitude - probabilité un sur le token choisi, zéro partout ailleurs. Mettez-la à &quot;probabilistic&quot; et deux choses changent.</p><p>La première est dans le brouillon. Le sélecteur de DFlash2 parcourt un faisceau de seize candidats par position ; en mode par défaut il prend celui au meilleur score, et en mode probabiliste il échantillonne parmi eux à la température propre à la requête. Le noyau qui fait cela porte un commentaire qui mérite d&#x27;être cité, parce qu&#x27;il contient toute l&#x27;idée en une ligne : « Les identifiants des candidats indexent le bruit, en accord avec l&#x27;échantillonnage du modèle cible. » Le brouillon et le gros modèle sont secoués par le même bruit aléatoire, si bien que lorsque le gros modèle échantillonne de façon stochastique, le brouillon tend à faire le même choix stochastique.</p><p>La seconde est dans le vérificateur. Avec une vraie distribution derrière lui, les scores du brouillon sont mis en cache et le test d&#x27;acceptation devient le véritable rapport entre la probabilité du gros modèle et celle du brouillon, au lieu d&#x27;une probabilité lue sur une certitude. C&#x27;est ce qui donne un sens au second réglage - la vérification par bloc.</p><p>Nous avions écrit dans nos propres notes que cette option s&#x27;appliquait à la tête intégrée de Qwen et non à ce brouillon. C&#x27;était faux, et c&#x27;est la lecture du code qui l&#x27;a corrigé : le spéculateur DFlash2 redéfinit précisément la méthode qui alloue le cache dont ce mode a besoin, justement pour qu&#x27;il fonctionne avec lui.</p><h2>Constat 1 : le réglage sans perte recommandé ralentit le décodage lorsqu&#x27;il est utilisé seul</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/tuning-speculative-decoding-on-dgx-spark/01-knobs-alone-vs-together.png" alt="Décodage à flux unique pour chaque réglage seul et pour la paire, aux deux températures" loading="lazy"/><figcaption>Décodage à flux unique pour chaque réglage seul et pour la paire, aux deux températures</figcaption></figure><p>La dernière phrase de la semaine dernière désignait la vérification par bloc comme le levier suivant : une règle d&#x27;acceptation sans perte qui vérifie tout le bloc brouillonné d&#x27;un coup plutôt qu&#x27;un token à la fois. Elle existe bel et bien, elle fonctionne avec ce brouillon, et elle ne coûte pas de mémoire - le démarrage affiche le même chargement de poids et la même taille de cache. Elle perd aussi. À température 0,7 elle tombe partout dans la dispersion existante, ce que la théorie prédit : la vérification par bloc est démontrablement identique à la règle ordinaire quand rien n&#x27;est tiré au hasard, et une sonde de code à 0,7 en est proche. À température 1,0, là où le gain était censé se trouver, elle donne 37,8 tokens/s à deux flux contre 48,7 et 120,1 à huit contre 134,7 - et ce chiffre à huit flux est de trois exécutions à moins de 2,2 tokens/s les unes des autres, ce n&#x27;est donc pas du bruit. L&#x27;acceptation n&#x27;a jamais augmenté.</p><p>La raison est celle que pose la section précédente. Un brouillon qui prend sa meilleure supposition est une certitude ; la règle conjointe n&#x27;a donc presque rien de plus à exploiter que ce que la règle token par token obtenait déjà, tandis que son arithmétique supplémentaire est facturée à chaque étape et mord dès que le lot s&#x27;élargit. Une règle sans perte n&#x27;est pas automatiquement une règle gratuite.</p><h2>Constat 2 : le brouillon probabiliste gagne par lots et perd là où se trouve l&#x27;agent</h2><p>Échantillonné de façon probabiliste au bloc de cinq tokens, le décodage est de 25,7, 57,1, 101,2, 163,5 et 246,0 tokens/s à un, deux, quatre, huit et seize flux, contre 28,5, 47,5, 91,4, 137,4 et 216,1 pour le même bloc au réglage par défaut. À partir de deux flux, cela fait +20 %, +11 %, +19 % et +14 %, et l&#x27;acceptation monte avec - de 3,0 à 3,9 tokens par étape là où le brouillon au meilleur choix atteignait 2,7 à 3,0. À un flux il abandonne un dixième, et un flux est précisément là où se trouve un agent de code.</p><p>À la température que les clients obtiennent par défaut, le tableau s&#x27;inverse : le flux unique passe à 26,0 contre 21,0, soit +24 %, parce que coupler le hasard du brouillon à celui du gros modèle compte le plus précisément là où le gros modèle est le plus aléatoire. Un réglage qui vaut +24 % ou -10 % à flux unique selon un paramètre que le client contrôle n&#x27;est pas un réglage qu&#x27;on déploie seul.</p><h2>Constat 3 : combiner les réglages change la longueur de bloc optimale</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/tuning-speculative-decoding-on-dgx-spark/02-block-depth-flipped.png" alt="Décodage à flux unique selon la longueur du bloc de brouillon, avant et après le changement de brouillon" loading="lazy"/><figcaption>Décodage à flux unique selon la longueur du bloc de brouillon, avant et après le changement de brouillon</figcaption></figure><p>Ajouter la vérification par bloc par-dessus le brouillon probabiliste répare la case à flux unique - 29,3 tokens/s contre 25,7 - parce qu&#x27;il existe désormais une vraie distribution de brouillon sur laquelle la règle conjointe peut travailler. Cette combinaison n&#x27;a aucune case mesurée sous la règle ordinaire, à l&#x27;une ou l&#x27;autre température ; son pire cas est -2 %. Nous avons donc relancé le balayage des longueurs de bloc avec elle, pendant la nuit, quatre longueurs à deux températures, les cases bruitées répétées trois fois.</p><p>Sept - le bloc que le brouillon a été entraîné à prédire, et celui que nous avions rejeté il y a une semaine - gagne 19 % à flux unique à température 0,7 et 16 % à 1,0, et 9 % et 12 % à deux flux, pour 2 à 5 % rendus à quatre et seize. Comme notre plateforme fait tourner un ou deux agents à la fois, c&#x27;est l&#x27;arbitrage que nous voulons, et c&#x27;est le même que celui de la semaine dernière quand nous avons choisi cinq plutôt que quatre.</p><p>La preuve convaincante n&#x27;est pas le débit, bruité sur cette machine, mais l&#x27;acceptation : de 3,85 à 4,83 tokens par étape à sept contre 3,18 à 3,92 à cinq, six se plaçant entre les deux et quatre sous les deux. Un ordre net dans le sens que le mécanisme prédit vaut plus que n&#x27;importe quelle exécution rapide isolée.</p><h2>Constat 4 : une exécution n&#x27;est pas une mesure, et cela a failli nous coûter cher</h2><p>Le brouillon probabiliste seul a produit 178,5 tokens/s à huit flux - sa meilleure case, et 13 % devant la combinaison que nous allions déployer. Nous l&#x27;avons signalée dans la demande de fusion comme une exécution unique, donc non fiable, et l&#x27;avons remesurée pendant la nuit : 161,8, 167,8, 160,9, soit une moyenne de 163,5. Le 178,5 était une valeur aberrante, l&#x27;écart réel est d&#x27;environ 4 %, et la décision qu&#x27;elle aurait renversée était la bonne.</p><p>Nous le consignons parce que c&#x27;est la deuxième fois en deux articles que la variance de cette machine a failli écrire la mauvaise conclusion, et parce que la discipline qui l&#x27;a rattrapée est peu coûteuse : indiquer le nombre d&#x27;exécutions à côté de chaque chiffre, et remesurer tout ce qui changerait une décision à soi seul.</p><h2>Ce que cela signifie pour nos clients</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/tuning-speculative-decoding-on-dgx-spark/03-throughput-vs-streams.png" alt="Débit de décodage selon le nombre de flux simultanés, de la tête intégrée à la configuration en service aujourd&#x27;hui" loading="lazy"/><figcaption>Débit de décodage selon le nombre de flux simultanés, de la tête intégrée à la configuration en service aujourd&#x27;hui</figcaption></figure><ul><li><strong>Les réponses s&#x27;écrivent deux tiers plus vite qu&#x27;avant tout ce réglage.</strong> À flux unique et à température 0,7, les tokens arrivent toutes les 29 ms, contre 35 ms après le changement de la semaine dernière et 48 ms avec le prédicteur intégré au modèle. La réponse moyenne sur notre trafic fait environ 460 tokens : à peu près 13 secondes, contre 16 la semaine dernière et 22 auparavant.</li><li><strong>À la température par défaut, le gain est plus grand que celui de la semaine dernière, pas plus petit.</strong> Un client qui ne règle rien obtient 28,6 tokens/s là où la configuration de la semaine dernière en donnait 21,0. C&#x27;est le cas que ce changement aide le plus, et c&#x27;est le plus fréquent.</li><li><strong>Une machine chargée partage désormais le gain correctement.</strong> Avec quatre à seize agents qui décodent en même temps, chacun obtient 19 à 31 % de plus que la tête intégrée, là où le bloc de la semaine dernière donnait 7 à 13 %.</li><li><strong>Le premier token arrive toujours au même moment.</strong> Le décodage spéculatif ne touche pas au traitement du prompt, et celui-ci n&#x27;a pas bougé : environ 2 000 tokens/s tout du long.</li><li><strong>Régler une température rapporte toujours plus que ce que nous pouvons vous donner.</strong> Un client qui envoie 0,7 pour du code au lieu de laisser la valeur par défaut de 1,0 obtient environ 22 % de décodage en plus, contre les 10 % que nous annoncions la semaine dernière.</li><li><strong>Le code est inchangé, par construction.</strong> Le décodage spéculatif accepte exactement les tokens que le gros modèle aurait produits de toute façon - voyez toutefois la première réserve ci-dessous, qui porte sur la qualité de notre vérification plutôt que sur la véracité du principe.</li></ul><h2>Ce que cela coûte, et ce que nous avons déployé</h2><p>La distribution mise en cache du brouillon pèse environ 106 Mio, absorbés sans rien changer d&#x27;autre : le même chargement de poids de 24,92 Gio, le même démarrage à froid de sept minutes. Le bloc plus profond taille davantage dans le budget de cache de 36 Gio pour son propre usage, si bien que le budget tient 813 427 tokens au lieu de 838 501 - 3,10 contextes de 262K simultanés au lieu de 3,20, une réduction de 3 %. Le traitement du prompt est inchangé.</p><p>Déployé : Qwen3.8-27B NVFP4 avec un brouillon DFlash2 de sept tokens, draft_sample_method &quot;probabilistic&quot; et rejection_sample_method &quot;block&quot;, sur la même image vLLM 0.28.0, même proxy, même nom servi, même contexte de 262K. Les deux réglages vont ensemble dans la spécification, avec un commentaire qui le dit, parce que l&#x27;un ou l&#x27;autre pris seul est une régression quelque part.</p><h2>Les réserves honnêtes</h2><ul><li><strong>Nous n&#x27;avons pas vérifié empiriquement l&#x27;absence de perte.</strong> Le décodage spéculatif accepte exactement les tokens que le gros modèle aurait produits - c&#x27;est une propriété de la construction, et c&#x27;est pourquoi nous répétons que la qualité est intacte. Mais nous avons changé le chemin d&#x27;échantillonnage et n&#x27;avons confirmé que le bon fonctionnement du chat, des appels d&#x27;outils, de l&#x27;entrée image et du raisonnement, pas que la distribution de la sortie soit inchangée. L&#x27;exécution de référence qui l&#x27;aurait vérifié a échoué sur un bogue de notre propre outil d&#x27;évaluation, qui écrasait les réglages par tâche sur toutes les tâches d&#x27;une exécution multitâche ; c&#x27;est corrigé, et la vérification reste due.</li><li><strong>Les mesures à flux unique varient beaucoup.</strong> Les trois exécutions derrière les 34,8 du bloc en service étaient 39,7, 33,1 et 31,5. Chaque chiffre ici est une moyenne accompagnée de son nombre d&#x27;exécutions, et les cases par lots comptent deux à trois exécutions là où celles de la semaine dernière n&#x27;en avaient souvent qu&#x27;une.</li><li><strong>Une machine, une sonde, une nuit.</strong> Même GB10, même checkpoint, même sonde de génération de code que dans les deux articles précédents, chaque configuration faisant l&#x27;objet d&#x27;un redémarrage distinct.</li><li><strong>Le modèle brouillon n&#x27;est toujours pas adapté aux poids utilisés.</strong> DFlash2 a été entraîné sur les poids bf16 de Qwen ; nous servons une quantification NVFP4 communautaire, et le brouillon lit des états internes que la quantification perturbe. Une partie de la dispersion à flux unique vient probablement de là. Un brouillon entraîné sur la cible quantifiée reste l&#x27;expérience que nous n&#x27;avons pas faite, et c&#x27;est désormais le seul levier restant que nous connaissions.</li></ul><h2>Ce que nous avons appris et qui survivra aux chiffres</h2><p>Deux choses, et aucune ne porte sur cette machine.</p><p>La première : un résultat de réglage peut porter une prémisse que vous n&#x27;avez pas écrite. « Sept, c&#x27;est trop profond » était un fait sur un réglage de brouillon déguisé en fait sur le matériel. Il a survécu une semaine parce que rien dans notre façon de le consigner ne rendait la prémisse visible, et le remède n&#x27;est pas de mesurer davantage mais de nommer les conditions dont un chiffre dépend au moment où on l&#x27;écrit.</p><p>La seconde : « sans perte » et « gratuit » sont deux mots différents. La vérification par bloc ne change rien à ce que le modèle produit et nous a tout de même coûté 11 % à huit flux, parce qu&#x27;une garantie de correction ne dit rien du coût de calcul de cette garantie. L&#x27;estimation que nous avons ratée la semaine dernière chiffrait un brouillon en divisant ses octets par la bande passante ; l&#x27;estimation que nous aurions ratée cette semaine chiffrait une règle d&#x27;acceptation en lisant sa démonstration.</p>]]></content:encoded>
</item>
<item>
<title>MTP contre DFlash2 sur le DGX Spark de CARouter : 35 % de tokens en plus par pas, pas un pas plus rapide</title>
<link>https://carouter.ai/fr/blog/dflash2-draft-on-dgx-spark</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/dflash2-draft-on-dgx-spark</guid>
<pubDate>Wed, 26 Aug 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Une infolettre promettait 3× grâce au décodage spéculatif le matin même où vLLM 0.28.0 livrait le brouillon qui manquait à Qwen3.8-27B. Nous avons confronté l'article à notre DGX Spark de 128 Go ligne par ligne, puis mesuré DFlash2 contre la tête MTP de 1 à 16 flux et à trois tailles de bloc. CARouter Cloud décode un tiers plus vite par flux; le pas n'est pas devenu plus rapide du tout; et l'estimation que nous avions écrite d'abord était fausse d'exactement le coût du brouillon.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/dflash2-draft-on-dgx-spark/illustration.png" alt="Un pas de décodage avant et après, dessiné à la même largeur : trois passages de la tête MTP ou un seul bloc DFlash2, 121 ms dans les deux cas, plus de tokens acceptés." /></p><p>CARouter Cloud est la partie de CARouter que nous hébergeons nous-mêmes : un ASUS Ascent GX10 (une machine de classe NVIDIA GB10 « DGX Spark », 128 Go de mémoire unifiée, arm64) qui fait tourner vLLM derrière un proxy TLS et sert deux modèles de plongements et, depuis l&#x27;article précédent, Qwen3.8-27B comme modèle de codage. Cet article-là se terminait sur un constat de mémoire. Celui-ci parle de vitesse, et il commence par une coïncidence : le 26 août 2026, une infolettre de ByteByteGo intitulée « How to Make LLMs 3X Faster », une bonne explication du décodage spéculatif, arrivait dans la boîte de réception, et le même matin vLLM 0.28.0 était publié avec le seul brouillon que notre modèle ne pouvait pas encore utiliser. Nous avons donc confronté l&#x27;article à la machine ligne par ligne, puis mené l&#x27;expérience qu&#x27;il venait de rendre possible. Voici ce qui s&#x27;est amélioré, ce qui ne l&#x27;a pas fait, et ce que vaut un titre en « 3× » sur de la mémoire unifiée.</p><p><a href="https://carouter.ai/fr/blog/one-gb10-two-coding-models">L&#x27;article précédent : Laguna S 2.1 contre Qwen3.8-27B sur le DGX Spark de CARouter, la vitesse a perdu contre la mémoire.</a></p><h2>En bref</h2><ul><li><strong>Déjà en place.</strong> Qwen3.8-27B appliquait déjà la technique de l&#x27;article : sa tête de prédiction multi-tokens (MTP) intégrée, passée trois fois, plaçait 2,76 tokens par pas sur le trafic de production - 75 %, 57 % et 44 % aux trois positions, lus dans 22 heures de requêtes de notre plateforme elle-même.</li><li><strong>Le levier.</strong> La seule chose qui restait, c&#x27;était un meilleur brouillon. DFlash2, un brouillon à diffusion par blocs de cinq couches pour Qwen3.8-27B, exige vLLM 0.28.0; nous avons mis l&#x27;image à jour et mesuré MTP contre DFlash2 à 1, 2, 4, 8 et 16 flux simultanés, à trois longueurs de brouillon.</li><li><strong>Le résultat.</strong> Avec un bloc de cinq tokens, chaque pas du modèle cible rapporte 3,45 tokens acceptés contre 2,55 (+35 %), si bien que le décodage est à 28,5 tokens/s en flux unique contre 20,8 (+37 %), à 91 contre 81 à quatre flux, à 216 contre 203 à seize. Là où notre plateforme tourne réellement, un ou deux agents de codage à la fois, c&#x27;est un tiers de plus par flux.</li><li><strong>L&#x27;estimation que nous avons ratée.</strong> Nous avions prédit 1,6-2,4× parce que le nouveau brouillon lit 3,85 Go par passage. Le pas n&#x27;est pas devenu plus rapide du tout : 121 ms avant, 121 ms après. Chaque token gagné vient de plus de tokens acceptés par pas - 3,45 contre 2,55, +35 % - pas d&#x27;un pas plus rapide.</li><li><strong>Le coût.</strong> 3 Gio de poids, un cinquième du budget KV (3,2 contextes de 262K simultanés au lieu de 3,9), un démarrage à froid de sept minutes, et le nouvel exécuteur de modèle V2 de vLLM.</li><li><strong>En service.</strong> Qwen3.8-27B NVFP4 avec un brouillon DFlash2 de cinq tokens sur vLLM 0.28.0, les quatre conteneurs sur la nouvelle image. Le repli sur MTP tient en une ligne dans un fichier.</li></ul><h2>Ce que dit l&#x27;article, confronté à la machine</h2><p>L&#x27;argument de l&#x27;article est le classique, et il est juste : générer un token, c&#x27;est lire chaque poids une fois pour une poignée d&#x27;arithmétique, si bien que le décodage est borné par la bande passante mémoire pendant que les unités de calcul chôment; un petit brouillon peut deviner plusieurs tokens d&#x27;avance, et le gros modèle peut tous les vérifier en un seul passage pour à peu près le prix d&#x27;un, en gardant les devinettes qui concordent. Le gain, c&#x27;est la longueur d&#x27;acceptation - combien de tokens du brouillon survivent par pas - et elle dépend de la charge de travail (le code et l&#x27;extraction acceptent bien, la prose ouverte non), de la température d&#x27;échantillonnage (plus haute, elle aplatit la distribution et abaisse l&#x27;acceptation) et de la charge (sous un gros lot, le calcul libre que l&#x27;astuce dépense n&#x27;est plus libre). L&#x27;article énumère quatre sources possibles pour un brouillon : un petit modèle séparé, des têtes de prédiction entraînées dans le gros modèle, une copie moins coûteuse du même modèle, et une recherche dans le texte déjà vu.</p><p>Nous avons passé cette liste en revue face à ce qui tournait. Les têtes de prédiction : c&#x27;est la tête MTP de Qwen, déjà active, et les compteurs de vLLM disaient ce qu&#x27;elle valait sur du vrai trafic - 208 647 tokens proposés, 122 270 acceptés, 2,76 tokens par pas du modèle cible. La recherche dans le texte existant (brouillon par n-grammes ou par suffixes) : vLLM n&#x27;exécute qu&#x27;un proposeur par moteur, elle remplacerait donc la tête MTP au lieu de s&#x27;y ajouter, et à 2,76 tokens par pas la tête est difficile à battre sur du code que le modèle doit écrire, par opposition à du code qu&#x27;il recopie. Un petit modèle séparé : un moins bon brouillon qu&#x27;une tête qui lit les états cachés du gros modèle lui-même, et il coûte de la mémoire. L&#x27;idée de la copie moins coûteuse (QuantSpec) : absente de vLLM. La falaise de charge : l&#x27;article dit que vLLM peut désactiver la spéculation au-delà d&#x27;une taille de lot, et c&#x27;est vrai - la forme moderne est un barème de longueurs de brouillon par taille de lot - mais sur cette machine un pas à notre plafond de 16 séquences porte au plus 64 tokens, et un 27B sur un GB10 est très loin d&#x27;être borné par le calcul en dessous d&#x27;un millier, si bien que nous n&#x27;avions aucune falaise contre laquelle nous protéger.</p><p>Ce que la vérification a fait ressortir, c&#x27;est la forme de notre trafic : 41 millions de tokens entrants pour 192 mille générés, 96 % des tokens entrants servis depuis le cache de préfixes, ce qui veut dire qu&#x27;une requête typique passe environ deux secondes sur les quatre mille tokens qu&#x27;elle doit préremplir et vingt-cinq sur les 460 qu&#x27;elle génère. Le décodage, c&#x27;est neuf dixièmes du temps. La spéculation est exactement le bon levier, et la seule chose qui restait à tirer, c&#x27;était le brouillon.</p><h2>La seule chose qui restait : un meilleur brouillon</h2><p>DFlash2 (z-lab, ICML 2026) est un brouillon entraîné pour Qwen3.8-27B : cinq petites couches de transformeur qui lisent les états cachés du gros modèle à cinq profondeurs et, au lieu de deviner un token à la fois, prédisent un bloc entier en un passage et laissent un petit sélecteur tracer un chemin parmi les candidats. Ses auteurs rapportent 5,5 tokens acceptés par pas sur GSM8K contre 5,0 pour la tête MTP à la même longueur de brouillon, et 3,4× par rapport au décodage simple. Il est livré comme un checkpoint de 3,85 Go et exige une architecture que vLLM a ajoutée dans la 0.28.0 - publiée, comme par hasard, ce matin-là.</p><p>Avant de le lancer, nous avons écrit l&#x27;estimation, comme la fois précédente. Notre pas MTP durait ~123 ms, dont les trois passages successifs de l&#x27;unique couche MTP comptaient, d&#x27;après l&#x27;arithmétique du balayage précédent, pour environ 20 ms chacun. DFlash2 les remplace par un passage sur 3,85 Go, soit environ 15 ms aux 273 Go/s de cette machine, et vérifier huit positions au lieu de quatre est presque gratuit sur un pas borné par la bande passante. Donc : un pas de ~100 ms, et si l&#x27;acceptation passait de 2,6 à quelque part entre 3,5 et 5, le décodage en flux unique irait de 18-20 tokens/s à 30-45. C&#x27;était la prédiction. Gardez-la en tête.</p><h2>Ce que nous avons mesuré, et comment</h2><p>Même sonde que dans l&#x27;article précédent, le script de mesure de notre dépôt d&#x27;infrastructure : N requêtes de génération de code simultanées à travers le proxy de production, le débit de décodage lu dans les compteurs de vLLM sur une fenêtre de 40 secondes, puis un nouveau préremplissage de 12K tokens. Deux ajouts cette fois. La sonde prend maintenant la température d&#x27;échantillonnage en paramètre, parce que le point de l&#x27;article sur la température méritait un chiffre : 0,7 est ce que tous les balayages ont utilisé jusqu&#x27;ici, 1,0 est la valeur par défaut du checkpoint et ce que notre plateforme envoie quand un client ne fixe rien. Et les points en flux unique ont été répétés, parce que les premiers chiffres de DFlash2 se dispersaient plus que prévu, et qu&#x27;une fenêtre de 40 secondes d&#x27;une seule génération n&#x27;est pas une mesure pour un brouillon dont l&#x27;acceptation dépend de ce que le modèle est en train d&#x27;écrire.</p><p>Chaque configuration est un redémarrage du même checkpoint servi (la quantification NVFP4 de Qwen3.8-27B par unsloth, 262K de contexte, 36 Gio de KV) sur la même machine, le même jour, l&#x27;une après l&#x27;autre.</p><h2>Constat 1 : la mise à jour de l&#x27;image n&#x27;a rien changé, et le débit augmente encore à seize flux</h2><p>vLLM 0.28.0 embarque la même pile CUDA 13.0.2, torch 2.13 et FlashInfer 0.6.16 que la 0.27.1, choisit le même noyau CUTLASS NVFP4 et la même attention FlashInfer sur ce silicium, et avec la tête MTP il décode à 20,8, 39,7, 81,2 et 124,4 tokens/s en agrégé à 1, 2, 4 et 8 flux là où la 0.27.1 faisait 19,8, 40,0, 74,9 et 127,4 - du bruit. Le préremplissage était à 2 007 tokens/s contre 2 083, une sonde chacun. La seule case nouvelle, c&#x27;est 16 flux : 202,7 tokens/s en agrégé, 1,63× le chiffre à huit flux. La falaise dont l&#x27;article nous prévient, où la spéculation se met à coûter plus qu&#x27;elle ne rapporte, n&#x27;est pas là à notre lot maximal.</p><h2>Constat 2 : 35 % de tokens en plus par pas; le pas n&#x27;est pas devenu plus rapide</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/dflash2-draft-on-dgx-spark/01-throughput-vs-streams.png" alt="Débit de décodage selon le nombre de flux simultanés" loading="lazy"/><figcaption>Débit de décodage selon le nombre de flux simultanés</figcaption></figure><p>DFlash2 à son bloc natif de sept tokens de brouillon : 26,0, 52,3, 81,0, 135,2 et 192,6 tokens/s en agrégé à 1, 2, 4, 8 et 16 flux, contre 20,8, 39,7, 81,2, 124,4 et 202,7 pour MTP. En hausse de 25 % et 32 % à un et deux flux, à égalité à quatre, en hausse de 9 % à huit, et en baisse de 5 % à seize.</p><p>Puis le chiffre qui l&#x27;explique. À un flux, DFlash2 a accepté 3,16 tokens par pas et décodé 26,0 par seconde : un pas de 122 ms. MTP a accepté 2,55 et décodé 20,8 : un pas de 123 ms. Le pas est le même. Un passage d&#x27;un brouillon de cinq couches plus son sélecteur plus une vérification à huit positions coûte, sur cette machine, exactement ce que coûtent trois passages d&#x27;une seule couche MTP. Notre estimation avait tarifé le brouillon à sa bande passante, 3,85 Go en 15 ms, et oublié que le pas fait aussi tourner les couches Gated DeltaNet de Qwen sur huit positions de requête au lieu de quatre, le sélecteur, et une vérification qui n&#x27;est gratuite que tant que le lot vaut un. Tout ce que DFlash2 a gagné, il l&#x27;a gagné en acceptant plus de tokens par pas; il n&#x27;a rien gagné à être plus rapide par pas.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/dflash2-draft-on-dgx-spark/02-acceptance-per-position.png" alt="Acceptation par position du brouillon" loading="lazy"/><figcaption>Acceptation par position du brouillon</figcaption></figure><p>Et l&#x27;acceptation dit où le bloc devrait s&#x27;arrêter. Sur la sonde, DFlash2 place 75 %, 52 % et 36 % de ses trois premiers tokens, à peu près ce que la tête MTP place sur le trafic de production, puis 28 %, 22 %, 15 % et 12 % aux positions quatre à sept. Ces quatre positions ajoutent 0,77 token accepté par pas. À un ou deux flux, elles sont gratuites, parce que le pas est borné par la bande passante et que vérifier quatre positions de plus ne coûte aucun temps; à seize flux, une vérification de huit positions sur seize séquences, c&#x27;est 128 tokens de vrai travail par pas, et c&#x27;est ce qui a transformé +9 % à huit flux en −5 % à seize.</p><h2>Constat 3 : cinq tokens par bloc donnent de meilleurs résultats que sept</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/dflash2-draft-on-dgx-spark/03-step-cost-and-yield.png" alt="Coût et rendement d&#x27;un pas par configuration" loading="lazy"/><figcaption>Coût et rendement d&#x27;un pas par configuration</figcaption></figure><p>Nous avons donc mesuré des blocs plus courts. À cinq tokens de brouillon : 28,5, 47,5, 91,4, 137,4 et 216,1 tokens/s sur les cinq niveaux de simultanéité, les points à un et deux flux moyennés sur deux passes chacun. À quatre : 23,0, 47,8, 94,2, 142,4 et 229,7. Les trois blocs DFlash2 et la tête MTP tournent tous au même pas de ~121 ms; ce qui diffère, c&#x27;est le rendement - 2,55 tokens pour MTP, 2,77 à quatre, 3,45 à cinq, 3,16 à sept, en flux unique - et ce que coûte la vérification une fois que le lot grossit. Cinq est le bloc qui gagne là où vit notre plateforme, un et deux agents de codage à la fois : +37 % sur MTP à un flux. Et il garde le gain à chaque taille de lot que nous pouvons atteindre, +13 % à quatre, +10 % à huit, +7 % à seize. Quatre le devance de 3 à 6 % à partir de quatre flux et perd un cinquième à un; sept ne gagne rien que cinq ne gagne pas.</p><p>Le bouton « raccourcir le brouillon quand la simultanéité monte » de l&#x27;article existe dans vLLM sous la forme d&#x27;un barème de longueurs de brouillon par taille de lot, et l&#x27;ordonnanceur le respecte; mais le spéculateur DFlash2 de la 0.28.0 produit un bloc de taille fixe, alors nous ne l&#x27;avons pas essayé à l&#x27;aveugle sur un moteur de production. Un cinq statique fait le travail sur cette machine.</p><h2>Constat 4 : la température influe sur le débit, et le client la choisit</h2><figure class="blog-figure"><img src="https://carouter.ai/blog/dflash2-draft-on-dgx-spark/04-single-stream-spread.png" alt="Décodage en flux unique à la température par défaut : la dispersion" loading="lazy"/><figcaption>Décodage en flux unique à la température par défaut : la dispersion</figcaption></figure><p>L&#x27;article dit qu&#x27;une température d&#x27;échantillonnage plus haute abaisse l&#x27;acceptation. C&#x27;est vrai, et ce n&#x27;est pas petit. À la température par défaut du checkpoint, 1,0, la tête MTP accepte 43 % au lieu de 52 % et le décodage en flux unique tombe de 20,8 à 18,5 tokens/s : 11 % pour un paramètre que la plupart des clients ne fixent jamais. DFlash2 à cette température, c&#x27;est là que la dispersion est apparue. Quatre passes en flux unique au bloc de sept tokens ont donné 32,5, 26,8, 21,3 et 17,1 tokens/s, une acceptation de 43 % jusqu&#x27;à 16 % sur la même famille d&#x27;invites, une moyenne de 24,4 et une pire passe sous les 18,5 de MTP; le bloc de cinq tokens a donné 19,8 et 22,1, le bloc de quatre 22,3 et 20,3. MTP, dont la tête est plus stable, se disperse entre 18 et 21 sur trois jours de mesures. L&#x27;acceptation d&#x27;un brouillon par blocs dépend de ce que le modèle se trouve écrire dans la fenêtre, et c&#x27;est pourquoi chaque chiffre de DFlash2 dans cet article est une moyenne avec sa dispersion, et pourquoi la sonde répète désormais ses mesures.</p><p>Côté client, un agent de codage qui fixe la température à 0,7 gagne environ un dixième de débit par rapport à la valeur par défaut, sans modification du serveur. Notre plateforme pourrait appliquer cette valeur par défaut.</p><h2>Ce que cela signifie pour nos clients</h2><p>Concrètement, pour les utilisateurs du point d&#x27;accès de codage :</p><ul><li><strong>Les réponses s&#x27;écrivent environ un tiers plus vite.</strong> En flux unique, les tokens arrivent désormais toutes les 35 ms au lieu de 48. La réponse moyenne sur notre trafic fait environ 460 tokens, elle se termine donc en à peu près 16 secondes au lieu de 22; la réécriture d&#x27;un fichier de 2 000 tokens prend environ 70 secondes au lieu de 96.</li><li><strong>Le premier token arrive au même moment qu&#x27;avant.</strong> Cette attente, c&#x27;est le traitement de l&#x27;invite, que le décodage spéculatif ne touche pas : environ deux secondes par requête sur notre trafic, parce que 96 % de l&#x27;invite est déjà dans le cache de préfixes depuis le tour précédent.</li><li><strong>Le gain rétrécit quand la machine est occupée, mais il ne disparaît plus.</strong> Avec quatre à seize agents qui décodent en même temps, chacun obtient 7 à 13 % de plus qu&#x27;avant au lieu de 37 %. Le bloc natif de 7 tokens perdait du terrain à seize flux; celui que nous servons, non.</li><li><strong>Le code est exactement le même.</strong> Le décodage spéculatif n&#x27;accepte que des tokens que le modèle aurait produits de toute façon, si bien que la qualité, les appels d&#x27;outils et l&#x27;entrée d&#x27;images sont intacts, et l&#x27;appariement BigCodeBench de l&#x27;article précédent tient toujours.</li><li><strong>Certaines réponses semblent plus rapides que d&#x27;autres.</strong> Un modèle brouillon prédit bien le code répétitif et les modifications qui reprennent le fichier existant. Il prédit moins bien la prose ou une logique inhabituelle. Le gain de vitesse varie donc selon le contenu et s&#x27;équilibre sur une session.</li><li><strong>Une chose est entre les mains du client.</strong> Un agent qui envoie une température d&#x27;échantillonnage de 0,7 pour du code, au lieu de laisser la valeur par défaut du modèle à 1,0, obtient environ 10 % de plus, parce que le brouillon est accepté plus souvent quand le modèle est moins aléatoire.</li></ul><h2>Ce que ça coûte</h2><p>Le brouillon, c&#x27;est 2,95 Gio de poids (la ligne de chargement de vLLM est passée de 21,97 à 24,92 Gio). Son propre cache à fenêtre glissante de 2048 tokens est taillé dans le même budget KV de 36 Gio, qui contient désormais 838 501 tokens au lieu de 1 014 892 : 3,2 requêtes simultanées de 262K tokens au lieu de 3,9. Le démarrage à froid prend sept minutes au lieu de six. Et la 0.28.0 impose son exécuteur de modèle V2 pour un brouillon DFlash2, un chemin de code plus récent, qui a servi la conversation, séparé le raisonnement de la réponse, analysé un appel d&#x27;outil et lu une image correctement dans les vérifications du jour même, et survécu à seize flux à sept tokens de brouillon là où la version précédente plantait à quatre flux avec quatre tokens MTP.</p><h2>Ce que nous avons déployé</h2><p>Qwen3.8-27B NVFP4 avec un brouillon DFlash2 de cinq tokens sur vLLM 0.28.0; les deux serveurs de plongements sur la même image; même proxy, même nom servi, mêmes 262K de contexte et 36 Gio de KV. La tête MTP reste dans le checkpoint et sa configuration reste dans la spécification sur une ligne en commentaire, parce qu&#x27;un brouillon dont l&#x27;acceptation oscille entre 16 % et 43 % sur la même invite mérite un repli qui oscille moins.</p><p>Les réserves honnêtes :</p><ul><li>DFlash2 a été entraîné contre les poids bf16 de Qwen; nous servons une quantification NVFP4 communautaire, et le brouillon lit des états cachés que la quantification perturbe. Une partie de la dispersion vient peut-être de là. Un brouillon entraîné sur la cible quantifiée est l&#x27;expérience que nous n&#x27;avons pas menée.</li><li>Chaque chiffre, c&#x27;est une machine, une sonde, un jour. Les cases à un et deux flux sont des moyennes de deux à quatre passes; les autres sont des passes uniques.</li><li>Notre estimation avait omis tout le coût d&#x27;exécution du modèle brouillon. Sur une machine à mémoire unifiée, il faut mesurer la durée d&#x27;une étape; diviser la taille des poids par la bande passante ne suffit pas.</li><li>La qualité du code est intacte par construction - le décodage spéculatif accepte exactement les tokens que le gros modèle aurait produits - si bien que l&#x27;appariement BigCodeBench de l&#x27;article précédent tient toujours.</li></ul><h2>Ce que la journée nous a rapporté, au-delà du chiffre</h2><p>Un tiers de plus par flux, c&#x27;est le titre, mais l&#x27;infrastructure en ressort avec davantage : l&#x27;image est sur vLLM 0.28.0 avec la procédure de mise à jour exercée de bout en bout; la sonde prend une température et répète ses mesures; les compteurs de production nous donnent désormais la longueur d&#x27;acceptation du vrai trafic, le chiffre à surveiller maintenant que le brouillon rencontre des agents plutôt qu&#x27;une invite sur les arbres rouge-noir; et quarante et un bacs à sable d&#x27;évaluation restés de la passe BigCodeBench de la semaine précédente ont disparu de la machine. Le prochain levier est documenté plutôt que deviné : la vérification par blocs, une règle d&#x27;acceptation sans perte qu&#x27;expose l&#x27;exécuteur V2, et un brouillon apparié aux poids quantifiés.</p>]]></content:encoded>
</item>
<item>
<title>Laguna S 2.1 contre Qwen3.8-27B sur le DGX Spark de CARouter : la vitesse a perdu contre la mémoire</title>
<link>https://carouter.ai/fr/blog/one-gb10-two-coding-models</link>
<guid isPermaLink="true">https://carouter.ai/fr/blog/one-gb10-two-coding-models</guid>
<pubDate>Tue, 25 Aug 2026 12:00:00 GMT</pubDate>
<dc:creator>Flavien Berwick</dc:creator>
<category>Recherche</category>
<description>Laguna S 2.1 de Poolside décode deux fois et demie plus vite que Qwen3.8-27B sur notre DGX Spark de 128 Go. Nous avons quand même mis Qwen en service : il tient dans un tiers de la mémoire, et ce qu'il laisse libre accueille quatre sessions de codage à 262K de contexte là où Laguna en tient une. Une fin de semaine de mesures, avec les graphiques, les erreurs et la configuration qui l'a emporté.</description>
<content:encoded><![CDATA[<p><img src="https://carouter.ai/blog/one-gb10-two-coding-models/illustration.png" alt="L'ASUS Ascent GX10 derrière CARouter Cloud : une machine de classe DGX Spark avec 128 Go de mémoire unifiée." /></p><p>CARouter achemine les requêtes d&#x27;IA vers des fournisseurs qui servent depuis le Canada, et CARouter Cloud est la partie que nous hébergeons nous-mêmes : un ASUS Ascent GX10 (une machine de classe NVIDIA GB10 « DGX Spark », 128 Go de mémoire unifiée, arm64) qui fait tourner vLLM derrière un proxy TLS, rattaché à notre grappe Kubernetes comme capacité. Il sert deux modèles de plongements et un modèle de codage. Voici l&#x27;histoire du choix du modèle de codage, racontée avec les chiffres, parce que le chiffre qui a tranché n&#x27;est pas celui que nous attendions.</p><h2>En bref</h2><ul><li><strong>Vitesse.</strong> Sur notre sonde de génération de code, Laguna décode à 46,5 tokens/s en flux unique et à 176 en agrégé à huit flux; Qwen, à 18,3 et 122. Laguna mène à chaque niveau de simultanéité que nous avons essayé.</li><li><strong>Traces de raisonnement.</strong> Sur le texte qu&#x27;un agent de codage produit réellement, les deux sont à égalité par flux : environ 17 tokens/s contre 14.</li><li><strong>Mémoire.</strong> Qwen, à 44 Gio résidents, laisse 62 Gio libres; Laguna, à 98 Gio, en laisse 8. Cela fait 3,9 requêtes simultanées de 262K tokens contre 1,2, et c&#x27;est le chiffre qui a tranché.</li><li><strong>Qualité.</strong> 33 contre 31 sur les 50 premiers problèmes de BigCodeBench, p = 0,73 au test de McNemar. Pas d&#x27;écart.</li><li><strong>En service.</strong> Qwen3.8-27B dans une quantification NVFP4 communautaire, profondeur MTP 3, 36 Gio de KV. Laguna reste à une variable d&#x27;environnement de distance.</li></ul><h2>Les deux candidats</h2><p><strong>Poolside Laguna S 2.1</strong> était le tenant du titre : un mélange d&#x27;experts de 117B avec 8,5B de paramètres actifs, servi depuis le checkpoint NVFP4 de Poolside avec leur brouillon de décodage spéculatif DFlash. C&#x27;est un très bon modèle de codage, et c&#x27;est un gouffre à mémoire : ~98 Gio résidents à 262K de contexte, ce qui, sur une machine de 121,6 Gio, laisse la place aux deux modèles de plongements et à rien d&#x27;autre.</p><p><strong>Qwen3.8-27B</strong> était le prétendant : un modèle dense de 27B, 64 couches dont 48 en Gated DeltaNet (attention linéaire) et 16 en attention complète, 262K de contexte natif, une tour de vision, et une tête de prédiction multi-tokens (MTP) entraînée dans le checkpoint. La fiche de Qwen le place près de la frontière en codage agentique (SWE-bench Pro 61,7, Terminal Bench 2.1 73,0).</p><p>L&#x27;attente naïve, que nous avions notée avant de mesurer : le 27B dense serait beaucoup plus lent. Un GB10 offre environ 273 Go/s de bande passante mémoire, le décodage est borné par la bande passante, et un 27B dense en FP8 lit ~27 Go de poids par token là où le MoE de Laguna en lit ~4 Go. Le modèle de performance roofline disait 10 tokens/s contre 60. Sur une simple invite de code, l&#x27;arithmétique a tenu : Laguna est deux fois et demie plus rapide en flux unique et devant à chaque taille de lot que nous avons essayée. Ce que l&#x27;arithmétique a manqué, c&#x27;est la charge de travail qu&#x27;un agent de codage envoie réellement, et la mémoire que le plus petit modèle laisse derrière lui - c&#x27;est là que va le reste de cet article, et de là que vient la décision.</p><h2>Ce que nous avons mesuré, et comment</h2><p>Chaque chiffre de débit ici vient d&#x27;une seule sonde, le script de banc d&#x27;essai de notre dépôt d&#x27;infrastructure : N requêtes de génération de code simultanées à travers le proxy de production, le taux de décodage lu dans les compteurs de tokens de vLLM lui-même sur une fenêtre de 40 secondes, puis un nouveau préremplissage de 12K tokens. Même sonde, même machine, même jour pour les deux modèles, pour que les colonnes s&#x27;alignent. Quand un chiffre vient plutôt de l&#x27;évaluation - le taux de décodage sur de longues traces de raisonnement, lu dans les mêmes compteurs pendant que BigCodeBench tournait - c&#x27;est indiqué, parce que les deux charges de travail ne donnent pas la même réponse. La qualité du code, c&#x27;est BigCodeBench, les 50 premiers problèmes, tokens sortants sans plafond, notés dans un bac à sable - les mêmes 50 problèmes pour les deux, pour que les deux passes s&#x27;apparient.</p><h2>Constat 1 : le décodage spéculatif vaut 5 tokens par pas sur du code facile et 1,5 sur du raisonnement</h2><p>Le brouillon DFlash de Laguna propose 7 tokens par pas. Sur notre sonde de génération de code, il en place 58 % - 5,1 tokens par pas - et Laguna décode à 46,5 tokens/s en flux unique. Sur les longues traces de raisonnement qu&#x27;un agent de codage produit réellement (sa passe BigCodeBench, lue dans les mêmes compteurs), l&#x27;acceptation tombe à 21 %, 1,48 token par pas, et le débit par flux à environ 17. L&#x27;unique couche MTP de Qwen, rejouée trois fois, en accepte environ la moitié à chaque position sur l&#x27;une ou l&#x27;autre charge : 2,5 tokens par pas, 18,3 tokens/s en flux unique sur la sonde et environ 14 par flux avec huit requêtes d&#x27;évaluation en vol. La spéculation de Laguna est spectaculaire quand le texte est prévisible et ordinaire quand il ne l&#x27;est pas; celle de Qwen est stable, et il partait quand même plus lent, parce que son pas de base lit 27 Go.</p><p>Le levier pour Qwen, c&#x27;était donc le checkpoint. Nous avons remplacé les poids FP8 officiels de Qwen par une quantification NVFP4 communautaire (celle d&#x27;unsloth : MLP en 4 bits, projections d&#x27;attention en FP8, échelles de KV et tête MTP comprises). vLLM l&#x27;a placée sur le noyau CUTLASS NVFP4 de FlashInfer - la même famille de noyaux qui rend Laguna rapide sur ce silicium - et le temps de pas est passé de 185 ms à 130 ms, plus que ne le prédit le seul rapport d&#x27;octets.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/one-gb10-two-coding-models/02-levers-single-stream.png" alt="Décodage en flux unique : ce que chaque levier a rapporté" loading="lazy"/><figcaption>Décodage en flux unique : ce que chaque levier a rapporté</figcaption></figure><p>Douze configurations plus tard, celle qui est en service est NVFP4 à une profondeur MTP de 3. La profondeur 4 égalait la 3 en flux unique, puis a fait planter vLLM sur un accès mémoire illégal à quatre séquences simultanées, le genre de chose qu&#x27;on n&#x27;apprend qu&#x27;en l&#x27;exécutant. Des blocs de préremplissage plus gros ont ralenti le préremplissage d&#x27;un tiers. La précision du cache KV s&#x27;est révélée être une décision de calibration, pas de vitesse.</p><h2>Constat 2 : Laguna est plus rapide sur les tâches simples, à égalité sur les tâches complexes</h2><p>Un point d&#x27;accès de codage derrière une plateforme de routage ne traite jamais une requête à la fois, alors nous avons mesuré les deux modèles à 1, 2, 4 et 8 flux simultanés, même sonde, même jour.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/one-gb10-two-coding-models/01-throughput-vs-streams.png" alt="Débit de décodage selon le nombre de flux simultanés" loading="lazy"/><figcaption>Débit de décodage selon le nombre de flux simultanés</figcaption></figure><p>Laguna mène à chaque compte : 46,5, 52, 96 et 176 tokens/s en agrégé contre 18,3, 40, 73 et 122 pour Qwen. La courbe de Qwen est la plus droite - à 5 % du linéaire jusqu&#x27;à huit flux, parce qu&#x27;un modèle dense paie sa lecture de poids une fois par pas quel que soit le lot, et que 32 tokens par pas est très loin de saturer le calcul d&#x27;un 27B. Celle de Laguna s&#x27;aplatit entre un et deux flux, où l&#x27;acceptation de son brouillon fléchit, puis grimpe de 3,8x à huit. Le croisement que nous attendions, où le traitement par lots éroderait l&#x27;avantage des paramètres actifs du MoE, n&#x27;est pas là à huit flux sur cette machine.</p><p>Ce qui resserre l&#x27;écart, c&#x27;est la charge de travail. Sur les traces de raisonnement, lues dans les mêmes compteurs pendant les passes BigCodeBench, Laguna fait environ 17 tokens/s par flux à deux flux et Qwen environ 14 par flux à huit (113 en agrégé); Laguna au-delà de deux flux sur cette charge est la seule case que nous n&#x27;avons pas mesurée. Par flux, sur le texte que les agents produisent réellement, les deux sont à égalité; sur du code que Laguna peut prédire, il est loin devant. Le préremplissage appartient à Laguna à toutes les longueurs : 3 550 tokens/s contre 2 088 sur une invite de 12K, 2 836 à 55K et 1 634 à 200K.</p><h2>Constat 3 : 62 Gio libres, c&#x27;est quatre sessions à 262K au lieu d&#x27;une</h2><p>C&#x27;est ce chiffre qui a tranché. Nous voulions 262K de contexte et plusieurs clients de codage actifs simultanément. Le contexte occupe le cache KV, qui doit tenir dans la mémoire laissée libre par les poids.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/one-gb10-two-coding-models/03-memory.png" alt="Mémoire par candidat" loading="lazy"/><figcaption>Mémoire par candidat</figcaption></figure><p>Laguna, à 98 Gio résidents, laisse 8 Gio libres après les modèles de plongements. Son budget KV de 12 Gio tient 1,2 requête à contexte plein, et il n&#x27;y a nulle part où l&#x27;agrandir. Qwen, à 44 Gio, laisse 62 Gio libres. Son KV par token est en fait plus cher que celui de Laguna (32 Kio contre 24, parce que ses 16 couches d&#x27;attention utilisent des têtes de largeur 256), mais il peut se permettre un budget trois fois plus grand, avec de la place pour quatre.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/one-gb10-two-coding-models/04-context-concurrency.png" alt="Requêtes à contexte plein simultanées selon le budget KV" loading="lazy"/><figcaption>Requêtes à contexte plein simultanées selon le budget KV</figcaption></figure><p>Avec les 36 Gio de KV que nous avons déployés, Qwen tient près de quatre requêtes simultanées de 262K tokens (3,9 : 1 014 892 tokens en cache, mesurés); à 48, il en tiendrait cinq. Laguna en tient une, avec une deuxième en attente. Pour une plateforme dont les cas d&#x27;usage en codage sont des agents qui lisent des dépôts entiers, ce n&#x27;est pas un détail de débit; c&#x27;est le produit.</p><h2>Constat 4 : une qualité comparable, comme nous l&#x27;espérions</h2><p>Sur les 50 premiers problèmes de BigCodeBench - sortie sans plafond, notée dans le même bac à sable, les mêmes 50 pour les deux - Qwen en résout 33 et Laguna 31. Appariés problème par problème, les deux s&#x27;accordent sur 42 d&#x27;entre eux : 28 résolus par les deux, 14 ratés par les deux. Qwen seul en résout cinq, Laguna seul trois, et un test de McNemar exact sur ces huit problèmes discordants donne p = 0,73. Ce n&#x27;est pas un classement, et ça n&#x27;allait jamais en être un à n = 50; c&#x27;est l&#x27;absence d&#x27;écart, qui est le résultat dont le constat sur la mémoire avait besoin pour signifier quelque chose. Ce qui a différé, c&#x27;est le temps que Qwen passe à réfléchir. Il a produit 462K tokens sortants pour l&#x27;ensemble contre 264K pour Laguna, et dix de ses échantillons ont dépassé 16K tokens là où Laguna n&#x27;a jamais franchi 11K - des traces de raisonnement de 20 à 31K tokens sur les problèmes les plus durs, aucune n&#x27;atteignant le plafond de 32K. Ces échantillons sont aussi ce qui nous a fait trouver deux délais d&#x27;expiration de dix minutes, un dans le proxy et un dans l&#x27;outil d&#x27;évaluation, qui coupaient silencieusement les longues générations et les relançaient; les deux sont à 7 200 s maintenant, et chaque chiffre de cet article a été mesuré après le correctif.</p><figure class="blog-figure"><img src="https://carouter.ai/blog/one-gb10-two-coding-models/05-coding-paired.png" alt="BigCodeBench : résultats appariés" loading="lazy"/><figcaption>BigCodeBench : résultats appariés</figcaption></figure><p>Le repérage en long contexte a tenu aussi. Sur la même grille d&#x27;aiguille dans une botte de foin qui avait validé les 256K de Laguna (quatre longueurs de contexte de 32K à 220K, trois positions d&#x27;aiguille), Qwen obtient 9,0/10 au total - parfait à 95K, 9,0 à 157K, et 8,0 à 220K là où Laguna tenait un 10 parfait. C&#x27;est au fond de la fenêtre que le tenant du titre garde une petite avance; tout ce qui est en deçà est un match nul.</p><h2>Ce que nous avons déployé</h2><p>Qwen3.8-27B, NVFP4, profondeur MTP 3, 262K de contexte, 36 Gio de KV, images activées, derrière le même proxy sous le même nom servi. Laguna reste sur le disque et dans le dépôt, à une variable d&#x27;environnement près, parce qu&#x27;une décision prise sur n=50 et une fin de semaine doit rester réversible.</p><p>Les réserves honnêtes :</p><ul><li>La version NVFP4 est une quantification communautaire, pas celle de Qwen.</li><li>50 problèmes, c&#x27;est un signal, pas un classement.</li><li>Le décodage de Laguna sur des traces de raisonnement n&#x27;a été mesuré qu&#x27;à deux flux, si bien que son chiffre à huit flux sur cette charge est une inférence, pas une mesure.</li><li>La comparaison de débit s&#x27;est inversée sur le tard : tant que Laguna n&#x27;était pas passé par la même sonde, nous mettions son taux d&#x27;évaluation en face du taux de sonde de Qwen et déclarions Qwen 3,6x plus rapide à huit flux, ce qu&#x27;il n&#x27;est pas. La décision tient sur les trois autres constats.</li><li>Tout ici est une seule machine, donc les courbes de lot sont une propriété du dense contre le MoE sur mémoire unifiée, pas une loi universelle.</li></ul><h2>Ce qu&#x27;un deuxième DGX Spark changerait</h2><p>La question évidente après une fin de semaine comme celle-là, c&#x27;est si un deuxième GB10 - deux DGX Spark, reliés par leurs ports ConnectX-7 à 200 Gb/s, la configuration que NVIDIA vend pour les modèles de classe 405B - aurait changé la décision. Il aurait changé les options plus que la réponse.</p><ul><li><strong>Les deux modèles, sans choisir.</strong> L&#x27;usage le plus simple d&#x27;une deuxième machine est de servir Laguna sur l&#x27;une et Qwen sur l&#x27;autre, chacun avec ses modèles de plongements, et de laisser la plateforme acheminer par modèle. Deux points d&#x27;accès de codage, deux offres souveraines, et Laguna récupère ses 121 Gio entiers pour un KV qu&#x27;il n&#x27;a jamais eu. C&#x27;est la configuration que nous ferions tourner si un client demandait Laguna précisément.</li><li><strong>Qwen en double, du KV partout.</strong> Deux machines Qwen indépendantes doublent la capacité simultanée à 262K pour la porter à dix, ajoutent la reprise sur panne, et gardent la mise à l&#x27;échelle linéaire par lot sur chacune. C&#x27;est la réponse ennuyeuse et probablement la bonne pour une plateforme : la capacité s&#x27;additionne, rien ne traverse l&#x27;interconnexion sur le chemin de la requête.</li><li><strong>Qwen en parallélisme de tenseurs sur les deux.</strong> vLLM peut répartir le 27B dense sur deux nœuds, ce qui divise par deux les octets de poids que chaque machine lit par pas et, en principe, double presque le décodage en flux unique. Le prix est un all-reduce par couche sur un lien à 25 Go/s; à la taille cachée de Qwen, cela fait quelques kilooctets par token par couche, donc le coût est en latence, pas en bande passante - plausible, non mesuré, et cela dépense la deuxième machine sur la latence en flux unique, la seule colonne où Laguna est déjà loin devant sur du code et où les deux sont à égalité sur du raisonnement.</li><li><strong>Un plus gros modèle à la place.</strong> L&#x27;option vraiment nouvelle : avec 256 Go, les candidats changent. La révision principale de Laguna (99,7 Go, les huit couches d&#x27;experts en BF16 que Poolside a gardées pour la qualité) tient avec de la place pour le contexte; un MoE 122B-A10B en NVFP4 (83,5 Go sur le Hub) aurait l&#x27;économie de paramètres actifs de Laguna avec une base plus forte et laisserait encore bien plus de 100 Go de KV sur la paire. C&#x27;est l&#x27;expérience que nous ferions ensuite, et c&#x27;est un autre article.</li></ul><p>Ce qu&#x27;une deuxième machine ne changerait pas, c&#x27;est la forme du constat. Le décodage sur ce silicium est borné par les octets par pas et aidé par les tokens par pas; une plateforme est servie par le débit agrégé et le contexte simultané; et un modèle dense qui tient dans un tiers de la mémoire transforme les deux autres tiers en exactement ce qu&#x27;une plateforme vend. Plus de machines multiplient cela. Elles ne le remplacent pas.</p>]]></content:encoded>
</item>
</channel>
</rss>
