Moteur : corrections de relecture de FIT_TARGET — -sm tensor coupe aussi --fit, -ngl -1 ne le coupe pas

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 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-03 22:58:23 +02:00
1 parent 9aa426a389
commit a42c184ed2
2 files changed
+18 -3

No files matched your search

+7 -3
View File
@@ -162,7 +162,9 @@ func fitBlocker(cfg map[string]string, extra []string, si serveSysInfo) string {
ngl = si.ArgEnv["LLAMA_ARG_N_GPU_LAYERS"] 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 return "couches GPU fixées à " + ngl
} }
if hasAnyFlag(extra, "-ts", "--tensor-split") || si.ArgEnv["LLAMA_ARG_TENSOR_SPLIT"] != "" { 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 == "" { if sm == "" {
sm = si.ArgEnv["LLAMA_ARG_SPLIT_MODE"] sm = si.ArgEnv["LLAMA_ARG_SPLIT_MODE"]
} }
if strings.EqualFold(strings.TrimSpace(sm), "row") { // row ET tensor : fit abandonne sur l'une comme sur l'autre (« not
return "-sm row" // implemented », common/fit.cpp).
if sm = strings.ToLower(strings.TrimSpace(sm)); sm == "row" || sm == "tensor" {
return "-sm " + sm
} }
return "" return ""
} }
@@ -84,6 +84,17 @@ func TestFitTargetArgs(t *testing.T) {
si: serveSysInfo{Help: helpFit, ArgEnv: map[string]string{"LLAMA_ARG_FIT": "off"}}, wantNotes: 1}, si: serveSysInfo{Help: helpFit, ArgEnv: map[string]string{"LLAMA_ARG_FIT": "off"}}, wantNotes: 1},
{name: "-sm row : rien", {name: "-sm row : rien",
cfg: map[string]string{"FIT_TARGET": "1024", "EXTRA_ARGS": "-sm row"}, si: fit, wantNotes: 1}, 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é", {name: "--device choisi : le placement reste à fit, accepté",
cfg: map[string]string{"FIT_TARGET": "1024,3072", "EXTRA_ARGS": "--device CUDA1,CUDA0"}, si: fit, cfg: map[string]string{"FIT_TARGET": "1024,3072", "EXTRA_ARGS": "--device CUDA1,CUDA0"}, si: fit,
want: []string{"--fit-target", "1024,3072"}, wantNotes: 1}, want: []string{"--fit-target", "1024,3072"}, wantNotes: 1},