Issues / #3201
#3201 [Engine] NUMA-split CPU expert pool: +10 to +14 % decode on a dual-socket Xeon, measured, opt-in
open · @baptisterajaut · 5 comentarios · En GitHub
BenchmarksMulti-GPUNVIDIA / CUDAModels & quantsLinux
Descripción
### Area [Engine] (speed, kernels, models, the server and API) ### What do you want to do? Hi, in #2242 you wrote that a dual-socket owner reporting a measured decode gain would be worth revisiting. Here is one, with a different approach from #2242, so I would like your read on scope before opening a PR. **Box:** HP Z6 G4, 2x Xeon Gold 6226 (12 cores each), 64 GB DDR4-2933 (32 GB per NUMA node, 4 of 6 channels per socket), one RTX 3090 on PCIe 3.0. Qwen3.8-Flash-Next-Uncensored IQ4_XS at 262K context with MTP, v0.2.0-beta. Same tuning in every arm: `--adapt-async 1`, `STRATA_POOL_SPIN_US=200`, `STRATA_ROUTE_TAIL_SKIP=0`. **Server decode**, interleaved starts, expert profile frozen: | Arm | Workers | Median tok/s | Range | |---|---|---|---| | 0.2.0 default | 11, one socket | 52.6 | 51.0-53.3 | | no split | 22 | 50.25 | 40.5-53.2 | | split | 12 (6+6) | 51.5 | 49.9-54.4 | | **split** | **22** | **60.0** | **57.8-61.6** | Prompt speed and VRAM hit rate (74 %) are unchanged. **What the split does**, behind `STRATA_NUMA_SPLIT=1`: - the CPU pool gets one task slice per NUMA node, with its own counter and barrier; - the rows of every CPU-side expert are cut in two at load, each half first-touched on its node by pinned threads. Each socket then reads only local weights and never waits on the other socket's counters. #2242 binds the complement to the GPU's node; this keeps both nodes' memory and both sockets' cores in use. With the variable unset, the default path is unchanged. These numbers agree with #674 and #707: more workers across sockets are slower on their own. The gap with the split would point at the cross-socket synchronisation rather than the core count. Would a PR along these lines be in scope? The branch is ready with tests (pool_plan_test, pool_tasks_test including 192 bitwise comparisons in split mode, file_expert_source_test) and the full protocol. Limits up front: Linux only, 2 nodes, native expert layers only, measured on this one CUDA box. ### What do you do today instead? The 0.2.0 default: 11 pool workers on the host socket, the other socket's 12 cores idle (before 0.2.0, `numactl --cpunodebind=0` for the same effect).
En el sitio
Enlaces a install, modelos, releases.