From 7eec0d11acdbebeb3d3150441bde953d530cd138 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Tue, 28 Jul 2026 23:19:13 +0800 Subject: [PATCH 01/19] Add fast engine recovery Signed-off-by: Michael Qiu --- blog/2026-07-28-sglang-fast-recovery.md | 254 ++++++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 blog/2026-07-28-sglang-fast-recovery.md diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md new file mode 100644 index 000000000..ebc4edaaa --- /dev/null +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -0,0 +1,254 @@ +--- +title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" +author: "AntGroup Bailing Team, Ailibaba xxx Team, SGLang Team" +date: "July 28, 2026" +previewImg: /images/blog/sglang-fast-recovery/preview.png +--- + +## TL;DR + +> We introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from **minutes to sub-second**, and total engine restart time from **6.5 minutes to 1.3 minutes** on Qwen3-235B FP8. +> +> The Weight Cache Daemon is the first phase of our **Fast Recovery Framework**, which targets **< 10 seconds warm restarts** and **< 1 second warm standby switches** for production LLM serving. + +Key results: + +1. **Weight loading: ~310s → ~0.63s** — a **~500× speedup**, eliminating 79% of startup time based on qwen3-235B model. +2. **Total startup: 6.5min → 1.3min** — an **80% reduction** in end-to-end engine boot time. +3. **Multi-instance weight sharing** — multiple engine instances on the same GPU map to the same IPC handles, eliminating redundant disk I/O and post-quantization transforms. +4. **Active-standby failover in < 1 second** — standby engines share weights via zero-copy, enabling near-zero-downtime failover without dedicating full GPUs to idle replicas. +5. **Multi-node-instance weight sharing** - support multi-node mode for large models + +## Background + +As LLM models grow larger — 235B, 1T, and 2.8T of newerly released Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Qwen3-235B FP8 instance on 4×H20 GPUs takes **~6.5 minutes** just to become ready to serve. In production, this means: + +- **P99 tail latency spikes** during restarts — all in-flight requests fail or queue indefinitely. +- **Reduced availability** — multi-minute recovery windows violate SLA targets. +- **Operational friction** — rolling updates, config changes, and failure recovery are all bottlenecked by the restart cycle. +- **GPU resource waste** — traditional active-standby deployments dedicate a full set of GPUs to idle replicas, doubling hardware cost for failover. + +Where does the time go? We profiled a complete SGLang engine startup for Qwen3-235B FP8: + +| Phase | Time (s) | Percentage | Notes | +|-------|----------|------------|-------| +| Server init & Tokenizer | ~17.3 | 4.4% | ServerArgs parsing, tokenizer loading | +| Init torch distributed | ~4.7 | 1.2% | NCCL init, 4-card | +| **Load weight (disk)** | **~306–327** | **79%** | Disk I/O bound; slowest TP rank = 327s | +| KV Cache allocation | ~0.5 | 0.1% | 194,510 tokens | +| DeepGEMM JIT warmup | ~23.1 | 5.9% | Two rounds of FP8 GEMM kernel JIT | +| Capture CUDA graph | ~34.9 | 8.9% | 12 batch sizes | +| Server ready | ~3.4 | 0.9% | Tree cache init, warmup requests | +| **Total** | **~390** | | **~6.5 minutes** | + +The bottleneck is clear: **weight loading from disk accounts for 79% of startup time**. For a 235B FP8 model, each TP rank reads ~60GB of safetensors from disk, deserializes, applies TP sharding, and runs post-quantization transforms (FP8 quantization, weight repacking). This work is **repeated identically on every restart**, even though the resulting GPU tensors are deterministic and often already present in GPU memory. + +Can we avoid reloading from disk every time? The answer is **yes** — by keeping weights in GPU memory across engine restarts. + +## Design + +### Core Idea: Persistent Weight Cache via CUDA IPC + +The Weight Cache Daemon is a persistent GPU process that holds post-quantized, TP-sharded weights in GPU memory. On engine restart, the new engine process maps weights from the daemon via **CUDA IPC zero-copy** — no disk I/O, no deserialization, no quantization. + +``` +┌─ GPU i ────────────────────────────────────────────────────┐ +│ │ +│ ┌───────────────────┐ cudaIpcMemHandle ┌─────────┐ │ +│ │ Weight Cache │ ──────────────────────► │ Engine │ │ +│ │ Daemon (rank i) │ (zero-copy) │ Rank i │ │ +│ │ │ │ │ │ +│ │ Holds: │ │ │ │ +│ │ • TP-sharded │ │ │ │ +│ │ weights (fp8) │ │ │ │ +│ │ • weight_scale │ │ │ │ +│ │ • workspace │ │ │ │ +│ │ • all post-quant │ │ │ │ +│ │ params/buffers │ │ │ │ +│ └───────────────────┘ └─────────┘ │ +│ │ +└────────────────────────────────────────────────────────────┘ + +Coordination: Unix Socket /tmp/sglang_weight_cache_gpu{i}.sock +``` + +Each GPU runs **one daemon process** for its TP rank. The daemon: + +1. Loads model weights from disk (full pipeline: disk → TP shard → quantize → repack). +2. Exports every parameter and buffer in `model.state_dict()` as CUDA IPC handles. +3. Records a `CacheConfig` fingerprint (model path, TP/DP size, quant config hash, dtype). +4. Serves IPC handles over a Unix socket to requesting engine processes. + +The engine connects to the daemon, validates config compatibility, and maps weights directly into its address space — the engine and daemon **share the same physical GPU memory** via CUDA IPC. + +### Zero-Copy Loading via Meta Device + +The key to sub-second loading is **zero-copy**: the engine's `param.data` pointer is set directly to the IPC-mapped GPU tensor. No data is copied. + +To achieve this, the engine initializes the model on the **meta device** (no GPU/CPU memory allocation), then replaces each parameter's data pointer with the IPC-mapped tensor. + +Post-quantization parameters (e.g., `weight_scale` from FP8 quantization) that were created by `process_weights_after_loading()` are also cached by the daemon and mapped directly — no re-quantization needed. + +### Config Validation: Safety First + +Any mismatch between the engine's config and the daemon's cached config triggers a **full disk reload**, ensuring correctness: + +| Field | Mismatch Example | Consequence | +|-------|-----------------|-------------| +| `model_path` + `model_arch` | Different model | Wrong weights entirely | +| `tp_size` + `tp_rank` | Different TP sharding | Wrong shard for this rank | +| `dp_size` | Different DP strategy | Incorrect weight distribution | +| `quant_method` + `quant_config_hash` | Different quantization | Unquantized vs FP8 mismatch | +| `dtype` | float16 vs bfloat16 | Type mismatch | + +This is critical for production safety: if an operator changes the model or quantization config, the daemon will detect the mismatch and fall back to disk loading rather than serving incompatible weights. + +### Two Modes: daemon and client + +| Mode | Flow | Weight Load Time | GPU Memory | Use Case | +|------|------|-----------------|------------|----------| +| **daemon** | Engine launches daemon → daemon loads from disk → engine maps IPC | < 1s (after daemon ready) | 1× (shared) | First start; engine manages daemon lifecycle | +| **client** | Connect to pre-running daemon → map IPC | < 1s | 1× (shared) | Engine restart; daemon pre-running | +| **off** | Normal disk loading | 306–327s (235B FP8) | 1× | Default; no cache | + +In **daemon** mode, the engine spawns daemon processes during startup and waits for them to load weights from disk. The first start is still slow (daemons must load from disk), but subsequent restarts are instant. + +In **client** mode, the engine connects to already-running daemons. This is the fast-restart path — the daemon was started earlier and already holds weights in GPU memory. + +### Safety and Robustness + +The Weight Cache Daemon is designed to be **non-intrusive and safe**: + +- **Minimal invasiveness**: The feature is self-contained in `python/sglang/srt/weight_cache/` with minimal changes to the core engine (only `load_model()` dispatch and a CLI flag). +- **Crash-safe**: If the daemon crashes, existing engine instances continue running — they already hold references to the IPC-mapped tensors via CUDA reference counting. GPU memory is only freed when **both** the daemon and the engine exit. +- **Daemon recovery**: If the daemon is restarted, it reloads weights from disk and re-export IPC handles. New engine instances can then connect to the restarted daemon. +- **Fallback on mismatch**: Config mismatches automatically fall back to disk loading (in client mode) or raise an error (in daemon mode, where fallback would cause OOM since both processes share the same GPU). + +## Beyond Restart: Production Scenarios + +The Weight Cache Daemon unlocks production patterns that are impractical with traditional disk-based loading: + +### Multi-Instance Weight Sharing + +A single daemon per GPU holds weights in memory; multiple engine instances (e.g., independent services) map to the same IPC handles via zero-copy. Weights are loaded from disk and quantized **exactly once per GPU**, regardless of how many instances consume them. + +``` +┌─ GPU 0 ────────────────────────────────────────────┐ +│ │ +│ ┌──────────────┐ cudaIpcMemHandle ┌────────┐ │ +│ │ │ ────────────────────► │Engine A│ │ +│ │ Weight │ ────────────────────► │(S = 0) │ │ +│ │ Cache │ └────────┘ │ +│ │ Daemon │ cudaIpcMemHandle ┌────────┐ │ +│ │ │ ────────────────────► │Engine B│ │ +│ │ │ ────────────────────► │(S = 1) │ │ +│ └──────────────┘ └────────┘ │ +│ │ +└────────────────────────────────────────────────────┘ +``` + +### Priority Co-Serving + +Run a high-priority online service and a low-priority batch job on the same GPU, backed by the same weight cache daemon. The low-priority instance can be **evicted and re-spawned in sub-second time** without reloading weights from disk — enabling flexible GPU time-sharing without the usual startup penalty. + +### Active-Standby Failover + +Deploy a standby engine alongside the primary, both backed by the same weight cache daemon. The standby maps weights via zero-copy and stays warm. When the primary fails, the standby takes over in **< 1 second** — no weight loading, no disk I/O. + +This achieves near-zero-downtime failover **without dedicating a full set of GPUs to an idle replica**, avoiding the expensive GPU resource waste of traditional hot-standby deployments. + +``` +┌─ GPU ─────────────────────────────────────────────────────┐ +│ │ +│ ┌──────────────┐ │ +│ │ │ cudaIpcMemHandle ┌───────────────┐ │ +│ │ Weight │ ──────────────────► │ Primary Engine│ │ +│ │ Cache │ │ (serving) │ │ +│ │ Daemon │ cudaIpcMemHandle └───────────────┘ │ +│ │ │ ──────────────────► ┌───────────────┐ │ +│ │ │ │ Standby Engine│ │ +│ └──────────────┘ │ (warm) │ │ +│ └───────────────┘ │ +│ │ +└───────────────────────────────────────────────────────────┘ +``` + +## Performance + +### Weight Loading: Disk vs IPC Zero-Copy + +# Single Node + +| Model | Weight Size | Disk Load (s) | IPC Zero-copy (s) | Speedup | +|-------|-------------|---------------|-------------------|---------| +| ** 235B FP8 ** | **~235 GB** | **~306–327** | **<1** | **~300–500×** | +| ** Ling-2.6-1T ** | ** 1TB ** | **~yyy–yyy** | **<1** | **~yyy–yyy×** | +| ** Kimi K3 ** | ** 1.56 TB** | **~xxx–xxx** | **<1** | **~yyy–yyy×** | + +# Multi-Node + + + +> GPU-internal copy bandwidth: ~500–900 GB/s (H20 HBM). IPC handle mapping: ~10k handles/ms. + + + +## How to Use + +### Launch Weight Cache Daemons - single-node + +One command launches all TP rank daemons: + +```bash +# Standalone daemon launch (one command for all TP ranks): +python -m sglang.srt.weight_cache.daemon \ + --model-path /path/to/model --tp-size 4 \ + --load-format auto --dtype auto --quantization fp8 +``` + +Wait for daemons to become ready (they write a `.ready` file per GPU): + +```bash +# Check readiness: +ls /tmp/sglang_weight_cache_gpu*.ready +``` + +### Start Engine with Weight Cache + +```bash +# Engine Client — connect to pre-running daemons (restart) +python -m sglang.launch_server \ + --model-path /path/to/model --tp-size 4 \ + --weight-cache-mode client +``` + +### Launch Weight Cache Daemons - multi-node + +```bash + +``` + +## Fast Engine Recovery Framework: Roadmap + +The Weight Cache Daemon is Phase 1 of a broader **Fast Recovery Framework** targeting **< 10s cold restarts** and **< 1s warm standby switches**: + +| Phase | Current (s) | Target (s) | Approach | Status | +|-------|-------------|------------|----------|--------| +| **Load weight** | **~306–327** | **< 1** | **Weight Cache Daemon (CUDA IPC)** | **Done (this PR)** | +| Capture CUDA graph | ~34.9 | < 3 | CUDA graph serialization + replay | Planned | +| DeepGEMM JIT warmup | ~23.1 | < 2 | Kernel cache persistence, parallel warmup | Planned | +| Server init & Tokenizer | ~17.3 | < 3 | Lazy tokenizer init, config caching | Planned | +| Init torch distributed | ~4.7 | < 2 | NCCL session reuse, persistent process groups | Planned | +| KV Cache allocation | ~0.5 | < 0.5 | kvcache reuse | Planned | +| Server ready | ~3.4 | < 1 | Skip warmup requests on restart | Planned | +| **Total (single-node)** | **~390** | **< 10** | | | + +More models support are also on the way. + +## Acknowledgements + +**AntGroup Bailing Infra Team**: Michael Qiu qiudayu.qdy@antgroup.com + +**Alibaba** Siyu Liu liusy58@smail.nju.edu.cn + +**SGLang Team** From 39093d49dd7551e7336dd8104f9553df831c6cb5 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Tue, 28 Jul 2026 23:29:50 +0800 Subject: [PATCH 02/19] fixes --- blog/2026-07-28-sglang-fast-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index ebc4edaaa..0ee276553 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -1,6 +1,6 @@ --- title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" -author: "AntGroup Bailing Team, Ailibaba xxx Team, SGLang Team" +author: "AntGroup Bailing Infra Team, Ailibaba xxx Team, SGLang Team" date: "July 28, 2026" previewImg: /images/blog/sglang-fast-recovery/preview.png --- From b54b8698a7a39e2ce91d46d040f7e9a9ce51f7f5 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Tue, 28 Jul 2026 23:39:52 +0800 Subject: [PATCH 03/19] fixes --- blog/2026-07-28-sglang-fast-recovery.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 0ee276553..8ed235a4d 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -7,9 +7,9 @@ previewImg: /images/blog/sglang-fast-recovery/preview.png ## TL;DR -> We introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from **minutes to sub-second**, and total engine restart time from **6.5 minutes to 1.3 minutes** on Qwen3-235B FP8. -> -> The Weight Cache Daemon is the first phase of our **Fast Recovery Framework**, which targets **< 10 seconds warm restarts** and **< 1 second warm standby switches** for production LLM serving. +We introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from **minutes to sub-second**, and total engine restart time from **6.5 minutes to 1.3 minutes** on Qwen3-235B FP8. + +The Weight Cache Daemon is the first phase of our **Fast Recovery Framework**, which targets **< 10 seconds warm restarts** and **< 1 second warm standby switches** for production LLM serving. Key results: @@ -187,11 +187,11 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU # Multi-Node - +**PLACEHOLDER** -> GPU-internal copy bandwidth: ~500–900 GB/s (H20 HBM). IPC handle mapping: ~10k handles/ms. +GPU-internal copy bandwidth: ~500–900 GB/s (H20 HBM). IPC handle mapping: ~10k handles/ms. - +**PLACEHOLDER Performance benchmark picture** ## How to Use From 9355dc5c01e3f63cfa447e9ee033f727110de748 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Tue, 28 Jul 2026 23:51:29 +0800 Subject: [PATCH 04/19] fixes --- blog/2026-07-28-sglang-fast-recovery.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 8ed235a4d..1ead77a96 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -7,13 +7,15 @@ previewImg: /images/blog/sglang-fast-recovery/preview.png ## TL;DR -We introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from **minutes to sub-second**, and total engine restart time from **6.5 minutes to 1.3 minutes** on Qwen3-235B FP8. +Nowadays, SOTA models are getting much bigger. For example, the Ling-2.6-1T model released by the Bailing Team has 1T parameters, and reloading the model service after a crash is very expensive. +Therefore, we introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. +This reduces weight loading from minutes to sub-second times, and total engine restart time from xx minutes to xx minutes on Ling-2.6-1T. The Weight Cache Daemon is the first phase of our **Fast Recovery Framework**, which targets **< 10 seconds warm restarts** and **< 1 second warm standby switches** for production LLM serving. Key results: -1. **Weight loading: ~310s → ~0.63s** — a **~500× speedup**, eliminating 79% of startup time based on qwen3-235B model. +1. **Weight loading: ~xxxs → ~0.xxs** — a **~500× speedup**, eliminating 79% of startup time based on Ling-2.6-1T model. 2. **Total startup: 6.5min → 1.3min** — an **80% reduction** in end-to-end engine boot time. 3. **Multi-instance weight sharing** — multiple engine instances on the same GPU map to the same IPC handles, eliminating redundant disk I/O and post-quantization transforms. 4. **Active-standby failover in < 1 second** — standby engines share weights via zero-copy, enabling near-zero-downtime failover without dedicating full GPUs to idle replicas. @@ -21,7 +23,7 @@ Key results: ## Background -As LLM models grow larger — 235B, 1T, and 2.8T of newerly released Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Qwen3-235B FP8 instance on 4×H20 GPUs takes **~6.5 minutes** just to become ready to serve. In production, this means: +As LLM models grow larger — Qwen 235B, Ling-2.6-1T, and 2.8T of newerly released Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Qwen3-235B FP8 instance on 4×H20 GPUs takes **~6.5 minutes** just to become ready to serve. In production, this means: - **P99 tail latency spikes** during restarts — all in-flight requests fail or queue indefinitely. - **Reduced availability** — multi-minute recovery windows violate SLA targets. From 3926da36c66e49820d455934affdb2145462ac4b Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Tue, 28 Jul 2026 23:57:34 +0800 Subject: [PATCH 05/19] fixes --- blog/2026-07-28-sglang-fast-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 1ead77a96..96066bc3c 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -251,6 +251,6 @@ More models support are also on the way. **AntGroup Bailing Infra Team**: Michael Qiu qiudayu.qdy@antgroup.com -**Alibaba** Siyu Liu liusy58@smail.nju.edu.cn +**Alibaba**: Siyu Liu liusy58@smail.nju.edu.cn **SGLang Team** From 13a77441010eec8cdbd47d7a27da393f381908b8 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Tue, 28 Jul 2026 23:58:54 +0800 Subject: [PATCH 06/19] Fixes --- blog/2026-07-28-sglang-fast-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 96066bc3c..8b861d76b 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -7,11 +7,11 @@ previewImg: /images/blog/sglang-fast-recovery/preview.png ## TL;DR -Nowadays, SOTA models are getting much bigger. For example, the Ling-2.6-1T model released by the Bailing Team has 1T parameters, and reloading the model service after a crash is very expensive. +Nowadays, SOTA models are getting much bigger. For example, the **Ling-2.6-1T** model released by the Bailing Team has 1T parameters, and reloading the model service after a crash is very expensive. Therefore, we introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from minutes to sub-second times, and total engine restart time from xx minutes to xx minutes on Ling-2.6-1T. -The Weight Cache Daemon is the first phase of our **Fast Recovery Framework**, which targets **< 10 seconds warm restarts** and **< 1 second warm standby switches** for production LLM serving. +The Weight Cache Daemon is the first phase of our **Fast Egnine Recovery Framework**, which targets **< 10 seconds warm restarts** and **< 1 second warm standby switches** for production LLM serving. Key results: From dd0481e54a5c56e98a89e3f1fee4de7b9a626b60 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Wed, 29 Jul 2026 00:01:32 +0800 Subject: [PATCH 07/19] fixes --- blog/2026-07-28-sglang-fast-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 8b861d76b..99777bc0c 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -179,7 +179,7 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU ### Weight Loading: Disk vs IPC Zero-Copy -# Single Node +#### Single Node | Model | Weight Size | Disk Load (s) | IPC Zero-copy (s) | Speedup | |-------|-------------|---------------|-------------------|---------| @@ -187,7 +187,7 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU | ** Ling-2.6-1T ** | ** 1TB ** | **~yyy–yyy** | **<1** | **~yyy–yyy×** | | ** Kimi K3 ** | ** 1.56 TB** | **~xxx–xxx** | **<1** | **~yyy–yyy×** | -# Multi-Node +#### Multi-Node **PLACEHOLDER** From 918f8d5b120c63aceafd131401833050dfce3d2f Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Wed, 29 Jul 2026 00:08:17 +0800 Subject: [PATCH 08/19] fixes --- blog/2026-07-28-sglang-fast-recovery.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 99777bc0c..3b8b16bde 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -179,6 +179,8 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU ### Weight Loading: Disk vs IPC Zero-Copy +GPU-internal copy bandwidth: ~500–900 GB/s (H20 HBM). IPC handle mapping: ~10k handles/ms. + #### Single Node | Model | Weight Size | Disk Load (s) | IPC Zero-copy (s) | Speedup | @@ -191,7 +193,7 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU **PLACEHOLDER** -GPU-internal copy bandwidth: ~500–900 GB/s (H20 HBM). IPC handle mapping: ~10k handles/ms. +#### Performance Chart **PLACEHOLDER Performance benchmark picture** From 56317c4d1b99ba2543866896676aa8eed942c0eb Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Thu, 30 Jul 2026 09:40:35 +0800 Subject: [PATCH 09/19] Fixes --- blog/2026-07-28-sglang-fast-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 3b8b16bde..595cc2bf4 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -1,6 +1,6 @@ --- title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" -author: "AntGroup Bailing Infra Team, Ailibaba xxx Team, SGLang Team" +author: "AntGroup AntLing Infra Team, Ailibaba xxx Team, SGLang Team" date: "July 28, 2026" previewImg: /images/blog/sglang-fast-recovery/preview.png --- @@ -251,7 +251,7 @@ More models support are also on the way. ## Acknowledgements -**AntGroup Bailing Infra Team**: Michael Qiu qiudayu.qdy@antgroup.com +**AntLing Infra Team, AntGroup**: Michael Qiu qiudayu.qdy@antgroup.com **Alibaba**: Siyu Liu liusy58@smail.nju.edu.cn From 9737c2f8002db2592488ebfe07a25096a67d4936 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Thu, 30 Jul 2026 09:52:48 +0800 Subject: [PATCH 10/19] fix --- blog/2026-07-28-sglang-fast-recovery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 595cc2bf4..e52f0966b 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -1,6 +1,6 @@ --- title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" -author: "AntGroup AntLing Infra Team, Ailibaba xxx Team, SGLang Team" +author: "Ant Ling Infra Team, Ailibaba xxx Team, SGLang Team" date: "July 28, 2026" previewImg: /images/blog/sglang-fast-recovery/preview.png --- @@ -251,7 +251,7 @@ More models support are also on the way. ## Acknowledgements -**AntLing Infra Team, AntGroup**: Michael Qiu qiudayu.qdy@antgroup.com +**Ant Ling Infra Team, Ant Group**: Michael Qiu qiudayu.qdy@antgroup.com **Alibaba**: Siyu Liu liusy58@smail.nju.edu.cn From 14aa16d995479ba933e57bb028944f7d0bd73a3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A2=89=E6=B2=86?= Date: Sat, 1 Aug 2026 23:50:38 +0800 Subject: [PATCH 11/19] fix --- blog/2026-07-28-sglang-fast-recovery.md | 45 ++++++++++++++----------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index e52f0966b..2ac58d761 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -1,21 +1,19 @@ --- title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" -author: "Ant Ling Infra Team, Ailibaba xxx Team, SGLang Team" +author: "Ant Ling Infra Team (Ant Group), Alibaba, SGLang Team" date: "July 28, 2026" previewImg: /images/blog/sglang-fast-recovery/preview.png --- ## TL;DR -Nowadays, SOTA models are getting much bigger. For example, the **Ling-2.6-1T** model released by the Bailing Team has 1T parameters, and reloading the model service after a crash is very expensive. -Therefore, we introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. -This reduces weight loading from minutes to sub-second times, and total engine restart time from xx minutes to xx minutes on Ling-2.6-1T. +Nowadays, SOTA models are getting much bigger and reloading the model service after a crash is very expensive. Therefore, we introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from minutes to sub-second times. -The Weight Cache Daemon is the first phase of our **Fast Egnine Recovery Framework**, which targets **< 10 seconds warm restarts** and **< 1 second warm standby switches** for production LLM serving. +The Weight Cache Daemon is the first phase of our **Fast Engine Recovery Framework**, which targets **< 10 second cold restarts** and **< 1 second warm standby switches** for production LLM serving. Key results: -1. **Weight loading: ~xxxs → ~0.xxs** — a **~500× speedup**, eliminating 79% of startup time based on Ling-2.6-1T model. +1. **Weight loading: ~306–327s → ~0.63s** — a **~500× speedup**, eliminating 79% of startup time based on the Qwen3-235B FP8 model. 2. **Total startup: 6.5min → 1.3min** — an **80% reduction** in end-to-end engine boot time. 3. **Multi-instance weight sharing** — multiple engine instances on the same GPU map to the same IPC handles, eliminating redundant disk I/O and post-quantization transforms. 4. **Active-standby failover in < 1 second** — standby engines share weights via zero-copy, enabling near-zero-downtime failover without dedicating full GPUs to idle replicas. @@ -23,7 +21,7 @@ Key results: ## Background -As LLM models grow larger — Qwen 235B, Ling-2.6-1T, and 2.8T of newerly released Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Qwen3-235B FP8 instance on 4×H20 GPUs takes **~6.5 minutes** just to become ready to serve. In production, this means: +As LLM models grow larger — Qwen3-235B, Ling-2.6-1T, and the newly released 2.8T Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Qwen3-235B FP8 instance on 4×H20 GPUs takes **~6.5 minutes** just to become ready to serve. In production, this means: - **P99 tail latency spikes** during restarts — all in-flight requests fail or queue indefinitely. - **Reduced availability** — multi-minute recovery windows violate SLA targets. @@ -71,7 +69,8 @@ The Weight Cache Daemon is a persistent GPU process that holds post-quantized, T │ │ └────────────────────────────────────────────────────────────┘ -Coordination: Unix Socket /tmp/sglang_weight_cache_gpu{i}.sock +Coordination: Unix Socket /tmp/sglang_weight_cache_rank{i}.sock +(global rank = tp_size × pp_rank + tp_rank, unique across PP stages and nodes) ``` Each GPU runs **one daemon process** for its TP rank. The daemon: @@ -97,15 +96,21 @@ Any mismatch between the engine's config and the daemon's cached config triggers | Field | Mismatch Example | Consequence | |-------|-----------------|-------------| -| `model_path` + `model_arch` | Different model | Wrong weights entirely | +| `model_path` + `model_arch` + `revision` | Different model or revision | Wrong weights entirely | | `tp_size` + `tp_rank` | Different TP sharding | Wrong shard for this rank | -| `dp_size` | Different DP strategy | Incorrect weight distribution | +| `pp_size` + `pp_rank` | Different PP partitioning | Wrong layers for this pipeline stage | +| `dp_size` + `ep_size` | Different DP/EP strategy | Incorrect weight distribution | | `quant_method` + `quant_config_hash` | Different quantization | Unquantized vs FP8 mismatch | | `dtype` | float16 vs bfloat16 | Type mismatch | +| `device_capability` + `torch_version` | Different GPU arch or torch version | Weights map cleanly but serve wrong numerics | -This is critical for production safety: if an operator changes the model or quantization config, the daemon will detect the mismatch and fall back to disk loading rather than serving incompatible weights. +The last two fields form an **environment stamp**: a daemon and a client that ran different post-processing branches (different compute capability or torch/kernel version) can produce weights that map cleanly over IPC yet serve garbage — stamping the environment into `CacheConfig` turns that into a clean mismatch. -### Two Modes: daemon and client +This is critical for production safety: if an operator changes the model or quantization config, the engine will detect the mismatch and fall back to disk loading rather than mapping incompatible weights. + +On top of config validation, quantization methods are gated by an **IPC allowlist**. CUDA IPC zero-copy exports only raw tensor data, so it is correct only when the entire effect of `process_weights_after_loading()` is captured by that data. Methods that stamp Python-side metadata or repack/transpose weights (per-tensor FP8, Marlin, AWQ/GPTQ) would silently serve wrong numerics — they raise a hard error instead. Currently verified: **unquantized** and **block-wise FP8** (`weight_block_size` set); more methods will be added after end-to-end verification. + +### Three Modes: daemon, client, and off | Mode | Flow | Weight Load Time | GPU Memory | Use Case | |------|------|-----------------|------------|----------| @@ -139,11 +144,11 @@ A single daemon per GPU holds weights in memory; multiple engine instances (e.g. │ │ │ ┌──────────────┐ cudaIpcMemHandle ┌────────┐ │ │ │ │ ────────────────────► │Engine A│ │ -│ │ Weight │ ────────────────────► │(S = 0) │ │ +│ │ Weight │ ────────────────────► │(inst 0)│ │ │ │ Cache │ └────────┘ │ │ │ Daemon │ cudaIpcMemHandle ┌────────┐ │ │ │ │ ────────────────────► │Engine B│ │ -│ │ │ ────────────────────► │(S = 1) │ │ +│ │ │ ────────────────────► │(inst 1)│ │ │ └──────────────┘ └────────┘ │ │ │ └────────────────────────────────────────────────────┘ @@ -185,9 +190,9 @@ GPU-internal copy bandwidth: ~500–900 GB/s (H20 HBM). IPC handle mapping: ~10k | Model | Weight Size | Disk Load (s) | IPC Zero-copy (s) | Speedup | |-------|-------------|---------------|-------------------|---------| -| ** 235B FP8 ** | **~235 GB** | **~306–327** | **<1** | **~300–500×** | -| ** Ling-2.6-1T ** | ** 1TB ** | **~yyy–yyy** | **<1** | **~yyy–yyy×** | -| ** Kimi K3 ** | ** 1.56 TB** | **~xxx–xxx** | **<1** | **~yyy–yyy×** | +| **Qwen3-235B FP8** | **~235 GB** | **~306–327** | **<1** | **~500×** | +| **Ling-2.6-1T** | **~1 TB** | **~yyy–yyy** | **<1** | **~yyy–yyy×** | +| **Kimi K3** | **~1.56 TB** | **~xxx–xxx** | **<1** | **~yyy–yyy×** | #### Multi-Node @@ -210,11 +215,11 @@ python -m sglang.srt.weight_cache.daemon \ --load-format auto --dtype auto --quantization fp8 ``` -Wait for daemons to become ready (they write a `.ready` file per GPU): +Wait for daemons to become ready (they write a `.ready` file per rank): ```bash # Check readiness: -ls /tmp/sglang_weight_cache_gpu*.ready +ls /tmp/sglang_weight_cache_rank*.ready ``` ### Start Engine with Weight Cache @@ -247,7 +252,7 @@ The Weight Cache Daemon is Phase 1 of a broader **Fast Recovery Framework** targ | Server ready | ~3.4 | < 1 | Skip warmup requests on restart | Planned | | **Total (single-node)** | **~390** | **< 10** | | | -More models support are also on the way. +Support for more models is also on the way. ## Acknowledgements From 0b86cf5d99acfe349f030ea750e595284a726f15 Mon Sep 17 00:00:00 2001 From: liusy58 Date: Sun, 2 Aug 2026 15:24:32 +0800 Subject: [PATCH 12/19] add --- blog/2026-07-28-sglang-fast-recovery.md | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 2ac58d761..445effe01 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -233,8 +233,43 @@ python -m sglang.launch_server \ ### Launch Weight Cache Daemons - multi-node +In a multi-node deployment, each node runs its own daemon for its local TP ranks. All daemons +join the same distributed group, so `--nnodes`, `--node-rank`, and `--dist-init-method` must be +consistent across nodes, with `$MASTER_ADDR` pointing at node 0: + +```bash +# Daemon on node 0: +python -m sglang.srt.weight_cache.daemon \ + --model-path /path/to/model --tp-size 2 \ + --load-format auto --dtype auto --quantization fp8 \ + --nnodes 2 --node-rank 0 \ + --dist-init-method tcp://$MASTER_ADDR:29500 + +# Daemon on node 1: +python -m sglang.srt.weight_cache.daemon \ + --model-path /path/to/model --tp-size 2 \ + --load-format auto --dtype auto --quantization fp8 \ + --nnodes 2 --node-rank 1 \ + --dist-init-method tcp://$MASTER_ADDR:29500 +``` + +Once every node reports its daemons ready, start the engine clients. They use a separate +rendezvous port (`29600`) from the daemons (`29500`): + ```bash +# Engine client on node 0: +python -m sglang.launch_server \ + --model-path /path/to/model --tp-size 2 \ + --weight-cache-mode client \ + --nnodes 2 --node-rank 0 \ + --dist-init-addr $MASTER_ADDR:29600 --port 34000 +# Engine client on node 1: +python -m sglang.launch_server \ + --model-path /path/to/model --tp-size 2 \ + --weight-cache-mode client \ + --nnodes 2 --node-rank 1 \ + --dist-init-addr $MASTER_ADDR:29600 ``` ## Fast Engine Recovery Framework: Roadmap From 2d15d65fbed98f41cf5c87d180ad7e6b99218ef2 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Wed, 5 Aug 2026 18:20:56 +0800 Subject: [PATCH 13/19] Add Ling speedup data --- blog/2026-07-28-sglang-fast-recovery.md | 33 +++++++++++-------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 445effe01..e5e975fc9 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -13,35 +13,35 @@ The Weight Cache Daemon is the first phase of our **Fast Engine Recovery Framewo Key results: -1. **Weight loading: ~306–327s → ~0.63s** — a **~500× speedup**, eliminating 79% of startup time based on the Qwen3-235B FP8 model. -2. **Total startup: 6.5min → 1.3min** — an **80% reduction** in end-to-end engine boot time. +1. **Weight loading: ~495s → ~0.63s** — a **~785× speedup**, eliminating 93.2% of startup time based on the Ling-2.6-1T FP8 model. +2. **Total startup: 8.8min → 1.3min** — an **80% reduction** in end-to-end engine boot time. 3. **Multi-instance weight sharing** — multiple engine instances on the same GPU map to the same IPC handles, eliminating redundant disk I/O and post-quantization transforms. 4. **Active-standby failover in < 1 second** — standby engines share weights via zero-copy, enabling near-zero-downtime failover without dedicating full GPUs to idle replicas. 5. **Multi-node-instance weight sharing** - support multi-node mode for large models ## Background -As LLM models grow larger — Qwen3-235B, Ling-2.6-1T, and the newly released 2.8T Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Qwen3-235B FP8 instance on 4×H20 GPUs takes **~6.5 minutes** just to become ready to serve. In production, this means: +As LLM models grow larger — Qwen3-235B, Ling-2.6-1T, and the newly released 2.8T Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Ling-2.6-1T FP8 instance on 8×H20-3e GPUs takes **~8.52 minutes** just to become ready to serve, weights stay in 3.5T NVME SSD. In production, this means: - **P99 tail latency spikes** during restarts — all in-flight requests fail or queue indefinitely. - **Reduced availability** — multi-minute recovery windows violate SLA targets. - **Operational friction** — rolling updates, config changes, and failure recovery are all bottlenecked by the restart cycle. - **GPU resource waste** — traditional active-standby deployments dedicate a full set of GPUs to idle replicas, doubling hardware cost for failover. -Where does the time go? We profiled a complete SGLang engine startup for Qwen3-235B FP8: +Where does the time go? We profiled a complete SGLang engine startup for Ling-2.6-1T FP8: | Phase | Time (s) | Percentage | Notes | |-------|----------|------------|-------| -| Server init & Tokenizer | ~17.3 | 4.4% | ServerArgs parsing, tokenizer loading | -| Init torch distributed | ~4.7 | 1.2% | NCCL init, 4-card | -| **Load weight (disk)** | **~306–327** | **79%** | Disk I/O bound; slowest TP rank = 327s | -| KV Cache allocation | ~0.5 | 0.1% | 194,510 tokens | -| DeepGEMM JIT warmup | ~23.1 | 5.9% | Two rounds of FP8 GEMM kernel JIT | -| Capture CUDA graph | ~34.9 | 8.9% | 12 batch sizes | -| Server ready | ~3.4 | 0.9% | Tree cache init, warmup requests | -| **Total** | **~390** | | **~6.5 minutes** | +| Pre-init & ServerArgs | ~1 | 0.2% | Pre-init and ServerArgs parsing | +| Tokenizer init | ~13 | 2.4% | load and init tokenizer | +| Init torch distributed | ~5 | 0.9% | NCCL 2.28.9,8 卡 H20,NVLink mesh 370.8 GB/s,P2P/IPC;slowest rank TP1=5.19s | +| Load weight (disk) | ~495 | 93.2% | 161 shard,W8A8 FP8 (CompressedTensorsW8A8Fp8MoE),slowest rank=495.3s, 120GB per card; Disk I/O bound | +| Cache allocation (KV+Mamba) | ~1 | 0.2% | KV:553,599 tokens/5.94GB bf16;Mamba SSM state:5.33GB,max_mamba_cache_size=155 | +| Capture CUDA graph | ~7.7 | 1.5% | only 3 decode BS [1,2,4] | +| Server ready | ~4 | 0.8% | Unified RadixTree init, HTTP/uvicorn startup, warmup requests | +| **Total** | **~531** | | **~8.8 minutes** -The bottleneck is clear: **weight loading from disk accounts for 79% of startup time**. For a 235B FP8 model, each TP rank reads ~60GB of safetensors from disk, deserializes, applies TP sharding, and runs post-quantization transforms (FP8 quantization, weight repacking). This work is **repeated identically on every restart**, even though the resulting GPU tensors are deterministic and often already present in GPU memory. +The bottleneck is clear: **weight loading from disk accounts for 93.2% of startup time**. For Ling-2.6-1T FP8 model, each TP rank reads ~120GB of safetensors from disk, deserializes, applies TP sharding, and runs post-quantization transforms (FP8 quantization, weight repacking). This work is **repeated identically on every restart**, even though the resulting GPU tensors are deterministic and often already present in GPU memory. Can we avoid reloading from disk every time? The answer is **yes** — by keeping weights in GPU memory across engine restarts. @@ -116,7 +116,7 @@ On top of config validation, quantization methods are gated by an **IPC allowlis |------|------|-----------------|------------|----------| | **daemon** | Engine launches daemon → daemon loads from disk → engine maps IPC | < 1s (after daemon ready) | 1× (shared) | First start; engine manages daemon lifecycle | | **client** | Connect to pre-running daemon → map IPC | < 1s | 1× (shared) | Engine restart; daemon pre-running | -| **off** | Normal disk loading | 306–327s (235B FP8) | 1× | Default; no cache | +| **off** | Normal disk loading | 405–411s (Ling-2.6-1T FP8) | 1× | Default; no cache | In **daemon** mode, the engine spawns daemon processes during startup and waits for them to load weights from disk. The first start is still slow (daemons must load from disk), but subsequent restarts are instant. @@ -184,15 +184,12 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU ### Weight Loading: Disk vs IPC Zero-Copy -GPU-internal copy bandwidth: ~500–900 GB/s (H20 HBM). IPC handle mapping: ~10k handles/ms. - #### Single Node | Model | Weight Size | Disk Load (s) | IPC Zero-copy (s) | Speedup | |-------|-------------|---------------|-------------------|---------| | **Qwen3-235B FP8** | **~235 GB** | **~306–327** | **<1** | **~500×** | -| **Ling-2.6-1T** | **~1 TB** | **~yyy–yyy** | **<1** | **~yyy–yyy×** | -| **Kimi K3** | **~1.56 TB** | **~xxx–xxx** | **<1** | **~yyy–yyy×** | +| **Ling-2.6-1T** | **~1 TB** | **~405–411** | **<1** | **~780×** | #### Multi-Node From 708d88611f60b282b4c763b1d758f409c1114f99 Mon Sep 17 00:00:00 2001 From: Mike_Qiu Date: Wed, 5 Aug 2026 18:44:12 +0800 Subject: [PATCH 14/19] Fixes --- blog/2026-07-28-sglang-fast-recovery.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index e5e975fc9..86a139abd 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -13,8 +13,8 @@ The Weight Cache Daemon is the first phase of our **Fast Engine Recovery Framewo Key results: -1. **Weight loading: ~495s → ~0.63s** — a **~785× speedup**, eliminating 93.2% of startup time based on the Ling-2.6-1T FP8 model. -2. **Total startup: 8.8min → 1.3min** — an **80% reduction** in end-to-end engine boot time. +1. **Weight loading: ~495s → ~0.63s** — a **~785× speedup**, based on the Ling-2.6-1T FP8 model. +2. **Total startup: 8.8min → 0.528min** — an **93.9% reduction** in end-to-end engine boot time. 3. **Multi-instance weight sharing** — multiple engine instances on the same GPU map to the same IPC handles, eliminating redundant disk I/O and post-quantization transforms. 4. **Active-standby failover in < 1 second** — standby engines share weights via zero-copy, enabling near-zero-downtime failover without dedicating full GPUs to idle replicas. 5. **Multi-node-instance weight sharing** - support multi-node mode for large models @@ -35,11 +35,11 @@ Where does the time go? We profiled a complete SGLang engine startup for Ling-2. | Pre-init & ServerArgs | ~1 | 0.2% | Pre-init and ServerArgs parsing | | Tokenizer init | ~13 | 2.4% | load and init tokenizer | | Init torch distributed | ~5 | 0.9% | NCCL 2.28.9,8 卡 H20,NVLink mesh 370.8 GB/s,P2P/IPC;slowest rank TP1=5.19s | -| Load weight (disk) | ~495 | 93.2% | 161 shard,W8A8 FP8 (CompressedTensorsW8A8Fp8MoE),slowest rank=495.3s, 120GB per card; Disk I/O bound | +| Load weight (disk) | ~495 | 93.9% | 161 shard,W8A8 FP8 (CompressedTensorsW8A8Fp8MoE),slowest rank=495.3s, 120GB per card; Disk I/O bound | | Cache allocation (KV+Mamba) | ~1 | 0.2% | KV:553,599 tokens/5.94GB bf16;Mamba SSM state:5.33GB,max_mamba_cache_size=155 | | Capture CUDA graph | ~7.7 | 1.5% | only 3 decode BS [1,2,4] | | Server ready | ~4 | 0.8% | Unified RadixTree init, HTTP/uvicorn startup, warmup requests | -| **Total** | **~531** | | **~8.8 minutes** +| **Total** | **~527** | | **~8.8 minutes** The bottleneck is clear: **weight loading from disk accounts for 93.2% of startup time**. For Ling-2.6-1T FP8 model, each TP rank reads ~120GB of safetensors from disk, deserializes, applies TP sharding, and runs post-quantization transforms (FP8 quantization, weight repacking). This work is **repeated identically on every restart**, even though the resulting GPU tensors are deterministic and often already present in GPU memory. From 90ad8d7d74e73319ae2c33173b873f7c8feefb88 Mon Sep 17 00:00:00 2001 From: liusy58 Date: Sat, 8 Aug 2026 17:37:42 +0800 Subject: [PATCH 15/19] fix --- blog/2026-07-28-sglang-fast-recovery.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 86a139abd..22577cc81 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -286,6 +286,20 @@ The Weight Cache Daemon is Phase 1 of a broader **Fast Recovery Framework** targ Support for more models is also on the way. +## Public Roadmap + +The Weight Cache Daemon is just the **first step** — there is still a lot to build, and we are excited about the road ahead. Phase 1 today covers TP + PP, single- and multi-node launch, per-GPU zero-copy CUDA IPC, and unquantized plus block-wise FP8. Beyond that, many high-impact directions remain open: + +- **More models & quantization**: extend the IPC allowlist beyond block-wise FP8 (per-tensor FP8, INT8, MXFP8, NVFP4, AWQ/GPTQ, ...) and cover more architectures, including multimodal and LoRA base weights. +- **DP/EP & multi-node**: DP/EP shard keying and cross-node daemon coordination, lifecycle management, and failover. +- **Weight update without reload**: in-place weight refresh for RL / online updates, with the daemon as the delivery agent. +- **Cross-GPU & fleet sharing**: peer-copy and fleet-fill so a cluster cold start pays roughly one disk read per shard group. +- **KV cache restore**: preserve and remap KV cache across restarts / failover (KV reuse, handoff to standby) so in-flight context survives recovery instead of being recomputed from scratch. +- **Rest of the startup path**: CUDA graph serialization, kernel-warmup persistence, and faster server / distributed init to reach the **< 10s** cold-restart goal. +- **Ops & reliability**: metrics, status tooling, security hardening, and CI coverage. + +This is very much a community effort. The full plan is tracked publicly in [sgl-project/sglang#33522](https://github.com/sgl-project/sglang/issues/33522) — **contributions and feedback are very welcome**, and there is plenty of impactful work to pick up. + ## Acknowledgements **Ant Ling Infra Team, Ant Group**: Michael Qiu qiudayu.qdy@antgroup.com From aef698f8ca303951b4a0eafe742b7f76f67d80b2 Mon Sep 17 00:00:00 2001 From: liusy58 Date: Sat, 8 Aug 2026 18:19:59 +0800 Subject: [PATCH 16/19] update --- blog/2026-07-28-sglang-fast-recovery.md | 61 ++--------- .../sglang-fast-recovery/active-standby.svg | 67 ++++++++++++ .../sglang-fast-recovery/architecture.svg | 100 +++++++++++++++++ .../sglang-fast-recovery/multi-instance.svg | 64 +++++++++++ .../blog/sglang-fast-recovery/preview.png | Bin 0 -> 267066 bytes .../blog/sglang-fast-recovery/preview.svg | 88 +++++++++++++++ .../blog/sglang-fast-recovery/results.svg | 102 ++++++++++++++++++ 7 files changed, 428 insertions(+), 54 deletions(-) create mode 100644 public/images/blog/sglang-fast-recovery/active-standby.svg create mode 100644 public/images/blog/sglang-fast-recovery/architecture.svg create mode 100644 public/images/blog/sglang-fast-recovery/multi-instance.svg create mode 100644 public/images/blog/sglang-fast-recovery/preview.png create mode 100644 public/images/blog/sglang-fast-recovery/preview.svg create mode 100644 public/images/blog/sglang-fast-recovery/results.svg diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 22577cc81..33fbbeeef 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -51,27 +51,7 @@ Can we avoid reloading from disk every time? The answer is **yes** — by keepin The Weight Cache Daemon is a persistent GPU process that holds post-quantized, TP-sharded weights in GPU memory. On engine restart, the new engine process maps weights from the daemon via **CUDA IPC zero-copy** — no disk I/O, no deserialization, no quantization. -``` -┌─ GPU i ────────────────────────────────────────────────────┐ -│ │ -│ ┌───────────────────┐ cudaIpcMemHandle ┌─────────┐ │ -│ │ Weight Cache │ ──────────────────────► │ Engine │ │ -│ │ Daemon (rank i) │ (zero-copy) │ Rank i │ │ -│ │ │ │ │ │ -│ │ Holds: │ │ │ │ -│ │ • TP-sharded │ │ │ │ -│ │ weights (fp8) │ │ │ │ -│ │ • weight_scale │ │ │ │ -│ │ • workspace │ │ │ │ -│ │ • all post-quant │ │ │ │ -│ │ params/buffers │ │ │ │ -│ └───────────────────┘ └─────────┘ │ -│ │ -└────────────────────────────────────────────────────────────┘ - -Coordination: Unix Socket /tmp/sglang_weight_cache_rank{i}.sock -(global rank = tp_size × pp_rank + tp_rank, unique across PP stages and nodes) -``` + Each GPU runs **one daemon process** for its TP rank. The daemon: @@ -139,20 +119,7 @@ The Weight Cache Daemon unlocks production patterns that are impractical with tr A single daemon per GPU holds weights in memory; multiple engine instances (e.g., independent services) map to the same IPC handles via zero-copy. Weights are loaded from disk and quantized **exactly once per GPU**, regardless of how many instances consume them. -``` -┌─ GPU 0 ────────────────────────────────────────────┐ -│ │ -│ ┌──────────────┐ cudaIpcMemHandle ┌────────┐ │ -│ │ │ ────────────────────► │Engine A│ │ -│ │ Weight │ ────────────────────► │(inst 0)│ │ -│ │ Cache │ └────────┘ │ -│ │ Daemon │ cudaIpcMemHandle ┌────────┐ │ -│ │ │ ────────────────────► │Engine B│ │ -│ │ │ ────────────────────► │(inst 1)│ │ -│ └──────────────┘ └────────┘ │ -│ │ -└────────────────────────────────────────────────────┘ -``` + ### Priority Co-Serving @@ -164,21 +131,7 @@ Deploy a standby engine alongside the primary, both backed by the same weight ca This achieves near-zero-downtime failover **without dedicating a full set of GPUs to an idle replica**, avoiding the expensive GPU resource waste of traditional hot-standby deployments. -``` -┌─ GPU ─────────────────────────────────────────────────────┐ -│ │ -│ ┌──────────────┐ │ -│ │ │ cudaIpcMemHandle ┌───────────────┐ │ -│ │ Weight │ ──────────────────► │ Primary Engine│ │ -│ │ Cache │ │ (serving) │ │ -│ │ Daemon │ cudaIpcMemHandle └───────────────┘ │ -│ │ │ ──────────────────► ┌───────────────┐ │ -│ │ │ │ Standby Engine│ │ -│ └──────────────┘ │ (warm) │ │ -│ └───────────────┘ │ -│ │ -└───────────────────────────────────────────────────────────┘ -``` + ## Performance @@ -197,7 +150,7 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU #### Performance Chart -**PLACEHOLDER Performance benchmark picture** + ## How to Use @@ -302,8 +255,8 @@ This is very much a community effort. The full plan is tracked publicly in [sgl- ## Acknowledgements -**Ant Ling Infra Team, Ant Group**: Michael Qiu qiudayu.qdy@antgroup.com +**Ant Ling Infra Team, Ant Group**: [Michael Qiu](https://github.com/QiuMike) qiudayu.qdy@antgroup.com -**Alibaba**: Siyu Liu liusy58@smail.nju.edu.cn +**Alibaba**: [Siyu Liu](https://github.com/liusy58) liusy58@smail.nju.edu.cn -**SGLang Team** +**SGLang Team**: [Alex Nails](https://github.com/alexnails) diff --git a/public/images/blog/sglang-fast-recovery/active-standby.svg b/public/images/blog/sglang-fast-recovery/active-standby.svg new file mode 100644 index 000000000..944b1e698 --- /dev/null +++ b/public/images/blog/sglang-fast-recovery/active-standby.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + Active-Standby Failover + standby stays warm via zero-copy and promotes in < 1s — no idle full-GPU replica + + + + GPU + + + + + + Weight Cache + Daemon + one weight copy, shared + + + + + + Primary Engine + serving live traffic + + + + + + Standby Engine + warm · maps weights, no disk + + + + + zero-copy (serving) + zero-copy (warm) + + + + + primary fails → < 1s + + + + + + + Traditional hot standby + dedicates a full 2nd set of GPUs (2× cost) + Weight Cache standby + warm on the same GPU (1× cost) + diff --git a/public/images/blog/sglang-fast-recovery/architecture.svg b/public/images/blog/sglang-fast-recovery/architecture.svg new file mode 100644 index 000000000..7cbdbbe21 --- /dev/null +++ b/public/images/blog/sglang-fast-recovery/architecture.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + Weight Cache Daemon: Zero-Copy Weight Sharing via CUDA IPC + + + + + + + + NVMe SSD + safetensors ~1 TB + + + one-time cold load + disk → TP shard + → quantize → repack + + + + + + + GPU i + + + + + + Weight Cache Daemon + persistent · one per TP rank + + Holds in GPU memory: + • TP-sharded weights (fp8) + • weight_scale + • workspace buffers + • all post-quant params/buffers + Exports every state_dict tensor as IPC handle + + + + + + Engine (rank i) + new / restarted process + + On restart: + • meta-device init (no alloc) + • param.data → IPC tensor + • no disk I/O · no dequant + • sub-second ready + Validates CacheConfig before mapping + + + + + cudaIpcMemHandle + zero-copy + + + + + Unix socket + handshake + + config check + + + + + + Shared physical GPU memory + a single copy of post-quantized, TP-sharded weights — mapped by both processes + freed only when both daemon and engine exit (CUDA IPC refcount) + + + + + owns + maps same region + + + control socket: /tmp/sglang_weight_cache_rank{i}.sock + diff --git a/public/images/blog/sglang-fast-recovery/multi-instance.svg b/public/images/blog/sglang-fast-recovery/multi-instance.svg new file mode 100644 index 000000000..83485b923 --- /dev/null +++ b/public/images/blog/sglang-fast-recovery/multi-instance.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + Multi-Instance Weight Sharing + weights loaded & quantized exactly once per GPU, then shared by every instance via zero-copy + + + + + + + + disk + + load once + + + + GPU 0 + + + + + + Weight Cache Daemon + + one copy of post-quant weights + 1× GPU memory + for N instances + no redundant disk I/O or re-quantization + + + + + + + + Engine A + independent service · inst 0 + Engine B + independent service · inst 1 + Engine C + independent service · inst 2 + + + + + + cudaIpcMemHandle · zero-copy + + + Traditional loading: each instance re-reads and re-quantizes from disk (N× disk I/O, N× GPU memory). + diff --git a/public/images/blog/sglang-fast-recovery/preview.png b/public/images/blog/sglang-fast-recovery/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..ad19c16d14c39caa297004665453eb14c0a1d698 GIT binary patch literal 267066 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

X#GLq%+nc4F!|L&>(-NV66 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�^Z-2=82fwOfuc_kNYb#!^@(40>f!liqmo2q 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

VeaU_dNJKS6;(!q`N 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

9u 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

PxiWPf5{mcps1z~Nf_uV%F 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≪!qm@9|m&V6RrjrBth_$LeaMc6$We$_T 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 + + + + + + + + + + + + + + + + + + + + SGLANG · FAST ENGINE RECOVERY + Weight Cache Daemon + A persistent daemon keeps weights in GPU memory; engines map them zero-copy on restart + + + + GPU i — daemon and engine share one physical copy of the weights + + + + + + + + NVMe SSD + + + + load once + + + + + + Weight Cache Daemon + persistent · survives restarts + holds post-quantized, + TP-sharded weights in GPU memory + + + + CUDA IPC + zero-copy map + + + + + + Restarted Engine + new process · meta-device init + maps weights directly — + no disk I/O, no dequant, ready < 1s + + + + + + + + Shared physical GPU memory — one copy, mapped by both + + + + + + weight load: minutes → < 1s + no reload from disk on restart + + + + + engine startup: − 94% + end-to-end, cold restart + + + SGLang · Ant Group · Alibaba + + diff --git a/public/images/blog/sglang-fast-recovery/results.svg b/public/images/blog/sglang-fast-recovery/results.svg new file mode 100644 index 000000000..a7a560706 --- /dev/null +++ b/public/images/blog/sglang-fast-recovery/results.svg @@ -0,0 +1,102 @@ + + + + + + + + + Results: Weight Load and End-to-End Startup + + + Weight load time · log scale (seconds) + + + + + + + + + + + 0.1 + 1 + 10 + 100 + 1000 + + + + + Disk load · ~1 TB model + Disk load · ~235 GB model + IPC zero-copy (daemon) + + + + + + + + + + ~405 s + ~316 s + < 1 s (~0.63 s) + + + + + + + ~500–780× faster + + + + + + End-to-end engine startup · seconds + + + + + + + + + + + + 0 + 100 + 200 + 300 + 400 + 500 + + + + Cold start (disk load) + Warm restart (Weight Cache) + + + + + + + + ~527 s (8.8 min) + ~32 s (0.53 min) + + + + + + + −94% total boot time + + + Measured on 8×H20-3e (TP8). Weight load is the dominant cost (~94% of cold start); the daemon removes it via CUDA IPC zero-copy. + Cold start still pays disk load once to warm the daemon; every subsequent restart is a sub-second warm restart. + From 44f317538d21ae31fec2ffe914e70ee8b1d47abe Mon Sep 17 00:00:00 2001 From: liusy58 Date: Sat, 8 Aug 2026 18:21:50 +0800 Subject: [PATCH 17/19] update --- blog/2026-07-28-sglang-fast-recovery.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 33fbbeeef..4ba220203 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -144,9 +144,6 @@ This achieves near-zero-downtime failover **without dedicating a full set of GPU | **Qwen3-235B FP8** | **~235 GB** | **~306–327** | **<1** | **~500×** | | **Ling-2.6-1T** | **~1 TB** | **~405–411** | **<1** | **~780×** | -#### Multi-Node - -**PLACEHOLDER** #### Performance Chart From 5d3cadd6cea1eddad37e2d8ad5c96e65501341a3 Mon Sep 17 00:00:00 2001 From: liusy58 Date: Sun, 9 Aug 2026 10:22:32 +0800 Subject: [PATCH 18/19] fix --- blog/2026-07-28-sglang-fast-recovery.md | 5 +- blog/2026-08-09-sglang-fast-recovery.md | 260 ++++++++++++++++++++++++ 2 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 blog/2026-08-09-sglang-fast-recovery.md diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md index 4ba220203..4dd908a3a 100644 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ b/blog/2026-07-28-sglang-fast-recovery.md @@ -1,13 +1,13 @@ --- title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" author: "Ant Ling Infra Team (Ant Group), Alibaba, SGLang Team" -date: "July 28, 2026" +date: "August 9, 2026" previewImg: /images/blog/sglang-fast-recovery/preview.png --- ## TL;DR -Nowadays, SOTA models are getting much bigger and reloading the model service after a crash is very expensive. Therefore, we introduce the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from minutes to sub-second times. +Nowadays, State-of-the-Art (SOTA) models are getting much bigger and reloading the model service after a crash is very expensive. Therefore, we are introducing the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from minutes to seconds. The Weight Cache Daemon is the first phase of our **Fast Engine Recovery Framework**, which targets **< 10 second cold restarts** and **< 1 second warm standby switches** for production LLM serving. @@ -246,6 +246,7 @@ The Weight Cache Daemon is just the **first step** — there is still a lot to b - **Cross-GPU & fleet sharing**: peer-copy and fleet-fill so a cluster cold start pays roughly one disk read per shard group. - **KV cache restore**: preserve and remap KV cache across restarts / failover (KV reuse, handoff to standby) so in-flight context survives recovery instead of being recomputed from scratch. - **Rest of the startup path**: CUDA graph serialization, kernel-warmup persistence, and faster server / distributed init to reach the **< 10s** cold-restart goal. +- **Other hardware backends**: extend this feature to other accelerators that expose similar functionality (AMD and Intel both have comparable IPC mechanisms). - **Ops & reliability**: metrics, status tooling, security hardening, and CI coverage. This is very much a community effort. The full plan is tracked publicly in [sgl-project/sglang#33522](https://github.com/sgl-project/sglang/issues/33522) — **contributions and feedback are very welcome**, and there is plenty of impactful work to pick up. diff --git a/blog/2026-08-09-sglang-fast-recovery.md b/blog/2026-08-09-sglang-fast-recovery.md new file mode 100644 index 000000000..4dd908a3a --- /dev/null +++ b/blog/2026-08-09-sglang-fast-recovery.md @@ -0,0 +1,260 @@ +--- +title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" +author: "Ant Ling Infra Team (Ant Group), Alibaba, SGLang Team" +date: "August 9, 2026" +previewImg: /images/blog/sglang-fast-recovery/preview.png +--- + +## TL;DR + +Nowadays, State-of-the-Art (SOTA) models are getting much bigger and reloading the model service after a crash is very expensive. Therefore, we are introducing the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from minutes to seconds. + +The Weight Cache Daemon is the first phase of our **Fast Engine Recovery Framework**, which targets **< 10 second cold restarts** and **< 1 second warm standby switches** for production LLM serving. + +Key results: + +1. **Weight loading: ~495s → ~0.63s** — a **~785× speedup**, based on the Ling-2.6-1T FP8 model. +2. **Total startup: 8.8min → 0.528min** — an **93.9% reduction** in end-to-end engine boot time. +3. **Multi-instance weight sharing** — multiple engine instances on the same GPU map to the same IPC handles, eliminating redundant disk I/O and post-quantization transforms. +4. **Active-standby failover in < 1 second** — standby engines share weights via zero-copy, enabling near-zero-downtime failover without dedicating full GPUs to idle replicas. +5. **Multi-node-instance weight sharing** - support multi-node mode for large models + +## Background + +As LLM models grow larger — Qwen3-235B, Ling-2.6-1T, and the newly released 2.8T Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Ling-2.6-1T FP8 instance on 8×H20-3e GPUs takes **~8.52 minutes** just to become ready to serve, weights stay in 3.5T NVME SSD. In production, this means: + +- **P99 tail latency spikes** during restarts — all in-flight requests fail or queue indefinitely. +- **Reduced availability** — multi-minute recovery windows violate SLA targets. +- **Operational friction** — rolling updates, config changes, and failure recovery are all bottlenecked by the restart cycle. +- **GPU resource waste** — traditional active-standby deployments dedicate a full set of GPUs to idle replicas, doubling hardware cost for failover. + +Where does the time go? We profiled a complete SGLang engine startup for Ling-2.6-1T FP8: + +| Phase | Time (s) | Percentage | Notes | +|-------|----------|------------|-------| +| Pre-init & ServerArgs | ~1 | 0.2% | Pre-init and ServerArgs parsing | +| Tokenizer init | ~13 | 2.4% | load and init tokenizer | +| Init torch distributed | ~5 | 0.9% | NCCL 2.28.9,8 卡 H20,NVLink mesh 370.8 GB/s,P2P/IPC;slowest rank TP1=5.19s | +| Load weight (disk) | ~495 | 93.9% | 161 shard,W8A8 FP8 (CompressedTensorsW8A8Fp8MoE),slowest rank=495.3s, 120GB per card; Disk I/O bound | +| Cache allocation (KV+Mamba) | ~1 | 0.2% | KV:553,599 tokens/5.94GB bf16;Mamba SSM state:5.33GB,max_mamba_cache_size=155 | +| Capture CUDA graph | ~7.7 | 1.5% | only 3 decode BS [1,2,4] | +| Server ready | ~4 | 0.8% | Unified RadixTree init, HTTP/uvicorn startup, warmup requests | +| **Total** | **~527** | | **~8.8 minutes** + +The bottleneck is clear: **weight loading from disk accounts for 93.2% of startup time**. For Ling-2.6-1T FP8 model, each TP rank reads ~120GB of safetensors from disk, deserializes, applies TP sharding, and runs post-quantization transforms (FP8 quantization, weight repacking). This work is **repeated identically on every restart**, even though the resulting GPU tensors are deterministic and often already present in GPU memory. + +Can we avoid reloading from disk every time? The answer is **yes** — by keeping weights in GPU memory across engine restarts. + +## Design + +### Core Idea: Persistent Weight Cache via CUDA IPC + +The Weight Cache Daemon is a persistent GPU process that holds post-quantized, TP-sharded weights in GPU memory. On engine restart, the new engine process maps weights from the daemon via **CUDA IPC zero-copy** — no disk I/O, no deserialization, no quantization. + + + +Each GPU runs **one daemon process** for its TP rank. The daemon: + +1. Loads model weights from disk (full pipeline: disk → TP shard → quantize → repack). +2. Exports every parameter and buffer in `model.state_dict()` as CUDA IPC handles. +3. Records a `CacheConfig` fingerprint (model path, TP/DP size, quant config hash, dtype). +4. Serves IPC handles over a Unix socket to requesting engine processes. + +The engine connects to the daemon, validates config compatibility, and maps weights directly into its address space — the engine and daemon **share the same physical GPU memory** via CUDA IPC. + +### Zero-Copy Loading via Meta Device + +The key to sub-second loading is **zero-copy**: the engine's `param.data` pointer is set directly to the IPC-mapped GPU tensor. No data is copied. + +To achieve this, the engine initializes the model on the **meta device** (no GPU/CPU memory allocation), then replaces each parameter's data pointer with the IPC-mapped tensor. + +Post-quantization parameters (e.g., `weight_scale` from FP8 quantization) that were created by `process_weights_after_loading()` are also cached by the daemon and mapped directly — no re-quantization needed. + +### Config Validation: Safety First + +Any mismatch between the engine's config and the daemon's cached config triggers a **full disk reload**, ensuring correctness: + +| Field | Mismatch Example | Consequence | +|-------|-----------------|-------------| +| `model_path` + `model_arch` + `revision` | Different model or revision | Wrong weights entirely | +| `tp_size` + `tp_rank` | Different TP sharding | Wrong shard for this rank | +| `pp_size` + `pp_rank` | Different PP partitioning | Wrong layers for this pipeline stage | +| `dp_size` + `ep_size` | Different DP/EP strategy | Incorrect weight distribution | +| `quant_method` + `quant_config_hash` | Different quantization | Unquantized vs FP8 mismatch | +| `dtype` | float16 vs bfloat16 | Type mismatch | +| `device_capability` + `torch_version` | Different GPU arch or torch version | Weights map cleanly but serve wrong numerics | + +The last two fields form an **environment stamp**: a daemon and a client that ran different post-processing branches (different compute capability or torch/kernel version) can produce weights that map cleanly over IPC yet serve garbage — stamping the environment into `CacheConfig` turns that into a clean mismatch. + +This is critical for production safety: if an operator changes the model or quantization config, the engine will detect the mismatch and fall back to disk loading rather than mapping incompatible weights. + +On top of config validation, quantization methods are gated by an **IPC allowlist**. CUDA IPC zero-copy exports only raw tensor data, so it is correct only when the entire effect of `process_weights_after_loading()` is captured by that data. Methods that stamp Python-side metadata or repack/transpose weights (per-tensor FP8, Marlin, AWQ/GPTQ) would silently serve wrong numerics — they raise a hard error instead. Currently verified: **unquantized** and **block-wise FP8** (`weight_block_size` set); more methods will be added after end-to-end verification. + +### Three Modes: daemon, client, and off + +| Mode | Flow | Weight Load Time | GPU Memory | Use Case | +|------|------|-----------------|------------|----------| +| **daemon** | Engine launches daemon → daemon loads from disk → engine maps IPC | < 1s (after daemon ready) | 1× (shared) | First start; engine manages daemon lifecycle | +| **client** | Connect to pre-running daemon → map IPC | < 1s | 1× (shared) | Engine restart; daemon pre-running | +| **off** | Normal disk loading | 405–411s (Ling-2.6-1T FP8) | 1× | Default; no cache | + +In **daemon** mode, the engine spawns daemon processes during startup and waits for them to load weights from disk. The first start is still slow (daemons must load from disk), but subsequent restarts are instant. + +In **client** mode, the engine connects to already-running daemons. This is the fast-restart path — the daemon was started earlier and already holds weights in GPU memory. + +### Safety and Robustness + +The Weight Cache Daemon is designed to be **non-intrusive and safe**: + +- **Minimal invasiveness**: The feature is self-contained in `python/sglang/srt/weight_cache/` with minimal changes to the core engine (only `load_model()` dispatch and a CLI flag). +- **Crash-safe**: If the daemon crashes, existing engine instances continue running — they already hold references to the IPC-mapped tensors via CUDA reference counting. GPU memory is only freed when **both** the daemon and the engine exit. +- **Daemon recovery**: If the daemon is restarted, it reloads weights from disk and re-export IPC handles. New engine instances can then connect to the restarted daemon. +- **Fallback on mismatch**: Config mismatches automatically fall back to disk loading (in client mode) or raise an error (in daemon mode, where fallback would cause OOM since both processes share the same GPU). + +## Beyond Restart: Production Scenarios + +The Weight Cache Daemon unlocks production patterns that are impractical with traditional disk-based loading: + +### Multi-Instance Weight Sharing + +A single daemon per GPU holds weights in memory; multiple engine instances (e.g., independent services) map to the same IPC handles via zero-copy. Weights are loaded from disk and quantized **exactly once per GPU**, regardless of how many instances consume them. + + + +### Priority Co-Serving + +Run a high-priority online service and a low-priority batch job on the same GPU, backed by the same weight cache daemon. The low-priority instance can be **evicted and re-spawned in sub-second time** without reloading weights from disk — enabling flexible GPU time-sharing without the usual startup penalty. + +### Active-Standby Failover + +Deploy a standby engine alongside the primary, both backed by the same weight cache daemon. The standby maps weights via zero-copy and stays warm. When the primary fails, the standby takes over in **< 1 second** — no weight loading, no disk I/O. + +This achieves near-zero-downtime failover **without dedicating a full set of GPUs to an idle replica**, avoiding the expensive GPU resource waste of traditional hot-standby deployments. + + + +## Performance + +### Weight Loading: Disk vs IPC Zero-Copy + +#### Single Node + +| Model | Weight Size | Disk Load (s) | IPC Zero-copy (s) | Speedup | +|-------|-------------|---------------|-------------------|---------| +| **Qwen3-235B FP8** | **~235 GB** | **~306–327** | **<1** | **~500×** | +| **Ling-2.6-1T** | **~1 TB** | **~405–411** | **<1** | **~780×** | + + +#### Performance Chart + + + +## How to Use + +### Launch Weight Cache Daemons - single-node + +One command launches all TP rank daemons: + +```bash +# Standalone daemon launch (one command for all TP ranks): +python -m sglang.srt.weight_cache.daemon \ + --model-path /path/to/model --tp-size 4 \ + --load-format auto --dtype auto --quantization fp8 +``` + +Wait for daemons to become ready (they write a `.ready` file per rank): + +```bash +# Check readiness: +ls /tmp/sglang_weight_cache_rank*.ready +``` + +### Start Engine with Weight Cache + +```bash +# Engine Client — connect to pre-running daemons (restart) +python -m sglang.launch_server \ + --model-path /path/to/model --tp-size 4 \ + --weight-cache-mode client +``` + +### Launch Weight Cache Daemons - multi-node + +In a multi-node deployment, each node runs its own daemon for its local TP ranks. All daemons +join the same distributed group, so `--nnodes`, `--node-rank`, and `--dist-init-method` must be +consistent across nodes, with `$MASTER_ADDR` pointing at node 0: + +```bash +# Daemon on node 0: +python -m sglang.srt.weight_cache.daemon \ + --model-path /path/to/model --tp-size 2 \ + --load-format auto --dtype auto --quantization fp8 \ + --nnodes 2 --node-rank 0 \ + --dist-init-method tcp://$MASTER_ADDR:29500 + +# Daemon on node 1: +python -m sglang.srt.weight_cache.daemon \ + --model-path /path/to/model --tp-size 2 \ + --load-format auto --dtype auto --quantization fp8 \ + --nnodes 2 --node-rank 1 \ + --dist-init-method tcp://$MASTER_ADDR:29500 +``` + +Once every node reports its daemons ready, start the engine clients. They use a separate +rendezvous port (`29600`) from the daemons (`29500`): + +```bash +# Engine client on node 0: +python -m sglang.launch_server \ + --model-path /path/to/model --tp-size 2 \ + --weight-cache-mode client \ + --nnodes 2 --node-rank 0 \ + --dist-init-addr $MASTER_ADDR:29600 --port 34000 + +# Engine client on node 1: +python -m sglang.launch_server \ + --model-path /path/to/model --tp-size 2 \ + --weight-cache-mode client \ + --nnodes 2 --node-rank 1 \ + --dist-init-addr $MASTER_ADDR:29600 +``` + +## Fast Engine Recovery Framework: Roadmap + +The Weight Cache Daemon is Phase 1 of a broader **Fast Recovery Framework** targeting **< 10s cold restarts** and **< 1s warm standby switches**: + +| Phase | Current (s) | Target (s) | Approach | Status | +|-------|-------------|------------|----------|--------| +| **Load weight** | **~306–327** | **< 1** | **Weight Cache Daemon (CUDA IPC)** | **Done (this PR)** | +| Capture CUDA graph | ~34.9 | < 3 | CUDA graph serialization + replay | Planned | +| DeepGEMM JIT warmup | ~23.1 | < 2 | Kernel cache persistence, parallel warmup | Planned | +| Server init & Tokenizer | ~17.3 | < 3 | Lazy tokenizer init, config caching | Planned | +| Init torch distributed | ~4.7 | < 2 | NCCL session reuse, persistent process groups | Planned | +| KV Cache allocation | ~0.5 | < 0.5 | kvcache reuse | Planned | +| Server ready | ~3.4 | < 1 | Skip warmup requests on restart | Planned | +| **Total (single-node)** | **~390** | **< 10** | | | + +Support for more models is also on the way. + +## Public Roadmap + +The Weight Cache Daemon is just the **first step** — there is still a lot to build, and we are excited about the road ahead. Phase 1 today covers TP + PP, single- and multi-node launch, per-GPU zero-copy CUDA IPC, and unquantized plus block-wise FP8. Beyond that, many high-impact directions remain open: + +- **More models & quantization**: extend the IPC allowlist beyond block-wise FP8 (per-tensor FP8, INT8, MXFP8, NVFP4, AWQ/GPTQ, ...) and cover more architectures, including multimodal and LoRA base weights. +- **DP/EP & multi-node**: DP/EP shard keying and cross-node daemon coordination, lifecycle management, and failover. +- **Weight update without reload**: in-place weight refresh for RL / online updates, with the daemon as the delivery agent. +- **Cross-GPU & fleet sharing**: peer-copy and fleet-fill so a cluster cold start pays roughly one disk read per shard group. +- **KV cache restore**: preserve and remap KV cache across restarts / failover (KV reuse, handoff to standby) so in-flight context survives recovery instead of being recomputed from scratch. +- **Rest of the startup path**: CUDA graph serialization, kernel-warmup persistence, and faster server / distributed init to reach the **< 10s** cold-restart goal. +- **Other hardware backends**: extend this feature to other accelerators that expose similar functionality (AMD and Intel both have comparable IPC mechanisms). +- **Ops & reliability**: metrics, status tooling, security hardening, and CI coverage. + +This is very much a community effort. The full plan is tracked publicly in [sgl-project/sglang#33522](https://github.com/sgl-project/sglang/issues/33522) — **contributions and feedback are very welcome**, and there is plenty of impactful work to pick up. + +## Acknowledgements + +**Ant Ling Infra Team, Ant Group**: [Michael Qiu](https://github.com/QiuMike) qiudayu.qdy@antgroup.com + +**Alibaba**: [Siyu Liu](https://github.com/liusy58) liusy58@smail.nju.edu.cn + +**SGLang Team**: [Alex Nails](https://github.com/alexnails) From c5134e8050e3ee813bcca7ee3216f0b02489a0b4 Mon Sep 17 00:00:00 2001 From: liusy58 Date: Sun, 9 Aug 2026 10:32:44 +0800 Subject: [PATCH 19/19] fix --- blog/2026-07-28-sglang-fast-recovery.md | 260 ------------------------ 1 file changed, 260 deletions(-) delete mode 100644 blog/2026-07-28-sglang-fast-recovery.md diff --git a/blog/2026-07-28-sglang-fast-recovery.md b/blog/2026-07-28-sglang-fast-recovery.md deleted file mode 100644 index 4dd908a3a..000000000 --- a/blog/2026-07-28-sglang-fast-recovery.md +++ /dev/null @@ -1,260 +0,0 @@ ---- -title: "Fast Engine Recovery: Sub-Second Engine Restart for SGLang via Weight Cache Daemon" -author: "Ant Ling Infra Team (Ant Group), Alibaba, SGLang Team" -date: "August 9, 2026" -previewImg: /images/blog/sglang-fast-recovery/preview.png ---- - -## TL;DR - -Nowadays, State-of-the-Art (SOTA) models are getting much bigger and reloading the model service after a crash is very expensive. Therefore, we are introducing the **Weight Cache Daemon**, a persistent GPU process that holds post-quantized model weights in GPU memory and serves them to new SGLang engine instances via CUDA IPC zero-copy mapping. This reduces weight loading from minutes to seconds. - -The Weight Cache Daemon is the first phase of our **Fast Engine Recovery Framework**, which targets **< 10 second cold restarts** and **< 1 second warm standby switches** for production LLM serving. - -Key results: - -1. **Weight loading: ~495s → ~0.63s** — a **~785× speedup**, based on the Ling-2.6-1T FP8 model. -2. **Total startup: 8.8min → 0.528min** — an **93.9% reduction** in end-to-end engine boot time. -3. **Multi-instance weight sharing** — multiple engine instances on the same GPU map to the same IPC handles, eliminating redundant disk I/O and post-quantization transforms. -4. **Active-standby failover in < 1 second** — standby engines share weights via zero-copy, enabling near-zero-downtime failover without dedicating full GPUs to idle replicas. -5. **Multi-node-instance weight sharing** - support multi-node mode for large models - -## Background - -As LLM models grow larger — Qwen3-235B, Ling-2.6-1T, and the newly released 2.8T Kimi K3 — the cold-start time of serving engines has become a critical bottleneck for production efficiency. A Ling-2.6-1T FP8 instance on 8×H20-3e GPUs takes **~8.52 minutes** just to become ready to serve, weights stay in 3.5T NVME SSD. In production, this means: - -- **P99 tail latency spikes** during restarts — all in-flight requests fail or queue indefinitely. -- **Reduced availability** — multi-minute recovery windows violate SLA targets. -- **Operational friction** — rolling updates, config changes, and failure recovery are all bottlenecked by the restart cycle. -- **GPU resource waste** — traditional active-standby deployments dedicate a full set of GPUs to idle replicas, doubling hardware cost for failover. - -Where does the time go? We profiled a complete SGLang engine startup for Ling-2.6-1T FP8: - -| Phase | Time (s) | Percentage | Notes | -|-------|----------|------------|-------| -| Pre-init & ServerArgs | ~1 | 0.2% | Pre-init and ServerArgs parsing | -| Tokenizer init | ~13 | 2.4% | load and init tokenizer | -| Init torch distributed | ~5 | 0.9% | NCCL 2.28.9,8 卡 H20,NVLink mesh 370.8 GB/s,P2P/IPC;slowest rank TP1=5.19s | -| Load weight (disk) | ~495 | 93.9% | 161 shard,W8A8 FP8 (CompressedTensorsW8A8Fp8MoE),slowest rank=495.3s, 120GB per card; Disk I/O bound | -| Cache allocation (KV+Mamba) | ~1 | 0.2% | KV:553,599 tokens/5.94GB bf16;Mamba SSM state:5.33GB,max_mamba_cache_size=155 | -| Capture CUDA graph | ~7.7 | 1.5% | only 3 decode BS [1,2,4] | -| Server ready | ~4 | 0.8% | Unified RadixTree init, HTTP/uvicorn startup, warmup requests | -| **Total** | **~527** | | **~8.8 minutes** - -The bottleneck is clear: **weight loading from disk accounts for 93.2% of startup time**. For Ling-2.6-1T FP8 model, each TP rank reads ~120GB of safetensors from disk, deserializes, applies TP sharding, and runs post-quantization transforms (FP8 quantization, weight repacking). This work is **repeated identically on every restart**, even though the resulting GPU tensors are deterministic and often already present in GPU memory. - -Can we avoid reloading from disk every time? The answer is **yes** — by keeping weights in GPU memory across engine restarts. - -## Design - -### Core Idea: Persistent Weight Cache via CUDA IPC - -The Weight Cache Daemon is a persistent GPU process that holds post-quantized, TP-sharded weights in GPU memory. On engine restart, the new engine process maps weights from the daemon via **CUDA IPC zero-copy** — no disk I/O, no deserialization, no quantization. - - - -Each GPU runs **one daemon process** for its TP rank. The daemon: - -1. Loads model weights from disk (full pipeline: disk → TP shard → quantize → repack). -2. Exports every parameter and buffer in `model.state_dict()` as CUDA IPC handles. -3. Records a `CacheConfig` fingerprint (model path, TP/DP size, quant config hash, dtype). -4. Serves IPC handles over a Unix socket to requesting engine processes. - -The engine connects to the daemon, validates config compatibility, and maps weights directly into its address space — the engine and daemon **share the same physical GPU memory** via CUDA IPC. - -### Zero-Copy Loading via Meta Device - -The key to sub-second loading is **zero-copy**: the engine's `param.data` pointer is set directly to the IPC-mapped GPU tensor. No data is copied. - -To achieve this, the engine initializes the model on the **meta device** (no GPU/CPU memory allocation), then replaces each parameter's data pointer with the IPC-mapped tensor. - -Post-quantization parameters (e.g., `weight_scale` from FP8 quantization) that were created by `process_weights_after_loading()` are also cached by the daemon and mapped directly — no re-quantization needed. - -### Config Validation: Safety First - -Any mismatch between the engine's config and the daemon's cached config triggers a **full disk reload**, ensuring correctness: - -| Field | Mismatch Example | Consequence | -|-------|-----------------|-------------| -| `model_path` + `model_arch` + `revision` | Different model or revision | Wrong weights entirely | -| `tp_size` + `tp_rank` | Different TP sharding | Wrong shard for this rank | -| `pp_size` + `pp_rank` | Different PP partitioning | Wrong layers for this pipeline stage | -| `dp_size` + `ep_size` | Different DP/EP strategy | Incorrect weight distribution | -| `quant_method` + `quant_config_hash` | Different quantization | Unquantized vs FP8 mismatch | -| `dtype` | float16 vs bfloat16 | Type mismatch | -| `device_capability` + `torch_version` | Different GPU arch or torch version | Weights map cleanly but serve wrong numerics | - -The last two fields form an **environment stamp**: a daemon and a client that ran different post-processing branches (different compute capability or torch/kernel version) can produce weights that map cleanly over IPC yet serve garbage — stamping the environment into `CacheConfig` turns that into a clean mismatch. - -This is critical for production safety: if an operator changes the model or quantization config, the engine will detect the mismatch and fall back to disk loading rather than mapping incompatible weights. - -On top of config validation, quantization methods are gated by an **IPC allowlist**. CUDA IPC zero-copy exports only raw tensor data, so it is correct only when the entire effect of `process_weights_after_loading()` is captured by that data. Methods that stamp Python-side metadata or repack/transpose weights (per-tensor FP8, Marlin, AWQ/GPTQ) would silently serve wrong numerics — they raise a hard error instead. Currently verified: **unquantized** and **block-wise FP8** (`weight_block_size` set); more methods will be added after end-to-end verification. - -### Three Modes: daemon, client, and off - -| Mode | Flow | Weight Load Time | GPU Memory | Use Case | -|------|------|-----------------|------------|----------| -| **daemon** | Engine launches daemon → daemon loads from disk → engine maps IPC | < 1s (after daemon ready) | 1× (shared) | First start; engine manages daemon lifecycle | -| **client** | Connect to pre-running daemon → map IPC | < 1s | 1× (shared) | Engine restart; daemon pre-running | -| **off** | Normal disk loading | 405–411s (Ling-2.6-1T FP8) | 1× | Default; no cache | - -In **daemon** mode, the engine spawns daemon processes during startup and waits for them to load weights from disk. The first start is still slow (daemons must load from disk), but subsequent restarts are instant. - -In **client** mode, the engine connects to already-running daemons. This is the fast-restart path — the daemon was started earlier and already holds weights in GPU memory. - -### Safety and Robustness - -The Weight Cache Daemon is designed to be **non-intrusive and safe**: - -- **Minimal invasiveness**: The feature is self-contained in `python/sglang/srt/weight_cache/` with minimal changes to the core engine (only `load_model()` dispatch and a CLI flag). -- **Crash-safe**: If the daemon crashes, existing engine instances continue running — they already hold references to the IPC-mapped tensors via CUDA reference counting. GPU memory is only freed when **both** the daemon and the engine exit. -- **Daemon recovery**: If the daemon is restarted, it reloads weights from disk and re-export IPC handles. New engine instances can then connect to the restarted daemon. -- **Fallback on mismatch**: Config mismatches automatically fall back to disk loading (in client mode) or raise an error (in daemon mode, where fallback would cause OOM since both processes share the same GPU). - -## Beyond Restart: Production Scenarios - -The Weight Cache Daemon unlocks production patterns that are impractical with traditional disk-based loading: - -### Multi-Instance Weight Sharing - -A single daemon per GPU holds weights in memory; multiple engine instances (e.g., independent services) map to the same IPC handles via zero-copy. Weights are loaded from disk and quantized **exactly once per GPU**, regardless of how many instances consume them. - - - -### Priority Co-Serving - -Run a high-priority online service and a low-priority batch job on the same GPU, backed by the same weight cache daemon. The low-priority instance can be **evicted and re-spawned in sub-second time** without reloading weights from disk — enabling flexible GPU time-sharing without the usual startup penalty. - -### Active-Standby Failover - -Deploy a standby engine alongside the primary, both backed by the same weight cache daemon. The standby maps weights via zero-copy and stays warm. When the primary fails, the standby takes over in **< 1 second** — no weight loading, no disk I/O. - -This achieves near-zero-downtime failover **without dedicating a full set of GPUs to an idle replica**, avoiding the expensive GPU resource waste of traditional hot-standby deployments. - - - -## Performance - -### Weight Loading: Disk vs IPC Zero-Copy - -#### Single Node - -| Model | Weight Size | Disk Load (s) | IPC Zero-copy (s) | Speedup | -|-------|-------------|---------------|-------------------|---------| -| **Qwen3-235B FP8** | **~235 GB** | **~306–327** | **<1** | **~500×** | -| **Ling-2.6-1T** | **~1 TB** | **~405–411** | **<1** | **~780×** | - - -#### Performance Chart - - - -## How to Use - -### Launch Weight Cache Daemons - single-node - -One command launches all TP rank daemons: - -```bash -# Standalone daemon launch (one command for all TP ranks): -python -m sglang.srt.weight_cache.daemon \ - --model-path /path/to/model --tp-size 4 \ - --load-format auto --dtype auto --quantization fp8 -``` - -Wait for daemons to become ready (they write a `.ready` file per rank): - -```bash -# Check readiness: -ls /tmp/sglang_weight_cache_rank*.ready -``` - -### Start Engine with Weight Cache - -```bash -# Engine Client — connect to pre-running daemons (restart) -python -m sglang.launch_server \ - --model-path /path/to/model --tp-size 4 \ - --weight-cache-mode client -``` - -### Launch Weight Cache Daemons - multi-node - -In a multi-node deployment, each node runs its own daemon for its local TP ranks. All daemons -join the same distributed group, so `--nnodes`, `--node-rank`, and `--dist-init-method` must be -consistent across nodes, with `$MASTER_ADDR` pointing at node 0: - -```bash -# Daemon on node 0: -python -m sglang.srt.weight_cache.daemon \ - --model-path /path/to/model --tp-size 2 \ - --load-format auto --dtype auto --quantization fp8 \ - --nnodes 2 --node-rank 0 \ - --dist-init-method tcp://$MASTER_ADDR:29500 - -# Daemon on node 1: -python -m sglang.srt.weight_cache.daemon \ - --model-path /path/to/model --tp-size 2 \ - --load-format auto --dtype auto --quantization fp8 \ - --nnodes 2 --node-rank 1 \ - --dist-init-method tcp://$MASTER_ADDR:29500 -``` - -Once every node reports its daemons ready, start the engine clients. They use a separate -rendezvous port (`29600`) from the daemons (`29500`): - -```bash -# Engine client on node 0: -python -m sglang.launch_server \ - --model-path /path/to/model --tp-size 2 \ - --weight-cache-mode client \ - --nnodes 2 --node-rank 0 \ - --dist-init-addr $MASTER_ADDR:29600 --port 34000 - -# Engine client on node 1: -python -m sglang.launch_server \ - --model-path /path/to/model --tp-size 2 \ - --weight-cache-mode client \ - --nnodes 2 --node-rank 1 \ - --dist-init-addr $MASTER_ADDR:29600 -``` - -## Fast Engine Recovery Framework: Roadmap - -The Weight Cache Daemon is Phase 1 of a broader **Fast Recovery Framework** targeting **< 10s cold restarts** and **< 1s warm standby switches**: - -| Phase | Current (s) | Target (s) | Approach | Status | -|-------|-------------|------------|----------|--------| -| **Load weight** | **~306–327** | **< 1** | **Weight Cache Daemon (CUDA IPC)** | **Done (this PR)** | -| Capture CUDA graph | ~34.9 | < 3 | CUDA graph serialization + replay | Planned | -| DeepGEMM JIT warmup | ~23.1 | < 2 | Kernel cache persistence, parallel warmup | Planned | -| Server init & Tokenizer | ~17.3 | < 3 | Lazy tokenizer init, config caching | Planned | -| Init torch distributed | ~4.7 | < 2 | NCCL session reuse, persistent process groups | Planned | -| KV Cache allocation | ~0.5 | < 0.5 | kvcache reuse | Planned | -| Server ready | ~3.4 | < 1 | Skip warmup requests on restart | Planned | -| **Total (single-node)** | **~390** | **< 10** | | | - -Support for more models is also on the way. - -## Public Roadmap - -The Weight Cache Daemon is just the **first step** — there is still a lot to build, and we are excited about the road ahead. Phase 1 today covers TP + PP, single- and multi-node launch, per-GPU zero-copy CUDA IPC, and unquantized plus block-wise FP8. Beyond that, many high-impact directions remain open: - -- **More models & quantization**: extend the IPC allowlist beyond block-wise FP8 (per-tensor FP8, INT8, MXFP8, NVFP4, AWQ/GPTQ, ...) and cover more architectures, including multimodal and LoRA base weights. -- **DP/EP & multi-node**: DP/EP shard keying and cross-node daemon coordination, lifecycle management, and failover. -- **Weight update without reload**: in-place weight refresh for RL / online updates, with the daemon as the delivery agent. -- **Cross-GPU & fleet sharing**: peer-copy and fleet-fill so a cluster cold start pays roughly one disk read per shard group. -- **KV cache restore**: preserve and remap KV cache across restarts / failover (KV reuse, handoff to standby) so in-flight context survives recovery instead of being recomputed from scratch. -- **Rest of the startup path**: CUDA graph serialization, kernel-warmup persistence, and faster server / distributed init to reach the **< 10s** cold-restart goal. -- **Other hardware backends**: extend this feature to other accelerators that expose similar functionality (AMD and Intel both have comparable IPC mechanisms). -- **Ops & reliability**: metrics, status tooling, security hardening, and CI coverage. - -This is very much a community effort. The full plan is tracked publicly in [sgl-project/sglang#33522](https://github.com/sgl-project/sglang/issues/33522) — **contributions and feedback are very welcome**, and there is plenty of impactful work to pick up. - -## Acknowledgements - -**Ant Ling Infra Team, Ant Group**: [Michael Qiu](https://github.com/QiuMike) qiudayu.qdy@antgroup.com - -**Alibaba**: [Siyu Liu](https://github.com/liusy58) liusy58@smail.nju.edu.cn - -**SGLang Team**: [Alex Nails](https://github.com/alexnails)