使用核心转储导入 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 崩溃位置的更多信息?我真的不想一个一个地浏览更新的库并回滚以查找错误。

至少我现在找到了导致这个错误的库。 我所做的是以下步骤:

  1. import numba放入文件中,例如importNumba.py
  2. 通过 locate --regex python3.*-gdb.py 找到 python3.X-gdb.py。在我的例子中是 /usr/share/gdb/auto-load/usr/bin/python3.6-gdb.py
  3. 运行 python 通过 gdb python3 在调试模式下 - gdb 控制台打开
  4. 在 gdb 控制台中执行 source /usr/share/gdb/auto-load/usr/bin/python3.6-gdb.py - 这会将 python 扩展加载到 gdb
  5. 在 gdb 控制台中执行 run importNumba.py - 这将产生上述错误
  6. 在 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