Skip to content

[Bug][Qwen3.5] Tracking: Qwen3.5 model issues with PD disaggregation #19045

Description

@YAMY1234

Summary

Tracking issues encountered running Qwen3.5-397B-A17B-FP8 (Mamba hybrid MoE) in PD disaggregation mode. Most issues affect any Mamba hybrid model in disagg, some affect non-MLA GQA models more broadly.

Environment: SGLang dev (latest), GB200 (sm100), Qwen3.5-397B-A17B-FP8, Mooncake transfer backend.

Fixes with PRs

Ongoing

  • Issue 3: HybridLinearKVPool.get_cpu_copy NotImplementedError when disagg decode triggers retraction (draft fix, needs verification)
  • Issue 4: DeepEP kNumMaxTopK=9 assertion failure for Qwen3.5 num_experts_per_tok=10 (upstream DeepEP issue, workaround: rebuild with kNumMaxTopK=16)

Issue 1: Disagg decode ignores --max-mamba-cache-size ✅ Fixed

PR: #19002

HybridMambaDecodeReqToTokenPool ignores --max-mamba-cache-size and always sizes the mamba pool at max_num_reqs. With extra_buffer strategy (3 slots/request), this causes immediate OOM. Affects all Mamba hybrid models in disagg decode.


Issue 2: int32 overflow in Mooncake send_kvcache_slice ✅ Fixed

PRs: #19076, #19086

KV cache byte offset computed with np.int32 overflows when buffer > 2 GB. Affects any non-MLA model with heterogeneous TP in disagg.


Issue 3: HybridLinearKVPool.get_cpu_copy NotImplementedError

Status: Draft fix, needs verification

When disagg decode triggers retraction (high token pool usage), release_reqoffload_kv_cacheget_cpu_copy hits NotImplementedError in HybridLinearKVPool. Fix: delegate to internal full_kv_pool (MHATokenToKVPool); Mamba state not offloaded — retracted requests re-prefill to restore.

Trigger: disagg decode + Mamba hybrid model + high concurrency causing retraction.


Issue 4: DeepEP kNumMaxTopK assertion failure

Status: Upstream DeepEP issue

DeepEP low-latency kernel hardcodes kNumMaxTopK = 9. Qwen3.5 uses num_experts_per_tok = 10 → assertion failure. Workaround: rebuild DeepEP with kNumMaxTopK = 16.


Issue 5: Division by zero & accuracy regression in send_kvcache_slice for GQA ✅ Fixed

PR: #19086

num_kv_heads * attn_tp_size incorrectly back-computes total KV heads when head replication is involved (total_kv_heads < attn_tp_size), causing both division by zero and accuracy regression. Fix introduces total_kv_head_num to use the true un-sharded head count.

Affects: non-MLA GQA models with few KV heads in heterogeneous TP disagg.


Issue 6: Raise exception when radix is disabled but extra_buffer is enabled

PR: #19169

Issue 7: Qwen3-next accuracy issue, which may affect Qwen3.5

Instruct/Thinking Model Accuracy Test (GSM8K)
Prefix Caching:0.94/0.92
Prefix Caching + MTP:0.94/0.93
Disagg + Prefix Caching: 0.95/0.93
Disagg + Prefix Caching + MTP: 0.71/0.61 low accuracy!!!

GPQA Disagg + Prefix Caching
Repeat: 8, mean: 0.769
Scores: ['0.763', '0.793', '0.778', '0.798', '0.773', '0.768', '0.737', '0.742']
GPQA Reference
Repeat: 8, mean: 0.769
Scores: ['0.768', '0.763', '0.732', '0.798', '0.758', '0.773', '0.763', '0.798']

Issue 8:

Crash with TP & TEP decode when radixcache is off & concurrency is high:

Decode transfer failed for request rank=3 decode_req.req.rid='7eb1c2be0dd64ba3b8b745b452f0f120' 
decode_req.req.bootstrap_room=4434964693992720714 with exception 
KVTransferError(bootstrap_room=4434964693992720714): Failed to get kvcache from prefill instance, it might be dead

Issue 9:

#19271

Error querying dp_ranks from bootstrap: HTTPConnectionPool(host='10.66.4.40', port=38711): Max retries exceeded with url: /query_dp_ranks (Caused by NewConnectionError("HTTPConnection(host='10.66.4.40', port=38711): Failed to establish a new connection: [Errno 99] Cannot assign requested address"))

Using exactly the same config, the error does not occur before #19168

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions