From 3167bcc01c3074d5739e8086757cd8c66077d508 Mon Sep 17 00:00:00 2001 From: AlexZhao Date: Wed, 11 Feb 2026 10:31:28 +0800 Subject: [PATCH] [Doc] Comprehensive Guide: Navigating DP, DPA, and SMG Best Practices (#18096) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 赵海源 Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: zhaochenyang20 --- docs/_static/image/dpa.png | Bin 0 -> 101525 bytes docs/advanced_features/dp_dpa_smg_guide.md | 370 +++++++++++++++++++++ docs/index.rst | 1 + 3 files changed, 371 insertions(+) create mode 100644 docs/_static/image/dpa.png create mode 100644 docs/advanced_features/dp_dpa_smg_guide.md diff --git a/docs/_static/image/dpa.png b/docs/_static/image/dpa.png new file mode 100644 index 0000000000000000000000000000000000000000..672e022186e49a47290eaf1c7258556d51f1fa62 GIT binary patch literal 101525 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%0D;!)v%GD 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 + + +DPA + EP Architecture + + + +**Each DP replica:** + +- Processes different batches independently (can be in different forward modes: prefill, decode, or idle) +- Maintains its own KV cache (no duplication) +- Enables significantly larger batch sizes due to memory savings + +**Communication patterns in DPA + EP:** +- +- **All2All (Dispatch)**: Routes tokens to expert sub-groups based on gating decisions +- **All2All (Combine)**: Gathers computed results from experts back to original token positions + + + + + +### Key benefits of DPA + +1. **Significantly reduced KV cache memory**: Each DP replica only stores KV cache for its own batches +2. **Larger batch sizes**: Memory savings enable larger batch sizes +3. **Improved decoding throughput**: Significant throughput gains for MLA-based models +4. **Independent forward modes**: Each DP replica can be in different forward modes (prefill, decode, or idle) and handles its assigned batches independently during attention computation + +### DPA with Expert Parallelism for MoE + +For MoE models like DeepSeek, DPA is **often** paired with Expert Parallelism (EP) for best throughput at scale. However, **DPA does not require EP**: you can enable DPA without EP if your deployment does not need expert sharding. + +- Distribute 256+ expert weights across GPUs (cannot fit on a single GPU) +- Enable efficient all-to-all token routing via DeepEP +- Scale to large clusters (up to 5x throughput improvement over vanilla TP) + +### Recommended setup for DeepSeek + +```bash +python -m sglang.launch_server \ + --model-path deepseek-ai/DeepSeek-V3 \ + --tp 8 \ + --dp-size 8 \ + --ep 8 \ + --enable-dp-attention \ + --moe-a2a-backend deepep \ + --moe-runner-backend deep_gemm +``` + +> **Note**: `--dp-size` must be explicitly set when using `--enable-dp-attention`. If `dp_size` is 1 (default), DPA will be disabled. + +For detailed EP configuration (DeepEP, Two-Batch Overlap, EPLB), see [Expert Parallelism](expert_parallelism.md). + +### Target Models + +DPA supports the following model architectures: + +- **MLA (Multi-Head Latent Attention) models** - where DPA provides the most significant benefits: + - DeepSeek family (DeepSeek-V2, DeepSeek-V3, DeepSeek-R1) + - MiniMax models + - Kimi-K2 + - Other models using MLA architecture + +- **Standard attention models** - also supported: + - Qwen models (see [PR #6121](https://github.com/sgl-project/sglang/pull/6121)) + +For models like Llama, with standard GQA, standard DP, or TP is typically recommended. + +To enable DPA, add `--enable-dp-attention` to your server launch command. + +### Activation Logic + +DPA is enabled explicitly via server arguments (CLI or config). You must set both `--dp-size` and `--enable-dp-attention`: + +```bash +python -m sglang.launch_server \ + --model-path deepseek-ai/DeepSeek-V3 \ + --tp 8 \ + --dp-size 8 \ + --enable-dp-attention +``` + +**Important**: `--dp-size` must be greater than 1 for DPA to work. When `dp_size == 1` (default), `--enable-dp-attention` is automatically disabled. The constraint `tp_size % dp_size == 0` must also be satisfied. + +### Standard DP for MLA models + +Note that MLA models, of course, also support DP. Suppose you want to enable standard DP for MLA models. First, launch each MLA model's replica independently. You may launch these replicas one by one with DPA enabled. After launching each MLA model's replica, launch an SMG and connect all the replicas to the SMG. A detailed explanation of SMG is as follows. + +## Modern Data Parallelism SGLang Model Gateway (SMG) + +### Native DP Mode + +Native DP (built-in Data Parallelism) in SGLang creates multiple worker processes within a single SGLang instance, under the control of `DataParallelController` with the launching parameter of `dp-size`. + + +```bash +# Native DP mode +python -m sglang.launch_server \ + --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ + --dp-size 4 +``` + +**Limitations:** + +- Built-in in-process load balancing only (e.g., `round_robin`, `total_requests`, `total_tokens`) +- No cache-aware routing +- Limited observability and metrics +- No fault tolerance or circuit breakers +- Not suitable for production workloads + +⚠️ Native DP is **highly not recommended for use right now**. It is only used in some ancient/outdated RL frameworks. You can use SGLang Model Gateway (SMG) to power up your data parallelism in any use case. + +### SMG-Based DP (Recommended) + +Starting from September 2024, SGLang Model Gateway, i.e., SMG, formerly named as SGLang DP Router, was built especially as a production-ready DP routing system with Rust. It starts from DP routing, but later we further expanded its scope to coordinate RL, PD Disaggregation, and other scenarios. This doc only discusses SMG's usage in DP routing. For other usage, please refer to [SGLang Model Gateway Documentation](sgl_model_gateway.md). + +> To achieve the best production-level routing performance and reduce the overhead to an extreme extent, we use Rust to build SMG, but not Python, since Python is never FAST enough. + +**We strongly recommend using the SGLang Model Gateway (SMG) for production-grade Data Parallelism.** SMG provides significant advantages over native DP mode. + +```bash +# SMG-based DP mode (Recommended) +python -m sglang_router.launch_server \ + --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ + --dp-size 4 +``` + +⚠️ Note that **SMG and Naive DP share the same launching parameter, `--dp-size`**. But the entrypoint of Naive DP is `python -m sglang.launch_server`, and SMG's entrypoint is `python -m sglang_router.launch_server`. + +**Advantages of SMG-Based DP:** + +| Feature | Native DP | SMG-Based DP | +|---------|-----------|--------------| +| **Load Balancing** | Built-in in-process methods | Advanced policies (cache-aware, power-of-two, etc.) | +| **Cache Awareness** | ❌ No | ✅ Yes - significantly higher cache hit rate | +| **Throughput** | Baseline | Significant improvement | +| **Multi-Node Support** | Limited | ✅ Full support | +| **Worker Health Monitoring** | Basic | ✅ Circuit breakers, health checks | +| **Reliability** | Basic | ✅ Retries, rate limiting, queuing | +| **Observability** | Basic metrics | ✅ 40+ Prometheus metrics, OpenTelemetry | +| **Hot Worker Add/Remove** | ❌ No | ✅ Yes | + +### SMG's Performance + +The cache-aware routing policy in SMG significantly improves performance for workloads with shared prefixes: + +| Metric | Without Cache-Aware | With Cache-Aware SMG | +|--------|---------------------|----------------------| +| Throughput (token/s) | 82,665 | 158,596 (+92%) | +| Cache Hit Rate | 20% | 75% (+275%) | + +*Benchmark from [SGLang v0.4 blog](https://lmsys.org/blog/2024-12-04-sglang-v0-4/), workload with multiple long prefix groups, 8x A100 80GB GPUs, dp-size=8* + +### When to Use Each + +**Use Native DP when:** + +- ~Never use Native/Naive DP~ +- Learning material of DP routing + +**Use SMG-Based DP when:** + +- In any case, when you think DP is needed +- Production deployments +- Multi-node distributed setups +- Workloads with shared prefixes (high cache reuse potential) +- You need high availability and reliability features +- You require detailed observability and metrics + +### Quick Start For SMG + +**Installation** + +```bash +pip install sglang-router +# or +pip install "sglang[all]" +``` + +**Option A: Co-launch Workers and SMG (Simplest)** + +This is the easiest way to get started - SMG and workers are launched together: + +```bash +python -m sglang_router.launch_server \ + --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ + --dp-size 4 \ + --host 0.0.0.0 \ + --port 30000 +``` + +**Option B: Separate Launch (Multi-Node)** + +For distributed deployments across multiple machines: + +1. Launch workers on each node + +```bash +# Node 1 +python -m sglang.launch_server \ + --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ + --port 8000 + +# Node 2 +python -m sglang.launch_server \ + --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ + --port 8000 +``` + +2. Launch SMG pointing to workers + +```bash +python -m sglang_router.launch_router \ + --worker-urls http://node1:8000 http://node2:8000 \ + --policy cache_aware \ + --host 0.0.0.0 \ + --port 30000 +``` + +**Option C: Dynamic Worker Registration** + +For elastic deployments where workers can be added/removed dynamically: + +```bash +# Launch SMG first +python -m sglang_router.launch_router \ + --policy cache_aware \ + --host 0.0.0.0 \ + --port 30000 + +# Register workers dynamically +curl -X POST http://localhost:30000/workers \ + -H "Content-Type: application/json" \ + -d '{"url": "http://worker1:8000"}' + +curl -X POST http://localhost:30000/workers \ + -H "Content-Type: application/json" \ + -d '{"url": "http://worker2:8000"}' +``` + +### Load Balancing Policies + +SMG supports multiple load balancing policies: + +| Policy | Description | Best For | +|--------|-------------|----------| +| `cache_aware` | Combines cache locality with load balancing | **Recommended for most workloads** | +| `round_robin` | Cycles through workers in order | Simple, predictable distribution | +| `random` | Random worker selection | Baseline, testing | +| `power_of_two` | Samples two workers, picks lighter one | Low latency requirements | + +**Cache-Aware Policy (Default, Recommended)** + +The cache-aware policy provides the best performance for most workloads: + +```bash +python -m sglang_router.launch_router \ + --worker-urls http://worker1:8000 http://worker2:8000 \ + --policy cache_aware \ + --cache-threshold 0.5 \ + --balance-abs-threshold 32 \ + --balance-rel-threshold 1.5 \ + --eviction-interval-secs 120 \ + --max-tree-size 67108864 +``` + +**How it works:** + +1. Maintains an approximate radix tree for each worker based on request history +2. Routes requests to workers with the highest prefix match (cache hit) +3. Falls back to shortest-queue routing when load is imbalanced +4. Automatically evicts old entries to prevent memory overflow + +### Best Practices + +1. **Start with `cache_aware` policy** - It provides the best balance between cache locality and load distribution for most workloads +2. **Use SMG for production** - Prefer `sglang_router.launch_server` over `sglang.launch_server` for better reliability and observability +3. **Enable health checks** - Configure `--router-health-check-interval-secs` to detect and remove unhealthy workers automatically + +**Recommended command with best practices applied:** + +```bash +python -m sglang_router.launch_server \ + --model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ + --dp-size 4 \ + --router-policy cache_aware \ + --router-health-check-interval-secs 30 \ + --router-prometheus-port 10001 \ + --host 0.0.0.0 \ + --port 30000 +``` + +For advanced configuration (circuit breakers, retries, Prometheus metrics, K8s integration), see [SGLang Model Gateway Documentation](sgl_model_gateway.md). + +### Verifying Traffic Distribution + +After launching SMG, verify that traffic is being distributed correctly: + +**1. Check worker status:** + +```bash +curl http://localhost:30000/workers +``` + +**2. Check load distribution:** + +```bash +curl http://localhost:30000/get_loads +``` + +**3. Monitor metrics (if Prometheus enabled):** + +```bash +# Key metrics to check +smg_router_requests_total{model="..."} +smg_worker_requests_active{worker="..."} +sglang_cache_hit_rate{source="..."} +``` + +For detailed metrics and monitoring setup, see [SGLang Model Gateway Documentation](sgl_model_gateway.md). + +## Reference + +| Strategy | Use Case | Key Benefit | +|----------|----------|-------------| +| **Native DP** (`--dp-size`) | Never | Easy to understand, not rust based | +| **SMG-Based DP** | **Production (recommended)** | Cache-aware routing, high availability | +| **DPA** (`--dp-size N --enable-dp-attention`) | DeepSeek/MLA models | Eliminates KV cache duplication, improved throughput | +| **DPA + EP** | DeepSeek MoE models | Significant throughput improvement vs vanilla TP | + +**Recommended production setup for DeepSeek:** +1. Enable **DPA** for attention layers (`--dp-size 8 --enable-dp-attention`) +2. Enable **EP** for MoE layers (`--ep 8 --moe-a2a-backend deepep`) +3. Use **SMG** with **cache_aware** policy + +**Related documentation:** +- [Expert Parallelism](expert_parallelism.md) - DeepEP, Two-Batch Overlap, EPLB +- [SGLang Model Gateway Documentation](sgl_model_gateway.md) - SMG configuration & troubleshooting +- [Large-Scale EP Blog](https://lmsys.org/blog/2025-05-05-large-scale-ep/) - 96 GPU deployment guide diff --git a/docs/index.rst b/docs/index.rst index e60b35a4c..1cf288302 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -53,6 +53,7 @@ Its core features include: advanced_features/quantization.md advanced_features/quantized_kv_cache.md advanced_features/expert_parallelism.md + advanced_features/dp_dpa_smg_guide.md advanced_features/lora.ipynb advanced_features/pd_disaggregation.md advanced_features/epd_disaggregation.md