升级128GB内存后Ubuntu桌面Python代码运行崩溃求助
问题描述
共享台式机内存从64GB升级至128GB后,运行部分Python代码频繁崩溃。该台式机配备128GB内存、16核CPU,但运行时内存占用不足40GB;同款脚本在我的16GB内存笔记本上运行无异常。
崩溃代码示例
终端运行代码
cellbender remove-background \ --input /home/owner/mnt/DATA/raw_feature_bc_matrix.h5 \ --output /home/owner/mnt/DATA/cellbender_output.h5 \ --expected-cells 12044 \ --total-droplets-included 15000 \ --fpr 0.01 \ --epochs 150
Jupyter Notebook运行代码
n_pcs = 50 import pdb def your_function(): pca_model = sklearn.decomposition.PCA(n_components=n_pcs) pca_model.fit(df_adata.values.T) cumulative_variance_ratio = np.cumsum(pca_model.explained_variance_ratio_)
meta_data = adata.obs data_mat = adata.obsm['X_pca'] import harmonypy as hm ho = hm.run_harmony(data_mat, meta_data, 'experiment')
台式机配置
- 系统:Ubuntu 18.04.3 LTS
- 内存:125.7 GiB
- 处理器:Intel® Xeon(R) E-2288G CPU @ 3.70GHz × 16
- 显卡:Radeon RX 570 Series (POLARIS10, DRM 3.35.0, 5.4.0-150-generic, LLVM 9.0.0)
- 桌面环境:GNOME 3.28.2
- 架构:64位
- 磁盘:502.9 GB
Conda环境版本
| 名称 | 版本 |
|---|---|
| python | 3.8.16 |
| cellbender | 0.2.2 |
| matplotlib | 3.4.2 |
| numpy | 1.24.3 |
| pandas | 1.4.1 |
| scanpy | 1.9.1 |
| harmonypy | 0.0.5 |
| scikit-learn | 1.2.2 |
| jupyter | 1.0.0 |
已尝试方案
- 同事的R脚本运行正常,怀疑Conda包版本不兼容,复制笔记本环境无效
- 限制内存至32GB未解决问题
排查方向
- 检查内存硬件兼容性:内存升级后可能存在型号不匹配、插槽接触不良问题。可重新插拔内存,或使用
memtest86+工具检测内存故障。 - 调整系统内存内核参数:Ubuntu默认的内存超额提交设置可能不适应大内存环境,临时修改测试:
若有效,写入sudo sysctl vm.overcommit_memory=1/etc/sysctl.conf永久生效。 - 限制CPU核心使用数:16核CPU下,部分Python库默认会占用全部核心,可能引发线程冲突。运行代码前设置:
- 终端:
export OMP_NUM_THREADS=8 - Jupyter:
import os; os.environ['OMP_NUM_THREADS'] = '8'
- 终端:
- 强制Cellbender使用CPU运行:台式机AMD显卡可能存在GPU驱动适配问题,禁用GPU加速测试:
cellbender remove-background --input /home/owner/mnt/DATA/raw_feature_bc_matrix.h5 --output /home/owner/mnt/DATA/cellbender_output.h5 --expected-cells 12044 --total-droplets-included 15000 --fpr 0.01 --epochs 150 --cpu-only - 排查磁盘IO与权限:输出文件位于挂载磁盘,可能存在IO瓶颈或权限问题。将文件移至本地磁盘测试,同时检查读写权限。
- 升级系统内核与依赖:Ubuntu 18.04的5.4.0-150内核较老,对大内存支持有限。执行以下命令升级:
sudo apt update && sudo apt upgrade -y - 重建Conda环境并指定底层依赖:复制环境无效可能是系统底层线性代数库差异,重新创建环境时指定兼容库:
conda create -n new_env python=3.8.16 conda activate new_env conda install -c conda-forge cellbender=0.2.2 scanpy=1.9.1 harmonypy=0.0.5 scikit-learn=1.2.2 numpy=1.24.3 blas=openblas
内容的提问来源于stack exchange,提问作者Aki
相关产品推荐
相关产品推荐

