Paddle
Paddle copied to clipboard
固定seed后,固定训练集的顺序,启动两个相同的训练程序,两次的loss值不完全一致,导致无法稳定复现结果
为使您的问题得到快速解决,在建立Issues前,请您先通过如下方式搜索是否有相似问题:【搜索issue关键字】【使用labels筛选】【官方文档】
-
版本、环境信息: Paddle version: 2.1.0 Paddle With CUDA: True OS: CentOS 6.3 Python version: 3.7.3 CUDA version: 10.2.89 cuDNN version: None.None.None Nvidia driver version: 440.33.01
-
训练信息 1)单机单卡 2)显存信息 3)Operator信息
-
问题描述: 第一次的输出结果
第二次的输出结果
初步排查后的结论,供参考:
- 两次网络中的参数值,比如Linear层中的W和b的数值完全一样,说明初始化权重一样
- 没有经过优化器梯度回传,loss值完全一样
- 经过优化器后,loss值在小数点后几位出现不一致
- 尝试过Adam,SGD,Adagrad,都能复现上述的结果
- 补充:在尝试了关闭gpu后,多次训练过程中的loss数值完全一致;开启gpu后,会复现上述结果。猜测可能是开启gpu后,某些不确定的因素导致的。
您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档、常见问题、历史Issue、AI社区来寻求解答。祝您生活愉快~
Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the API,FAQ,Github Issue and AI community to get the answer.Have a nice day!
是动态图还是静态图呢?
另外可以从2方面确认下: (1)请确认下代码中有无numpy相关的操作,可以设置下numpy的seed。 (2)尝试FLAGS_cudnn_deterministic=True,这个开关表示选择cuDNN中的确定性函数,但是可能会使性能较慢,可以调试看看是否受这个影响
如果依然没有解决,可以将您的代码整理为一个最小可复现代码,我们进一步排查。
是动态图,我整理了一下代码,帮忙排查一下
数据样例在demo/data数据集下
直接运行python train.py
即可开始训练
demo.tar.gz
具体需要如何配置环境呢?我尝试运行,提示 NoduleNotFoundError: No module named 'ernie'
python -m pip install paddle-ernie==0.2.0.dev1
其他的环境有什么要求吗?会有新的报错,PosixPath' object has no attribute 'tell'
其他的环境有什么要求吗?会有新的报错,PosixPath' object has no attribute 'tell'
这个问题可能是ERNIE套件的问题,参考https://github.com/PaddlePaddle/ERNIE#安装 手动安装ERNIE套件试一下。
git clone https://github.com/PaddlePaddle/ERNIE.git --depth 1
cd ERNIE
pip install -r requirements.txt
pip install -e .
我按照说明尝试了,但是并不能运行成功。辛苦你确认下
分别运行2次,是从第一个step 开始,2次训练的loss就无法对应上吗?还是在一段时间后才出现? 我看你补充了,仅在GPU下出现,有试过FLAGS_cudnn_deterministic=True测试吗?
我按照说明尝试了,但是并不能运行成功。辛苦你确认下
分别运行2次,是从第一个step 开始,2次训练的loss就无法对应上吗?还是在一段时间后才出现? 我看你补充了,仅在GPU下出现,有试过FLAGS_cudnn_deterministic=True测试吗?
- 由于每10个step打印loss,观察到的结果是,第2次或者第3次开始就会在小数点后几位无法对应上
- 尝试了FLAGS_cudnn_deterministic=True,同样能复现
- 不能成功运行,如果报错是
ValueError: (InvalidArgument) Tensor holds the wrong type, it holds float, but desires to be double.
,把train.py中第36行,float64改成float32,或者直接改weight=None
我排查了下,应该是GPU上 dropout op有问题,我们后续会进行修复
- GPU上,如果把dropout关掉,2次训练的结果可以保持一致
- CPU上,dropout关闭与否,结果都是一致
请问这个问题修复了吗?
请问这个问题修复了吗
@shizhh 你好,请问现在还有这个问题吗,dropout后面因为另一个问题改过