vLLM-Ascend 0.20.2.rc1 中 DeepSeek 模型推理输出乱码问题分析与解决

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 **,该版本已合并关键修复补丁。