网络前向传播正常,能正常得到loss: Tensor(shape=[1], dtype=float32, place=CUDAPlace(0), stop_gradient=False,
[106.43949890])
反向传播loss.backward()报Segmentation fault: 11,且没有出现其他报错信息。
通过cpp log定位能定位到具体出错的op,但是通过其他方式绕过该op,则会出现其他op报错。
环境:
Paddle2.0
gpu环境, NVIDIA Corporation Device 1023m, cuda:10.0。
6条答案
按热度按时间nr9pn0ug1#
能方便提供下出现问题的代码环境么
ybzsozfc2#
可以正常forward、backward一次,第二次forward报错。
更正一下,上诉问题出现在gpu环境,而标题所描述的问题发生在cpu环境。
piwo6bdm3#
好的,我们复现定位下,非常感谢给予的反馈
nwlqm0z14#
从日志上看,挂在stack_grad这个op了,这个op的实现输入检查没写好,在没有确定输出是否是空指针的情况下就调用了,导致了段错误
一方面,后面需要在这里增强一下输入检查,至少以报错的形式,提示这里是输出为空导致
另一方面,您这里会报这个问题,大概率是因为stack的部分前向输入是stop_gradient=True的,也就是不生成反向变量,所以这里反向变量为空,麻烦您check一下你stack的输入都有哪些,这些输入的stop_gradient属性是否设置成了False,如果不是,您需要调用tensor.stop_gradient=False配置一下,paddle.to_tensor接口的该熟悉默认为True
p1iqtdky5#
您好,我这边的代码逻辑就是stack的输入里会有一部分的tensor是没有梯度的。这样操作在torch里不会报错,可以跑通。
ddhy6vgd6#
紧急修复方案可以通过设置stop_gradient来解决该问题; 同时我们会同步增强op实现和完善报错信息,可以不设置stop_gradient也能保证可以正确运行;修复完成之后我们会把pr信息同步 | | hong***@***.***| Signature is customized by Netease Mail Master 在2021年03月23日 20:04,nickyoungforu 写道: stop_gradient 您好,我这边的代码逻辑就是stack的输入里会有一部分的tensor是没有梯度的。这样操作在torch里不会报错,可以跑通。 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.