Issues / #2644
#2644 layer-split auto gives an asymmetric pair 3 of 48 layers (12 GB idle, -44% prefill)
open · @Tworks25 · 0 comentários · No GitHub
BenchmarksSetup & installMulti-GPUNVIDIA / CUDAModels & quants
Descrição
## What happens On an **asymmetric** two-GPU pair, `layer-split auto` assigns almost all layers to one card, leaving most of the second card's VRAM unused for the whole run. Measured on RTX 4060 Ti 16 GB + RTX 3060 12 GB (48 layers, Strata 0.1.44.1, `296b59d2`, Flash-Next IQ3_S): ``` layer split, CUDA1: 5.50 GiB free of 11.63, room for experts 4.72 GiB layer split: CUDA1 runs layers 18-47 ... (with a manual split) ``` With `auto`, the engine log reports: ``` layer split auto: K=2 would give a stage fewer than 3 layers (a tiny expert cache there clamps the prompt chunk of every card, #1616); chose K=3 instead layer split: CUDA1 runs layers 3-47, expert cache 4263 slots layer split: CUDA0 runs layers 0-2 ``` So the RTX 3060 got **3 of 48 layers**. Through an entire 14,564-token prefill it drew **17 W** (idle power) and sat at ~0-1 % utilisation while the 4060 Ti ran at 100 %: ``` samples (1/s) during prefill, host CPU busy% | GPU0 util,mem,power | GPU1 util,mem,power 8 cpu_busy=9% gpus=[0, 100, 11614, 50.58; 1, 100, 15555, 102.25;] 10 cpu_busy=19% gpus=[0, 100, 11614, 135.79; 1, 8, 15559, 100.07;] 12 cpu_busy=16% gpus=[0, 100, 11614, 138.12; 1, 0, 15730, 31.58;] ``` Host CPU was ~3 % and cross-card expert traffic measured 0.0-4.1 % of routed experts, so neither the CPU nor the PCIe link was the limit — the split itself was. ## Cost Identical cold 14,564-token prompt, fresh server per point, only `layer_split` changed: | `layer_split` | RTX 3060 layers | RTX 4060 Ti layers | prefill tok/s | | ---: | ---: | ---: | ---: | | `auto` | 3 | 45 | 452.6 | | 12 | 12 | 36 | 581.8 | | 18 | 18 | 30 | 693.0 | | 24 | 24 | 24 | 761.7 | | **28** | **28** | **20** | **802.1** | | 32 | 32 | 16 | 803.2 | **`auto` costs 44 % of prefill throughput on this pair** versus split 28, where the curve plateaus. Decode improves too (41.8 → 50.4 tok/s chat median; 25.1 → 36.2 agent median), presumably because fewer layers per card lets each expert cache cover its own layers better. ## A diagnostic that may be worth documenting With the mis-set split, prefill is **flat in prompt length** — 491.7 tok/s at 4K, 512.1 at 16K, no batching benefit. With split 28 it becomes a slope: 488.2 at 4K, 835.0 at 16K. Note the 4K number is unchanged, so **a 4K-only benchmark cannot see this**. Anyone tuning from a short prompt would conclude the install is fine. ## Which way the split should go is not intuitive The obvious rule — give the faster card proportionally more layers — predicts the wrong direction here. What tracked the result was **memory bandwidth**, not SM count or FP32 TFLOPS: the RTX 3060 has 360 GB/s against the 4060 Ti's 288 GB/s, so it is the better host for expert-heavy layers despite fewer and slower SMs. That is an argument for a bandwidth-aware automatic split rather than a compute-aware one. ## Reproduction ``` RTX 4060 Ti 16 GB (CUDA1) + RTX 3060 12 GB (CUDA0), 48 layers Strata 0.1.44.1, original Flash-Next IQ3_S, --max-context 262144 --kv int8 strata-iq3_s.json: "gpu": [1, 0], "layer_split": "auto" ``` Then set `"layer_split"` to `12` / `18` / `24` / `28` / `32` and cold-prefill one fixed long prompt against a freshly started server at each value. ## Related Full benchmark and the sweep are in PR #2643, which adds the report under `bench/results/2026-10-15-community-rtx-4060-ti-plus-rtx-3060-qwen3-8-flash-next-iq3-s-3/`. ## Not claiming The `auto` heuristic avoids a real failure mode (#1616 — a stage whose tiny expert cache clamps the prompt chunk of every card). I did not observe that clamping at any split I tested, but I only tested this one pair, on one model, at one context length. If a bandwidth-aware balance would reintroduce #1616 on other hardware, the tradeoff may well be deliberate — in which case documenting "sweep `layer_split` on asymmetric pairs" would be enough.
No site
Links install, modelos, releases.