---
title: Pourquoi mon service de transcription a gonflé jusqu’à 42 Go
description: Le cache de buffers de MLX n’a pas de plafond par défaut et ne se vide jamais seul, donc un service Whisper qui tourne longtemps ne fait que grossir.
date: 2026-09-26
tags: mémoire, mlx, fiabilité
kind: short
---

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.
