上线评审会上,如果有人问 DeepInfer 能不能保证同输入同输出,回答能或不能都过于粗糙。
工程团队真正需要追问四件事:比较的是 Token 还是概率;允许改变批次、调度还是硬件;保证覆盖哪套软硬件;证据来自功能说明、测试源码,还是目标环境中的实测结果。
DeepInfer 的发布很适合用来建立这套问法。它明确提供批次不变推理和确定性采样,也把开关条件、硬件范围与测试源码公开出来。但这些材料定义的是一个有边界的能力单元,距离跨版本、跨硬件、跨完整服务的可复现承诺仍有若干层。
阅读时间: 8 分钟 | 目标: 产出一张能进入发布流程的确定性验收表
先给确定性主张做一张身份证
任何确定性主张都应带四个字段:
| 字段 | DeepInfer 当前公开信息 | 部署方还要补什么 |
|---|---|---|
| 比较对象 | 模型结果、生成 Token、Token 概率与 Top Token 概率 | 是否要求 Token 完全一致,概率是精确相等还是允许容差 |
| 受控变量 | 批次组合、输入 Token、采样参数和 seq_seed |
调度压力、重启、并行拓扑、缓存命中、升级是否纳入 |
| 环境边界 | DeepSeek-V4.1-Flash;确定性相关能力标注为 NVIDIA 路径 | GPU 型号、驱动、CUDA、编译器、内核和服务版本 |
| 证据等级 | README 声明与仓库测试源码 | 目标硬件实跑日志、成本数据、升级回归和失败处置 |
没有这四个字段,同输入同输出只是口号。字段填完整后,团队才能讨论它是不是需要的保证,以及要为它付出多少性能和维护成本。
官方资料已经确认了什么
DeepInfer 官方仓库把当前开源版本定义为面向 DeepSeek 模型的离线推理框架,支持模型只列出 DeepSeek-V4.1-Flash。硬件范围包括 NVIDIA SM100 GPU 和华为 Ascend 950 NPU。
与确定性直接相关的两项能力是:
- 批次不变推理:设置
DEEPINFER_BATCH_INVARIANT=1,文档标注为仅支持 NVIDIA; - 确定性采样:在批次不变模式基础上,设置
DEEPINFER_ENABLE_MTP_VARLEN=0,并为SamplingParams提供固定seq_seed,同样标注为仅支持 NVIDIA。
这里最重要的产品信息不是有一个确定性开关,而是可变长度 MTP 必须关闭。DeepInfer 同时提供 DSpark 和置信度调度验证,这些能力面向解码效率;确定性采样则主动收窄了一部分动态行为。确定性和吞吐优化因此属于两个需要共同测量的目标。
Ascend 950 出现在支持硬件列表中,也不代表确定性采样自动覆盖 Ascend。README 对确定性能力的限定更窄,部署合同必须服从这个更窄的边界。
测试源码提供了比功能列表更强的证据
官方的 test_batch_invariant.py值得逐行看。
测试会构造 64 条长度不同的随机 Token 序列,先把它们作为一个批次运行,再逐条单独运行。比较对象包括:
- 生成 Token ID;
- Token Log Probability;
- Top Token ID;
- Top Token Log Probability。
断言要求四类结果组成的元组完全相等。当前参数表只有一个模型案例,Expert Parallel Size 为 8。
这个测试的关键细节是 golden_token_ids。逐条运行时,测试把批量输出的 Token 序列作为固定解码路径传入。这样可以沿着同一条生成轨迹比较概率数据,避免第一个采样差异让后续位置全部失去可比性。
因此,它为批次变化下的计算路径不变量提供了很强的源码证据。它没有单独完成另一项实验:在不指定 Golden Path 的情况下,仅依靠固定 seq_seed 多次自然生成,并验证输出可以完整重放。仓库的 Sampler 测试侧重采样分布,也没有替代这项实验。
这不是对功能声明的否定,而是证据分层。源码告诉我们项目准备验证什么;目标环境的运行工件才告诉我们当前部署实际通过了什么。
截至 2026 年 10 月 22 日,公开 GitHub Actions 只显示 CodeQL 与依赖图工作流,没有提供上述模型测试在声明硬件上的公开 pytest 工件。团队可以检查测试设计,但不能把可读源码等同于已经看到公开硬件运行结果。
把部署验收拆成三个回合
与其一次写一张巨大的兼容矩阵,不如按风险扩展测试。
第一回合:证明当前机器可以复现
冻结模型 Checkpoint、Tokenizer、DeepInfer Commit、采样参数和一组真实请求。在同一主机上做四次比较:
- 同一请求连续运行;
- 进程重启后运行;
- 单请求与混合批次对照;
- 改变批次中其他请求的长度、内容和顺序。
先比较 Token ID,再比较返回的 Log Probability。Token 一致而概率变化,说明用户看到的文本暂时稳定,但调试、训练或排序管线仍可能观察到漂移。
第二回合:加入真实调度与服务状态
固定目标请求,改变到达时间、队列深度、并发度和批次邻居。记录每次请求实际落到的副本、开关、缓存状态与并行配置。
DeepInfer 默认启用异步调度。异步调度负责减少 CPU 调度与设备执行之间的空闲,不等于自动提供结果一致性。压力测试的目的,是验证在真实调度行为下,第一回合定义的不变量仍成立。
第三回合:把升级当成兼容性事件
模型、框架、内核、编译器、驱动、GPU 代际或并行拓扑任何一项变化,都应触发冻结请求集重放。结果分为三类:
- 必须完全一致,失败则阻断发布;
- 允许数值容差,但需要生成漂移报告;
- 明确属于未支持变化,只记录结果,不继承旧保证。
跨 Tensor Parallel Size 的确定性研究说明,并行拆分本身就可能改变计算与通信顺序。批次不变不能自动推出跨 TP Size 一致。TP、EP 或其他拓扑变化都应拥有自己的验收单元。
离线引擎通过,不等于线上服务通过
DeepInfer README 明确列出完整推理服务仍需要的组件:KV Cache 系统、Vision Encoder/Prefill/Decode 解耦,以及 Prefill 和 Decode 数据并行副本的负载均衡。
这些组件都可能把复现问题重新带回来:
- 负载均衡把同一请求送到版本或配置不同的副本;
- 缓存复用了另一套配置生成的状态;
- 一次请求跨越多个软硬件边界;
- 编解码、模型生成和后续评分使用了不同的版本或随机状态。
生产日志至少要能还原下面这组环境指纹:
模型 Checkpoint + Tokenizer + DeepInfer Commit
+ 算子/内核版本 + 编译器/驱动/运行时
+ 加速器型号 + 并行拓扑 + 服务副本
+ 确定性开关 + 采样参数 + Seed
+ 缓存血缘 + 请求批次与调度标识
这组信息的价值在于定位。当输出漂移时,团队可以比较具体变量,而不是把问题笼统归因于模型不稳定。
生成稳定,评分仍可能变化
DeepInfer 的评测文档把生成和评分分成两个阶段。AIME 与 GPQA 可以使用确定性规则判分,默认 LLM Judge 仍受 Judge 自身采样影响;HLE 只支持 LLM Judge。
所以一条完整评测链至少有两个随机边界:模型生成与结果评分。即使生成输出逐字一致,Judge 的结论仍可能变化。评测报告应分别记录生成配置、评分器版本、评分模式和重复运行差异。
性能成本必须与一致性一起发布
DeepInfer 公布了 Prefill 与 Decode 的性能曲线,测量环境分别使用 4 张和 64 张 SM100 GPU。仓库当前没有给出确定性模式开启与关闭的成对成本表。
部署方因此需要在自己的负载上同时报告:
- Prefill 和 Decode 吞吐;
- 首 Token 延迟、Token 间延迟与尾延迟;
- 显存、并发容量和失败率;
- Token 一致率、概率一致规则和未通过的验收单元。
负载形状会改变性能瓶颈。长前缀 Coding Agent、短对话与批量离线任务不应共享一个成本数字。站内的推理调优负载形状分析可以作为性能测试的配套框架。
一张可进入发布流程的工单
上线前要求以下工件同时存在:
- 冻结请求集:覆盖真实长度分布、混合批次、结构化输出和适用的多模态输入。
- 验收声明:每个测试单元写明保持不变的条件、主动改变的变量和相等规则。
- 实跑证据:目标硬件上的原始结果、比较日志和失败样本。
- 成本报告:确定性模式开关前后的吞吐、延迟、显存和容量。
- 环境指纹:足以复现每次运行的版本、硬件、拓扑、缓存和调度信息。
- 漂移策略:失败时阻断发布,或记录经过批准的兼容性变化与回滚方案。
DeepInfer 已经提供了一个质量不错的起点:明确的能力条件、可读的测试和清楚的开源边界。部署团队的工作,是把这些上游材料转换成自己的运行证据。只有持续通过的验收单元,才属于当前生产环境真正拥有的确定性能力。
常见问题
Temperature 设为 0,为什么还要测试?
Temperature 约束采样策略。GPU 归约、内核选择、批次组合、并行拓扑和版本变化仍可能改变数值路径,接近决策边界的 Token 可能随之翻转。
DeepInfer 如何开启确定性采样?
当前 README 要求 DEEPINFER_BATCH_INVARIANT=1、DEEPINFER_ENABLE_MTP_VARLEN=0,并在 SamplingParams 中设置固定 seq_seed。文档把这条能力路径标注为仅支持 NVIDIA。
支持 Ascend 950 是否意味着 Ascend 也有同等确定性保证?
不能这样推断。Ascend 950 位于框架支持硬件列表中,批次不变与确定性采样的说明则明确限定 NVIDIA。Ascend 路径需要单独的官方声明或部署实测。
第一项应该跑什么测试?
选择一条冻结请求,分别单独运行、放进混合批次、重启进程后运行,并在目标调度压力下运行。比较 Token ID 与 Log Probability,同时记录完整环境指纹。这组结果就是验收表的第一个有效单元。