- Moteur d’inférence en C/Metal capable d’exécuter un modèle Mixture-of-Experts de 397B de paramètres sur un MacBook Pro (48 Go de RAM) à plus de 4,4 tokens/s
- Le modèle complet de 209 Go est streamé depuis le SSD, avec une implémentation uniquement en C et shaders Metal, sans Python ni framework
- SSD Expert Streaming, noyaux optimisés FMA, Deferred GPU Compute, etc. maximisent l’efficacité parallèle GPU·SSD·CPU
- La configuration en quantification 4-bit offre un bon équilibre entre qualité et vitesse, avec une génération de sortie de niveau production incluant la fonction d’appel d’outils
- Un exemple d’allégement et d’optimisation qui rend possible l’inférence en temps réel de très grands modèles MoE même sur un ordinateur portable
Résultats de performance
- En configuration experts 4-bit (noyau FMA) : 4,36 tok/s, excellente qualité, 209 Go utilisés sur disque
- La configuration 4-bit de base atteint 3,90 tok/s, avant optimisation FMA
- La configuration experts 2-bit (trust OS) monte à 5,74 tok/s, plus rapide mais inutilisable pour les appels d’outils à cause d’erreurs de sortie JSON
- Le pic 2-bit sur un token unique atteint jusqu’à 7,05 tok/s, mais reste inadapté à un usage réel
- La quantification 4-bit est la configuration la plus adaptée à une exploitation réelle
Environnement matériel
- MacBook Pro (Apple M3 Max), CPU 16 cœurs (12P+4E), GPU 40 cœurs, ANE 16 cœurs
- 48 Go de mémoire unifiée, bande passante d’environ 400 Go/s
- SSD Apple Fabric de 1 To, avec une vitesse de lecture séquentielle de 17,5 Go/s
- Environnement macOS 26.2 (Darwin 25.2.0)
Architecture du modèle
- 60 couches Transformer au total : 45 GatedDeltaNet (attention linéaire) + 15 attention complète
- Chaque couche possède 512 experts, avec K=4 activés par token (dont 1 expert partagé)
- Dimension cachée 4096
-
Technologies clés
-
SSD Expert Streaming
- Les poids des experts (209 Go en 4-bit) sont chargés à la demande depuis le SSD NVMe via des
pread() parallèles
- À chaque couche, seuls les 4 experts activés sont chargés (environ 6,75 Mo chacun)
- Le cache de pages de l’OS gère automatiquement la mise en cache, sans cache séparé nécessaire
- Architecture inspirée de l’article d’Apple « LLM in a Flash »
-
Noyau de déquantification optimisé FMA
- L’opération
(nibble * scale + bias) * x est réorganisée sous la forme fma(nibble, scale*x, bias*x)
scale*x et bias*x sont précalculés afin que les unités FMA du GPU l’exécutent en une seule instruction
- 12 % de gain de vitesse par rapport à une implémentation simple
-
Shaders de calcul Metal
- Les produits matrice-vecteur avec déquantification 4-bit/2-bit, l’activation SwiGLU, la normalisation RMS, l’attention GPU (Q@Kᵀ, softmax, scores@V), RoPE, ainsi que la combinaison MoE + résiduel + gate sont implémentés via des noyaux Metal écrits à la main
-
Deferred GPU Expert Compute
- Les commandes CMD3 (passe avant des experts) sont soumises de manière asynchrone afin que le CPU prépare la couche suivante pendant que le GPU exécute
- Les opérations de combinaison + normalisation + résiduel sont aussi effectuées sur le GPU puis transmises directement à la couche suivante
-
Utilisation d’Accelerate BLAS
cblas_sscal, cblas_sgemv, cblas_sger sont utilisés pour les calculs récurrents de GatedDeltaNet
- 64 % plus rapide qu’un code scalaire
-
Trust the OS
- Suppression du cache personnalisé, le cache de pages de l’OS (basé sur LRU, environ 35 Go) prend en charge la mise en cache des données d’experts
- Plus rapide que leur propre LRU Metal, le cache
malloc ou le cache compressé LZ4
- Taux naturel de hit cache de 71 %
-
Contraintes de la mémoire unifiée
- Sur Apple Silicon, le DMA du SSD et les calculs GPU partagent le même contrôleur mémoire
- En exécution parallèle, la saturation de la bande passante GPU entraîne une forte hausse de la latence
- Le pipeline séquentiel GPU → SSD → GPU est la forme optimale pour ce matériel
Aucun commentaire pour le moment.