Bienvenue sur CFTPfr.fr › Forums › modules › detecteur_materiel.py — adaptation automatique au PC hôte
- Ce sujet est vide.
-
AuteurMessages
-
01.08.2026 à 18h03 #257
Mario Da Conceicao
Maître des clésNouveau composant du 01/08/2026 — détection matérielle automatique, pour que MIRA choisisse elle-même le modèle adapté à la machine sur laquelle la clé est branchée, plutôt qu’un modèle figé à l’avance.
Principe
À chaque démarrage, MIRA lit la RAM réellement disponible sur la machine hôte et sélectionne le modèle le plus capable qu’elle peut faire tourner confortablement (avec une marge de sécurité réservée pour l’OS et MIRA elle-même). Les paliers sont basés sur les recommandations actuelles pour l’inférence locale : Phi-4 Mini (3,8 milliards de paramètres) pour les petites configurations, jusqu’à des modèles bien plus capables si la machine le permet.
import re from pathlib import Path # Paliers de modèles connus, du plus léger au plus capable. PALIERS_MODELES = [ {"ram_min_go": 3, "nom": "phi-4-mini-q4", "fichier": "phi-4-mini.Q4_K_M.gguf", "parametres": "3.8B"}, {"ram_min_go": 6, "nom": "llama-3.3-8b-q4", "fichier": "llama-3.3-8b.Q4_K_M.gguf", "parametres": "8B"}, {"ram_min_go": 12, "nom": "qwen-2.5-14b-q4", "fichier": "qwen-2.5-14b.Q4_K_M.gguf", "parametres": "14B"}, {"ram_min_go": 24, "nom": "llama-3.3-32b-q4", "fichier": "llama-3.3-32b.Q4_K_M.gguf", "parametres": "32B"}, ] MODELES_DIR = Path(__file__).resolve().parent / "modeles" def obtenir_ram_disponible_go(): """ Lit la RAM totale du système sous Linux (via /proc/meminfo). Retourne la valeur en Go, ou None si indétectable. """ 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 choisir_palier_modele(ram_go=None): """ Choisit le modèle le plus capable que la RAM disponible permet de faire tourner confortablement. Réserve toujours une marge pour l'OS + MIRA, pas seulement pour le modèle lui-même. """ if ram_go is None: ram_go = obtenir_ram_disponible_go() if ram_go is None: # Impossible de détecter la RAM : on prend le palier le plus prudent return PALIERS_MODELES[0] ram_utilisable = ram_go - 1 # marge de sécurité réservée à l'OS/MIRA palier_choisi = PALIERS_MODELES[0] for palier in PALIERS_MODELES: if ram_utilisable >= palier["ram_min_go"]: palier_choisi = palier return palier_choisi def modele_deja_present(palier): """Vérifie si le fichier du modèle choisi est déjà sur la clé.""" return (MODELES_DIR / palier["fichier"]).exists() def rapport_materiel(): """Résumé lisible du choix fait, pour informer l'utilisateur au démarrage.""" ram_go = obtenir_ram_disponible_go() palier = choisir_palier_modele(ram_go) present = modele_deja_present(palier) return ( f"RAM détectée : {ram_go if ram_go else 'inconnue'} Go\n" f"Modèle sélectionné : {palier['nom']} ({palier['parametres']} paramètres)\n" f"Déjà installé : {'oui' if present else 'non — téléchargement à valider avant utilisation'}" )Ce que ça permet concrètement
- Sur le PC actuel (~4 Go) → MIRA choisit automatiquement Phi-4 Mini
- Si un jour la clé est branchée sur une machine avec plus de RAM → MIRA choisit d’elle-même un modèle plus capable, sans qu’on ait à reprogrammer quoi que ce soit
- Si le modèle choisi n’est pas encore présent sur la clé → ça ne télécharge JAMAIS automatiquement, ça respecte le même garde-fou que les spécialités (
modele_deja_present()renvoie juste un signal, à toi de valider le téléchargement)
Lien avec le reste
Ce module se branchera directement dans
moteur/(le dossier prévu dans l’architecture qu’on a posée) — c’est lui qui décidera quel fichier demodeles/charger, avant même de démarrerllama.cpp. -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.