Files
Effi/docs/MEMOIRE-GESTION.md
Folzo f69dda5e20 feat(memory): Ajout déchargement automatique mémoire sur FolzoCorp
- effi-stt: Déchargement Whisper après 300s inactivité (INACTIVITY_TIMEOUT)
  * Nouveaux endpoints: /unload, /reload, /stats
  * Modelo rechargé à la première requête
- ComfyUI: Script monitor qui décharge VRAM après inactivité
  * Vérifie usage VRAM toutes les 60s
  * Exécute workflow UnloadAllModelsNode après 300s inactivité
- Kreuzberg: Manager qui redémarre le container après seuil mémoire + inactivité
  * Restart si > 2GB pendant > 10min inactif
- Documentation: docs/MEMOIRE-GESTION.md
2026-04-12 09:26:29 +02:00

5.3 KiB

Gestion Mémoire - FolzoCorp

Vue d'ensemble

Ce document décrit les mécanismes de gestion mémoire implementés sur FolzoCorp (192.168.1.11) pour optimiser l'utilisation RAM.

Problème initial

  • RAM Totale: 32 GB
  • RAM Utilisée: ~29 GB (93%)
  • Swap utilisé: 8 GB (100%)
  • Cause principale: ComfyUI (15.2 GB) + services permanentents

Solutions implémentées

1. effi-stt (Whisper STT)

Fichier: effi-stt/main.py

Mécanisme: Déchargement automatique après inactivité

Fonctionnement:

  • Le modèle Whisper (large-v3) est chargé à la première utilisation
  • Après chaque requête, un timer de 300s (5 minutes) est démarré
  • Si aucune requête n'est reçue pendant ce délai, le modèle est déchargé
  • La mémoire est libérée via gc.collect()

Nouveaux endpoints:

Endpoint Méthode Description
/unload POST Déchargement manuel du modèle
/reload POST Rechargement manuel du modèle
/stats GET Statistiques (model_loaded, last_request_age)

Variables d'environnement:

Variable Défaut Description
INACTIVITY_TIMEOUT 300 Timeout en secondes avant déchargement

Commandes:

# Redémarrer avec les nouvelles variables
cd effi-stt
docker compose down
docker compose up -d --build

# Vérifier le statut
curl http://localhost:8200/stats

2. ComfyUI (Image + Audio Generation)

Fichier: scripts/comfyui-unload-monitor.py

Mécanisme: Monitoring externe + déchargement via API

Fonctionnement:

  • Script Python qui tourne en arrière-plan
  • Vérifie l'utilisation VRAM toutes les 60s
  • Après 300s (5 minutes) d'inactivité + VRAM utilisée:
    • Exécute un workflow pour décharger tous les modèles
    • Appelle gc.collect() et torch.cuda.empty_cache()

Utilisation:

# Lancer le monitor
python3 scripts/comfyui-unload-monitor.py

# Avec paramètres personnalisés
python3 scripts/comfyui-unload-monitor.py --timeout 600 --interval 30

# Mode debug
python3 scripts/comfyui-unload-monitor.py --debug

# En arrière-plan (systemd)
nohup python3 scripts/comfyui-unload-monitor.py > /var/log/comfyui-unload.log 2>&1 &

Démarrage automatique (systemd):

# Créer le service
sudo tee /etc/systemd/system/comfyui-unload.service << EOF
[Unit]
Description=ComfyUI Model Unload Monitor
After=network.target docker.service

[Service]
Type=simple
User=folzo
WorkingDirectory=/home/folzo/Documents/OpenCode/Projets/Effi
ExecStart=/usr/bin/python3 scripts/comfyui-unload-monitor.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# Activer le service
sudo systemctl daemon-reload
sudo systemctl enable comfyui-unload
sudo systemctl start comfyui-unload

# Vérifier le statut
sudo systemctl status comfyui-unload

3. Kreuzberg (Document Extraction)

Fichier: scripts/kreuzberg-memory-manager.py

Mécanisme: Restart automatique après inactivité + seuil mémoire

Fonctionnement:

  • Vérifie la mémoire du container toutes les 60s
  • Si mémoire > 2GB pendant > 10 minutes d'inactivité:
    • Redémarre le container kreuzberg
    • Libère toute la mémoire accumulée

Note: Kreuzberg est un service pre-built (image Rust), donc le déchargement interne n'est pas possible. Le restart container est la seule option pour libérer la mémoire.

Utilisation:

# Lancer le manager
python3 scripts/kreuzberg-memory-manager.py

# Avec paramètres personnalisés
python3 scripts/kreuzberg-memory-manager.py --timeout 600 --max-memory 1.5

# En arrière-plan (systemd)
nohup python3 scripts/kreuzberg-memory-manager.py > /var/log/kreuzberg-mem.log 2>&1 &

Impact mémoire attendu

Service Avant Après (inactif)
ComfyUI 15.2 GB ~500 MB (VRAM libérée)
effi-stt ~3 GB ~100 MB (modèle déchargé)
kreuzberg 1 GB ~100 MB (container redémarré)
Total ~20 GB < 1 GB

Surveillance

Commandes utiles

# Vérifier mémoire containers
docker stats --no-stream

# Vérifier VRAM GPU
rocm-smi --showmeminfo vram

# Statuts effi-stt
curl http://localhost:8200/stats

# Logs du monitor ComfyUI
tail -f /var/log/comfyui-unload.log

# Logs du manager Kreuzberg
tail -f /var/log/kreuzberg-mem.log

Fichiers modifiés/créés

Modifiés

  • effi-stt/main.py - Ajout timeout + déchargement
  • effi-stt/Dockerfile - Variable INACTIVITY_TIMEOUT
  • effi-stt/docker-compose.yml - Variable INACTIVITY_TIMEOUT

Créés

  • scripts/comfyui-unload-monitor.py - Monitor déchargement ComfyUI
  • scripts/kreuzberg-memory-manager.py - Manager mémoire Kreuzberg
  • docs/MEMOIRE-GESTION.md - Cette documentation

Limitations connues

  1. ComfyUI: Le monitor utilise l'API ComfyUI. Si ComfyUI est complètement bloqué, le monitor pourrait ne pas fonctionner.

  2. Kreuzberg: Le restart du container interrompt brièvement le service (~5-10s).

  3. effi-stt: Le premier appel après déchargement sera plus lent (rechargement du modèle).


Améliorations futures possibles

  1. Intégrer les monitors dans Docker Compose avec des sidecars
  2. Ajouter des métriques Prometheus pour le monitoring
  3. Implémenter un agente Effi qui surveille et actionne selon les besoins