前言
使用python搞深度学习经常会遇到抽风的段错误,但一直未找到原因在哪,都是玄学发生,玄学修复,现在终于发现了一些“线索”,发布此文用于记录积累导致段错误的原因及解决方法。
线索发现
>>> import tensorflow as tf
>>> tf.ones([3,4]).numpy() # 测试tensorflow是否正确安装,成功执行并得到正确结果
>>> exit() # 距离上一行之间无任何执行代码,按理说应该正常退出,但Segment Core(即段错误exit code 139)
注:个人的环境中几个主要的库是tensorflow-gpu 2.3.0 numpy scikit-learn
分析
深度学习往往涉及相关库(numpy、scikit-learn、tensorflow等)较多,并且每个库又有各种版本,我在很早前就了解到这些库有时看上去是顺利安装了,但实际上仍存在一定的“兼容”问题,比如曾遇到sklearn的import必须在tensorflow之前,否则就会报错退出-_-||。
通过短短3行代码分析,想到这样一点:虽然没有显式import numpy,但是tensorflow一定依赖numpy吧?(毕竟.numpy()都出来了= =)。那么是不是跟上面提到的情况类似?难道也是因为库之间的依赖兼容性的问题?于是我做了如下尝试:
>>> import numpy as np
>>> import tensorflow as tf
>>> tf.ones([3,4]).numpy()
>>> exit() # exit with code 0,成功结束了!
果不其然,在显式import numpy之后段错误就消失了。似乎是这个原因,然