百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
返回工具页/返回 Issues 列表
#8161·onnx

[提案] 为随机运算符(以 RandomUniform 开始)提供可选的确定性生成器模式

作者: strimo378创建于 2026年7月5日更新于 2026年9月13日
标签topic: operatortopic: enhancement

问题。 随机运算符(RandomUniform、RandomNormal、RandomUniformLike、RandomNormalLike、Bernoulli、Multinomial)根据规范是非确定的:即使设置了seed,结果在不同实现中也会有所不同。因此,它们的符合状态今天要么无法测量,要么被误测: 1. 六个随机运算符中有五个根本没有后端节点测试(RandomUniform、RandomNormal、RandomUniformLike、RandomNormalLike、Multinomial) — 对于非确定的运算符,无法定义预期输出。ONNX 后端分数板从节点测试套件中获取每个运算符的状态(onnx/backend/test/report/coverage.py仅在至少一个通过测试中包含运算符时才将运算符标记为"通过"),因此这些五个运算符在当前分数板结果中被报告为每个后端都未通过,无论实际支持如何 — 在当前分数板结果中,onnxruntime 将所有五个运算符都显示为"未通过"。 2. 唯一一个具有节点测试的随机运算符Bernoulli的测试实际上是无法满足的。 它们的预期输出来自 numpy 的 RNG;测试源代码本身指出,即使指定了种子,实现也可能不会生成相同的值。ONNX 自己的参考后端套件就因为这个原因而将它们排除在外(onnx/test/test_backend_reference.py:以下测试无法通过,因为它们包括生成随机数的操作),并且在分数板上,onnxruntime 将它们失败。 3. 同一个根本原因也可能隐藏在绿色状态后面:Dropout被报告为"通过",因为来自(1)的每个运算符指标只要求包含该运算符的一个通过测试,而 Dropout 的确定性推理模式测试通过 — 尽管其实际随机行为在每个对其进行测试的测试中都失败(对于 onnxruntime,所有四个 test_training_dropout* 案例中,如果指定了非零比率,都会失败,因为它们的预期输出是 numpy RNG 提供的随机数)。 红色表示RandomUniform,绿色表示Dropout — 同一个根本差异,且两种颜色都不反映实际支持。 4. 除了测试之外,可重现性也是真正的用户要求(调试、回归测试、安全关键的认证工作流程),而今天根本无法在可移植的 ONNX 模型中表达。

内容来源: onnx/onnx

查看 GitHub 原文在 GitHub 查看讨论