昇腾设备PD分离部署中因TLS配置不一致导致推理答非所问的定位与修复
作者:昇腾实战派
知识地图:https://blog.csdn.net/Lumos_Lovegood/article/details/161601003
背景概述
在Atlas 800I A3设备上部署DeepSeek-V3.1模型时,发现模型推理生成内容语义连贯但与用户请求完全无关,即出现“答非所问”现象。本文基于实际排查过程,系统分析问题根因,并提出可用的优化方案。
问题现象
在8机Atlas 800I A3环境中,基于vllm-ascend采用PD分离部署DeepSeek-V3.1模型,推理过程中:生成内容语义通顺但与输入无逻辑关联(即“答非所问”);问题在多轮测试中稳定复现,排除随机性干扰。
环境配置信息:
硬件:Atlas 800I A3
模型: Eco-Tech/DeepSeek-V3.1-Terminus-w8a8-mtp-QuaRot
推理框架:vLLM-Ascend v0.18.0rc1-a3
问题分析
1. 模型权重验证
- 检查模型配置文件
config.json,确认torch_dtype正确设置为bfloat16,无异常; - 对所有节点模型权重进行哈希校验,结果一致,排除文件损坏或下载错误;
2. 推理行为复现与初步推断
通过修改输入输出参数排除随机性干扰。
输入请求(如“你好吗”),模型输出长度放宽限制(max_tokens=5000),此时推理结果依然答非所问,且结束原因为 length打满上限;初步判定问题可能出在 KV Cache 的存储或读取环节,导致推理上下文缺失。
3. Mooncake配置修正尝试
检查服务启动参数中, --kv-transfer-config 配置的 engine_id 和 kv_port 存在错误;修正上述配置项后,现象未改变,不是 Mooncake 配置错误导致的问题。
4. 日志分析与超时排查
分析业务日志与系统 plog,定位通信链路异常:
- 业务日志中存在 mooncake transfer failed,确认 KV Cache 传输失败;
- plog日志上有HCCL 建链超时,经 IP 对应设备分析,失败链路均位于 P 节点与 D 节点之间。
尝试做如下调优:
- 将 HCCL_EXEC_TIMEOUT 和 HCCL_CONNECT_TIMEOUT 提升至 600 秒,仍有超时;
- 将 ASCEND_TRANSFER_TIMEOUT 和 ASCEND_CONNECT_TIMEOUT 提升至 10000 微秒,仍有超时。
5. 二分隔离测试
通过减少节点数量定位故障范围,排查是否为特定机器的裸机环境问题。
现场部署方案为:4×1P+1×4D。分别在 P 节点所在的前四机和 D 节点所在的后四机上,独立运行四机 PD 分离服务。
前 4 台机器(原 P 节点)复现相同异常,后 4 台机器(原 D 节点)工作正常。
问题并非由软件版本或模型本身引起,需聚焦于P 节点所在机器的裸机环境差异。
根因定位
检查全部裸机的 NPU 底层 TLS 校验配置。
for i in {0..15}; do hccn_tool -i $i -tls -g; done | grep switch
结果显示:2台P节点所在的机器上,TLS未置零(处于开启状态),D节点及其他节点均已置零(关闭状态)。
- 服务拉起阶段:由于该部署方案中单个 P 实例均部署在单机内,未触发跨机建链,因此服务启动正常,未报错。
- 运行推理阶段:Mooncake 尝试从 P 节点拉取 KV Cache 时,由于P与D节点间TLS 配置不一致,导致 HCCL 建链失败,无法成功拉取 KV Cache。
- vLLM/vLLM-Ascend 误判 KV Cache 拉取成功,使用错误的/空的上下文状态进行解码,最终导致生成内容与请求无关,出现“答非所问”现象。
解决方案
统一集群内所有节点的TLS配置,确保通信参数一致:
for i in {0..15}; do hccn_tool -i $i -tls -s enable 0; done
总结
在 vLLM PD 分离部署场景下,若出现回答内容与请求无关或精度异常问题,需检查日志中是否存在 mooncake transfer failed 报错。若存在上述报错,通常对应 HCCL 建链失败,需要进一步排查相应的网路问题。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)