- 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
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()ettorch.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échargementeffi-stt/Dockerfile- Variable INACTIVITY_TIMEOUTeffi-stt/docker-compose.yml- Variable INACTIVITY_TIMEOUT
Créés
scripts/comfyui-unload-monitor.py- Monitor déchargement ComfyUIscripts/kreuzberg-memory-manager.py- Manager mémoire Kreuzbergdocs/MEMOIRE-GESTION.md- Cette documentation
Limitations connues
-
ComfyUI: Le monitor utilise l'API ComfyUI. Si ComfyUI est complètement bloqué, le monitor pourrait ne pas fonctionner.
-
Kreuzberg: Le restart du container interrompt brièvement le service (~5-10s).
-
effi-stt: Le premier appel après déchargement sera plus lent (rechargement du modèle).
Améliorations futures possibles
- Intégrer les monitors dans Docker Compose avec des sidecars
- Ajouter des métriques Prometheus pour le monitoring
- Implémenter un agente Effi qui surveille et actionne selon les besoins