2 points par GN⁺ 5 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Un dépôt regroupe la configuration matérielle, les réglages du switch PCIe et la configuration d’exécution Docker pour faire tourner localement des LLM de pointe et de la conversion voix-texte
  • Un budget d’environ 2 k$ vise une configuration avec 2× RTX 3090 pour obtenir 48 Go de VRAM et exécuter Qwen3.6-27B ainsi qu’un STT local basé sur whisper-large-v3
  • Un budget d’environ 40 k$ part d’une configuration avec 4× RTX PRO 6000 Blackwell Workstation pour obtenir 384 Go de VRAM et un niveau d’intelligence de modèle assez proche de Claude Opus
  • Le système réel à 4× RTX 6000 Pro combine une machine d’occasion basée sur EPYC/DDR4 avec un switch PCIe Gen4 c-payne afin de gérer les communications P2P entre GPU dans le fabric du switch plutôt que via le root complex CPU
  • Après réglage du BIOS, de GRUB, de l’ACS et des limites de puissance, le P2P atteint 27,5 Go/s en unidirectionnel, 50,4 Go/s en bidirectionnel, avec une latence de 0,37–0,45 µs, soit le débit de ligne Gen4

Tranches de budget pour exécuter des LLM en local

  • Cette configuration s’adresse aux utilisateurs qui veulent faire tourner localement des modèles de pointe et de la conversion voix-texte
  • Le dépôt inclut le matériel utilisé, les raisons d’achat, des conseils de configuration, la manière d’exécuter un STT local et une configuration d’exécution de modèles basée sur des conteneurs Docker
  • Une note précise que tout le contenu, sauf les tableaux du README, n’a pas été rédigé par une IA
  • Configuration autour de 2 k$

    • Une configuration avec 2× RTX 3090 est proposée pour obtenir 48 Go de VRAM au total
    • Cette configuration permet d’exécuter Qwen3.6-27B
    • Le STT local utilise whisper-large-v3, avec le harnais multiplateforme stt pour l’accès
    • ./runners/stt contient une configuration STT prête à l’emploi qui part du principe qu’il n’y a qu’environ 11 Go de VRAM sur un GPU Nvidia
    • Le STT local est présenté comme un outil plus pratique à utiliser qu’un service hébergé
  • Configuration autour de 40 k$

    • Elle part d’une configuration avec 4× RTX 6000 Pro pour obtenir 384 Go de VRAM au total
    • À ce niveau de prix, elle est décrite comme donnant accès à une intelligence de modèle assez proche de Claude Opus
    • Au 2026-07, le meilleur modèle actuel pour 4× RTX6kPRO est indiqué comme étant GLM-5.2-Int8Mix-NVFP4-REAP-594B
    • La configuration d’exécution se trouve dans runners/GLM-5.2-594B
    • Une autre approche mentionnée consiste à relier un cluster de 4× DGX Spark pour obtenir 512 Go de VRAM, puis laisser un gros cerveau lent et un Qwen3.7-27B traiter rapidement les tâches répétitives

Matériel réel de la machine 4× RTX 6000 Pro

  • Le système réel est construit autour de 4× RTX PRO 6000 Blackwell Workstation
  • Chaque GPU dispose de 96 Go, pour un total de 384 Go de VRAM, et l’ensemble coûte environ 46 000 $
  • La machine réutilise une plateforme EPYC de génération précédente et des composants DDR4 achetés sur eBay afin de réduire le coût de base du système et concentrer les dépenses sur la VRAM
  • En juillet 2026, les systèmes PCIe5/DDR5 étant très chers, le choix s’est porté sur un switch PCIe Gen4 et une base DDR4
  • BOM du système de base

    • Le système de base est composé en grande partie de composants EPYC de génération précédente achetés sur eBay
    • Les principaux composants et leurs prix sont les suivants
    • Carte mère ASRock Rack ROMED8-2T : 715 $
    • CPU AMD EPYC Milan 7313P 16 cœurs 3,0 GHz : 504 $
    • 8× 16 Go Crucial DDR4 ECC RDIMM, soit 128 Go de RAM au total : 642 $
    • 2× alimentations Super Flower 1700W : 750 $
    • Switch PCIe Microchip Switchtec PM40100 Gen4 de c-payne : environ 1 330 $
    • NVMe de démarrage 4 To : 291 $
    • 2× NVMe 8 To pour les poids de modèles : 1 200 $
    • Total du système de base : 5 587 $
  • Switch PCIe Gen4

    • Un switch PCIe4 de c-payne est utilisé pour gérer de façon quasi directe les communications entre GPU
    • Lors de l’étape d’allreduce en parallélisme tensoriel, les données entre GPU transitent dans le fabric du switch sans passer par le root complex PCI du CPU
    • Le sous-BOM du switch est d’environ 1 220 €, soit environ 1 330 USD
    • Switch PCIe Gen4 5× x16 basé sur Microchip Switchtec PM40100
    • Adaptateur hôte SlimSAS PCIe Gen4 x16
    • 2 câbles SlimSAS SFF-8654 8i
    • Un caisson en bois pour les GPU et le switch PCI a été fabriqué à la main, ce qui a pris environ une journée
    • Le ventilateur intégré au switch PCI était très bruyant et semblait inutile, il a donc été retiré de la carte

Stockage des poids de modèles et mode d’exécution

  • Tous les poids de modèles sont stockés localement sur un système de fichiers ZFS répliqué sur deux disques de 8 To
  • Le système de fichiers est monté sur ~/storage
  • Les modèles à exécuter sont d’abord téléchargés en local avec la commande suivante
hf download <model-name> --local-dir ~/storage/<model-name>
  • Chaque modèle possède son propre docker-compose.yml dans un répertoire séparé et s’exécute dans son propre conteneur Docker
  • Les configurations d’exécution se trouvent dans ./runners/
  • Chaque conteneur monte ~/storage/models en lecture seule pour lire les poids mis en cache
  • Quand le modèle est servi sur http://clank.j.co:5000, il est utilisé via opencode, hébergé sur la VM d’une autre machine
  • Un serveur DNS interne associe clank.j.co à la machine LLM, mais une URL du type http://<llm-machine-ip>:5000 fonctionne aussi

Harnais d’agents et configuration des outils

  • Dans une VM séparée, une application crée une session tmux pour chaque répertoire de l’arborescence ~/src et lance une instance opencode dans chaque session
  • Chaque instance opencode utilise comme backend l’API HTTP de la machine d’inférence, http://clank.j.co:5000
  • La configuration des outils est présentée comme la clé pour bien exploiter des modèles open source
  • Le résumé skills/ inclut les outils suivants
    • navigation Web et recherche via camofox, une clé API kagi.com et searXNG
    • communication et notifications via un bot Telegram
    • instance Gitea privée locale pour la collaboration sur le code source
  • Les agents peuvent soit travailler en interaction au sein d’une session, soit prendre en charge des issues Gitea et ouvrir des PR
  • Tout cela s’exécute dans une VM sandbox, avec comme seul canal de communication avec l’hôte un montage de système de fichiers partagé

Switch PCIe et configuration multi-GPU

  • Réglages BIOS

    • Les réglages BIOS de la carte mère ROMED8-2T ont été ajustés pour éviter que la vitesse du switch PCI ne chute
    • AMD PCIE Link Width est réglé sur x16 pour le slot du switch
    • L’ancienne configuration de bifurcation x8/x8 divise le slot et fait entraîner le lien upstream en Gen4 x8
    • Les deux câbles SlimSAS 8i doivent être connectés, chaque câble prenant en charge un x8
    • PCIe Link Speed est forcé en Gen4
    • Lors de l’auto-négociation de périphériques Blackwell Gen5 via un switch Gen4, l’entraînement peut échouer et retomber en Gen1
    • ASPM est réglé sur Disabled
    • ASPM L1 abaisse les liens inactifs à 2,5GT/s
    • C’était la raison pour laquelle lspci pouvait laisser croire à un passage en Gen1, alors qu’en charge le système fonctionne bien en Gen4
    • Re-Size BAR est réglé sur Enabled
    • Ce réglage est nécessaire pour exposer l’intégralité des 96 Go de BAR VRAM et pour le P2P GPU
    • SR-IOV est réglé sur Disabled
    • Ce choix vise à éviter la surcharge IOMMU et les interférences avec le P2P dans un environnement d’inférence bare metal
    • Preferred IO est laissé sur Auto
    • Assigner manuellement le bus 81 du switch c-payne peut légèrement améliorer la latence, mais il s’agit d’une optimisation plutôt que d’un correctif, et les numéros de bus peuvent changer après une modification du BIOS
  • Redriver et câbles

    • Sur conseil de c-payne, le gain du redriver a été abaissé à lvl 3 avec le c-payne tool
    • Le niveau de gain dépend de la longueur des câbles du connecteur SAS
    • Comme trop peu de câbles avaient été commandés chez c-payne, des câbles SAS apparemment similaires ont été achetés sur Amazon, mais de petites différences ont causé des problèmes et il a fallu recommander

Noyau, ACS et limites de puissance

  • GRUB et NVIDIA UVM

    • Les paramètres de noyau suivants sont définis dans /etc/default/grub
    GRUB_CMDLINE_LINUX="iommu=off amd_iommu=off nomodeset"
    sudo update-grub
    
    • Sans iommu=off, NCCL se bloque en P2P multi-GPU
    • Le réglage suivant est appliqué pour corriger le P2P NVIDIA UVM
    echo 'options nvidia_uvm uvm_disable_hmm=1' | sudo tee /etc/modprobe.d/uvm.conf
    sudo update-initramfs -u
    
  • Désactivation de l’ACS

    • Si l’ACS est activé par défaut, le trafic P2P ne reste pas dans le fabric du switch et passe par le port racine CPU
    • Dans ce cas, l’intérêt du switch PCIe disparaît
    • Comme pcie_acs_override nécessite un noyau patché, l’ACS est désactivé à l’exécution via setpci
    • Au démarrage, un service systemd oneshot exécute /usr/local/bin/disable-acs.sh
    • La vérification se fait de la manière suivante
    • Dans lspci -vvv | grep ACSCtl, tout doit apparaître avec des signes moins
    • Dans nvidia-smi topo -m, les quatre GPU doivent apparaître en PIX entre eux, et non en PHB/NODE
    • ./tools/measure-gpu-speed.sh permet de mesurer facilement la bande passante et la latence P2P
  • Limite de puissance GPU

    • Pour éviter d’installer un circuit 220V, le système fonctionne sur un seul circuit 110V avec une limitation de la puissance GPU
    • Au démarrage, systemd active le persistence mode et applique la limite de puissance
    sudo nvidia-smi -pm 1
    sudo nvidia-smi -pl 350
    
    • La limite de puissance GPU est de 350W par GPU, contre 600W par défaut
    • 4×350W correspondent à 1 400W de charge GPU, en ligne avec le budget d’alimentation
    • Avant de passer à un circuit 240V, au stade d’une seule alimentation 1700W, les GPU étaient exploités autour de 260W
    • 4×260W = 1 040W pour les GPU
    • En ajoutant environ 280W pour le système, on arrive à un total d’environ 1 320W
    • La vérification se fait avec nvidia-smi --query-gpu=index,power.limit,power.draw --format=csv

Résultats de mesure et ressources

  • Le lien upstream vers le CPU est en Gen4 x16, soit environ 30 Go/s
  • Le P2P via le switch atteint 27,5 Go/s en unidirectionnel et 50,4 Go/s en bidirectionnel
  • La latence est de 0,37–0,45 µs, au niveau du débit de ligne Gen4
  • Si ASPM est activé quelque part, lspci peut afficher les liens GPU downstream au repos comme 2.5GT/s (downgraded)
  • Cet affichage est purement cosmétique : les liens se réentraînent en Gen4 sous charge
  • Resources

    • local-inference-lab/rtx6kpro : dépôt fréquemment mis à jour sur l’usage de 4, 6 ou 8 cartes RTX 6000 Pro
    • c-payne : switch PCI indépendant utilisé dans cette configuration
    • RTX6kPRO Discord : serveur Discord consacré aux benchmarks RTX6kPRO et aux tests de nouveaux modèles

1 commentaires

 
GN⁺ 5 시간 전
Avis sur Hacker News
  • J’ai beaucoup utilisé de LLM en local et j’ai dépensé bien trop d’argent en matériel, mais il faut revoir ses attentes à la baisse et lire attentivement les conditions détaillées
    Le gros build décrit dans l’article démarre avec un budget de 40 000 dollars, mais comme il inclut 4 GPU à 12 000 dollars pièce, il se rapproche en réalité plutôt de 50 000 à 55 000 dollars
    Les configurations locales reposent souvent sur des techniques comme la quantification ou REAP pour faire tenir le modèle sur le matériel. On affirme souvent que la quantification 4 bits est sans perte, mais cela vient de mesures de divergence KL sur de petits corpus ; quand on l’utilise pour des tâches de code avec de longs contextes, la baisse de qualité est nette. Même pour des tâches hors code comme l’analyse de datasets, on peut mesurer des écarts de qualité assez importants entre le 4 bits, le 8 bits et parfois l’original en 16 bits
    L’article recommande aussi l’usage de modèles REAP, ce qui signifie que quelqu’un a supprimé une partie des poids pour rendre le modèle plus petit. L’idée est de retirer les poids moins utiles pour certaines tâches, mais la qualité globale des sorties baisse encore
    Le piège, c’est que lorsque les gens disent « faire tourner GLM-5.2 en local », on regarde les benchmarks et cela paraît impressionnant, mais en réalité ils ne font pas tourner GLM-5.2 : ils exécutent un modèle dérivé où la plupart des bits ont été jetés et certains experts supprimés. Sur de toutes petites tâches ou du chat, la différence entre les modèles quantifiés/REAP et l’original ne se voit pas beaucoup, mais sur des travaux longs où de petites erreurs s’accumulent, elle devient douloureuse
    Et comme on a déjà dépensé 50 000 dollars, on se retrouve sur une pente glissante : pour améliorer un peu la qualité et rentabiliser l’investissement, il suffirait d’acheter encore un ou deux GPU à 12 000 dollars

    • Je fais tourner Qwen3.6 sur une RTX4090 et, dans la plupart des cas, ça fonctionne très bien
      Pour les tâches de code, il faut découper la session en plusieurs appels. J’ai créé https://github.com/aka-rider/orqestra, mais avec les environnements actuels d’exécution d’outils, on peut faire à peu près la même chose soi-même presque partout
      L’idée essentielle est d’avoir une session séparée qui consomme du contexte pour lire le code et appeler les outils, puis de produire un rapport Markdown du type « le code et la documentation pertinents sont ici, et voici les éléments qui le justifient » afin de réduire les hallucinations. La session de planification est séparée ; comme les petits modèles sautent des détails, il faut faire 1 à 3 allers-retours entre le critique et l’architecte, puis aussi entre l’exécutant et le vérificateur pour la même raison
      Qwen3.6 peut chercher pendant des heures des bugs complexes en mode lecture seule et finit généralement par les trouver. Les correctifs qu’il propose seront sans doute bricolés, mais Sonnet fait pareil
      Qwen3.6 peut écrire du code mécaniquement à partir d’un plan produit par Opus. Ensuite, il faut le prompter du genre : « relis toi-même tes changements. Y a-t-il un bug ? En les recoupant avec le plan initial, manque-t-il quelque chose ? Y a-t-il une violation de CLAUDE.md ? ». Mais il faut faire exactement la même chose avec Sonnet
      J’utilise aussi les LLM locaux pour réindexer une base de connaissances. Pour trier des tickets, il suffit parfois de laisser des notes brutes comme « panneau unique pour le rendu des erreurs, déplacer tous les messages d’erreur » pour obtenir en retour une spec complète à environ 90 %, avec l’objectif et le contexte
    • J’ai eu une expérience similaire en faisant tourner localement un Qwen 26B quantifié en 8 bits, non-MoE, sur mon ordinateur
      C’est vraiment bien pour les petites tâches, mais la première fois que je lui ai donné une grosse tâche, il a oublié dans quel environnement d’exécution d’agent il se trouvait et a commencé à utiliser un mauvais format d’appel d’outils. Il tournait sur un Pi, mais il croyait tourner dans Claude et essayait d’appeler des outils Claude inexistants
    • Je fais tourner ds4 sur un MBP acheté avant que le prix de la RAM devienne délirant, et c’est assez utile
      Il n’écrit pas une application entière tout seul, mais il a résolu un problème réseau pénible dans mon tailnet que je n’avais ni le temps ni l’envie de comprendre moi-même, et je l’utilise souvent pour des tâches simples que je n’aurais pas faites parce que le coût d’investigation était trop élevé. Ce n’est pas Opus, mais c’est utile, et je n’ai pas à me demander si je rentabilise un abonnement ou des coûts d’API
    • J’aimerais que les articles et commentaires qui parlent d’« exécuter en local » publient aussi, pour comparaison, les résultats d’une nouvelle exécution des mêmes benchmarks publics
    • C’est tout à fait exact. L’engouement pour faire tourner des LLM de code en local a plutôt nui à l’IA locale, où des petits modèles de langage conçus pour un objectif précis peuvent réellement être utiles
      Les petits outils de traitement du langage naturel, de synthèse vocale, de traitement d’image, d’ingénierie audio, de traitement du signal, les plugins de diffusion pour Krita, etc., conviennent très bien aux configurations locales. J’ai aussi écrit un court billet à ce sujet il y a quelques jours[1]
      [1] https://abishekmuthian.com/multiple-20-ai-plans-are-better-t...
  • « Pour environ 40 000 dollars, l’intelligence du modèle monte d’un cran et se rapproche assez nettement de Claude Opus » : c’est l’équivalent de 16,8 ans d’utilisation de Claude Opus 4.8 ou de Codex GPT 5.5 à 200 dollars par mois.
    J’aime vraiment exécuter des modèles en local, mais cela reste absurdement cher, la qualité est inférieure, et cela peut aussi être risqué s’il y a des backdoors. J’aimerais sincèrement que ce ne soit pas le cas.

    • Les 200 dollars par mois valent si l’on doit payer le plein tarif de l’API ; par exemple, pour une entreprise « enterprise », on est déjà plutôt proche de 4 000 dollars par mois. Dans ce cas, le coût équivalent tombe à 10 mois.
      Cela dit, je doute qu’une machine locale puisse réellement traiter un volume équivalent à 4 000 dollars d’API par mois, car il est difficile de faire tourner des prompts en parallèle aussi efficacement en local que dans les multiples datacenters d’Anthropic.
    • Je suis d’accord avec l’idée générale, mais ce calcul suppose que les prix des LLM resteront constants.
      Des entreprises comme OpenAI et Anthropic vendent encore leurs forfaits à des prix subventionnés par le capital-risque, et ce capital voudra un jour un retour sur investissement.
    • L’idée que les modèles de pointe soient backdoorés n’a aucun sens. Je n’ai jamais entendu parler d’un modèle backdooré, et si cela était découvert, il serait rapidement retiré de Hugging Face. Ce n’est pas un problème.
    • Avec du matériel, on peut consommer beaucoup plus de tokens qu’avec un forfait à 200 dollars par mois.
      J’ai utilisé 1 milliard de tokens le premier mois avec OEM spark, ce qui représenterait plus de 1 000 dollars avec Opus. Les profils de tokens sont différents, donc la comparaison n’est pas parfaitement équitable, mais depuis, les améliorations de vLLM, surtout grâce à MTP, ont aussi augmenté la vitesse d’un facteur 2 à 3. DiffusionGemma est environ 4 fois plus rapide que Gemma classique.
    • Il ne faut pas essayer de faire tourner ça en local : il suffit de louer des GPU cloud.
      Vous ne possédez pas non plus de fibre optique ; alors pourquoi vouloir posséder un autre actif cher, pénible à gérer et qui se déprécie vite ?
      Louer des GPU cloud permet de participer à la culture de la possession, du contrôle des données, du contrôle des prix et du hacking sans construire une énorme boîte Frankenstein de hobbyiste. Cette boîte est chère, distillée au point d’être en pratique moins utile, et pénible à maintenir.
  • On dit « 40 000 dollars et c’est presque Opus », mais si GLM 5.2 est « presque Opus », alors pour une inférence confortable il faut au minimum 8xH200, donc on est plus près de 400 000 dollars que de 40 000.
    L’article propose d’utiliser un modèle modifié : « GLM-5.2 élagué avec REAP, avec environ 22 % des experts retirés, quantifié en Int8-mix NVFP4, environ 594B paramètres ».
    Je me demande comment il se comportera réellement hors benchmarks. Qwen3.6 se met déjà souvent à boucler pendant l’inférence en quantification 6 bits, et ici on a en plus retiré une partie des experts. Parfois, un modèle plus petit en 8 ou 16 bits peut être plus intelligent qu’un grand modèle lobotomisé. Il semble y avoir un consensus selon lequel, pour le code, mieux vaut ne pas descendre sous 8 bits.
    On ne sait pas non plus clairement combien de contexte utilisable il reste quand on fait tenir ce modèle lobotomisé sur 4 RTX 6000. En dessous de 100k, c’est presque inutilisable, car on se heurte souvent à la compression avant d’avoir rassemblé le contexte nécessaire. En vérifiant dans le dépôt, le contexte était de 240k.

    • Je me demande ce que donne GLM 5.2 si on le fait tourner avec un seul H200.
      J’aimerais savoir s’il ne se lance pas du tout, ou s’il est simplement trop lent pour être utilisable. Je voudrais valider en local le build et les concepts d’un modèle de dernière génération, puis compléter le reste dans 18 à 24 mois si les prix des GPU baissent fortement.
    • Je me demande comment cela s’articule avec la scalabilité.
      Est-ce que cela veut dire qu’on peut lancer des centaines de prompts en même temps ?
    • Les boucles, comme la plupart des phénomènes liés aux LLM, sont un problème d’échantillonnage, et elles se corrigent facilement avec une pénalité DRY.
      C’est inclus dans llamacpp. La personne qui a créé heretic a aussi développé des stratégies anti-boucle et de diversification à l’état de l’art.
    • Sur 8x RTX6000, avec la quantification NVFP4 de lukealonso, un contexte de 1M est possible, et la cohérence comme l’utilité se maintiennent au moins jusqu’à 400k.
      Il n’y a pas vraiment de besoin pratique de faire tourner 8x H200, sauf si c’est simplement ce dont vous avez envie. Exception faite du cas où vous devez régulièrement servir beaucoup d’utilisateurs ou d’agents simultanés.
  • Il existe aussi des options intermédiaires. Avec 128 Go de VRAM, il y a désormais plusieurs solutions permettant d’obtenir ce volume via une architecture à mémoire unifiée, et DwarfStar permet de faire tourner DeepSeek V4 flash à une bonne vitesse.
    Je ne dépenserais pas cet argent, mais pour beaucoup de gens, cela semble être un compromis raisonnable.

    • Je viens de commencer à l’essayer sur un m4 max 128, et pour la première fois depuis que j’ai acheté cette machine il y a un an, j’ai l’impression qu’un LLM local fonctionne tout simplement pour du code plutôt correct.
      Il faut toutefois utiliser Pi. claude code embarque trop de contexte au bootstrap, ce qui ralentit énormément tout le reste.
  • « Avec deux RTX 3090, pour un total de 48 Go de VRAM, on peut faire tourner Qwen3.6-27B, et c’est un excellent modèle », dit-on, mais pour 3 000 dollars, on peut acheter un M5 MacBook Pro avec 48 Go de mémoire unifiée, sans que ce soit une énorme boîte
    Ou bien il vaut aussi la peine d’envisager de dépenser cet argent chez un hébergeur cloud. Cela peut être, au moins dans une certaine mesure, voire beaucoup, moins cher. Bien sûr, pouvoir faire tourner un modèle en local, c’est génial

    • Comme un idiot incapable d’imaginer des situations que je n’avais pas vécues, j’ai toujours pensé que les LLM locaux étaient des jouets qui ne valaient pas la peine d’être poursuivis
      Mais ce n’est qu’après avoir essayé quelque chose de correct, comme Gemma 4 31B et Qwen 3.6 27B, que j’ai compris à quel point c’était utile
      On cesse de s’inquiéter de partager des informations sensibles, on ne se demande plus si l’on va tomber à court de tokens, et on ne s’inquiète plus non plus de la disponibilité d’une IA distante. Les LLM locaux ont énormément de valeur
    • Ce qui est formidable avec la 3090, c’est la bande passante mémoire. La génération de tokens est surtout limitée par la bande passante mémoire
      Deux 3090 offrent au total 1,87 To/s, soit 0,936 To/s par carte, alors que le M5 MacBook Pro n’a que 0,3 To/s. Les puces Max montent jusqu’à 0,63 To/s, mais cette configuration correspond à une machine à 10 000 dollars
      C’est pourquoi Qwen 27B tourne assez vite pour un usage réel sur deux 3090, mais semble douloureusement lent sur un MacBook Pro. De plus, faire tourner de gros modèles sur un MacBook Pro rend l’interface saccadée et le clavier brûlant. Il est bien préférable de mettre deux 3090 à la cave et de s’y connecter depuis le MacBook
    • J’ai aussi un M5 MacBook Pro et une configuration GPU séparée pour exécuter des modèles, et la différence de vitesse est énorme
      Ce n’est pas seulement la vitesse de génération des tokens, mais aussi le temps jusqu’au premier token, c’est-à-dire le temps de traitement du prompt, qui diffère. Le matériel M5 est excellent en soi, mais les GPU restent nettement plus rapides
      Faire tourner le modèle sur une boîte GPU a aussi l’avantage de permettre d’utiliser le portable sur les genoux sans le transformer en plaque chauffante
    • Je fais tourner Qwen3.6-27B sur un seul GPU de 24 Go à 80 tokens/s, donc deux cartes ne sont même pas nécessaires
    • C’est un choix raisonnable, mais il faut savoir que le M5 Pro a environ 1/3 de la bande passante mémoire, et le M5 Max environ 2/3. La configuration minimale du M5 Max coûte déjà 4 100 dollars
      Donc le pré-remplissage, limité par les FLOPS, comme le décodage, limité par la bande passante, seront tous deux plus lents
  • Comme je viens de monter un LLM local cette semaine, j’ajoute mon expérience. J’ai choisi une carte 32 Go d’Intel, l’Arc B70 : elle est moins chère qu’une 3090 et a plus de RAM, mais son bus mémoire est plus lent
    Je l’ai choisie parce que les modèles que je voulais utiliser étaient un peu trop gros pour tenir confortablement dans 24 Go, et qu’il me fallait aussi de la place pour quelques petits modèles d’autocomplétion et de reconnaissance vocale. J’avais aussi déjà un serveur bon marché, et passer à deux GPU aurait nécessité de changer la carte mère, l’alimentation, et probablement le boîtier
    La configuration a été assez pénible. La gamme Intel a besoin d’un paquet de pilotes appelé « level zero » pour prendre en charge SYCL, en gros l’équivalent Intel de CUDA, et il a été difficile de le faire fonctionner correctement. Je fais tourner llama.cpp dans un conteneur Docker, et faire en sorte que le conteneur voie la carte a aussi demandé un peu de travail. Il faut également un noyau datant des derniers mois
    Une fois que ça fonctionne, le résultat est très impressionnant pour un investissement de 1 000 dollars. Qwen 3.6 35B en quantification q4 utilise environ les 3/4 de la RAM et atteint autour de 88 tokens/s. Si l’on veut un modèle de taille raisonnable à bas coût, c’est une possibilité

    • C’est faux. Les deux sont en GDDR6
      La B70 a un bus 256 bits à 2375 MHz, soit 608 Go/s, et la 3090 a un bus 384 bits à 2438 MHz, soit 936 Go/s. Ce n’est pas plus lent : il y a moins de canaux, autrement dit le bus est plus étroit
  • qwen3.6-27b peut faire tourner sa variante q4 sur une seule 3090, même avec un contexte total d’environ 250K
    C’est suffisamment rapide pour ne pas être frustrant, donc le gain de vitesse avec deux 3090 ne vaut pas le coup pour moi. Il y a aussi l’option de faire tourner q6 sur deux cartes, à moitié moins vite et avec un contexte plus petit, mais comme cela ne rivalisera de toute façon pas avec les modèles de pointe, je pense qu’au prix actuel, une seule 3090 est le meilleur investissement, sauf si l’on en possède déjà deux. Avec un environnement d’exécution bien configuré, c’est suffisant pour faire beaucoup de choses

    • Quand tu fais tourner qwen3.6-27b sur une seule 3090, gardes-tu aussi le cache KV en q4 ?
      D’après mon expérience, à cette précision, la qualité du rappel sur les longs contextes chute fortement. J’ai préféré garder le cache KV en q8 et travailler avec un contexte de 120k
    • Le calcul 250k de contexte, modèle Q4 et 24 Go de VRAM ne tient que si le cache K/V est lui aussi en quantification q4, et ce n’est probablement pas une bonne idée
  • À ce sujet, je me demande quel est le meilleur système d’isolation utilisable aujourd’hui. Je ne sais pas s’il faut aller jusqu’à une grosse VM complète, ou si quelque chose façon Firecracker suffit.
    Chaque option possible semble avoir des pièges subtils où il est facile de se tirer une balle dans le pied, et de finir avec pratiquement aucune sécurité. Les VM sont utilisées parce qu’on peut réellement faire confiance au fait que la sécurité est un principe de base de cette technologie, pas parce que « si on met ces 20 flags et qu’on plisse les yeux, ça devrait aller ».

    • MacOS dispose d’une sandbox seatbelt intégrée. Sous Linux, on peut utiliser Docker avec SELinux ou un utilitaire similaire par-dessus les namespaces.
      Il faut d’abord modéliser les vecteurs d’attaque. rm -rf se bloque avec des restrictions d’écriture, et curl malware.sh | sh en limitant l’exécution dans les répertoires inscriptibles (seatbelt/SELinux). Le simple fait de restreindre l’écriture dans les répertoires sensibles neutralise probablement une grande partie des malwares.
      Pour l’exfiltration d’identifiants, il suffit de nettoyer les variables d’environnement, d’interdire la lecture de .ssh, .aws, etc., et de ne pas placer le LLM à proximité du système d’exploitation.
      J’ai créé un petit utilitaire pour MacOS, https://github.com/aka-rider/leash, mais on peut aussi le faire avec des scripts bash.
    • Ça dépend de l’objectif. Si le modèle de sécurité consiste à enfermer l’agent dans une sandbox pour éviter qu’il ne détruise le PC, il y a beaucoup d’options.
      Si on veut quelque chose de léger, on peut utiliser un outil comme bubblewrap[1], ou une microVM comme libkrun[2] ; si on veut aussi l’outillage associé, on peut aller jusqu’à Docker complet.
      [1] https://github.com/containers/bubblewrap
      [2] https://github.com/libkrun/libkrun
    • Je ne pense pas qu’il existe de configuration prête à l’emploi qui convienne à tout le monde. Quelle que soit la frontière de sécurité, chaque couche de durcissement implique des compromis d’usage.
      Je comprends l’incertitude sur la façon de savoir réellement si tout est bien verrouillé.
      Personnellement, je pense que les VM ou microVM sont la bonne voie. Contrairement aux conteneurs, elles sont conçues comme de vraies frontières de sécurité. Même comparées à bubblewrap, elles permettent de donner tout le système de fichiers à l’agent et de le faire tourner en mode YOLO, tandis qu’avec bubblewrap il faut amorcer un par un l’accès à chaque outil de développement, monter de façon sûre les répertoires de configuration, les caches de paquets, etc., et on risque malgré tout de tomber sans cesse sur des erreurs de permissions. L’isolation est aussi beaucoup plus faible.
      Le support côté environnement d’exécution est limité, mais je trouve assez raisonnable de faire tourner le processus d’environnement d’exécution sur l’hôte et de déléguer tous les appels d’outils et les interactions avec le système de fichiers à la VM. On peut ainsi garder les données de session et les clés d’authentification sur la machine principale, sans jamais les faire entrer dans le contexte. En contrepartie, l’environnement d’exécution lui-même devient une partie de la frontière de sécurité, c’est le compromis.
      La manière de transférer les données entre la VM et l’extérieur pose aussi un problème d’ergonomie. J’utilise des scripts qui poussent un dépôt git local dans la VM puis le récupèrent comme s’il s’agissait d’un remote ; ainsi, la VM ne peut pas initier de connexion vers l’hôte et n’a pas besoin d’identifiants git. Mais pour quelqu’un qui veut que l’agent pousse directement vers GitHub, c’est peut-être trop contraignant.
      Les options que j’ai essayées ou vues côté VM sont qemu + libvirt, crun-vm et la famille libkrun. qemu + libvirt demande des efforts de configuration, mais c’est très éprouvé et très configurable. crun-vm est une PoC de couche d’intégration de haut niveau entre podman et qemu ; elle semble abandonnée, mais elle est intéressante car centrée sur les outils existants et les standards. libkrun est un entrant plus récent, avec des wrappers comme microsandbox, smolvm et krunvm. Tout cela vaut pour Linux.
    • Je fais beaucoup moins confiance à une grosse VM avec GPU passthrough qu’à une VM CPU-only.
  • Je trouve étrange de faire autant d’efforts pour utiliser un LLM. Surtout pour courir après le dernier cri de cette manière.
    Si des choses comme Claude disparaissaient demain, je ne sourcillerais même pas.
    Je ne comprends pas pourquoi les gens échangent leurs circonvolutions cérébrales contre un accès à des machines à produire de la bouillie. Une bonne analogie serait peut-être de donner à un menuisier qualifié une machine qui sort des meubles d’une qualité inférieure d’un ou deux crans à Ikea. Est-ce que ça fait le travail ? La plupart du temps, oui. Est-ce que le menuisier prend plaisir au processus ? Non.

  • D’après mon expérience, je n’ai jamais lancé un modèle fortement quantifié comme en q4, ou modifié dans une certaine mesure, en me disant « waouh, c’est vraiment impressionnant ». Au contraire, après quelques prompts, il finissait à la corbeille.
    J’ai une RTX 6000 PRO de 96 Go, et ce que je peux faire tourner confortablement se limite à Qwen 3.6 27B ou MoE, et Gemma 4 31B. Quand on exécute les modèles en pleine précision et avec la longueur de contexte maximale, c’est à peu près la limite.
    Ils sont performants et utilisables pour plusieurs usages, comme le codage ou les recherches sur Internet. Si, d’après vos calculs, vous pensez dépenser plus de 2 400 dollars par an chez Anthropic, acheter ce genre de carte peut avoir du sens, mais il faut accepter une baisse de qualité. De toute façon, on peut se demander si des humains coderont encore dans cinq ans.