Notes · Note courte
Pourquoi mon service de transcription a gonflé jusqu’à 42 Go
Mon service de transcription local a atteint environ 42 Go d’empreinte mémoire après six jours de fonctionnement, la plupart du temps au repos. En cause : le cache de buffers de MLX, sans plafond par défaut et jamais vidé, auquel s’ajoutaient les modèles Whisper et pyannote, résidents en permanence.
Trois correctifs. Plafonner le cache au démarrage avec MLX_CACHE_LIMIT_GB (2 par défaut). Après chaque appel à /transcribe, appeler gc.collect, mx.clear_cache et torch.mps.empty_cache. Et un thread démon décharge le modèle whisper et le pipeline de diarisation après une période d’inactivité (900 s par défaut, 0 la désactive), sans jamais interrompre un job en cours.
/health remonte maintenant l’empreinte ainsi que les valeurs active, cache et peak de MLX, pour ne plus avoir à le découvrir à la main.
Sur un test avec trois transcriptions d’affilée, mlx_cache_mb valait 0 après chacune, et l’empreinte restait autour de 2,1 Go. Après la période d’inactivité, le déchargement des modèles a ramené l’empreinte à 319 Mo, et ils se sont rechargés correctement au job suivant.
Le chemin MPS (la diarisation sur GPU) n’a pas été exercé par ce test : cette moitié reste donc à vérifier.
Texte brut: mlx-buffer-cache-leak.md · Flux Atom · Toutes les notes