vLLM 0.8 回答变了
vLLM 0.8.0 改变了默认采样参数来源。固定 checkpoint 和请求参数,对照 vllm 默认与模型配置,区分配置变化、随机性和真正的推理故障。
同一 checkpoint 和提示词,升级 vLLM 后回答的长度、风格或随机程度变了,日志没有统一异常。这种行为变化应先检查有效采样参数,而不是直接判断权重损坏或量化质量下降。
从 vLLM 0.8.0 起,默认参数会采用模型自带的 generation_config.json;此前默认采用 vLLM 的中性配置。以下只针对这次变更及 0.8.5 接口,不宣称升级后所有回答差异都来自它。
先把对照条件固定下来
确认模型权重、tokenizer、模板和 revision 没有一起变化。保留原请求中的 temperature、top_p、top_k、输出预算、停止条件及 seed;只记录“提示词一样”还不足以说明输入与采样一样。
本地模型目录可以先查看相关字段:
import json
from pathlib import Path
config = Path("/srv/models/verified-checkpoint/generation_config.json")
if config.is_file():
values = json.loads(config.read_text())
for key in ("temperature", "top_p", "top_k", "max_new_tokens"):
print(key, values.get(key))
else:
print("no generation_config.json in this directory")
这读取的是文件内容,不保证这些值全部进入最终请求。还要检查服务启动参数、覆盖配置和客户端显式参数。
只改变默认配置来源
在独立测试服务上沿用原模型、dtype 和并行配置,把默认来源改为:
vllm serve /srv/models/verified-checkpoint \
--host 127.0.0.1 --port 8001 --generation-config vllm
这个服务会加载真实模型,需要独立资源预算;不要与生产实例争用已经满载的 GPU。在 0.8.5 中,vllm 值表示不加载模型的 generation config。离线构造 LLM 时对应设置 generation_config="vllm"。
用原测试集比较这条路线与原配置。若差异缩小,再决定采用 vLLM 默认,还是把业务需要的采样参数显式写入配置;不必删除模型仓库的配置文件。模型作者的参数也可能更适合该模型任务,应以业务测试判断。
输出一致性要按任务验收
固定 seed 也不能保证不同版本、硬件和执行路径逐字相同。对于抽取任务检查字段与约束;对于问答检查固定问题的事实、相关性和完成状态;对于长度变化检查输出预算与停止条件。不要挑一个“看起来正常”的回答就宣布恢复。
完成选择后保存 checkpoint revision、服务参数和请求配置,并从新的进程重跑测试集。回滚时一起恢复旧软件与旧配置,才能比较同一套条件。


