大模型输出的确定性,简单说就是:相同输入 + 相同配置 → 每次输出完全一模一样。
vLLM默认是“随机生成”(为了让输出更丰富),想要确定性,核心是干掉“随机性来源”。
一、 入门级:零代码搞定核心配置(小白必学,80%场景够用)
大模型输出随机的头号元凶是「采样策略」—— 模型生成每个token时,默认会从概率较高的token里“随机挑一个”。想要确定性,第一步就是把采样策略改成“不随机”。
1. 核心参数1:sampling-temperature→ 直接设为0
这是控制随机性的最关键参数,没有之一。
- 原理类比:温度就像“骰子的摇晃力度”。
- 温度>0(比如0.7):摇晃力度大,骰子落点随机,输出多样;
- 温度=0:骰子直接“钉死”在概率最高的那一面,每次都选概率最大的token→ 输出100%确定。
- vLLM命令行实操:
# 启动时加这个参数,直接锁死随机性python -m vllm.entrypoints.openai.api_server\--model 你的模型名\--sampling-temperature0 - 小白避坑:温度设为0后,
top_k、top_p这些采样参数会被vLLM自动忽略(因为不需要采样了),不用额外删,省心!
2. 可选方案:用beam-search代替贪心搜索(质量更好的确定性生成)
温度=0时,vLLM用的是贪心搜索(每次只选当前概率最高的token),优点是快、省显存;但有时候会生成重复内容。
如果你想让输出质量更高,同时保持确定性,可以用束搜索(beam-search)—— 它会同时保留beam-size个候选序列,最后选最优的那个,全程无随机。
- 相关参数:
--enable-beam-search:开启束搜索(必须加)--beam-size:束的数量,比如设为2或4(越大质量越好,但越慢、显存占用越高)
- 实操命令:
python -m vllm.entrypoints.openai.api_server\--model 你的模型名\--enable-beam-search\--beam-size