PaddlePaddle / PaddleScience

PaddleScience is SDK and library for developing AI-driven scientific computing applications based on PaddlePaddle.
http://paddlescience-docs.rtfd.io/
Apache License 2.0
245 stars 131 forks source link

paddle和torch前向对齐,有误差 #868

Closed Yang-Changhui closed 3 weeks ago

Yang-Changhui commented 2 months ago

请提出你的问题 Please ask your question

你好,我现在有一个简单的前向,initencoder,相同的网络,相同输入,相同权重,使用reprod_log检查,误差为0.00067,这是最小测试单元, paddle_torch_forward_error:https://aistudio.baidu.com/projectdetail/7781433?sUid=650866&shared=1&ts=1713940796780 ,麻烦您帮忙检查一下,谢谢

HydrogenSulfate commented 2 months ago

F.interpolate存在diff好像是符合预期的,可以试下在CPU上运行上述程序,印象里CPU的结果能跟torch的GPU对齐。

Yang-Changhui commented 2 months ago

好的,谢谢。但是,这段测试代码,经过判断条件后,并没有进入generalize_padding函数,没有用到F.interpolate,这个能麻烦您再看一下吗

HydrogenSulfate commented 2 months ago

好的,谢谢。但是,这段测试代码,经过判断条件后,并没有进入generalize_padding函数,没有用到F.interpolate,这个能麻烦您再看一下吗

可以使用这个工具具体定位一下是具体哪一层导致的diff,https://github.com/PaddlePaddle/PaDiff

Yang-Changhui commented 2 months ago

@HydrogenSulfate 你好,设置"rtol":1e-6,"atol":1e-6,显示linear层有误差,但是linear的权重是一样的; 设置"rtol":1e-4,"atol":1e-7,可以 通过;但是使用reprod_log误差在相同的机器上为0.001,之前torch使用3060,paddle使用A100,误差为0.0006 image

HydrogenSulfate commented 2 months ago

@HydrogenSulfate 你好,设置"rtol":1e-6,"atol":1e-6,显示linear层有误差,但是linear的权重是一样的; 设置"rtol":1e-4,"atol":1e-7,可以 通过;但是使用reprod_log误差在相同的机器上为0.001,之前torch使用3060,paddle使用A100,误差为0.0006 image

  1. 确认对于同样的输入,F.pad在上述代码中是否能产生完全一致的结果
  2. 含有XXXNorm层时,输出的diff达到1e-4是有可能的,可以尝试把双方的norm层全部注释掉再对齐
HydrogenSulfate commented 2 months ago

@HydrogenSulfate 你好,设置"rtol":1e-6,"atol":1e-6,显示linear层有误差,但是linear的权重是一样的; 设置"rtol":1e-4,"atol":1e-7,可以 通过;但是使用reprod_log误差在相同的机器上为0.001,之前torch使用3060,paddle使用A100,误差为0.0006 image

  1. 确认对于同样的输入,F.pad在上述代码中是否能产生完全一致的结果
  2. 含有XXXNorm层时,输出的diff达到1e-4是有可能的,可以尝试把双方的norm层全部注释掉再对齐

另外对齐的时候尽量使用同样的卡,避免GPU硬件不同带来的的影响