Faire tourner un modèle en local
sur un Mac, c'est réglé depuis un moment. Ce qui l'est moins par contre, c'est de brancher un agent de code dessus, parce qu'à chaque reprise de session, le serveur doit malheureusement remouliner des dizaines de milliers de tokens de contexte avant de sortir le premier mot...
Ce calcul, ça s'appelle le cache KV, et la plupart des serveurs le gardent en mémoire. Du coup, quand le modèle se décharge, le cache part avec dans le grand vide...
C'est pourquoi
oMLX
a pris le parti d'écrire ce cache sur le disque, au format safetensors, car le contexte déjà envoyé une fois, prompt système et fichiers lus compris, se recharge depuis le SSD au lieu d'être recalculé, y compris après un redémarrage du serveur.
De son côté,
LM Studio conserve lui aussi son cache MLX sur disque
, mais dans un fichier temporaire qu'il efface quand le modèle se décharge. Les deux outils écrivent sur le disque, mais un seul conserve réellement son cache.
Côté raccordement, le serveur oMLX
expose l'API OpenAI
et l'API Anthropic ce qui permet par exemple à Claude Code de taper directement sur localhost. Et y'a même un tableau de bord qui nous dit quoi faire dans le terminal pour brancher Claude Code ou d'autres avec oMLX.
Sur oMLX, le cache disque est donc actif d'office et son plafond par défaut, parce qu'il en faut bien un, se calcule à 10 % de la capacité du disque qui l'héberge. Sur un SSD d'un téraoctet par exemple, ça fait cent gigaoctets qui peuvent partir en cache sans que personne n'ait rien demandé. Donc prévoyez un peu de place... Après rassurez-vous, ça se vide d'un clic sur un bouton dans le tableau de bord et la taille peut se régler.
Le deuxième piège est plus sournois puisqu'une installation par défaut via pip ne compile pas les kernels Metal, et les modèles GLM-5.2, MiniMax M3 et Qwen3.5 retombent alors sans prévenir sur un chemin générique... Donc je vous incite fortement à utiliser uniquement les DMG proposés qui contiennent déjà les kernels Metal compilés comme il faut.
Reste à savoir ce que ça donne vraiment dans un usage quotidien... Le cache attaque l'attente avant le premier mot mais pas la vitesse à laquelle les mots sortent ensuite donc tout dépend du modèle et de la machine que vous avez. Mais en tout cas, pour un usage avec des agents (coding par exemple), ce sera plus efficace d'utiliser oMLX que Ollama ou LMStudio.
[Deal du jour] Depuis la hausse généralisée des prix d’Apple fin juin, le Mac mini M4 d’entrée de gamme avait disparu à 699 €. Amazon rouvre les commandes à ce tarif, contre 949 € sur l’Apple Store, même si sa disponibilité reste encore toute relative.
Se perdre dans les fiches techniques des Mac et MacBook a ses limites : rien ne vaut une véritable mise en situation. Chez Numerama, nous testons tous les ordinateurs Apple pour vous aider à choisir le modèle le plus adapté à vos besoins -- et à éviter les moins recommandables.
Si vous avez un Mac Apple Silicon et que vous en avez assez de payer des tokens à chaque requête,
Rapid-MLX
vaut le détour. C'est un moteur d'inférence local maintenu par Raullen Chai, qui tape directement dans les kernels MLX d'Apple, sans repli sur llama.cpp ni couche Metal intermédiaire. Et si le nom vous dit vaguement quelque chose, c'est normal puisque c'est un fork de vLLM-MLX, le serveur de Wayner Barrios dont
je vous parlais en mai
. Rapid-MLX a juste pris un rythme de publication plus soutenu des deux.
Ce que ça vous donne, c'est donc un serveur HTTP qui parle le même langage que l'API d'OpenAI et celle d'Anthropic. Vos scripts, Cursor, Aider, LangChain ou Claude Code continuent de fonctionner, sauf qu'ils tapent sur votre machine au lieu d'un datacenter.
Donc je vous propose de voir ensemble comment installer ça.
Étape 0 : Vérifier que votre Mac est éligible
Le script d'installation contrôle plusieurs choses avant de lancer quoi que ce soit, et autant les connaître d'avance. Il faut une puce Apple Silicon et il n'y a pas de version Linux ni Windows, ni de support CUDA ou AMD.
Le script d'installation accepte encore macOS 13 Ventura, mais le vrai plancher est macOS 14 Sonoma. La formule Homebrew l'exige, et surtout MLX, la brique Apple sur laquelle tout repose, ne publie de paquets macOS que pour les versions 14, 15 et 26. Sur un Mac resté en Ventura, ça cassera donc à l'installation des dépendances, quel que soit le chemin choisi.
Dernier point à avoir en tête, c'est pensé pour votre machine à vous et pas pour un serveur. Vous n'y trouverez donc ni authentification multi-utilisateurs, ni quotas de requêtes.
Étape 1 : Installer Rapid-MLX
Le plus simple, c'est Homebrew :
brew install rapid-mlx
Si vous gérez déjà vos environnements Python vous-même, les autres chemins existent :
Il y a aussi un installeur en une ligne (curl -fsSL https://rapidmlx.com/install.sh | bash) qui détecte votre RAM et vous propose un modèle adapté. Il crée un venv isolé dans ~/.rapid-mlx/ et pose le binaire dans ~/.local/bin/. Un curl | bash reste un curl | bash. La formule Homebrew fait exactement le même boulot, donc l'installeur en ligne perd de son intérêt.
L'installation de base pèse dans les 460 Mo et la vision, l'audio et les embeddings sont des extras optionnels, vous les ajouterez seulement si vous en avez l'usage.
Étape 2 : Choisir un modèle qui tient dans votre RAM
C'est là que la plupart des gens se plantent, en chargeant un modèle trop gros et en concluant que "ça rame". Sur Mac, la RAM est unifiée, donc le modèle mange directement dans la mémoire que se partagent le CPU et le GPU.
Les paliers recommandés par le projet :
RAM
Modèle conseillé
8 à 23 Go
`qwen3.5-4b-4bit`
24 à 47 Go
`gpt-oss-20b-mxfp4-q8`
48 à 95 Go
`qwen3.6-35b-8bit`
96 Go et plus
`gpt-oss-120b-mxfp4-q8`
Le catalogue complet se liste avec la commande rapid-mlx models, et rapid-mlx info <alias> vous donne le profil détaillé d'un modèle. Si vous voulez sortir du catalogue maison,
le filtre matériel de Hugging Face
que je vous montrais fin juin fait exactement ce tri à votre place.
Pour utiliser un autre modèle que celui par défaut, il suffit de reprendre l'alias affiché par rapid-mlx models et de le passer en argument. Et si vous préférez télécharger les poids à l'avance, sans rien lancer, c'est le boulot de rapid-mlx pull, qui accepte aussi bien un alias du catalogue qu'un identifiant Hugging Face :
rapid-mlx pull qwen3.5-9b-4bit
Le modèle atterrit dans le cache Hugging Face de votre machine, et ensuite rapid-mlx chat qwen3.5-9b-4bit ou rapid-mlx serve qwen3.5-9b-4bit chargeront ce modèle-là. Le pull préalable reste facultatif, chat et serve téléchargent d'eux-mêmes ce qui manque, mais autant rapatrier les gigas tranquillement avant plutôt qu'au moment où vous voulez bosser.
Étape 3 : Vérifier que ça tourne
Avant de bricoler des intégrations, testez en direct :
rapid-mlx chat
Ça part sur qwen3.5-4b-4bit par défaut, télécharge les poids au premier lancement (comptez 2,5 Go) et vous lâche dans une interface (REPL). /help listera les commandes slash, et /exit vous permettra de quitter le chat.
Une subtilité qui évite de mal interpréter ce premier test, c'est que dans le chat, le raisonnement est coupé par défaut, histoire que le modèle ne vous déballe pas sa réflexion à l'écran. En mode serveur par contre c'est l'inverse, et ça change la vitesse ressentie du tout au tout. J'y reviens plus bas.
Étape 4 : Lancer le serveur
Le vrai intérêt, c'est le mode serveur :
rapid-mlx serve qwen3.5-4b-4bit
Vous récupérez un endpoint sur http://localhost:8000. Le test qui confirme que tout est en place :
Pointez n'importe quel client compatible OpenAI sur http://localhost:8000/v1 et c'est réglé. Cursor, Aider, LibreChat, Open WebUI, LangChain, tous marchent avec ce seul changement d'URL. Il y a aussi /v1/embeddings pour du RAG local et /v1/responses pour le Codex CLI.
Étape 5 : Brancher Claude Code dessus
C'est le morceau le plus intéressant du lot, et il tient en deux variables d'environnement. Serveur lancé d'un côté, puis dans un autre terminal :
ANTHROPIC_BASE_URL=http://localhost:8000 ANTHROPIC_API_KEY=not-needed claude
Attention quand même, l'URL de base doit être la racine, sans/v1 à la fin. Le SDK Anthropic ajoute /v1/messages tout seul, donc si vous mettez /v1 vous obtenez /v1/v1/messages et ça casse.
Depuis la 0.10.14, l'appel d'outils passe par une grammaire contrainte activée par défaut, donc plus besoin de bidouiller un --tool-call-parser à la main pour que les tool calls soient parsables. Pour du Claude Code sérieux, visez plutôt un gros modèle, la doc officielle recommande par exemple qwen3.6-35b-4bit en exemple.
Quand ça coince
Le réflexe à avoir avant de chercher ailleurs :
rapid-mlx doctor
Les trois pannes les plus courantes sont toujours les mêmes.
Débit décevant côté serveur, c'est le raisonnement : les Qwen 3.5 et 3.6 démarrent en mode réflexion, donc ils pensent à voix haute avant de répondre, et --no-think règle l'affaire.
Plantage mémoire, votre modèle est trop gros pour la RAM disponible, redescendez d'un palier ou prenez une quantification plus agressive. Appels d'outils qui arrivent en texte brut, la récupération automatique gère la plupart des cas, sinon vous forcez le parser correspondant à votre modèle.
Voilà, grâce à ça, votre Mac est maintenant un serveur d'IA super rapide ! Plus de facture au token, et vos prompts ne sortent plus de la pièce.
Microsoft vient de publier Mage-Flow, un modèle de génération d'images de 4 milliards de paramètres, et dont l'objectif est d'atteindre la qualité des gros modèles sans en avoir la taille. Là où FLUX.2 embarque 32 milliards de paramètres, Qwen-Image 20 et Z-Image 6, Mage-Flow joue dans la même cour mais seulement avec 4 milliards de paramètres.
Le pari de Microsoft, c'est ce qu'on appelle le co-design. Au lieu d'empiler les paramètres,
Mage-Flow
mise sur deux briques taillées ensemble. D'abord Mage-VAE, un tokenizer latent qui encode et décode les images avec 12 à 22 fois moins de calcul par pixel que le VAE de FLUX.2, à qualité de reconstruction équivalente. C'est ce qui débloque la haute résolution, habituellement le point où ces modèles s'étranglent.
Et ensuite un transformer de diffusion multimodal baptisé NR-MMDiT, entraîné en rectified flow matching, avec Qwen3-VL comme encodeur de texte. Un seul checkpoint génère alors de 512 à 2048 pixels, dans n'importe quel ratio, jusqu'à des formats extrêmes en 4:1 sans buckets ni padding. Vous demandez du 512×2048 ou du 2048×512, il vous le sort.
Le modèle existe en trois saveurs. La Base qui tourne en 30 étapes de débruitage, la version RL-aligned à 20 étapes, et la Turbo distillée qui crache une image en 4 étapes seulement. Et il y a son jumeau, Mage-Flow-Edit, qui fait de l'édition d'image par instruction. Vous lui donnez une photo et une consigne en langage naturel, et lui la modifie. Le tout sous licence MIT, poids libres sur Hugging Face, usage commercial compris.
Côté chiffres officiels, tout vient d'un A100 donc c'est pas représentatif sur nos machins mais en gros, on est à 0,59 seconde par image en Turbo, avec un pic mémoire de 18 à 20 Go. Sauf que moi, je n'ai pas d'A100. J'ai un Mac Studio. Et le dépôt ne parle que de CUDA. La doc d'install vous fait compiler flash-attn, qui est une extension qui a besoin d'un toolkit NVIDIA. Zéro mention d'Apple Silicon, zéro mention de MPS, et les exemples sont tous en mode device="cuda" en dur. Bref, pour le moment, je ne suis pas invité à la fête.
Mais en fouillant le code, j'ai trouvé la porte de sortie. Un fichier planqué dans les modules expose un backend alternatif basé sur scaled_dot_product_attention, le mécanisme d'attention natif de PyTorch, prévu JUSTEMENT pour quand flash-attn n'est pas dispo.
Et ce backend-là, il tourne nickel sur Metal. Le piège, c'est que le modèle réclame lui aussi flash-attn par défaut à deux endroits : le transformer, mais aussi l'encodeur Qwen3-VL. Le transformer accepte qu'on bascule plus tard alors que l'encodeur non. Lui, il lit son réglage au moment où il se construit et plante si flash-attn manque. Il faut donc forcer le mode SDPA avant de charger le modèle.
Voici ce que j'ai fait tourner, pour de vrai. On monte un environnement Python, on installe tout sauf flash-attn :
Une fois que c'est fait, y'a plus qu'à vous créer un petit script mage.py par exemple qui basculera l'attention sur SDPA avant le chargement, pointera sur mps et génèrera votre image :
import os
os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"
from mage_flow.models.mage_flow import ModelConfig
ModelConfig.model_fields["attn_type"].default = "sdpa" # AVANT de charger, sinon Qwen3-VL exige flash-attn
ModelConfig.model_rebuild(force=True)
from mage_flow import MageFlowPipeline
pipe = MageFlowPipeline.from_pretrained("microsoft/Mage-Flow-Turbo", device="mps")
img = pipe.generate(["un barista avec un chapeau de cowboy qui réalise un latte art, lumière chaude"], heights=[1024], widths=[1024], steps=4, cfg=1.0)[0]
img.save("out.png")
Ensuite, lancez le script :
python3 mage.py
Le PYTORCH_ENABLE_MPS_FALLBACK sert de filet comme ça si une opération n'existe pas côté Metal, elle basculera sur le CPU au lieu de tout faire tomber. Premier lancement, le modèle se téléchargera, donc comptez une bonne dizaine de Go entre le transformer 4B, l'encodeur Qwen3-VL et le VAE.
Et ça marche !!! Sur mon M4 Max de 128 Go, le modèle charge en une vingtaine de secondes puis génère une image 1024×1024 en 10 secondes une fois chaud.
Mon barista à chapeau de cowboy est sorti impeccable.
Ma toute première génération Mage-Flow sur le Mac Studio : un barista, 1024x1024, 4 etapes en Turbo.
Cette image 1920x1080 a été générée en moins de 6 secondes,
Pour du batch industriel, une carte NVIDIA restera toujours mieux mais pour générer tranquillement chez soi des petites images sans envoyer ses prompts dans le cloud, c'est parfaitement utilisable, et ça rejoint la logique de
l'IA qui tourne en local sur votre Mac
que je creuse depuis un moment.
Deux détails à connaître avant de vous lancer. Chaque prompt passe par un filtre de contenu obligatoire côté encodeur, sans option pour le désactiver : les prompts jugés interdits reviennent en images de refus. Et chaque image générée porte un watermark Gaussian-Shading planqué dans le bruit initial, lui non plus désactivable. Hé oui, Microsoft trace ses sorties, donc autant le savoir.
Y'a des garde-fous ! J'ai donc très hâte que ce modèle se fasse "libérer".
Reste que c'est un très joli cadeau de la part de Microsoft ! Un modèle libre, compact, qui gère l'édition et n'importe quel ratio, et qui tient sur une machine Apple avec un petit réglage bien caché ^^...
ps: L'image d'illustration de cet article a été générée avec ce modèle.
bHive, c'est une app Mac qui lit l'intérieur de vos fichiers au lieu de se contenter de leur nom, et qui sait maintenant répondre à des questions dessus. Vous lui demandez "qu'est-ce que dit mon bail sur la résiliation anticipée ?", elle va fouiller vos PDF et vous sortir la réponse en clair, tout ça en local sur votre machine, sans rien envoyer nulle part.
Vous pointez bHive vers des dossiers que vous avez déjà, et elle lit ce qu'il y a dedans. Vos documents, les PDF, les images dont elle fait l'OCR, et depuis la 2.0 l'audio et la vidéo, transcrits directement sur le Mac. Ensuite vous cherchez en décrivant ce que vous voulez, plutôt qu'en essayant de vous souvenir du nom que vous aviez collé au fichier. Rien ne bouge, rien n'est copié dans une bibliothèque, vos fichiers restent exactement où ils sont, ils sont tout simplement indexés dans un RAG.
La vraie nouveauté de cette version, c'est "Ask bHive". Vous posez une question, l'app trouve les fichiers concernés, les lit, et vous répond en langage clair. Elle vous montre alors quels fichiers elle a utilisés, donc vous pouvez les ouvrir et vérifier vous-même et surtout, quand elle ne sait pas, elle le dit, au lieu d'inventer un truc qui sonne juste. Ça paraît con dit comme ça, mais c'est avec ça que la plupart des assistants IA vous plantent.
Bon, moi, je n'en ai pas vraiment besoin de cet outil parce que j'ai mis en place mes propres RAG, mais je me dis que si j'avais trouvé ça avant, je ne me serais pas fait chier.
Côté moteur, tout tourne en local, et le modèle intégré à macOS marche tout de suite, donc vous n'avez rien à télécharger. Si vous voulez de la recherche plus fine, il y a bien sûr un modèle plus costaud à récupérer, de 515 Mo.
Il y a aussi une vue "santé de la bibliothèque", histoire que vous sachiez ce qui n'est pas cherchable et pourquoi. Fichiers déplacés, disque externe débranché, format illisible, OCR raté, éléments encore dans la file d'attente. En gros, un tableau de bord de confiance au lieu de vous laisser deviner si la recherche couvre vraiment tout. Vous pouvez aussi sauvegarder vos collections, tags et notes dans un fichier pour les restaurer plus tard.
Je vous avais déjà parlé de
Cardinal
, qui rend la recherche de fichiers instantanée sur Mac sauf que Cardinal cherche par nom, là où bHive lit ce qu'il y a à l'intérieur et sait vous répondre avec beaucoup plus de richesse. On est une gamme au-dessus selon moi.
Après, bHive 2.0 réclame macOS 26 et une puce Apple Silicon donc si vous êtes resté sur macOS 15 comme un homme de cro-magnon, vous devrez rester sur la vieille version 1.3.1 qui continue de tourner, mais sans toutes ces nouveautés... sniiif.
Voilà, c'est gratuit, et ça respecte vos données puisque tout reste en local.