我将机器学习模型(通常是 GPU)部署到各种环境中。我工作在 ML 研发和 devops 的边缘,所以我对可重复性非常感兴趣,让我发疯的一件事是当模型输出相似但不是逐字节相同的值时,会使任何基于哈希的自动化测试感到沮丧. 例如,这是来自相同样本、推理模型、代码、容器映像等的分数,但一个在 Titan 上,一个在 RTX 2080 上。
Titan X = 0.9887396097183228
RTX 2080 = 0.9887396693229675
这是 6.0e-08 或大约 60 ppb 的相对误差。显然,这是“相同的数字”,完全在 IEEE 754 和 GPU 处理的怪异范围内。
我想截断我的算法的输出,因为这简化了自动化测试的工作,但问题就变成了,如何四舍五入来实现这一点,以及多少精度?听起来很简单,但以这个注释为例numpy.around
由于 IEEE 浮点标准 [R9] 中小数部分的不精确表示以及按 10 的幂缩放时引入的错误,结果也可能令人惊讶。
百万分之一(通常为 0.0-1.0 置信值)似乎是合理的,但我不确定这种方法是否存在任何微妙的问题。