首页/AI/大模型部署与运维速查/top_p:核采样阈值
推理参数与优化50 条

top_p:核采样阈值

按概率从高到低累积到阈值 p,只在集合内采样:p=1 相当于不裁剪,p 越小候选越窄;常见取值 0.9~0.95。

top_p 是什么

核采样(top_p)在每步生成时,把候选词按概率从高到低累加,只保留累计概率刚好超过阈值的那一小撮词,再从这个小集合里采样。p 等于 1 相当于不裁剪,p 越小候选集合越窄。它和温度的作用点不同:温度改变分布形状,核采样直接砍掉长尾。常见取值落在 0.9 到 0.95 之间。

基本信息

适用平台OpenAI 兼容接口、vLLM、Transformers、llama.cpp 等同名参数
取值类型0 到 1 的浮点数,1 表示不裁剪
常见取值0.9 至 0.95 为通用起点
与温度关系两者叠加调节随机性,一般只动其中一个
默认行为各实现默认值不同,迁移后要核对

取值参考

取值效果适用情形
1.0不裁剪,长尾词也有机会需要多样性的创作场景
0.95轻微裁剪,兼顾自然与稳定常规问答与摘要
0.9常用起点,长尾基本被切掉通用对话服务的默认配置
0.8候选明显收窄结构化输出与短答
0.5 及以下候选极窄,易重复与崩坏仅在特定受控任务中尝试

典型使用场景

  • 通用对话服务:用 0.9 搭配中低温度,稳定与自然兼顾
  • 结构化输出:收窄到 0.8 左右,减少格式跑偏与多余改写
  • 创作类功能:放宽到 1.0,把多样性交给采样而不是重复提问
  • 跨引擎迁移:自建服务的默认值与云 API 不同,迁移后固定参数再回归
  • 排查重复输出:先把核采样收窄或放宽做对照,确认是否采样参数导致的复读

vLLM 离线调用示例

vLLM 离线调用示例
from vllm import LLM, SamplingParams
# 采样参数集中声明,便于对比实验
sp = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=256)
llm = LLM(model="/models/Qwen")
outs = llm.generate(["用一句话解释什么是 KV 缓存"], sp)
print(outs[0].outputs[0].text)   # 检查输出是否连贯、无复读
top_p 与温度同时大改会让效果无法归因:调试时每次只动一个参数,并用固定测试集对比输出。
核采样阈值调得过小会把低概率词变相放大:候选集合被压到极窄后,少数错误候选反而更容易被选中,表现为重复与语句崩坏。

易错点

  • 把 top_p 与温度一起调:出现质量下降时无法判断是哪个参数造成
  • 以为 p=1 就是不采样:它只是不裁剪长尾,随机性仍由温度决定
  • 跨框架照抄默认值:各家默认值不同,抄错组合会得到完全不同的输出风格
  • 阈值收到 0.5 以下还想保住质量:候选过窄,输出会明显退化
  • 只在一条样例上验证:至少用固定测试集对比,避免被单次采样结果误导

数据来源与参考

  • Hugging Face 文本生成文档:top_p 采样(huggingface.co/docs/transformers)
  • vLLM 官方文档:SamplingParams(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌