HiDeepSeekDev
空闲特惠
教程指南DeepSeekDeepInfer确定性采样复现教程

DeepInfer 复现教程:批次不变、固定 seq_seed 与确定性采样怎么配合

补充 DeepInfer 10 月 25 日配置解析修复,说明 0/1 明确写法、空值和默认值,以及新进程验证要求。

快速结论

官方确定性采样路径要求同时启用批次不变、关闭可变长度 MTP,并为 SamplingParams 固定 seq_seed;当前标注仅限 NVIDIA。

  • DEEPINFER_BATCH_INVARIANT=1 用于批次不变推理。
  • 确定性采样还要求 DEEPINFER_ENABLE_MTP_VARLEN=0。
  • 相同文本不一定代表经过编码后的输入 Token 完全相同。

本次更新:增加 5537415 严格开关与首次读取缓存的复现配置说明。

本教程依据 DeepInfer README和 SamplingParams 源码,讨论离线框架中的复现准备。它不是托管 API 参数教程,也没有运行模型。

1. 先区分两个目标

批次不变推理关注同一个请求与不同请求组成批次时,模型结果是否保持一致。确定性采样进一步关注:相同输入 Token 和采样参数,能否得到相同输出。

README 当前将这两项路径标注为 NVIDIA only。框架支持昇腾 950,不代表每个特性都已对两种平台开放。

2. 在运行环境设置两个开关

按官方说明,在启动离线任务的同一环境设置:

export DEEPINFER_BATCH_INVARIANT=1
export DEEPINFER_ENABLE_MTP_VARLEN=0

第二项关闭可变长度 MTP。不能一边省略这一要求,一边把其他推测解码设置下的结果描述为遵循了官方确定性配置。

3. 为序列固定种子

以下仅创建参数对象,模型加载和请求提交仍按所用提交的完整示例接入:

from deepinfer.sampling_params import SamplingParams

params = SamplingParams(
    temperature=0.6,
    top_p=0.95,
    max_tokens=256,
    seq_seed=42,
)

源码中,未提供 seq_seed 时会生成随机 64 位种子。将温度设低不能代替对种子、输入和环境的完整记录;固定参数也不代表输出一定正确。

4. 用三组运行定位差异

以下为本站编辑设计的检查顺序:先重复运行同一请求;再改变批次中的其他请求;最后比较输出 Token、结束原因及文本差异。每次只改变一个条件,保存原始结果。

记录权重修订、分词与协议编码、仓库和子模块提交、驱动与算子版本、硬件和并行配置。不要将某一环境的一致性推断为跨硬件、跨库版本的无条件保证。

5. 与准确率评测分开报告

复现成功只是运行一致,不等于答案正确。需要能力分数时,另按离线评测协议处理数据、答案提取和覆盖率;需要吞吐时,再单独记录负载与计时窗口。

10 月 25 日:避免开关拼写影响复现配置

5537415 将 _bool 改为严格解析;本页示例中的 1 和 0 仍在支持集合内。改成 yes、off 或带空格的值会报错,未设置则使用对应默认值,不能与空字符串混淆。

环境描述符首次读取后会缓存结果。修改配置后用新的目标进程确认有效设置,再比较批次与种子;不要把配置未生效造成的差异解释为采样保证本身发生变化。

参考资料

本文依据以下资料整理,版本与接口信息请以来源页面的现行说明为准。

  1. 01DeepInfer 批次不变与确定性配置github.com
  2. 02SamplingParams 与 seq_seed 源码github.com
  3. 03DeepInfer 10 月 25 日严格布尔解析提交github.com
  4. 04该提交 environ.py 源码github.com
阅读至此返回学习中心