Placement : SPLIT_MODE=tensor, parallélisme de tenseurs entre cartes, en opt-in

En découpe par couches (défaut), chaque carte traverse ses couches à son
tour. En mode tensor, chaque couche est coupée entre les cartes, qui
additionnent ensuite leurs morceaux : décodage plus rapide d'après
l'amont, prefill nettement plus lent. Sur deux GeForce en PCIe et une
boucle d'agent qui relit beaucoup, rien n'est acquis : expérimental,
off par défaut, et une longue liste de refus propres plutôt qu'un
moteur qui meurt en boucle. Sans la clé, ligne et environnement
identiques à l'octet près (test).

- détection : la liste littérale {none,layer,row,tensor} dans l'aide du
  moteur — « tensor » seul y est partout (--tensor-split) ; absente =
  aucun compagnon posé, note au journal
- GGML_CUDA_ALLREDUCE=internal sauf choix de l'environnement : NCCL
  compresse en BF16 les réductions du prefill (avec perte) ; nccl
  gardé s'il est posé, avec un avertissement ; note NCCL indisponible /
  P2P à poser soi-même
- -ngl all, -ts au prorata de la VRAM totale (--list-devices, ordre du
  moteur, --device compris), -fa on : chacun seulement si EXTRA_ARGS ou
  une LLAMA_ARG_* ne l'a pas déjà ; CTX explicite exigé
- refus : KV autre que f16/bf16/f32 (KV_TYPE*, -ctk/-ctv, LLAMA_ARG_*,
  jamais réécrit), --backend-sampling, -fa off, -sm à la main, poids ou
  KV sur CPU, NGL partiel, SPEC, SIDE_SLOT, une seule carte ou non CUDA,
  architectures exclues par llama.cpp et qwen4exp, preset externe
- pas de --fit en mode tensor : estimation poids + cache de CTX jetons
  contre 90 % de la VRAM, refus au-delà, CTX jamais réduit
- files CUDA, CUDA_GRAPH_OPT et FIT_TARGET voient le -sm tensor ;
  SLOT_PERSIST refusé avec la clé ; diagnostic du journal pour les
  échecs propres au mode tensor
- README et configTemplate

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-04 10:35:16 +02:00
1 parent 539e36ea49
commit 5954d75118
7 files changed
+635 -5

No files matched your search

+23
View File
@@ -561,6 +561,29 @@ Ajoutées par ce fork :
nature de requête (`kinds.<nature>.draft_rate`) : à garder là où elle paie.
Les drapeaux d'acceptation synthétique (`--spec-synth-*`, « benchmarking
only »), que Loki ne pose jamais, déclenchent un avertissement au lancement.
- **Parallélisme de tenseurs** (clé `SPLIT_MODE=tensor`, **off** par défaut,
expérimental, moteur relancé) : au lieu de donner à chaque carte des couches
entières (`-sm layer`, défaut), chaque couche est coupée entre les cartes,
qui additionnent ensuite leurs morceaux. L'amont mesure un décodage plus
rapide mais un prefill nettement plus lent : sur deux GeForce en PCIe et une
boucle d'agent qui relit beaucoup, à mesurer par tour avant de l'adopter.
Loki n'active le mode que si l'aide du moteur liste `{none,layer,row,tensor}`
(le mot « tensor » seul est partout), et ajoute alors `-ngl all`, `-ts` au
prorata de la VRAM totale des cartes dans l'ordre du moteur (`--device`
compris), `-fa on` — chacun seulement s'il n'est pas déjà dans `EXTRA_ARGS`
ou une `LLAMA_ARG_*` — et `GGML_CUDA_ALLREDUCE=internal` si l'environnement
ne le fixe pas : le chemin NCCL compresse en BF16 les grosses réductions du
prefill, une perte de précision ; la réduction interne garde le type natif.
« NCCL not compiled in » au journal est alors sans effet ; `GGML_CUDA_P2P=1`
reste à poser soi-même si le pilote le permet. Pas de `--fit` en mode
tensor : Loki estime poids + cache de `CTX` jetons et refuse au-delà de 90 %
de la VRAM — jamais en réduisant `CTX`. Refusé aussi (découpe par couches,
note au journal) avec un cache KV autre que f16/bf16/f32 (jamais réécrit
d'office), des poids ou le cache KV sur CPU (`--n-cpu-moe`, `-ot`, `NGL`
partiel, `-nkvo`), `--backend-sampling`, `-fa off`, un `-sm` déjà réglé,
`SPEC`, `SIDE_SLOT`, `CTX` non chiffré, une seule carte ou une carte non
CUDA, une architecture que llama.cpp exclut (et `qwen4exp`), un preset
externe ; `SLOT_PERSIST` est refusé avec la clé.
- **Discussions multiples** : historique complet dans la barre latérale, titre
repris du premier message (renommable), suppression. **Chaque discussion a son
dossier de fichiers** (`workspace/discussions/<id>/`) : les pièces jointes