Bienvenue sur CFTPfr.fr › Forums › detecteur_materiel.py — v3 (marge en pourcentage)
- Ce sujet est vide.
Affichage de 1 message (sur 1 au total)
-
AuteurMessages
-
02.08.2026 à 16h35 #269
Mario Da Conceicao
Maître des clésVersion corrigée du 01/08/2026. Retenu : marge de sécurité en pourcentage (plus juste sur les petites configs comme 4 Go) plutôt qu’un chiffre fixe.
import re from pathlib import Path import shutil PALIERS_MODELES = [ {"ram_min_go": 3, "nom": "phi-4-mini-q4", "fichier": "phi-4-mini.Q4_K_M.gguf", "parametres": "3.8B", "taille_go": 2.5}, {"ram_min_go": 6, "nom": "llama-3.3-8b-q4", "fichier": "llama-3.3-8b.Q4_K_M.gguf", "parametres": "8B", "taille_go": 5.0}, {"ram_min_go": 12, "nom": "qwen-2.5-14b-q4", "fichier": "qwen-2.5-14b.Q4_K_M.gguf", "parametres": "14B", "taille_go": 8.0}, {"ram_min_go": 24, "nom": "llama-3.3-32b-q4", "fichier": "llama-3.3-32b.Q4_K_M.gguf", "parametres": "32B", "taille_go": 18.0}, ] MODELES_DIR = Path(__file__).resolve().parent / "modeles" def obtenir_ram_disponible_go(): try: with open("/proc/meminfo", "r") as f: for ligne in f: if ligne.startswith("MemTotal:"): kib = int(re.search(r"\d+", ligne).group()) return round(kib / 1024 / 1024, 1) except Exception: pass return None def obtenir_espace_disque_go(dossier=MODELES_DIR): try: Path(dossier).mkdir(parents=True, exist_ok=True) usage = shutil.disk_usage(dossier) return round(usage.free / (1024 ** 3), 1) except Exception: return None def calculer_marge_ram(ram_go, pourcentage=0.15, minimum_go=0.5): """ NOUVEAU : marge de sécurité proportionnelle plutôt que fixe. Sur une petite machine (4 Go), 1 Go fixe était trop pénalisant ; ici on prend le plus grand entre un minimum absolu et un pourcentage. """ return max(minimum_go, ram_go * pourcentage) def choisir_palier_modele(ram_go=None, espace_disque_go=None): if ram_go is None: ram_go = obtenir_ram_disponible_go() if espace_disque_go is None: espace_disque_go = obtenir_espace_disque_go() if ram_go is None: return PALIERS_MODELES[0] marge = calculer_marge_ram(ram_go) ram_utilisable = ram_go - marge palier_choisi = PALIERS_MODELES[0] for palier in PALIERS_MODELES: ram_ok = ram_utilisable >= palier["ram_min_go"] disque_ok = espace_disque_go is None or espace_disque_go >= palier["taille_go"] * 1.5 if ram_ok and disque_ok: palier_choisi = palier return palier_choisi def modele_deja_present(palier): return (MODELES_DIR / palier["fichier"]).exists() def rapport_materiel(): ram_go = obtenir_ram_disponible_go() disque_go = obtenir_espace_disque_go() palier = choisir_palier_modele(ram_go, disque_go) return ( f"RAM détectée : {ram_go if ram_go else 'inconnue'} Go\n" f"Espace disque disponible : {disque_go if disque_go else 'inconnu'} Go\n" f"Modèle sélectionné : {palier['nom']} ({palier['parametres']})\n" f"Déjà installé : {'oui' if modele_deja_present(palier) else 'non'}" ) -
AuteurMessages
Affichage de 1 message (sur 1 au total)
- Vous devez être connecté pour répondre à ce sujet.