使用核心转储导入 numba 崩溃
Importing numba crashes with core dump
我最近按照“软件中心”的建议在我的 Ubuntu 机器 (Ubuntu 18.04.5 LTS
) 上执行了各种软件更新。
现在,当我尝试通过
导入 numba
(numba==0.51.2
)
python3 -c 'import numba'
我收到以下错误
double free or corruption (top) Aborted (core dumped)
当我使用全新 numba
安装创建新的 conda 环境时,也会发生同样的情况。
我已经通过
查看了核心转储
gdb -c core
和
thread apply all bt full
但我只得到内存地址信息。我在我的机器上使用 python 3.6.9,但我也在新的 conda 环境中尝试了 3.8,我得到了同样的错误。
我怀疑软件更新是造成上述错误的原因。但我可能弄错了,这里还发生了其他事情。
是否有任何其他方法可以获取有关 python 崩溃位置的更多信息?我真的不想一个一个地浏览更新的库并回滚以查找错误。
至少我现在找到了导致这个错误的库。
我所做的是以下步骤:
- 将
import numba
放入文件中,例如importNumba.py
- 通过
locate --regex python3.*-gdb.py
找到 python3.X-gdb.py
。在我的例子中是 /usr/share/gdb/auto-load/usr/bin/python3.6-gdb.py
- 运行 python 通过
gdb python3
在调试模式下 - gdb 控制台打开
- 在 gdb 控制台中执行
source /usr/share/gdb/auto-load/usr/bin/python3.6-gdb.py
- 这会将 python 扩展加载到 gdb
- 在 gdb 控制台中执行
run importNumba.py
- 这将产生上述错误
- 在 gdb 控制台中执行
py-bt
这给
Traceback (most recent call first):
File "/usr/local/lib/python3.6/dist-packages/llvmlite/binding/ffi.py", line 113, in __call__
return self._cfn(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/llvmlite/binding/dylib.py", line 29, in load_library_permanently
_encode_string(filename), outerr):
File "/usr/local/lib/python3.6/dist-packages/numba/__init__.py", line 151, in _try_enable_svml
llvmlite.binding.load_library_permanently("libsvml.so")
File "/usr/local/lib/python3.6/dist-packages/numba/__init__.py", line 201, in <module>
config.USING_SVML = _try_enable_svml()
<built-in method exec of module object at remote 0x7ffff7fb7638>
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "importNumba.py", line 1, in <module>
import numba
所以 libsvml.so
似乎有问题。
我发现 numba
允许通过禁用 SVML
将环境标志 NUMBA_DISABLE_INTEL_SVML
设置为 0 以外的值,请参阅 https://numba.pydata.org/numba-doc/dev/reference/envvars.html
正在将 importNumba.py
更改为
import os
# note that this must be executed before 'import numba'
os.environ['NUMBA_DISABLE_INTEL_SVML'] = '1'
import numba
和 运行 通过 python3 importNumba.py
安装它现在可以正常工作。
这些是我使用的一些有用的资源:
https://fedoraproject.org/wiki/Features/EasierPythonDebugging#New_gdb_commands
https://wiki.python.org/moin/DebuggingWithGdb
我最近按照“软件中心”的建议在我的 Ubuntu 机器 (Ubuntu 18.04.5 LTS
) 上执行了各种软件更新。
现在,当我尝试通过
numba
(numba==0.51.2
)
python3 -c 'import numba'
我收到以下错误
double free or corruption (top) Aborted (core dumped)
当我使用全新 numba
安装创建新的 conda 环境时,也会发生同样的情况。
我已经通过
查看了核心转储gdb -c core
和
thread apply all bt full
但我只得到内存地址信息。我在我的机器上使用 python 3.6.9,但我也在新的 conda 环境中尝试了 3.8,我得到了同样的错误。
我怀疑软件更新是造成上述错误的原因。但我可能弄错了,这里还发生了其他事情。
是否有任何其他方法可以获取有关 python 崩溃位置的更多信息?我真的不想一个一个地浏览更新的库并回滚以查找错误。
至少我现在找到了导致这个错误的库。 我所做的是以下步骤:
- 将
import numba
放入文件中,例如importNumba.py
- 通过
locate --regex python3.*-gdb.py
找到python3.X-gdb.py
。在我的例子中是/usr/share/gdb/auto-load/usr/bin/python3.6-gdb.py
- 运行 python 通过
gdb python3
在调试模式下 - gdb 控制台打开 - 在 gdb 控制台中执行
source /usr/share/gdb/auto-load/usr/bin/python3.6-gdb.py
- 这会将 python 扩展加载到 gdb - 在 gdb 控制台中执行
run importNumba.py
- 这将产生上述错误 - 在 gdb 控制台中执行
py-bt
这给
Traceback (most recent call first):
File "/usr/local/lib/python3.6/dist-packages/llvmlite/binding/ffi.py", line 113, in __call__
return self._cfn(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/llvmlite/binding/dylib.py", line 29, in load_library_permanently
_encode_string(filename), outerr):
File "/usr/local/lib/python3.6/dist-packages/numba/__init__.py", line 151, in _try_enable_svml
llvmlite.binding.load_library_permanently("libsvml.so")
File "/usr/local/lib/python3.6/dist-packages/numba/__init__.py", line 201, in <module>
config.USING_SVML = _try_enable_svml()
<built-in method exec of module object at remote 0x7ffff7fb7638>
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "importNumba.py", line 1, in <module>
import numba
所以 libsvml.so
似乎有问题。
我发现 numba
允许通过禁用 SVML
将环境标志 NUMBA_DISABLE_INTEL_SVML
设置为 0 以外的值,请参阅 https://numba.pydata.org/numba-doc/dev/reference/envvars.html
正在将 importNumba.py
更改为
import os
# note that this must be executed before 'import numba'
os.environ['NUMBA_DISABLE_INTEL_SVML'] = '1'
import numba
和 运行 通过 python3 importNumba.py
安装它现在可以正常工作。
这些是我使用的一些有用的资源: https://fedoraproject.org/wiki/Features/EasierPythonDebugging#New_gdb_commands https://wiki.python.org/moin/DebuggingWithGdb