DataLoader worker (pid 2872005) is killed by signal: Segmentation fault.

DataLoader worker (pid 2872005) is killed by signal: Segmentation fault.

查了网上的方法 将num_worker设置为0,对我不奏效。并且我一开始就感觉我的问题也不在于系统资源不足造成的进程被kill。因为之前设置8个进程,是没问题的。

这一次为什么出问题,是因为换了我自己的数据集去训练模型,我自己是做的点云相关的,我怀疑在我处理点云的时候出现了问题。但是具体问题不知道是什么。我一步一步定位我对点云的前处理函数。

最骚的是,我直接运行没有任何的warning,但是debug模式,每次运行到kill时候,有一个函数报了warning(不知道这是什么特性,怎么实现的,但是学到了)即:

invalid value encountered in add

invalid value encountered in add,数据类型错了。我肯定错误就在这里,因为我自己数据集我自己进行了数据转换(数据记录格式跟公开数据集不一样),然后打印出来进行add的两个操作数,发现有nan,那错误就在这里了。
并且这个nan应该不是np.nan,因为我直接使用np.nan进行相加是不报警告的。

追溯我的数据流,发现np.fromfile的dtype写的是np.float32, 我tofile之前的类型是np.float64,所以数值完全不对,还好报错了吧,不然都白训练!!所以读取之后shape是原来的两倍,但是数据不对,但是shape不同并不会报错。

继续追溯为什么nan会造成段错误,在后面函数里面,发现我的函数用jit修饰加速了一下,在这里面出现了段错误。如果去掉jit之后,会在具体的代码行报错,我的nan值无法进行转换。但是用jit修饰之后,会出现段错误segfault。

改正:读取的类型改为np.float64再astype为np.float32(不确定后续用float64会不会出现问题)
* *这里只适用于我的问题,希望大家一步一步调试确定自己的问题

希望大家注意一下数据类型(数据流)的读取(流动)。

还有大家在遇到jit加速的时候,调试的时候不妨去掉jit,或者重点注意一下jit函数(数据正确才是根本)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值