feat(inference): HiSparse vLLM wheel for GLM-5.x PD decode instances#2949
Draft
faresobeid wants to merge 3 commits into
Draft
feat(inference): HiSparse vLLM wheel for GLM-5.x PD decode instances#2949faresobeid wants to merge 3 commits into
faresobeid wants to merge 3 commits into
Conversation
5d72dfb to
72e117b
Compare
…2044) Swaps the upstream 0.24.0 wheel for the HiSparse fork build (faresobeid/vllm#46326, v0.24.0 release base): host-resident sparse-MLA decode for GLM-5/DSA models. aarch64 stays on the upstream wheel; the runtime patches/plugin apply unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kv_cache_offload.roles limits the Mooncake store to the named roles: out-of-scope nodes skip the store client and get a NIXL-only kv_transfer_config, freeing their RAM. Needed for HiSparse decode nodes, whose RAM budget goes to pinned host pools (ranks x host_pool_gib); the store master follows the first in-scope node. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ti-tenant hardening Teardown: batch/node TERM traps with a bounded drain window so decode ranks unpin their host pools in-process (a SIGKILLed unpin runs in uninterruptible kernel context, outlives SLURM KillWait, and drains the node); VLLM_WORKER_SHUTDOWN_TIMEOUT_SECONDS=600 grace; component-crash escalation (scancel --signal=TERM + CRASH_<host> marker) so an engine death cannot leave a silently wedged deployment. Hardening: envoy launches with --use-dynamic-base-id (a stale /dev/shm/envoy_shared_memory_0 from another user SIGABRTs the default base-id at startup; reproduced on a shared node); mooncake store launcher is orphan-proof (setsid + process-group kill, fail-loud readiness via the kernel listen table); per-rank uv run --no-sync (concurrent re-syncs race on the shared uv cache); decode inherits the auto-detected multi-rail UCX_NET_DEVICES instead of a single-HCA pin; install_nixl_from_source.sh hardened against a UCX cross-thread ownership abort. Skills updated to match (two-step cancel, bring-up gotchas, current routing guidance). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
949796b to
fc929c4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Enables HiSparse host-resident sparse-MLA decode (vllm-project/vllm#46326) for GLM-5.2 deployments. Three commits:
kv_cache_offload.roles: scopes the Mooncake store to a subset of P/D roles. Out-of-scope nodes skip the store client and get a NIXL-only transfer config — decode-node RAM goes to HiSparse pinned pools (ranks × host_pool_gib) instead of a store segment.VLLM_WORKER_SHUTDOWN_TIMEOUT_SECONDS=600, component-crash escalation (scancel --signal=TERM+CRASH_<host>marker — an engine death can no longer leave a silently wedged deployment), envoy--use-dynamic-base-id(a stale/dev/shm/envoy_shared_memory_0from another user's crashed run SIGABRTs the default base-id; reproduced and fix-validated on a poisoned node), orphan-proof mooncake store launcher, per-rankuv run --no-sync, decode on auto-detected multi-railUCX_NET_DEVICES.Why
A GLM-5.2 wide-EP decode rank has O(10 GiB) of GPU KV after weights and sparse-stack workspaces — a handful of long-context requests per engine. HiSparse keeps the full sparse-MLA KV in pinned host memory and serves decode from per-request GPU hot buffers of the indexer top-k.
Measured (GLM-5.2-FP8, this branch's wheel)
16-node stack (8 prefill + 8 decode DP64, llm-d, NIXL, mooncake), A/B vs plain GPU-KV decode — identical topology, traffic, and 50-min saturated window:
Pushed to seat saturation (c=6500): 26,056 decode tok/s sustained, 99% peak seat occupancy, zero preemptions — 3.3× the c=1000 operating point; the binding constraint is
max_num_seqs, not memory.Agentic RL workload (r2e-gym through the router, c=1000, 4P+2D): baseline pinned at 99.9% KV with 1,533 preemptions, 5 of 155 rollouts solved; HiSparse: zero preemptions, 585 solved, +124% steady-state decode throughput.
Deployment notes
attention_config = { hisparse_config = { host_pool_gib = <N> } }per rank; budget node RAM forranks × pool(+ any co-tenants — henceroles = ["prefill"]on the store).max_num_seqs(e.g. 96): hot buffers are eager (~370 MB/request across GLM-5.2's 78 sparse layers) and the seat count is the admission control — size it to sustained decode compute at your context lengths, or rely on orchestrator inflight caps.gpu_memory_utilizationcan go to 0.9 (the GPU KV budget mostly idles under HiSparse).🤖 Generated with Claude Code