Présentation du projet slotstream
slotstream est un binaire Swift autonome qui permet de charger le modèle de langage Qwen3.8‑Flash‑Next, un mixture‑of‑experts de 125 milliards de paramètres compressé en 4 bits et occupant 103,8 GB sur disque. Le logiciel lit les poids depuis le SSD et ne nécessite aucune dépendance Python, ce qui le rend compatible avec les API de chat d’Ollama et d’OpenAI. Il fonctionne uniquement sur Apple Silicon sous macOS 14 ou supérieur et requiert environ 110 GB d’espace libre pour stocker les fichiers de poids.
curl -fsSL https://raw.githubusercontent.com/carloslfu/slotstream/main/install.sh | shArchitecture mémoire et streaming
Le modèle est découpé en 24 fichiers ; lors du premier lancement, slotstream vérifie les sommes SHA‑256 intégrées et télécharge les fichiers depuis un miroir Hugging Face à 36‑57 MB/s. Le poids total est ensuite chargé en flux depuis le SSD vers la RAM selon un plan calculé par slotstream doctor --sim-ram N. Le plan auto‑dimensionne la mémoire en fonction de trois contraintes : la capacité cible (33 GB), 70 % de la RAM disponible et 2 GB sous la limite du jeu de travail Metal. Sur un Mac 48 GB, le cache d’experts occupe ~20 GB (7280 slots) et le pool total atteint ~33 GB, laissant 36 GB de RAM récupérable.
Le réseau d’experts comprend 512 experts par couche, dont 10 sont actifs par token, totalisant 68 GB de données routées. Un tableau n‑gram de 32 GB et un tronc dense de 3,8 GB restent en mémoire permanente. Les experts sont pré‑lus avec pread dans un pool partagé, ce qui permet aux couches « chaudes » d’emprunter des slots aux couches « froides ». Le cache s’ajuste toutes les 15 s en fonction de la pression mémoire, sans altérer la sortie binaire.
slotstream servecurl localhost:11434/api/chat -d '{
"model": "qwen3.8-flash-next:4bit",
"messages": [{"role": "user", "content": "hello"}]
}'Performances et limites
Sur un Mac 48 GB, le décodage à chaud atteint environ 12 tokens/s une fois le cache initialisé. Le pré‑remplissage de 8 000 tokens nécessite près d’une minute, car toute la séquence est traitée avant l’émission du premier token. Sur un Mac 16 GB, le même pré‑remplissage dépasse trois minutes, illustrant la dépendance forte à la taille du cache. Le système propose un mode draft (MTP) qui prédit le token suivant avec un taux de succès de 86 %; ce mode consomme 1,6 GB supplémentaires et n’est activé que lorsque le cache dépasse ~26 GB.
Les limites pratiques incluent la bande passante du SSD (le téléchargement initial de 104 GB peut prendre jusqu’à 2 h 20 min à 100 Mbps) et l’absence de prise en charge des outils, images ou sorties JSON‑schema, qui renvoient systématiquement une erreur 400. Le modèle ne supporte pas non plus le mode de diffusion d’Ollama CLI, bien que les endpoints de chat et de génération soient pleinement fonctionnels. Enfin, la précision du décodage peut varier légèrement lorsqu’une partie du préfixe est mise en cache, car le cache n’est pas strictement bit‑identique au recalcul complet ; l’option --no-prefix-cache désactive ce comportement pour une reproductibilité absolue.