From a42c184ed210d57b9ca168515d2548666f8bb4b9 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Sat, 3 Oct 2026 22:58:23 +0200 Subject: [PATCH] =?UTF-8?q?Moteur=20:=20corrections=20de=20relecture=20de?= =?UTF-8?q?=20FIT=5FTARGET=20=E2=80=94=20-sm=20tensor=20coupe=20aussi=20--?= =?UTF-8?q?fit,=20-ngl=20-1=20ne=20le=20coupe=20pas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit common/fit.cpp abandonne sur LLAMA_SPLIT_MODE_TENSOR comme sur ROW (« not implemented, abort ») : avec -sm tensor, la marge partait quand même et la note annonçait un --fit-target qui ne servait à rien — de quoi mesurer deux fois le même placement. À l'inverse, -ngl -1 est la valeur par défaut du moteur (celle qu'écrit « auto ») : fit tourne, et la clé était refusée à tort. - fitBlocker : row ou tensor, en drapeau ou en LLAMA_ARG_SPLIT_MODE ; -1 traité comme auto. - tests : -sm tensor, LLAMA_ARG_SPLIT_MODE=tensor, -sm layer, -ngl -1. Co-Authored-By: Claude Opus 5.5 --- internal/loki/backend_serve_expert.go | 10 +++++++--- internal/loki/backend_serve_expert_test.go | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/internal/loki/backend_serve_expert.go b/internal/loki/backend_serve_expert.go index c6350be..833bc78 100644 --- a/internal/loki/backend_serve_expert.go +++ b/internal/loki/backend_serve_expert.go @@ -162,7 +162,9 @@ func fitBlocker(cfg map[string]string, extra []string, si serveSysInfo) string { ngl = si.ArgEnv["LLAMA_ARG_N_GPU_LAYERS"] } } - if ngl = strings.TrimSpace(ngl); ngl != "" && !strings.EqualFold(ngl, "auto") { + // -1 est la valeur par défaut du moteur, celle qu'« auto » écrit : fit ne + // la prend pas pour un choix de l'utilisateur. + if ngl = strings.TrimSpace(ngl); ngl != "" && ngl != "-1" && !strings.EqualFold(ngl, "auto") { return "couches GPU fixées à " + ngl } if hasAnyFlag(extra, "-ts", "--tensor-split") || si.ArgEnv["LLAMA_ARG_TENSOR_SPLIT"] != "" { @@ -175,8 +177,10 @@ func fitBlocker(cfg map[string]string, extra []string, si serveSysInfo) string { if sm == "" { sm = si.ArgEnv["LLAMA_ARG_SPLIT_MODE"] } - if strings.EqualFold(strings.TrimSpace(sm), "row") { - return "-sm row" + // row ET tensor : fit abandonne sur l'une comme sur l'autre (« not + // implemented », common/fit.cpp). + if sm = strings.ToLower(strings.TrimSpace(sm)); sm == "row" || sm == "tensor" { + return "-sm " + sm } return "" } diff --git a/internal/loki/backend_serve_expert_test.go b/internal/loki/backend_serve_expert_test.go index 5a1c213..ed99d40 100644 --- a/internal/loki/backend_serve_expert_test.go +++ b/internal/loki/backend_serve_expert_test.go @@ -84,6 +84,17 @@ func TestFitTargetArgs(t *testing.T) { si: serveSysInfo{Help: helpFit, ArgEnv: map[string]string{"LLAMA_ARG_FIT": "off"}}, wantNotes: 1}, {name: "-sm row : rien", cfg: map[string]string{"FIT_TARGET": "1024", "EXTRA_ARGS": "-sm row"}, si: fit, wantNotes: 1}, + {name: "-sm tensor : fit abandonne aussi, rien", + cfg: map[string]string{"FIT_TARGET": "1024", "EXTRA_ARGS": "--split-mode tensor"}, si: fit, wantNotes: 1}, + {name: "LLAMA_ARG_SPLIT_MODE=tensor : rien", + cfg: map[string]string{"FIT_TARGET": "1024"}, + si: serveSysInfo{Help: helpFit, ArgEnv: map[string]string{"LLAMA_ARG_SPLIT_MODE": "tensor"}}, wantNotes: 1}, + {name: "-sm layer : fit tourne", + cfg: map[string]string{"FIT_TARGET": "1024", "EXTRA_ARGS": "-sm layer"}, si: fit, + want: []string{"--fit-target", "1024"}, wantNotes: 1}, + {name: "-ngl -1 (le défaut du moteur) : fit tourne", + cfg: map[string]string{"FIT_TARGET": "1024", "EXTRA_ARGS": "-ngl -1"}, si: fit, + want: []string{"--fit-target", "1024"}, wantNotes: 1}, {name: "--device choisi : le placement reste à fit, accepté", cfg: map[string]string{"FIT_TARGET": "1024,3072", "EXTRA_ARGS": "--device CUDA1,CUDA0"}, si: fit, want: []string{"--fit-target", "1024,3072"}, wantNotes: 1},