MoE : corrections de relecture du lot 2 — LOAD_GUARD ne refuse plus sur une borne fausse, et le refus se voit

La garde du mode de chargement est le seul refus actif par défaut du lot 2 :
il ne doit tomber que sur un échec certain, et se dire là où l'on regarde.

- Serveurs --rpc (ou LLAMA_ARG_RPC) : une part des poids part ailleurs, la
  VRAM locale ne borne plus rien — avertissement, jamais de refus.
- Mac Intel : la mémoire n'est unifiée que sur Apple Silicon ; ailleurs la
  VRAM est inconnue, donc jamais de refus (l'agrandissement du cache RAM
  reste coupé sur tout macOS, comme avant).
- LLAMA_ARG_NO_MMAP / LLAMA_ARG_MLOCK restées dans l'environnement ne
  comptent plus sur un moteur à --load-mode, qui les ignore : un lancement en
  mmap n'est plus refusé pour elles.
- Le refus sortait de « loki serve » avant tout chargement : l'interface
  affichait un chargement sans fin. modelLoadError le reconnaît et dit quoi
  faire (--load-mode mmap ou LOAD_GUARD=off).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-04 12:28:57 +02:00
1 parent f0d5711a1a
commit 78d15cefbf
5 files changed
+69 -14

No files matched your search

+10 -3
View File
@@ -96,8 +96,10 @@ func handleStatus(w http.ResponseWriter, r *http.Request) {
// qui exige un fork de llama.cpp. Renvoie "" quand le dernier chargement a
// réussi ou qu'aucune tentative n'est visible (évite les faux positifs sur un
// service simplement arrêté).
func modelLoadError() string {
log := serviceLogTail(200)
func modelLoadError() string { return modelLoadErrorFrom(serviceLogTail(200)) }
// modelLoadErrorFrom : modelLoadError sur un journal donné (tests).
func modelLoadErrorFrom(log string) string {
if log == "" {
return ""
}
@@ -105,7 +107,9 @@ func modelLoadError() string {
// On ne considère que ce qui suit la DERNIÈRE tentative de chargement.
start := 0
for i, l := range lines {
if strings.Contains(l, "loading model") || strings.Contains(l, "load_model") {
// Un lancement refusé par LOAD_GUARD (backend_serve_moe.go) s'arrête
// avant tout chargement : c'est lui, la dernière tentative.
if strings.Contains(l, "loading model") || strings.Contains(l, "load_model") || strings.Contains(l, loadGuardMarker) {
start = i
}
}
@@ -124,6 +128,9 @@ func modelLoadError() string {
strings.Contains(low, "split_mode_tensor not implemented"):
// Les autres lignes qui citent SPLIT_MODE_TENSOR ne sont que des avis.
reason = "le mode tensor (-sm tensor) n'a pas pu démarrer — SPLIT_MODE=off dans le preset"
case strings.Contains(l, loadGuardMarker):
reason = "lancement refusé : trop de poids resteraient en RAM avec ce mode de chargement — " +
"--load-mode mmap dans le preset, ou LOAD_GUARD=off pour passer outre"
case strings.Contains(l, "has offset") && strings.Contains(l, "expected"):
reason = "format de quantification non reconnu par ce moteur"
case strings.Contains(low, "unknown model architecture"),