如何在 Slurm 作业中正确加载动态链接库以支持 petsc4py

星瑶姑娘_1652

星瑶姑娘_1652

2026-11-03

614人浏览

原创

如何在 Slurm 作业中正确加载动态链接库以支持 petsc4py

在 Slurm 中运行依赖 PETSc/petsc4py 的 Python 脚本时,常因节点间环境差异导致 liblapack.so.3 等共享库找不到;根本原因在于交互式会话所在节点预装了系统级 LAPACK,而计算节点需显式加载对应模块。

在 slurm 中运行依赖 petsc/petsc4py 的 python 脚本时,常因节点间环境差异导致 `liblapack.so.3` 等共享库找不到;根本原因在于交互式会话所在节点预装了系统级 lapack,而计算节点需显式加载对应模块。

当您在本地 shell 中成功导入 petsc4py,却在 srun 执行时遇到如下错误:

ImportError: liblapack.so.3: cannot open shared object file: No such file or directory

这并非 Python 或 petsc4py 安装问题,而是运行时动态链接器无法定位底层线性代数库(如 LAPACK)。Slurm 作业通常调度到专用计算节点,这些节点往往不预装系统级科学计算库(如 /usr/lib64/liblapack.so.3),而依赖模块系统(如 Lmod)按需加载。

✅ 正确解决方案:显式加载 lapack 模块

您已在脚本中加载了 openblas/latest,但 PETSc 编译时可能链接的是 lapack(而非仅 OpenBLAS),尤其当使用系统或模块提供的 PETSc 时。因此,必须补全 lapack 模块:

Python Pep Authoring
Python Pep Authoring

依据官方 python/peps仓库规则起草、审阅、编辑或准备 Python 改进提案(PEP),用于处理 PEP 文本和元数据头部。

下载
#!/bin/bash
#SBATCH --job-name=petsc4py_import_test      
#SBATCH --ntasks=2                 
#SBATCH --cpus-per-task=8        
#SBATCH --time=00:30:00            
#SBATCH --output=output.log        
#SBATCH --error=error.log          
#SBATCH --nodes=1                  

source $HOME/.bash_profile
module purge
# 关键修正:添加 lapack/latest(顺序建议放在 openblas 之后,避免符号冲突)
module load python/3.10.0 openmpi gcc openblas/latest lapack/latest slurm
source $HOME/my_env/bin/activate

# 推荐:显式导出关键库路径(增强健壮性)
export LD_LIBRARY_PATH="${LAPACK_ROOT}/lib:${OPENBLAS_ROOT}/lib:${LD_LIBRARY_PATH}"

srun --export=ALL --mpi=pmix_v3 python3 petsc4py_test.py

? 验证模块是否提供所需库:可在登录节点执行 module show lapack/latest,检查输出中是否包含 liblapack.so* 的路径;也可运行 module load lapack/latest && find $LAPACK_ROOT -name "liblapack.so*" 快速确认。

⚠️ 注意事项与最佳实践

  • 不要依赖 --export=ALL 解决所有环境问题:该参数仅传递当前 shell 的环境变量,但模块加载产生的 LD_LIBRARY_PATH、PETSC_DIR 等变量需在 srun 前已生效(即 module load 必须在 srun 之前)。
  • 避免模块加载顺序冲突:若同时加载多个 BLAS/LAPACK 相关模块(如 openblas, lapack, scalapack),建议按依赖关系排序,并优先使用同一供应商的配套模块(例如 Intel MKL 提供的统一 BLAS+LAPACK,或 OpenBLAS + Reference LAPACK)。
  • 调试技巧:在作业脚本开头添加诊断命令,快速定位缺失库:
    srun --export=ALL bash -c 'echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"; ldconfig -p | grep lapack; python3 -c "from petsc4py import PETSc; print(PETSc.Sys.getVersion())"'
  • 长期建议:若频繁使用 petsc4py,可考虑用 conda 或 spack 构建完全自包含的环境,规避模块系统碎片化问题。

通过显式加载 lapack 模块并合理管理 LD_LIBRARY_PATH,即可确保 PETSc 及其 Python 封装在 Slurm 分布式环境中稳定链接和运行。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1851

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

5064

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1809

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

30517

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3627

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3647

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1243

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2823

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程