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},