Zhang Ting
Zhang Ting
是动态图还是静态图呢? 另外可以从2方面确认下: (1)请确认下代码中有无numpy相关的操作,可以设置下numpy的seed。 (2)尝试FLAGS_cudnn_deterministic=True,这个开关表示选择cuDNN中的确定性函数,但是可能会使性能较慢,可以调试看看是否受这个影响 如果依然没有解决,可以将您的代码整理为一个最小可复现代码,我们进一步排查。
具体需要如何配置环境呢?我尝试运行,提示 NoduleNotFoundError: No module named 'ernie'
其他的环境有什么要求吗?会有新的报错,PosixPath' object has no attribute 'tell'
我按照说明尝试了,但是并不能运行成功。辛苦你确认下 分别运行2次,是从第一个step 开始,2次训练的loss就无法对应上吗?还是在一段时间后才出现? 我看你补充了,仅在GPU下出现,有试过FLAGS_cudnn_deterministic=True测试吗?
我排查了下,应该是GPU上 dropout op有问题,我们后续会进行修复 - GPU上,如果把dropout关掉,2次训练的结果可以保持一致 - CPU上,dropout关闭与否,结果都是一致
> Details 贴一下报错日志是什么
这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。
目前此PR引起了ppyolov2模型运行失败,报错如下:  可能与下面的修改有关,在fp16数据类型下,计算过程可以使用fp32,但是输入输出需要保持fp16精度,pr中修改了dx的数据类型。
- 性能数据是如何统计得到的,是否可以贴一下运行的日志? - 看相对误差还是比较大的,这2个算子的实现都用了eigen或者cub数学库,怀疑其中的sum运算是否并不是fp32精度呢?这块或许只能通过查询这些数学库的内部实现或者文档,因为fp16的累加会造成比较大的误差。 整体实现上建议参考[性能优化方法](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/op_optimization/op_optimization_method_introduction_cn.html)中的介绍,看是否可以尝试使用Kernel Primitive API,其中有Reduce的使用案例。换成CUDA实现,比较好控制Kernel内部计算的一些精度问题,同时Kernel Primitive API或许可以解决目前性能差的问题。
> 我是用paddle下benchmark的repo,测试的性能。我单独调试了thrust,发现了明显的精度差距,所以老师建议,这里用kps重新实现这部分算法? 性能这块只要fp16明显好于fp32对于这个任务就可以接受,可以自己多设置一些shape测试,上传下你的测试日志。需要看看是否在大部分情况下都慢?另外我们也可以通过日志确认下统计的数据是不是存在问题。 精度方面的话,数学库由于无法看到内部实现,精度问题并不好查。小一点的shape会有这么大的误差吗?