首页/AI/大模型部署与运维速查/seed:可复现性的边界
推理参数与优化50 条

seed:可复现性的边界

固定 seed 让采样序列可复现(尽力而为):OpenAI 兼容字段 seed、vLLM SamplingParams 也有 seed;但并行度、批组合与算子实现变化仍可能带来差异。

seed 的作用与边界

seed 是采样阶段的随机数种子:固定它可以让同一组输入在「尽力而为」的意义上复现同一段输出,主要用于评测对比、缺陷复现与回归测试。它只对带随机性的采样有意义,temperature 取 0 时通常已退化为一贯的最优选择,seed 影响随之减弱。即便固定了 seed,并行度、批组合与算子实现差异仍可能让结果出现细微不同。

基本信息

字段名OpenAI 兼容字段 seed / vLLM SamplingParams.seed
作用固定采样随机序列,提升可复现性
能力边界尽力而为,不保证逐字节一致
适用评测、缺陷复现、A/B 对照、回归测试
常见的失败原因模型 revision 变了、框架版本变了、量化档位或批组合不同

典型使用场景

  • 版本对比评测:新旧两版模型或两套参数用同一 seed 取样,差异更容易归因到模型本身
  • 线上缺陷复现:把请求原样回放,避免随机性把问题掩盖掉
  • 回归测试:固定 seed 的输出作为基线,改动后做差异比对
  • 调参实验:排除随机噪声,才能判断某次改动是否真的有效
  • 演示与教学:需要稳定输出时避免每次都换一段话

固定与记录

固定与记录
# 请求级固定:OpenAI 兼容接口
# client.chat.completions.create(model="<模型名>", messages=[...], seed=42, temperature=0.8)

# vLLM 离线推理
from vllm import SamplingParams
sp = SamplingParams(temperature=0.8, top_p=0.9, seed=42)

# 复现四件套一起写进结果元数据:模型 revision、框架版本、采样参数、批处理配置
# 缺任何一项,事后都无法判断差异来自哪里

复现需要固定什么

要素为什么必须固定典型疏漏
模型 revision上游仓库会更新,权重一变输出就变只写模型名不写 commit
推理框架版本采样实现与算子可能随版本调整升级后无记录
采样参数temperature/top_p/惩罚项决定分布只记 seed
并行与批处理配置影响归约顺序与浮点结果未记录张量并行度
相同 seed 在不同推理引擎之间不通用:随机数生成方式与采样实现不同,跨引擎对比要各自固定 seed 后分别取样。
单次生成只是一条样本:即使 seed 固定,用一条输出宣布效果提升缺乏说服力,评测应统计多条样本或直接固定 temperature=0 做确定性对照。

易错点

  • 以为 seed 就是完全确定:批处理下同一请求落在不同批次组合中,仍可能产生极小差异
  • 只固定 seed 不固定模型 revision:上游更新后权重变了,输出不同却被误判为「框架不稳定」
  • 假设不同引擎的同一 seed 等价:随机数实现不同,必须各自取样而不是按 seed 拉齐
  • 高 temperature 下用 seed 声称结果可复现:温度越高,同一随机序列落到不同 token 的概率越大

数据来源与参考

  • OpenAI API 参考:seed(platform.openai.com/docs)
  • vLLM 官方文档:SamplingParams(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌