Prhub

#24648 [NIXL][XPU] Fix uint64 overflow for mismatched P/D TP sizes (e.g. prefill_tp=1, decode_tp=2)

原始 PR 作者 Jianhong-Zhang 合并时间 2026-05-12 11:02 文件变更 1 提交数 1 评论 3 代码增减 +8 / -4

执行摘要

修复 XPU 上 uint64 溢出导致 KV 缓存通信失败

修复 Intel XPU 上 P/D 分离部署中不匹配 TP 大小(prefill_tp=1, decode_tp>1)时 KV 缓存地址因高位为 1 导致 int64 溢出,使 send_kvcache_slice 无法正常工作的 bug。PR body 明确描述了触发条件。

值得合并,修复目标准确,改动极小且安全。建议在后续版本中补充针对不匹配 TP 大小的集成测试,以覆盖回归。

讨论亮点

无实质讨论,仅 PR 创建者 mingfeima 评论指出此 PR 与 #24188 类似。Reviewer ShangmingCai 直接 approve,无其他争议。

实现拆解

  1. python/sglang/srt/disaggregation/nixl/conn.pysend_kvcache_slice 方法中,将 self.kv_args.kv_data_ptrsdst_kv_ptrs 的构建从默认 dtype 改为 np.uint64,确保指针值不被溢出。
  2. 同时将 prefill_kv_indicesdst_kv_indicestoken_offsets 的 dtype 从 np.int64 改为 np.uint64,因为这些变量也参与地址计算,需要保持无符号语义。
  3. 这些改动仅影响 XPU 平台,对 CUDA 平台无副作用(因为 CUDA 地址通常高位为 0,int64 也能正确表示)。
文件 模块 状态 重要度
python/sglang/srt/disaggregation/nixl/conn.py KV 通信 modified 5.8

关键符号

send_kvcache_slice

关键源码片段

python/sglang/srt/disaggregation/nixl/conn.py core-logic

核心修复文件,修改 send_kvcache_slice 方法中的数据类型,解决 XPU 上 KV 缓存地址溢出问题。

# 在 send_kvcache_slice 方法中,关键变更如下:
# torch.int 在 Intel XPU 上对高位为 1 的地址(如 0xffff81ab54e01000)会溢出,
# 使用 np.uint64 确保地址不被截断或解释为负数。# 变更前:
# self.get_mha_kv_ptrs_with_pp(self.kv_args.kv_data_ptrs, dst_kv_ptrs)
# 变更后:显式指定 uint64
kv_data_ptrs = np.array(self.kv_args.kv_data_ptrs, dtype=np.uint64)
dst_kv_ptrs = np.array(dst_kv_ptrs, dtype=np.uint64)
src_k_ptrs, src_v_ptrs, dst_k_ptrs, dst_v_ptrs, layers_current_pp_stage = (
    self.get_mha_kv_ptrs_with_pp(kv_data_ptrs, dst_kv_ptrs)
)# 索引与偏移数组同样需要 uint64 以保持一致性
prefill_indices = np.asarray(prefill_kv_indices, dtype=np.uint64)
dst_indices = np.asarray(dst_kv_indices, dtype=np.uint64)
token_offsets = np.arange(page_size, dtype=np.uint64)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

  1. 回归风险低:改动仅将涉及指针运算的数组 dtype 从 int64 改为 uint64,语义更精确,对正常地址(高位为 0)无任何影响。
  2. 缺少新增测试:本 PR 未附带测试用例来覆盖 prefill_tp=1, decode_tp=2 的场景,长期来看存在回归风险。
  3. 兼容性:uint64 在 Python 中可能因平台差异导致大整数精度问题,但此处均为 numpy 数组内部计算,风险可控。

影响范围:仅涉及 Intel XPU 上 P/D 分离部署中 TP 大小不匹配的场景。修复后该配置可以正常使用,否则会因溢出报错。对 CUDA 和其他平台无影响。

缺少测试覆盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论