调用scanpy的sc.pp.neighbors时报LLVM ERROR: __svml_sqrtf8错误如何解决
根本原因
你遇到的LLVM ERROR: Symbol not found: __svml_sqrtf8报错是numba版本与英特尔短向量数学库(SVML)的兼容问题导致的,进程触发该错误后会直接终止,对应Jupyter环境下就是内核崩溃,和数据集大小无关。
解决方案
方案1:更换numba到兼容版本
你当前使用的numba 0.54.0是触发该兼容问题的高发版本,替换为验证过的稳定版本即可解决:
- 若使用pip管理依赖:
先卸载现有版本:pip uninstall numba -y
再安装兼容版本:pip install numba==0.55.2 - 若使用conda管理依赖:
直接执行:conda install numba=0.55.2 -c conda-forge
安装完成后重新运行sc.pp.neighbors(adata)即可。
方案2:禁用numba的SVML优化(无需改动依赖版本)
如果不想调整现有环境的依赖版本,可以在导入scanpy前添加环境变量关闭有问题的SVML调用,在代码最开头加入以下内容即可:
import os os.environ['NUMBA_DISABLE_INTEL_SVML'] = '1' import scanpy as sc # 后续保持原有代码不变
该方案仅关闭存在兼容问题的优化项,对2万细胞规模的数据集来说,计算速度差异几乎感知不到。
方案3:切换近邻计算后端(无需改动依赖版本)
sc.pp.neighbors支持切换不依赖numba的计算后端,只需要修改一行调用代码即可避开相关问题:
把原来的调用改为:sc.pp.neighbors(adata, method='sklearn')
内容的提问来源于stack exchange,提问作者Ofir Shorer
相关产品推荐
相关产品推荐

