feat(llm): grosse MoE-Modelle auf kleinen Karten — Experten in den Arbeitsspeicher
Bei MoE-Modellen (z.B. Qwen3-Coder-30B-A3B: 18,6 GB, davon 16,35 GB Experten) rechnet pro Wort nur ein kleiner Teil. llama.cpp kann die Experten in den RAM legen (--cpu-moe / --n-cpu-moe N), der Rest bleibt auf der Karte. Adapter: - Registry-Feld cpuMoe: 0 = Karte, -1 = alle Experten in den RAM, N = die der ersten N Schichten; -2 beim Laden = automatisch aufteilen. - Automatisch: liest nur den Kopf der GGUF bei HuggingFace (HTTP-Range, Tensor-Verzeichnis), rechnet Experten je Schicht + KV-Cache gegen den VRAM der Karte und legt so viele Experten auf die Karte wie passen (12 GB/32k: 16 von 48 Schichten auf der Karte, 32 im RAM). - Kontext-Auswahl: GB-Schaetzung fuer die Karte ohne ausgelagerte Experten; slot meldet moe, cpuMoe, ramMB. KV-Rechnung als _kv_bytes() geteilt. Diagnostic: MoE-Modell zu gross fuer die Karte → Rueckfrage "Experten automatisch aufteilen?"; pro Karte Auswahl Experten: Karte / automatisch / Arbeitsspeicher. Kontextwechsel rechnet die Aufteilung neu. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3601,6 +3601,7 @@ wss.on("connection", (ws) => {
|
||||
sendToRVS_raw({ type: "llm_provision_model", payload: {
|
||||
targetInstance: msg.targetInstance || "",
|
||||
key: msg.key, hfRepo: msg.hfRepo, quant: msg.quant, ctx: msg.ctx, ngl: msg.ngl,
|
||||
cpuMoe: msg.cpuMoe ?? 0, // MoE: 0 Karte, -1 alle Experten in den RAM, -2 automatisch verteilen
|
||||
gpu: msg.gpu ?? "", // Ziel-Karte auf der Box
|
||||
}, timestamp: Date.now() });
|
||||
log("info", "llm", `provision '${msg.key}' (${msg.hfRepo}) → ${msg.targetInstance || "?"}`);
|
||||
|
||||
Reference in New Issue
Block a user