如果计算精度误差比较大,那么可能为安培架构的GPU引入的TF32数值类型以及Torch等框架会自动启用TF32计算造成的。TF32可简单理解为FP16的精度,FP32的表示范围,带来了更强的性能但是可能更差的精度。该问题可参考Torch官方文档:文档一般来说TF32够用,但是如果权重值有比较大的异常数值(一般没有)时会出现较大误差。
从上面的结果可以发现第一组A和B计算出的结果,GPU对比CPU的误差比较大,主要原因在于这个A矩阵中有比较大的数字(绝对值),而第二组随机初始化的A和B,GPU对比CPU的误差小很多。如何避免上述误差?在顶部输入以下代码可以禁止使用TF32计算。代码如下: