作者​:昇腾实战派
知识地图​:https://blog.csdn.net/Lumos_Lovegood/article/details/161601003

背景概述

本文针对使用SGLang框架在Atlas 800I A2双机环境下部署DeepSeek-V3.2-W8A8(W8A8量化)模型时,出现服务拉起过程中“Capturing batches”阶段卡死的问题,结合实际排查过程,系统性地梳理了问题根因与解决方案,为类似场景提供可复用的优化路径。

问题现象

在使用SGLang 0.5.9.rc1版本部署DeepSeek-V3.2-W8A8模型时,启动服务进入Capturing batches图捕获阶段后,系统完全无响应,进程卡死。进一步观察发现,操作系统整体响应迟滞,无法执行任何操作,初步判断为底层资源或通信异常所致。
image

排查过程

  1. 首先使用vLLM框架进行对比验证。在相同硬件与网络环境下,vLLM可正常拉起服务并响应curl请求,说明系统环境、驱动、网络及硬件本身无异常。
  2. 通过克隆sgl-kernel-npu(https://github.com/sgl-project/sgl-kernel-npu)仓库,根据sgl-kernel-npu单算子测试脚本验证通信正常与否参考指导,运行deepep的Atlas 800I A2双机单算子测试脚本,验证了DeepEP通信链路正常,各节点间算子通信无阻塞,确认单算子通信功能正常。
  3. 尝试关闭图模式(--disable-cuda-graph)后重启服务,发现模型加载阶段出现权重文件相关报错。因模型权重文件是没有MTP量化的,通过关闭MTP配置重拉服务正常。
    尝试以下命令
#启动命令中删除如下MTP相关配置
--speculative-algorithm NEXTN \\
--speculative-num-steps 2 \\
--speculative-eagle-topk 1 \\
--speculative-num-draft-tokens 3

#取消环境变量设置
#export SGLANG\_ENABLE\_OVERLAP\_PLAN\_STREAM=1
#export SGLANG\_ENABLE\_SPEC\_V2=1
  1. 重新启用图模式(--cuda-graph-bs 4 8)后,服务不再卡死在图模式阶段,但在warm up阶段出现如下错误:

RuntimeError: call aclnnDispatchNormalA2 failed

连续报错提示“tiling失败”及“NnopbaseRunForWorkspace验证失败”,初步判断为工作空间内存不足。
image

  1. 检查环境变量发现以下参数设置,通过设置如下参数可以使能Ant-moving Function(将序列长度分割为多轮传输,以优化预填充阶段集体通信中占用的缓冲区大小,尤其针对长序列场景)
#使能ant-moving function,指示每个Rank上传输的轮次,默认为1轮 
export DEEPEP\_NORMAL\_LONG\_SEQ\_ROUND=8
#使能ant-moving function,指示每个Rank每轮传输的token数量,默认为8192个token
export DEEPEP\_NORMAL\_LONG\_SEQ\_PER\_ROUND\_TOKENS=512

开启和关闭Ant-moving Function直接影响HCCL_BUFFSIZE的计算,HCCL_BUFFSIZE计算如下

# Enable Ant-moving Function
HCCL\_BUFFSIZE >= 2 \* (102MB + 4MB + DEEPEP\_NORMAL\_LONG\_SEQ\_PER\_ROUND\_TOKENS \* (hidden\_size + hidden\_size + hidden\_size) \* topk) + PADDING\_BUFFSIZE

# Disable Ant-moving Function
HCCL\_BUFFSIZE >= 2 \* (102MB + 4MB + TOTAL\_SEQ\_LEN \* (hidden\_size + hidden\_size) \* topk) + PADDING\_BUFFSIZE

通过修改如下环境变量,重启服务后,服务可正常拉起,curl请求响应稳定,推理流程完整无阻。

export HCCL\_BUFFSIZE=1500
# export DEEPEP\_NORMAL\_LONG\_SEQ\_ROUND=8
# export DEEPEP\_NORMAL\_LONG\_SEQ\_PER\_ROUND\_TOKENS=512

问题根因总结

  1. 模型权重未启用MTP量化,但启动命令中启用了MTP相关参数,导致运行时异常。
  2. HCCL\_BUFFSIZE设置过小,无法满足长序列场景下的集体通信缓冲需求,尤其在启用Ant-moving Function时,内存需求进一步放大。

解决措施

  1. 启动服务和环境变量中删除MTP相关配置
# 移除MTP参数
--speculative-algorithm NEXTN \\
--speculative-num-steps 2 \\
--speculative-eagle-topk 1 \\
--speculative-num-draft-tokens 3
# 禁用相关环境变量
# export SGLANG\_ENABLE\_OVERLAP\_PLAN\_STREAM=1
# export SGLANG\_ENABLE\_SPEC\_V2=1
  1. 调大HCCL_BUFFSIZE到1500,且disable Ant-moving Function
export HCCL\_BUFFSIZE=1500
# export DEEPEP\_NORMAL\_LONG\_SEQ\_ROUND=8
# export DEEPEP\_NORMAL\_LONG\_SEQ\_PER\_ROUND\_TOKENS=512

更多推荐