#AI#大模型#DevOps#开源

跨硬件与运行时的推理可复现性:从制品快照到统计等价门禁

固定 seed 仍可能因 GPU、内核、批处理和浮点归约顺序产生不同输出。本文定义分级复现目标、完整环境快照、token 级回放和跨平台等价阈值。

本文要点

  • 主题聚焦:AI、大模型、DevOps、开源
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年4月15日·更新于 2026年7月20日

同一个模型、同一个 prompt、同一个 seed,在两张 GPU 上仍可能生成不同答案。浮点加法顺序、融合内核、cuBLAS 或 cuDNN 算法、量化实现、张量并行归约、动态批处理和随机数消费顺序都可能改变很小的 logits 差异;当两个 token 分数接近时,差异会沿自回归生成放大。把“无法逐位一致”当作正常现象不够,平台仍需定义自己能承诺哪一级复现,并证明升级没有改变业务结果。

先定义四级目标

第一级是制品复现:给定记录,可以取得完全相同的权重、tokenizer、adapter、聊天模板和运行时镜像。第二级是环境复现:硬件 SKU、驱动、CUDA、cuBLAS、cuDNN、编译器、内核选择和并行拓扑一致。第三级是 token 复现:同一编码输入与解码参数产生相同输出 token ID。第四级是统计等价:在允许非确定内核或不同硬件时,固定评估集上的质量、概率分布和性能仍处于预设区间。

不同用途选择不同目标。事故取证和单元测试通常需要前三层;A100 迁移 H100 很难承诺逐位一致,但必须满足第四层。报告若只写“输出差不多”,既不能重放,也无法判断下一次差异是否更大。LLM 评估框架 提供任务指标,本方案补充环境和数值证据。

快照所有影响 logits 的输入

请求记录至少包含模型与 tokenizer digest、输入 token ID、attention mask、adapter、量化配置、聊天模板、seed、temperature、top-p、top-k、最大输出、stop token、logit processor 顺序和输出 token ID。环境记录容器 digest、GPU 名称与计算能力、驱动、CUDA/cuBLAS/cuDNN、推理框架 commit、编译参数、张量/流水线并行度、批大小、请求在批中的位置及是否启用 CUDA Graph。

json
{
  "runId": "replay-2026-07-18-042",
  "model": "sha256:75bf...",
  "runtime": "sha256:b901...",
  "gpu": "H100-SXM-80GB",
  "driver": "575.57.08",
  "cuda": "12.9",
  "seed": 41872,
  "sampling": { "temperature": 0, "topP": 1 },
  "scheduler": { "maxNumSeqs": 64, "tensorParallel": 2 }
}

只保存 prompt 文本不够,因为规范化或 tokenizer 变化会产生另一串 ID;只保存 seed 也不够,因为并发请求可能改变随机数消费顺序。每个请求使用由全局 seed 与稳定 request ID 派生的独立随机流,不能共享一个随批次推进的全局生成器。可重放数据的组织方式可以参考 Agent 回放评估,同时对敏感输入做访问控制和保留期限管理。

确定性模式需要显式成本

在 PyTorch 中可开启确定性算法并关闭会选择不同算法的 benchmark;特定 CUDA 配置还可能需要 CUBLAS_WORKSPACE_CONFIG=:4096:8。这类开关会降低吞吐,且不保证跨发行版、跨平台完全一致。若某算子没有确定实现,应让测试失败并列出算子,不能静默回退。生产是否启用取决于风险,但测试环境必须能复现发布报告。

即使 temperature 为零,greedy decoding 也不必然跨硬件一致:接近并列的 logits 可能因归约误差交换顺序。因此同时保存每步 top-k token 与 logprob 差异。若第一处输出分叉前两个 token 只差 1e-6,它与输入编码错误导致的大幅分布变化不是同一类故障。

构建 hardware x driver x runtime x precision x parallelism 矩阵,选取生产真正会运行的组合。冻结样本覆盖短文本、长上下文、中文、代码、结构化输出、接近停止边界和已知低 margin token。先在单请求无批处理模式跑 token 一致性,再以真实到达序列跑动态批处理,区分数值内核与调度影响。

用等价区间取代模糊容忍

对于必须逐 token 一致的审计任务,任何 token 分叉都阻止发布。对于开放式回答,可提前冻结统计门禁,例如:关键规则用例 100% 通过,任务准确率相对旧环境下降不超过 0.5 个百分点,结构化输出成功率不下降,首个分叉前 logits 的最大绝对误差低于约定值,1,000 个固定样本的输出长度和拒答率落在历史 95% 区间。采样任务对每个输入运行多个独立 seed,再比较分布,不能用一次输出下结论。

性能也属于环境契约。同一质量下记录首 token、每 token 延迟、吞吐、显存与错误率;为了确定性关闭高性能内核后若无法满足 SLO,就必须明确选择统计等价模式,而不是偷偷恢复非确定配置。上线监控可接入 LLM SLO 监控,并按环境 digest 分组,避免新旧副本平均后掩盖漂移。

升级先影子回放,再让固定租户进入新矩阵。若关键规则失败、统计区间越界、首次分叉明显提前或性能超阈值,将路由切回旧容器 digest 与旧硬件池;两边都保留原始 token 证据。发布和恢复流程可通过 模型服务金丝雀发布 实施,但旧驱动、镜像和容量必须在观察窗内真实可用。

可靠复现不是声称所有 GPU 都会逐位相同,而是准确说明哪些组合能得到同一 token,哪些只能保证统计等价,并让每一个差异都能追溯到确定制品、环境、调度与数值证据。

延伸阅读

Related

相关推荐