Open houj04 opened 4 hours ago
我在运行这个单测的时候:test/collective/fleet/test_dygraph_recompute_for_eager.py,注意到里面的组网代码有dropout算子,考虑到dropout的实现依赖于硬件,例如在CPU上和GPU上的行为肯定不一样,所以想着把它先注释掉。
test/collective/fleet/test_dygraph_recompute_for_eager.py
dropout
于是将下面的代码删除了:
(block_name + "_dropout", paddle.nn.Dropout(p=0.5)),
随后发现这个单测跑不过了。为了确定不是我本地环境的问题,我把这个修改提了个PR,想看看流水线上是什么情况。结果发现流水线也挂了。
PR在这里:https://github.com/PaddlePaddle/Paddle/pull/69006
对应的流水线作业:PR-CI-Coverage、PR-CI-Hygon-DCU-Test。
注意到报错信息里面有nan,并且报错的case的名字叫做
nan
FAIL: test_fc_net_with_fp16 (test_dygraph_recompute_for_eager.TestRecompute)
于是我想是不是因为有什么东西在FP32下够用,FP16下面不够用。于是我进一步尝试修改了这个地方:
原有版本是:
scaler = paddle.amp.GradScaler()
我给它改成了
scaler = paddle.amp.GradScaler(init_loss_scaling=512)
理由是,这个初值,默认值是65536,但是FP16的范围本来只有-65504到66504,所以肯定会爆掉的。改小了就不挂了,倒是也符合预期。
我想问的问题是:
1、要说是爆掉的原因话,原版的单测也应该有爆掉的情况,为啥没有出现?而偏偏是删掉了那个dropout之后才踩上?
2、这里修改初始化,加个参数为512(其实我试了,再大一点也行,但是原有的默认值65536实在是太大了),是合理的吗?我能提个PR给它修掉不?
No response
不建议修改GradScale的默认参数,这样会改变这个API的行为,属于不兼容升级。可以直接修改单测中GradScale传入的参数。 理论上,这个单测应该一致挂,可能删掉Dropout触发了CI运行这个单测,才暴露了这个问题。
bug描述 Describe the Bug
我在运行这个单测的时候:
test/collective/fleet/test_dygraph_recompute_for_eager.py
,注意到里面的组网代码有dropout
算子,考虑到dropout
的实现依赖于硬件,例如在CPU上和GPU上的行为肯定不一样,所以想着把它先注释掉。于是将下面的代码删除了:
随后发现这个单测跑不过了。为了确定不是我本地环境的问题,我把这个修改提了个PR,想看看流水线上是什么情况。结果发现流水线也挂了。
PR在这里:https://github.com/PaddlePaddle/Paddle/pull/69006
对应的流水线作业:PR-CI-Coverage、PR-CI-Hygon-DCU-Test。
注意到报错信息里面有
nan
,并且报错的case的名字叫做于是我想是不是因为有什么东西在FP32下够用,FP16下面不够用。于是我进一步尝试修改了这个地方:
原有版本是:
我给它改成了
理由是,这个初值,默认值是65536,但是FP16的范围本来只有-65504到66504,所以肯定会爆掉的。改小了就不挂了,倒是也符合预期。
我想问的问题是:
1、要说是爆掉的原因话,原版的单测也应该有爆掉的情况,为啥没有出现?而偏偏是删掉了那个
dropout
之后才踩上?2、这里修改初始化,加个参数为512(其实我试了,再大一点也行,但是原有的默认值65536实在是太大了),是合理的吗?我能提个PR给它修掉不?
其他补充信息 Additional Supplementary Information
No response