作者:昇腾实战派

背景

vLLM-Ascend 将高性能推理框架 vLLM 与昇腾 NPU 相结合,为大语言模型在国产化硬件上的高效部署提供了关键路径。然而在实际使用中,模型的推理输出可能存在精度偏差,影响业务可靠性。

这些偏差主要分为两类:

一是与原生 vLLM GPU结果的差异。由于硬件底层、算子实现的不同,vLLM-Ascend 的输出可能与 GPU 版本存在数值偏差。

二是 vLLM-Ascend 不同版本间的差异。随着版本迭代,不同版本之间可能存在精度掉点,需要进行版本间的对比验证。

因此,本文从数据预处理、模型前向计算、输出后处理三个维度,梳理 vLLM-Ascend 的精度对齐方法,辅助开发者定位精度偏差问题。

统计验证

启动在线服务化,通过评测工具评测精度得分,获得统计结果。

开启确定性开关

数据集精度评测

安装AISBench

AISBench Benchmark 是一种模型评测工具,安装方式如下:

获取数据集

可参考ais_bench/benchmark/configs/datasets · AISBench/benchmark - 码云 - 开源中国 (gitee.com),在对应数据集目录下,README.md文件介绍了数据集获取方式和数据集解压位置,按指导操作即可。以调用/v1/chat/completions接口为例:

配置评测参数

脚本展示如下,host_port需与服务化port一致,根据模型配置修改path、max_seq_len和max_out_len等参数,示例为输出8k:

启动评测

以math500评测为例,执行:

评测结果解析

主要关注表格中得分,答题结果可在当前目录的outputs/default/xxx/prediction下查看

权重检查

针对模型路径下的文件,与huggingface或modelscope中的模型文件清单对比大小,确认模型文件没有被修改过,尤其关注如config.json,tokenizer_config.json等文件。

输入预处理对齐

以/v1/chat/completions接口为例

Chat Template渲染结果对比

补充打印:

示例如下,关注engine_prompts中的prompt是否和模型权重目录下使用的tokenizer_config.json中的chat_template结构相同,渲染结果是否一致

编码结果对比

补充打印:

示例如下,关注prompt_token_ids结果是否一致,结果不一致时,需要针对render_chat_request方法内部额外打印过程数据,确认是否为tokenizer配置问题或其他预处理问题

模型前向对齐

使用msProbe工具执行精度数据dump操作,安装命令如下:

工具使能方式

当前msprobe在vllm-ascend中的集成方式可以为在线启动配置使能或代码侵入式修改

在线使能,eager模式

启动在线服务化,额外添加–additional-config '{“dump_config_path”: “/home/xxx/acc-log/config.json”}'配置,指定dump配置的JSON文件路径

config.json内容如下,参数配置参考mstt/debug/accuracy_tools/msprobe-代码预览-mstt:基于昇腾平台的训练工具链项目 - AtomGit | GitCode,常用参数如rank、step,均可按需配置:

启动在线服务化后,发送请求,按需修改调用的接口/prompt内容/最大输出长度:

服务化日志会有dump过程打印,表示dump正常进行:

在这里插入图片描述

dump数据结构示例如下:

dump.json包含整网各层输入输出,stack.json包含调用栈信息

离线使能,eager模式

离线脚本如下,在llm.generate前后执行采集器启动和停止

图模式

参考使用AclGraphDumper,https://gitcode.com/Ascend/msprobe/pull/567

  1. NPUModelRunner中初始化debugger:

2.load_model后同步关联acl_debugger

3.execute_model完成forward后进行step,类似self.debugger

整网采集特征对比

通过观察dump.json找到第一次有明显异常输出的模块

在这里插入图片描述

单点采集特征对比

根据调用栈,进一步保存或打印forward方法内部的数据,缩小定位范围。

eager模式

可以使用torch.save()手动dump该算子的输入输出,代码如下:

在需要打印输入输出的部分使用print_tensor代码

参考脚本进行数值统计:

比对算子输入输出是否存在对比结果异常的情况,如示例:
在这里插入图片描述

明确异常算子后,可进行单算子脚本复现,将输入dump数据加载后单独执行算子,脚本供参考,按需修改脚本:

图模式

当前图模式对于流程中的内容打印较为欠缺,提供以下几个参考方式:

1.copy_方式

2.acl_save方式

参考msprobe/docs/zh/dump/aclgraph_dump_instruct.md-代码预览-MindStudio-Probe:基于昇腾的全场景精度调试工具链项目 - AtomGit | GitCode提供的acl_save工具,示例如下:

sampler对齐

grammar bitmask过滤结果对比

见vllm_ascend/worker/model_runner_v1.py

sampler参数对比及采样token对比

见vllm_ascend/worker/model_runner_v1.py

数据后处理对齐

解码字符串和最终输出结果对比

见vllm/v1/engine/output_processor.py

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐