JointServe: Serving Multi-Model Agents on Memory-Constrained GPUs
JointServe targets multi-model LLM agent serving on memory-constrained GPUs, where heterogeneous expert weights and ever-growing KV caches physically contend for HBM bytes. It unifies weight shards and KV blocks as competing residency objects under one budget, exploits the agent's own tool-call stream to prefetch destination experts during caller generation gaps, and streams only incremental layer groups when a swap occurs. The work is motivated by the architectural shift from single-model tool use to planner-orchestrated pools of heterogeneous experts—a pattern visible in SWE-bench, $\tau$-bench, and OSWorld traces—and targets the private and edge deployments where full co-residency is arithmetic impossible.
The paper offers a focused, coherent argument that residency scheduling—not accelerator capacity—is the critical resource for memory-constrained agent serving. Its three technical pillars (unified budget formulation, caller-generation prefetch, and partial-shard hot-swap) are tightly integrated and yield strong measured gains, including feasibility in a crash budget where whole-model systems catastrophically stall. The limitations are clearly disclosed: the scope is restricted to heterogeneous full-parameter experts on a single GPU, intent extraction relies on structured tool-call headers, and the $(1-\varepsilon)$ approximation assumes independent additive objects whereas real prefix and layer-group dependencies require a more expensive grouped dynamic program. Reproducibility is hampered by the lack of any mentioned code or artifact release and by the custom bypass of the SGLang engine loader.
The empirical quantification of switching taxes is sharp and anchors the design. At full host-to-device bandwidth, moving a 7B FP16 expert still idles the GPU for 0.63 s, while re-prefilling a 27.5K-token KV context after eviction costs 2.64 s versus only 0.05 s to reload the same state from host memory—an order-of-magnitude spread that justifies the dual-state tier. The ablation is decisive: removing partial residency raises SCT by 18.0%, removing the host KV tier by 53.8%, and removing adaptive control by 24.3%, and the crash-budget case shows these controls are structurally super-additive. The comparison against INT4 co-residency is also honest: it notes that quantization merely relocates the weight–KV contention and fails structurally when even compressed weights exceed the card budget.
Three issues limit the generality of the claims. First, intent extraction assumes the planner emits a visible, deterministic tool-call header during generation; this is standard for structured function calling but breaks for agents that emit free-form chain-of-thought before naming an expert or that use opaque, non-standard interfaces. Second, the theoretical $(1-\varepsilon)$ guarantee in Theorem A.1 depends on independent candidates with additive values, yet Section 3.4 and Appendix C.2 acknowledge that shared-prefix recovery and mutually exclusive layer-group states require complete legal plans per model or session, with cost scaling in the number of enumerated options; the end-to-end experiments do not validate this grouped DP at the scale implied by hundreds of optional objects. Third, the dramatic crash-regime result—a $46\times$ gap—compares JointServe against whole-model baselines truncated at 35,000 s, which inflates uncertainty because those baselines never actually finish; the true gap could be smaller or larger, but without completion data the comparison is noisy.
The baseline coverage is commendable and spans the design space: vLLM (naive engine restart per switch), SGLang (framework default with NVMe reload), ServerlessLLM (optimized loading stack, tested both officially and in an idealized host-resident variant), INT4-CoResident (compression without swapping), and INT4-Swap (quantized whole-model swap). Evaluation across SWE-bench, $\tau$-bench, OSWorld, and a production-shaped TraceLab replay supports external validity. The stall decomposition precisely attributes gains: weight-switch stall drops to 0.00 s for 7B/14B experts because prefetch moves bytes before the request arrives, while the dual-state KV tier replaces 1.03 s of GPU recompute with 0.05 s of host reload per switch-back. One caveat is that SGLang is reported as $8.3\times$ slower than JointServe even at full HBM capacity ($b=1.0$), which the paper attributes to SGLang's storage-backed reload path; this suggests part of the headline advantage stems from bypassing a slow baseline loader rather than from the residency policy alone.
Independent reproduction would be difficult. The prototype is described as roughly 1.5K lines of Python atop SGLang, yet the text contains no mention of code, data, or artifact availability. The custom shard loader bypasses the engine's stock checkpoint reader and writes weight buffers directly from a pinned host weight bank, implying a non-trivial patch to SGLang's memory management. Hyperparameters such as the startup shard size $k^{*}$, the $\kappa$-floor bandwidth share (15%), and the three rounding budgets $\varepsilon_C, \varepsilon_S, \varepsilon_K$ are reported, but no sensitivity analysis or tuning procedure is described. Testbed details are precise—A800-SXM4-80GB, PCIe 4.0, measured 24.3 GB/s effective host-to-device bandwidth—but without the implementation, a reader cannot reproduce the in-place overwrite hot-swap or the grouped residency DP.
LLM agents are evolving from a single model calling tools to planners that orchestrate multiple expert models whose capabilities live in distinct weights. This shift breaks a hidden assumption of today's serving systems: that the working set of models fits in GPU memory. On the memory-constrained GPUs typical of private and edge deployments, naive whole-model swapping serializes weight transfer with computation and, without host-backed KV restoration, discards session state at a switch. We present JointServe, a serving system that treats weight shards and KV blocks as residency objects competing for one unified memory budget. JointServe exploits three structural properties of agent workloads (directed calls, gapped execution, and dual-state residency) to prepare models before they are called: an intent signal parsed from the caller's own output stream triggers prefetch during generation, partial k* residency reduces switching to incremental layers, and a preemptive transfer scheduler protects live-session KV with a guaranteed bandwidth share. A carve-out control step adjusts the weight/KV allocation as workload demands change. Evaluations show that JointServe reduces session completion time by 21.7% over the strongest whole-model swap baseline and stays usable in a crash regime where every whole-model swap baseline fails to finish (a 46-fold gap). On replayed SWE-bench, tau-bench, and OSWorld traces, it cuts session completion time by up to 49% and lifts SLO attainment from 2.8-24.5% to 76.8-100%.
Pick a starting point or write your own. Challenges run in the background, so you can keep reading while the AI investigates.
No challenges yet. Disagree with the review? Ask the AI to revisit a specific claim.