vLLM-Ascend 0.20.2.rc1 中 DeepSeek 模型推理输出乱码问题分析与解决
作者:昇腾实战派
知识地图:https://blog.csdn.net/Lumos_Lovegood/article/details/161601003
背景概述
在使用 vLLM 0.20.2.rc1 版本镜像部署 DeepSeek-V4-Pro时,在某些输入长度下出现推理输出内容乱码的问题,在多机分布式部署(PD 分离架构)下表现明显。本文基于该问题,分析问题的根因并提供解决方案,为类似场景提供参考。
问题现象
在使用 vLLM 0.20.2.rc1 镜像启动DeepSeek-V4-Pro模型服务后,执行推理请求时,返回结果中的content字段出现明显乱码,表现为非预期字符、乱码符号或内容截断,如下:
“content”: “-ev君 final\n”
“reasoning_content”: “Super by.<ydgPKev/『Get hard,”____,)\n\nésold反抗侵( = $M9 and _ pointing| ,…
该问题并非在所有请求中均复现,仅在特定输入长度条件下出现,且与模型输入长度存在强相关性。
问题分析
结合已知经验(乱码问题与模型输入长度强相关),初步判断问题与模型输入输出长度和MTP等加速特性相关。
对比触发乱码的请求与正常请求:发现关键区别在于输入长度。
因此尝试:
- 参数调优无效:调整几组
max-model-len与 MTP 相关参数后,问题仍持续存在。 - 关闭 MTP 后问题消失:当禁用 MTP 功能后,乱码现象不再复现。
结合 vLLM-Ascend 官方仓库中已知的版本问题,进一步确认:
- issue: [Bug]: PD disaggregated SWA KV transfer can include stale blocks and produce NaN hidden states #10253
- PR (Merged into 0.21.0): [BugFix] Trim SWA transfer blocks before clipping #10254
综上,升级镜像至0.21版本之后测试乱码问题不再复现。
问题根因
在 PD 分离架构中,当启用 MTP 且输入长度恰好为 block 长度整数倍时,P 节点在计算并传输 KV Cache 时,会多传递一个无效 block 给 D 节点,导致 D 节点在解析时出现数据错位,进而引发推理输出乱码。
解决措施
为彻底解决该问题,建议将推理服务所使用的 vLLM-Ascend 镜像版本升级至 **v0.21.0 **,该版本已合并关键修复补丁。
