Operator Numerical Check
Operator Numerical Check
姚伟峰
基本公式
其中:
atol: absolute tolerance
rtol: relative tolerance
NaN
and Inf
行为:
NaN
s are treated as equal if they are in the same place and if equal_nan=True
. Inf
s are treated as equal if they are in the same place and of the same sign in both arrays.
软件行为
NumPy
Numpy对应的接口有两个:
-
numpy.allclose(a, b, rtol=1.e-5, atol=1.e-8, equal_nan=False)
-
testing.assert_allclose(actual, desired, rtol=1e-07, atol=0, equal_nan=True)
PyTorch
PyTorch采用Numpy相同的default tolerance,API为:
torch.allclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=False)。
每个op可使用default也可自设,具体每个op的tolerance可见source code; Caffe2算子的tolerance可见source code。
Examples
op 数据类型 absolute tolerance relative tolerance MatMul(FWD) FP32 1e-4 1e-4 MatMul(FWD) FP16 150 * 1e-4 150 * 1e-4 from code
TensorFlow
TF使用如下test util判断:
assertAllCloseAccordingToType(a, b, rtol=1e-06, atol, float_rtol, float_atol, half_rtol, half_atol, bfloat16_rtol, bfloat16_atol, msg=None) 或它的简化版本ssertAllClose。
对不同的数据类型,default tolerance如下:
数据类型 | absolute tolerance | relative tolerance |
FP64 | 2.22e-15 | 2.22e-15 |
FP32 | 1e-6 | 1e-6 |
FP16 | 1e-3 | 1e-3 |
BF16 | 1e-2 | 1e-2 |
TF default tolerance的选择标准描述如下:
具体每个op的tolerance可见相应op的test code或相应kernel的test code。
Examples
op 数据类型 absolute tolerance relative tolerance MatMul(FWD) FP32 3e-5 3e-5 MatMul(FWD) FP16 0.2 0.2 from code