Launcher arch-aware KV dtype injection for pilot slugs (#246 Phase 1)
launch.sh/switch.sh now detect GPU arch and export KV_CACHE_DTYPE= fp8_e4m3 (native FP8 compute) on sm_89+ cards for the pilot slugs (vllm/dual, vllm/minimal). The injected value is the hardware profiles' dormant kv_format_default.balanced -- one source of truth shared with the pull gates; the Ampere no-op is data equality (3090-class balanced = fp8_e5m2 = compose default -> nothing emitted), not a code branch. Injection guards (all load-bearing): - pilot allowlist only; expansion gated on the #246 cross-rig A/B - per-variant: registry kv_format == fp8_e5m2 only (int8-PTH/TQ/bf16 slugs never touched -- compressed-tensors weights reject fp8 KV) - vLLM-family variants only; explicit user KV_CACHE_DTYPE= wins; unmapped cards / heterogeneous rigs / no nvidia-smi -> no injection - direct `docker compose up` keeps Ampere-safe compose defaults Rides the existing resolve-variant-pin export seam (new optional --gpu-spec); VLLM_ATTENTION_BACKEND is whitelisted but ships no value (vLLM auto-detect stays the default until measured). Preflight banner names the detected arch class. Consistency fixes the injection exposed: - gates.py _ARCH_KERNEL_SM: fp8_e4m3 9.0 -> 8.9 (vLLM's real floor is SM89+; we'd otherwise inject e4m3 on 4090s our own pull-gate calls unloadable) + new nvfp4: 10.0 row (v0.24.0 literal had NO gate -- a 3090 pull of an nvfp4 config wouldn't have been rejected) - Blackwell hardware profiles: nvfp4 declared as CANDIDATE capability (engine list unchanged until validated -- gates take the intersection) - kv-calc: projected nvfp4 rows (bytes/elem + activation coefs), calibration unchanged Docs: HARDWARE.md new section, KV_MATH/QUANTIZATION/DTYPE_MATRIX rows (incl. retiring the Genesis-era "e4m3 undertuned per #51" advisory in favor of the A/B). Validated: 8-case injection matrix in test-launch-compat; live no-op on the real 2x3090 (spec built, nothing injected); faked 4090 through the real bash detection path emits e4m3; compose interpolation both ways; kv-calc --calibration green; full scripts gate 64/64. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EfF565T9eSLaqGzidyJ1Pm
This commit is contained in:
@@ -161,7 +161,9 @@ Independent of the weight quant, you can quantize the **KV cache** — this is w
|
||||
| `f16` | 16 | all | Lossless, biggest. Rarely needed. |
|
||||
| `q8_0` | 8 | llama.cpp / ik | Near-lossless; good default when context is moderate. |
|
||||
| `q4_0` | 4 | llama.cpp / ik | Halves KV vs q8_0 → enables **262K on one 3090** (ik IQ4_KS). Tiny quality cost. |
|
||||
| `fp8_e5m2` | 8 | vLLM | Our `vllm/dual` default (AutoRound weights). |
|
||||
| `fp8_e5m2` | 8 | vLLM | Our `vllm/dual` default (AutoRound weights) — the Ampere-safe storage-only fp8. |
|
||||
| `fp8_e4m3` | 8 | vLLM | Same bytes as e5m2 but **native FP8 Tensor-Core compute on sm_89+** (Ada/Hopper/Blackwell; hard-rejected on Ampere). Since [#246](https://github.com/noonghunna/club-3090/issues/246) the launchers inject it automatically on those cards for the pilot slugs — you don't hand-pick it; `KV_CACHE_DTYPE=` in your env overrides. |
|
||||
| `nvfp4` | 4 | vLLM ≥ v0.24.0 | Blackwell-only (sm ≥ 10.0) FP4 KV — a valid dtype literal in our pin, **unvalidated on this stack** (candidate on the Blackwell hardware profiles; #246 A/B arm 3). Needs a NIAH-clean cross-rig gate before it's anyone's default. |
|
||||
| **`int8_per_token_head`** | 8 | vLLM | ~1 byte/tok like fp8; **native in stock v0.22.0** for standard models (Gemma-4 needs the #40391 overlay). The KV path for **compressed-tensors weights (AWQ/FP8/INT8) at long context** — those can't use fp8 KV. |
|
||||
| **TQ3 (TurboQuant)** | 3 | vLLM (Genesis) | 3-bit KV — beats fp8 on long-context memory; powers our `dual-turbo`. See [TQ3_MTP_GENESIS.md](TQ3_MTP_GENESIS.md) + [CLIFFS.md](CLIFFS.md). |
|
||||
| `-khad` (modifier) | — | **ik only** | Hadamard transform on the K-cache → recovers accuracy lost to KV quantization, so you keep quality at q4_0/q8_0. |
|
||||
|
||||
Reference in New Issue
Block a user