Ubuntu 20.04下numpy、Matplotlib部分函数执行卡住100%CPU无返回求助
故障根因分析与解决方案
你遇到的问题本质是底层系统依赖库冲突,以下是对应排查修复步骤:
1 优先排查OpenBLAS线程冲突(大概率匹配你的故障表现)
np.linalg.norm指定ord=2时会调用BLAS库的SVD计算接口,Anaconda和Ubuntu源默认携带的OpenBLAS库在多CPU核心/多GPU环境下经常出现线程亲和性配置错误,导致单线程死锁、单核CPU占满100%。同时OpenBLAS的冲突也会联动影响依赖底层数值计算库的matplotlib渲染逻辑。
验证方法
执行命令临时设置OpenBLAS单线程运行,再执行测试代码:
export OPENBLAS_NUM_THREADS=1 python3 your_test_code.py
如果测试代码正常运行即可确认是该问题。
永久修复方案
- 方案1:将单线程配置写入终端环境配置文件,执行以下命令即可:
echo 'export OPENBLAS_NUM_THREADS=1' >> ~/.bashrc source ~/.bashrc
- 方案2:替换numpy后端为英特尔MKL数学库,稳定性更强:
conda install -y libmkl mkl-service conda install -y numpy --force-reinstall
2 排查matplotlib后端冲突
你当前使用的TkAgg后端依赖系统的Tk图形库,容易和驱动、数值库冲突,可通过更换后端解决:
临时验证
在导入matplotlib后第一行添加后端切换代码,测试是否能正常运行:
import matplotlib matplotlib.use('Qt5Agg') # 交互场景用,非交互渲染可用Agg import matplotlib.pyplot as plt
永久修改默认后端
修改matplotlib配置文件~/.config/matplotlib/matplotlibrc,添加/修改以下配置:
backend: Qt5Agg
如果系统缺少Qt5依赖,执行命令安装即可:
sudo apt install -y python3-pyqt5 # Anaconda环境执行:conda install -y pyqt
3 排查内核与驱动兼容性问题
你当前使用的5.11.0 HWE内核和NVIDIA 470版本驱动存在已知兼容性问题,可尝试回退到Ubuntu 20.04默认的5.4 LTS内核验证:
- 重启系统,在GRUB引导界面选择「Ubuntu高级选项」
- 选择版本为5.4.x的内核启动,测试故障是否消失
4 修复损坏的系统依赖包
如果以上方案都无效,可尝试重新安装可能损坏的底层系统库:
sudo apt update sudo apt install -y --reinstall libopenblas-dev libgfortran5 libtk8.6 libx11-dev
内容的提问来源于stack exchange,提问作者WillZ
相关产品推荐
相关产品推荐

