Étude de cas R&D

MoEVM — un modèle de 58 GiB sur un Mac de 48 Go.

Les modèles Mixture-of-Experts n’utilisent que quelques experts par token. MoEVM garde les bons sur le GPU et pagine le reste depuis le SSD : des modèles qui dépassent le budget mémoire du GPU tournent ainsi sur Apple Silicon — avec une sortie identique à celle de llama.cpp sans MoEVM.

  • 8.72 tok/s gpt-oss-120b (58 GiB) sur le GPU, médiane de 5 exécutions
  • 3.1× Qwen3-Coder-Next face à l’op-offload de llama.cpp, même prompt
  • 0.0 écart maximal de logits — 1 024 lignes × 151 936 tokens
  • 95.8 % taux de succès du cache d’experts en LRU (optimum : 97,5 %)
  1. 1 Empaqueter

    Les experts routés sont empaquetés dans un fichier sidecar — 4 608 enregistrements avec un index SHA-256.

  2. 2 Préparer

    Une arène en RAM avec éviction LRU ; 4 threads préchargent les experts que le routeur choisira probablement.

  3. 3 Router

    Lire le choix du routeur une fois par couche, planifier les slots GPU, échanger les identifiants d’experts de façon atomique.

  4. 4 Calculer

    Les experts s’exécutent depuis un pool Metal persistant ; le reste du modèle demeure sur le GPU.

  5. 5 Protéger

    Époques : un slot n’est jamais évincé avant que le GPU en ait fini. Un listener de pression mémoire allège la RAM.

  6. 6 Vérifier

    Chaque changement doit passer un contrôle de parité des logits face à llama.cpp sans MoEVM.

Les paliers de performance
  1. llama.cpp op-offload 4.24
  2. Sidecar + pool Metal 13.08
  3. Durci, dynamic-K 19.31
  4. Contexte 4k 21.88
  5. Build du graphe, sans hook de copie 21.90

Qwen3-Coder-Next Q4, tokens/s, mesures avec les traces de routage activées. Comparaison directe et propre, traces désactivées : 6,41 → 19,90 tok/s (3,1×).

Comment j’ai gardé des chiffres honnêtes

  • Parité ligne par ligne : écart maximal, argmax et token sur tout le vocabulaire.
  • Test de jitter : délais de 500 µs injectés et synchronisations forcées — toujours 0,0.
  • Critères de validation écrits avant les résultats ; médiane de 5 exécutions, jamais la meilleure ; chiffres à cache chaud refusés.

Ce qui n’a pas marché — et les limites

  • Chargement des experts par callback : 2,07 tok/s. Abandonné.
  • Quand un modèle tient en mémoire, llama.cpp seul l’emporte (49,69 tok/s). MoEVM sert aux modèles qui n’y tiennent pas.
  • Sur CPU, llama.cpp seul fait tourner gpt-oss-120b à 10,9–14,4 tok/s sur des prompts courts. L’atout de MoEVM, c’est le chemin GPU à mémoire bornée.
  • Le décodage spéculatif n’a apporté aucun gain réel sur le chemin final.
  • +4,755 lignes de C++ dans le fork de llama.cpp
  • 5.8k lignes d’outillage Python
  • 1,123 fichiers de runs de benchmark
  • ~18 h de travail effectif, avec des agents de codage IA

Pull request en brouillon #25309 sur llama.cpp (sparse mmap ranges). Un utilisateur extérieur a indiqué qu’elle l’avait aidé à charger un modèle sur un M5 Max de 128 Go. Voir la pull request ↗ · Le dépôt MoEVM sur GitHub ↗

Autres études de cas

Mon produit · en développement

Where?

344 étapes de parcours conçues

Planifier ses sorties seul ou en groupe, puis dévoiler la carte en y allant vraiment. Produit, UX, app iOS et backend — je fais tout, avec une équipe d’agents IA.

  • Expo
  • iOS → Android
  • TypeScript
  • Fastify
  • PostGIS
  • Mapbox
Lire l’étude de cas

Fondateur & CEO

Selvren

11,901 tests à passer avant chaque merge

Des experts IA métier qui s’appuient sur les documents privés d’une entreprise — chaque affirmation est confrontée à ses sources avant d’être affichée. Tableau de bord et API entreprise.

  • Fastify
  • PostgreSQL + pgvector
  • Mistral
  • React
  • Clerk
Lire l’étude de cas

Construisons quelque chose ensemble.

Je prends des projets en freelance : je conçois, code et livre des outils IA branchés sur les logiciels que votre équipe utilise déjà. À distance, depuis la France.

Ou contactez-moi directement

  • WhatsApp +33 6 19 32 62 26 Ouvrir ↗
  • ID KakaoTalk Maxence.foulon
Maxence Foulon © 2026 Conçu et développé par Maxence Foulon.