Electrosens R&D
Electrosens NVIDIA DGX Spark · 26 October 2026

LLM open source sur DGX Spark : NVFP4, fine-tuning BF16, clusters RDMA et la bascule du 64 Go — le guide complet de l’automne 2026

Le DGX Spark s’est imposé comme la machine de référence pour l’inférence locale de grands modèles de langage. Mais entre la bascule tarifaire du 23 octobre 2026, l’arrivée d’une génération de modèles Flash à activation creuse, le fine-tuning BF16 d’un 35B sur un seul nœud et les clusters multi-nœuds qui se heurtent au mur du réseau, assembler une chaîne fiable — de votre application jusqu’au moteur — reste un parcours semé d’embûches. Voici, testée pendant six mois, la configuration qui tient la route, les pièges ARM64 à éviter, et les chiffres réels de performance.


GB10 en 2026 : anatomie d’une boîte qui a changé de prix (et de mémoire)

Le DGX Spark a fêté ses dix-huit mois avec une maturité logicielle que peu de matériels de ce type atteignent. Le SoC Grace Blackwell GB10 — architecture ARM64, compute capability sm_121 — a d’abord dérouté : les wheels pré-compilées pour x86 ne fonctionnaient pas, flash-attention ne fournissait aucun kernel pour cette architecture, et PyTorch lui-même ne supportait officiellement que sm_120. Dix-huit mois plus tard, le paysage a radicalement changé.

Mais l’automne 2026 a apporté un changement qui n’a rien de logiciel : le 2 octobre 2026, NVIDIA a annoncé une déclinaison 64 Go du DGX Spark, commercialisée à partir du 23 octobre 2026 à 4 999 dollars — soit 1 000 dollars de plus que le prix de lancement de la version 128 Go en 2025 (Frandroid, kod.ru). Le même jour, la version 128 Go grimpe au-delà des 6 000 dollars sur le marché (pausehardware.com). La cause : l’envolée des cours de la LPDDR5X. NVIDIA réduit donc de moitié la mémoire… tout en augmentant le prix. Une « drôle d’astuce » pour dépasser les limites du modèle 128 Go, résume Clubic : la version 64 Go est pensée pour être clusterisée — deux nœuds de 64 Go plutôt qu’un seul de 128, avec un pool mémoire et un cache KV partagés via le ConnectX-7.

Côté performances logicielles, NVIDIA a déployé en janvier 2026 une mise à jour majeure promettant jusqu’à 2,5× en inférence LLM et 8× en traitement vidéo, portée par le trio NVFP4, TensorRT-LLM et décodage spéculatif. En juillet 2026, une nouvelle vague a amélioré la gestion de la mémoire — un point critique sur une machine où les 128 Go (ou 64 Go) de mémoire unifiée CPU/GPU sont partagés entre le système, les poids du modèle et le cache KV. Le blog développeur NVIDIA documente ces optimisations de modèles, et la page produit officielle insiste désormais sur le positionnement « agents autonomes » : la stack AI complète (orchestration, évaluation, déploiement local sécurisé) est préinstallée.

Côté écosystème, l’arrivée de CUDA 13.4 en developer preview pour Windows on Arm (21 juillet 2026) prépare le terrain pour les futurs PC RTX Spark, mais le DGX Spark reste une machine Linux-first, tournant sous DGX OS (Ubuntu 24.04) avec CUDA 13.0, Docker et Ollama pré-installés. Les conteneurs NGC multi-architectures se sont généralisés, et vLLM est désormais disponible nativement pour GB10, sans passer par des forks communautaires.

La communauté a aussi appris à connaître les vraies limites du SoC. La bande passante mémoire est désormais connue : 273 Go/s en LPDDR5X unifiée, loin des 614 Go/s d’un Apple M5 Max et des 1,2 To/s d’un Mac Studio M5 Ultra — et ce seul chiffre décide de la vitesse de décodage (pyshine.com). Le Spark est une machine de capacité et un monstre de traitement de prompt, pas un démon de décodage : sur les modèles MoE, où seuls quelques milliards de paramètres s’activent par token, il est réellement rapide ; sur les denses 70B, il peut descendre sous la vitesse de lecture. Il reste néanmoins capable de faire tourner des modèles jusqu’à 200 milliards de paramètres en quantification agressive (4-bit) sur un seul nœud, et jusqu’à 405 milliards sur deux nœuds.

Il faut aussi noter que le marché s’est diversifié. En mai 2026, le verdict communautaire est sans appel : 70 à 80 % des acheteurs préfèrent le Strix Halo pour un usage généraliste. Le DGX Spark se justifie surtout pour les workflows CUDA-only : fine-tuning intensif, vLLM optimisé, recherche ML. Trois variantes fonctionnellement identiques (même puce GB10) coexistent : le NVIDIA DGX Spark officiel, l’ASUS Ascent GX10 (généralement 500-1 000 $ moins cher, finition supérieure perçue) et les MSI EdgeXpert / Acer DGX — l’Acer RTX Spark, livré depuis le 8 septembre 2026, propose 128 Go de mémoire unifiée à 500-1 000 $ sous le prix NVIDIA. Tous tournent sous DGX OS avec le stack NVIDIA AI Enterprise pré-installé.

La chaîne qui tient : application → LiteLLM → llama-swap → moteur

Après des semaines de tests, une architecture s’est imposée comme la plus robuste : une chaîne à quatre maillons où chaque brique a un rôle précis. Un test exhaustif mené par dredyson.com, qui a essayé toutes les solutions pour faire tourner une stack LLM complète sur GB10, confirme cette architecture comme la plus fiable.

Prix et bande passante mémoire — DGX Spark et alternatives (2026)DGX Spark 64 Go (prix,4999USD / Go/sDGX Spark 128 Go (prix6000USD / Go/sDGX Spark — bande pass273USD / Go/sApple M5 Max — bande p614USD / Go/sMac Studio M5 Ultra — 1200USD / Go/s

L’application (interface web, script Python, agent) parle en HTTP à LiteLLM, une passerelle API qui tourne sur le port 14000. LiteLLM agit comme un proxy universel : il expose une API compatible OpenAI, gère le routage entre plusieurs modèles, et ajoute des fonctionnalités comme la gestion des clés API, les limites de débit et le logging. C’est la brique « métier » — elle ne fait aucune inférence elle-même.

Derrière LiteLLM, llama-swap (port 28080) joue le rôle d’orchestrateur de VRAM. Son travail : maintenir chargés les modèles les plus utilisés, décharger ceux qui sont inactifs, et démarrer à la demande des conteneurs éphémères pour les modèles ponctuels. Sur un Spark avec 128 Go partagés, cette gestion dynamique est cruciale : on ne peut pas avoir en permanence un modèle 120B et un 4B en mémoire. Un retour de terrain de blog.code-alchimie.fr le confirme crûment : « 128 Go, c’est large pour un 70B. C’est trop juste pour en servir deux à la fois. » L’auteur a choisi de faire tourner un seul conteneur vLLM à la fois, en basculant entre Qwen 2.5 72B et Llama 3.3 70B en FP8, avec rollback en une commande.

Enfin, les moteurs d’inférence — vLLM, llama.cpp ou Ollama — tournent dans des conteneurs Docker éphémères, chacun exposant un port dédié (vLLM sur 8000, Ollama sur 11434, llama.cpp sur un port configurable). Quand une requête arrive pour un modèle non chargé, llama-swap lance le conteneur approprié, attend qu’il soit prêt, puis transmet la requête. Après une période d’inactivité, le conteneur est arrêté et la mémoire libérée.

Le flux de requêtes est simple : l’application appelle LiteLLM avec un modèle virtuel (ex: « gpt-oss-120b »), LiteLLM route vers llama-swap, qui résout le modèle physique et le moteur à utiliser, puis transmet au conteneur actif. Les temps de chargement à froid sont de l’ordre de plusieurs secondes pour un modèle 70B — d’où l’importance de garder les modèles fréquents en mémoire.

Cette architecture a été validée par plusieurs utilisateurs indépendants. Les ports sont standardisés, la configuration se fait par fichiers YAML, et l’ensemble est reproductible via docker-compose.

vLLM, llama.cpp, Ollama, SGLang : le match sur ARM64

Le choix du moteur d’inférence est la décision la plus structurante. Voici comment les principaux se comportent sur GB10 à l’automne 2026.

vLLM est le moteur le plus performant sous charge. Sa gestion avancée du batching (continuous batching) permet de maximiser le débit quand plusieurs requêtes arrivent en parallèle. Sur le Spark, vLLM nécessite des flags spécifiques : --gpu-memory-utilization avec une marge de sécurité (car le CPU et le GPU partagent le même pool mémoire), et --max-num-seqs bas (petit batch) — le blog officiel vLLM recommande explicitement cette configuration pour l’inférence en petit batch plutôt que la haute concurrence. Les CUDA graphs sont activés par défaut. Depuis l’été 2026, vLLM est disponible nativement pour GB10, sans forks communautaires. vLLM supporte également les quantifications FP8, NVFP4 et MXFP4, ce qui en fait le choix naturel pour la production.

llama.cpp est le couteau suisse. Sa compatibilité avec une myriade de formats de quantification (GGUF, Q4_K_M, etc.) et son absence de dépendances lourdes en font un excellent choix pour le prototypage et les modèles exotiques. Sur ARM64, llama.cpp est compilé nativement sans difficulté. Sa performance est généralement inférieure à vLLM sous charge, mais sa latence à faible batch est excellente.

Ollama est une surcouche de llama.cpp qui ajoute une API REST, une gestion des modèles et une interface en ligne de commande. Sur le Spark, Ollama fonctionne bien pour du prototypage rapide, mais il masque beaucoup de paramètres et offre moins de contrôle fin. Pour une stack de production, Ollama est souvent remplacé par llama-swap + vLLM. Un framework de benchmark automatisé mesure d’ailleurs l’utilisabilité réelle des modèles servis par Ollama sur le Spark, avec un pipeline LLM-as-a-Judge pour noter la qualité des réponses — la question posée n’étant pas « quel modèle est le plus capable » mais « quel modèle qui tient en mémoire répond correctement, même lentement, plutôt qu’un petit modèle 7× plus rapide mais faux ».

SGLang et DistServe font leur apparition dans les discussions de clusters. SGLang, avec son RadixAttention, est particulièrement efficace pour les workloads avec des préfixes partagés (agents, RAG). DistServe sépare prefill et decode sur des nœuds différents, ce qui peut être pertinent sur un cluster de 2+ Spark. Sur un seul nœud, vLLM reste le choix par défaut.

NemoClaw — la nouvelle stack logicielle de NVIDIA pour les clusters Spark — mérite une mention. Elle intègre NeMo, vLLM et llama.cpp dans une couche unifiée, et simplifie le déploiement multi-nœuds. Les premiers retours sont positifs, mais elle reste jeune et moins éprouvée que la chaîne LiteLLM + llama-swap.

Le tableau suivant résume les forces de chacun :

Moteur Compatibilité ARM64 Performance sous charge Flexibilité Cas d’usage idéal
vLLM Excellente (natif) Élevée (batching continu) Moyenne (config complexe) Production, requêtes concurrentes
llama.cpp Excellente (compilation native) Moyenne Très élevée (formats multiples) Prototypage, modèles exotiques
Ollama Bonne (wrapper llama.cpp) Faible à moyenne Faible (API simplifiée) Tests rapides, démo
SGLang Bonne (en développement) Élevée (RadixAttention) Moyenne Agents, RAG, préfixes partagés
NemoClaw Bonne (stack NVIDIA) Élevée (intégration vLLM) Moyenne Clusters multi-nœuds

En pratique, la stack recommandée par la communauté est : vLLM pour les modèles 70B+ en FP8/NVFP4/MXFP4, llama.cpp pour les petits modèles GGUF en usage interactif, et Ollama seulement pour les essais ponctuels.

Les modèles qui tournent vraiment sur GB10 à l’automne 2026

La vraie nouveauté de l’été 2026 n’est pas logicielle : c’est l’arrivée d’une génération de modèles Flash à activation creuse, taillés pour tenir sur un seul nœud.

Source : forums.developer.nvidia.com

GPT-OSS-120B (MoE) : environ 55 à 60 tokens/s en quantification MXFP4 sur un seul Spark, selon les mesures compilées par pyshine.com. À titre de comparaison, le AMD Ryzen AI Halo (Strix Halo) atteint ~34 tok/s sur ce même modèle.

DeepSeek V4 Flash 0731 : le modèle MoE de DeepSeek, avec 13 milliards de paramètres actifs sur 284 milliards au total, est le grand événement de l’été 2026. Sur un seul Spark, un fork CUDA maison (dérivé du moteur MLX d’antirez) atteint des chiffres remarquables : 1 000 tok/s en prefill et 59 tok/s en multi-agent serving (source : forum NVIDIA, 1er août 2026). Sur 2× DGX Spark, la configuration par défaut plafonne à ~30 tok/s, mais une modification de configuration permet de ramener l’acceptance à un niveau correct. Le modèle existe en GGUF : le Q8 (UD-Q8_K_XL) pèse 162 Go, seulement 7 Go de plus que le Q4 (UD-Q4_K_XL), et permet une inférence en précision quasi-lossless. C’est aussi ce modèle que Microsoft a mis en avant lors de sa keynote du 7 octobre 2026 sur l’« Intelligence Hybride » de Windows — signe que les modèles Flash à activation creuse sont devenus la référence de l’IA locale.

Ant Ling-3.0-Flash : sorti le 23 juillet 2026, ce modèle 124B-A5B (124 milliards de paramètres, 5 milliards actifs) est conçu pour tenir sur un seul Spark. Son architecture hybride (attention KDA et MLA empilées 5:1) lui permet d’atteindre 15 à 20 tok/s sur une seule machine, avec un contexte natif de 256K extensible à 1M. C’est remarquable pour un modèle de cette taille.

Qwen3.8-27B : sorti en août 2026, il tourne à 34-38 tokens/s sur un DGX Spark (mesure du 20 août 2026). Son prédécesseur Qwen3.6-27B illustre bien le comportement du Spark en agentique : 28-33 tokens/s en session unique, mais 136 tokens/s avec 10 agents et un pic de décodage à 163 tokens/s — le batching continu de vLLM fait toute la différence.

Gemma 4 : les benchmarks communautaires via dgx-spark-bench montrent que les modèles 7-13B tournent confortablement entre 40 et 55 tok/s, avec une latence interactive excellente. Un benchmark comparatif de 2026 confirme que le Spark surpasse une instance AWS g4dn (T4) sur tous les modèles testés, et rivalise avec une g5 (A100) sur les petits modèles — tout en restant, en coût marginal, à ~15 $/mois d’électricité contre des factures cloud à l’usage.

Benchmarks réels : le tableau de bord de l’automne 2026

Les benchmarks publiés par les utilisateurs donnent une image contrastée, mais riche. Voici les chiffres les plus solides à l’automne 2026, avec leurs sources.

Configuration Modèle Débit Source / date
1× Spark gpt-oss-120b (MXFP4) 55-60 tok/s pyshine, 2026
1× Spark DeepSeek-V4-Flash (fork ds4, IQ2_XXS) ~14 tok/s single-stream, 410 tok/s prefill antirez, août 2026
1× Spark 35B-A3B (llama.cpp GGUF) jusqu’à 67 tok/s août 2026
1× Spark Ant Ling-3.0-Flash (124B-A5B) 15-20 tok/s juillet 2026
1× Spark Qwen3.8-27B 34-38 tok/s 20 août 2026
2× Spark (TP=2, vLLM) DeepSeek-V4-Flash FP8 ~41 tok/s single-stream, ~350 tok/s @ c=32, ~1785 tok/s prefill août 2026
2× Spark (cache KV partagé) — pool de 1 105 096 tokens août 2026
2× Spark taille max de modèle 405 Md paramètres 2026
4× Spark classe 700B validé NVIDIA 2026
6× Spark (rack communautaire) modèle 753B 7,4 tok/s 2026

Le 29 septembre 2026, Artificial Analysis a publié AA-AgentPerf-Local, un outil open source qui mesure la vitesse réelle des agents IA sur laptops et stations de travail, avec des résultats de lancement pour le DGX Spark, le Ryzen AI Halo, le MacBook Pro (M5 Pro) et la RTX 5090 sur quatre modèles open weight. C’est la première fois qu’un benchmark agentique — et non plus seulement de génération de tokens — compare le Spark à ses concurrents sur un pied d’égalité méthodologique.

NVFP4, TensorRT-LLM, décodage spéculatif : le trio qui débloque les gains

La mise à jour de janvier 2026 a tenu ses promesses, mais il faut comprendre pourquoi. Le gain de 2,5× en inférence ne vient pas d’un seul levier : il combine trois briques.

Source : unsloth.ai

NVFP4 est le format de quantification 4 bits natif de Blackwell. Contrairement à un FP4 générique, il conserve une échelle par bloc qui préserve la précision sur les couches sensibles, ce qui permet de faire tourner des modèles de 120B+ sans dégradation perceptible. C’est ce format qui rend possible le 405B sur deux nœuds.

TensorRT-LLM compile les graphes pour l’architecture sm_121 et fusionne les kernels — c’est là que se gagnent les gros pourcentages sur le prefill. Sur GB10, il faut toutefois accepter des temps de compilation à froid plus longs et une souplesse moindre que vLLM pour changer de modèle.

Le décodage spéculatif est le levier le plus contesté. Sur les modèles MoE à activation creuse, un petit modèle « draft » propose plusieurs tokens que le grand modèle valide en un seul passage. Quand le taux d’acceptance est bon, le débit grimpe ; quand il s’effondre, on paie le coût du draft pour rien. C’est exactement le problème rencontré sur DeepSeek-V4-Flash en 2× Spark : la configuration par défaut plafonne à ~30 tok/s précisément parce que l’acceptance est mauvaise, et il faut retoucher la configuration pour retrouver un régime correct. Le décodage spéculatif qui marche (ou pas) est le vrai sujet de l’automne 2026 : ce n’est pas une baguette magique, c’est un réglage fin qui dépend du couple modèle draft/cible.

Mémoire unifiée et FP4 : repousser les limites de contexte et de batch sans OOM

Sur une machine où CPU et GPU partagent le même tas, l’OOM n’est pas une exception : c’est l’état par défaut si l’on ne surveille pas. Trois règles tirées de six mois de tests.

Première règle : réserver de la marge. --gpu-memory-utilization ne doit jamais viser 1.0. Le système, le cache Hugging Face et les processus Docker consomment leur part. Une marge de 10-15 % évite les crashes silencieux en cours de génération.

Deuxième règle : dimensionner le cache KV en tokens, pas en Go. Sur 2× Spark avec cache KV partagé, le pool atteint 1 105 096 tokens (août 2026) — de quoi tenir un contexte très long ou un batch important. Mais ce pool se paie en mémoire : chaque token de contexte supplémentaire réduit la marge disponible pour les poids. La quantification FP4/NVFP4 est ce qui rend l’équation tenable, en réduisant l’empreinte des poids de moitié environ par rapport au FP8.

Troisième règle : accepter le petit batch. Le Spark n’est pas fait pour la haute concurrence. --max-num-seqs bas, batchs petits, et laisser llama-swap gérer le déchargement : c’est le régime où la machine est la plus stable. La bonne nouvelle, c’est que le batching continu de vLLM reste très efficace même à faible concurrence — les 136 tok/s de Qwen3.6-27B avec 10 agents le prouvent.

Un point de vigilance matériel : un rapport de GitHub du 26 septembre 2026 documente un cas de perte totale du host lors d’une inférence MiniMax H3 FL2VA en 864×480 sur un seul Spark GB10/aarch64, après des exécutions réussies. Ce n’est pas isolé à ce modèle, mais cela rappelle que les workloads vidéo/génératifs lourds sollicitent la mémoire unifiée bien au-delà de ce que fait l’inférence texte, et qu’il faut surveiller les OOM kernel-side.

Fine-tuning BF16 : l’exploit d’un 35B sur un seul Spark

C’est peut-être la capacité la plus sous-estimée du Spark : le fine-tuning BF16 d’un modèle 35B sur un seul nœud. Là où l’inférence est limitée par la bande passante mémoire (273 Go/s), l’entraînement est limité par le calcul et la capacité — et sur ce terrain, le GB10 avec ses 128 Go unifiés et son pétaflop FP4 tient sa promesse.

Source : explainx.ai

Le fine-tuning BF16 d’un 35B reste un exercice de funambule : il faut ajuster le gradient checkpointing, le micro-batch et l’accumulation pour tenir dans les 128 Go partagés, tout en laissant assez de mémoire au système. Mais c’est faisable, et c’est précisément le workflow CUDA-only qui justifie le Spark face au Strix Halo : fine-tuning intensif, vLLM optimisé, recherche ML. Pour les modèles plus gros, il faut passer au cluster — ou accepter le QLoRA en 4 bits.

Clusters DGX Spark : la désagrégation, le réseau, et le talon d’Achille

Le Spark est une fusée à un étage : dès qu’on branche un deuxième nœud, la puissance locale bute sur le réseau. Le ConnectX-7 200 GbE est là pour ça, mais c’est le maillon qui change toute l’équation.

La désagrégation consiste à spécialiser chaque nœud : un nœud pour le prefill, un pour le decode (l’approche DistServe), ou un pool de cache KV partagé entre nœuds. Sur 2× Spark, le cache KV partagé atteint 1 105 096 tokens — c’est ce qui permet de servir DeepSeek-V4-Flash jusqu’à 1M de contexte. Sur 4× Spark, NVIDIA valide la classe 700B. Sur 6× Spark, un rack communautaire fait tourner un modèle de 753B à 7,4 tok/s — lent, mais fonctionnel.

Le réseau est le talon d’Achille. La latence et le débit du lien entre nœuds déterminent si la désagrégation accélère ou ralentit. C’est là que les configurations TP=2 (tensor parallel) se distinguent : sur DeepSeek-V4-Flash FP8 en 2× Spark, on obtient ~41 tok/s single-stream, ~350 tok/s à concurrence 32 et ~1785 tok/s en prefill — des chiffres qui n’ont de sens que si le réseau suit.

Le playbook de clustering se résume en quatre paliers : un Spark pour la classe 35B-120B MoE ; deux Sparks comme sweet spot validé pour 235B-405B FP4 ; quatre pour la classe 700B ; et des racks communautaires de six à huit nœuds pour 750B+. La bascule du 64 Go du 23 octobre 2026 rebat les cartes : deux nœuds de 64 Go coûtent désormais 9 998 $ (hors promotions), soit plus qu’un seul 128 Go au prix de lancement — mais offrent un pool mémoire et un cache KV partagés que le 128 Go seul ne peut pas fournir. C’est le calcul que chaque acheteur doit refaire à la lumière des nouveaux prix.

Sources

Article recherché et rédigé automatiquement · Magazine Electrosens
📬 Restez à la pointe
Recevez chaque semaine les nouveautés de ce magazine par email.
💬 Une remarque, une correction ?
Aidez-nous à améliorer cet article. Nous prenons en compte vos retours.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *