“ 大家好哇!上一期我们给出了一些在slurm作业系统中常见的报错提示的含义及解决方法。今天我们主要来看看如何在超算中配置运行环境。”
1
引言
一般的超算上面已经配置了基本的运行环境,如 intel 编译器、python 解释器等等。但超算上的用户之多,我们在进行自己的作业任务时,难免会用到超算上没有具备的环境,又或者当前超算上的软件版本已经老旧,不适合我们的任务了。这时候我们便会用到本文所将介绍的内容,配置任务的运行环境。所需软件的安装在这里不做具体介绍,文章主要针对如何调用超算中的软件来选择最合适的编程环境和运行环境做一些分享。
2
查看超算中可用的的module
在我们运行一个作业任务之前,首先需要查看任务中用到的软件所需要的运行环境是否满足,否则可能无法使用该软件或者使用错误的版本。就好比如跑一个 wrf ,如果你没有设置 netcdf 这个库的环境话,跑起来肯定会报错。在超算(服务器中)中可以通过系统命令 module 来快速查看当前服务器中所有可用的 module 。
module avail #查看当前服务器中所有可用的module
3
查看超算中已经加载的module
要注意的是,并不是服务器中可用的 module 满足软件运行的需求,软件就可以运行啦。你必须要把它加载到你的个人账户中去,这样软件才能在你自己的账户下成功跑起来。查看自己账户下当前已经加载的所有 module 可用下面的命令。
module list #查看自己账户下当前已经加载的所有 module
4
添加需要的module
执行完上面一步之后,如果个人账户下的环境没能满足软件的运行环境配置,但服务器中存在可用的 module,此时,可以从系统可用的 module 中选出我们需要的进行添加。比如输入 module avail 命令后给出的 module 中有我们需要的 netcdf/4.5.6,那么可用下面的命令进行添加。如果不写具体版本的话,服务器会自动添加系统默认的软件版本。
module load netcdf/4.5.6
#注意,有的服务器中是 module add netcdf/4.5.6
5
删除和替换module
有的时候,我们为了避免自己所添加的某个 module 与系统自带的软件之间发生冲突,会选择性的删除一个模块(module)或者全部module,只留下自己添加的module。这时候可用借助下面的命令实现。要注意,一个模块删除之后,你将无法直接使用与之相关的命令。对应软件的执行目录无法被直接访问,或者是还原成系统默认的版本。而且对于同一软件的不同版本,或者是接口相同的不同软件,我们也不能同时载入两个。当我们载入其中一个后,再载入另一个就会报错。
module unload module_name #删除module_name这一个模块
#注意,有的服务器中是 module remove module_name ,等价于 module unload module_name
module purge #删除所有已经加载的module
此外,我们也有更加便捷的方法来直接用一个 module 替换掉另一个module。
module switch mod1 mod2 # 删除mod1并导入mod2
#注意,有的服务器中是 module swap mod1 mod2
6
在slurm脚本中使用module
前面我们已经说过通过 module 仅是将软件加载到当前的账户下。那我们通过 slurm 脚本提交任务时,会分配到不同的计算节点上,并非我们的个人账户所在的节点。对于这种情况,方便的做法是直接将 module 命令这一行写在slurm脚本中,随着它的运行自动在分配到的节点中加载所需 module 。
#!/bin/bash
#SBATCH -J test
#SBATCH -p cpu
#SBATCH -t 5:00
module load netcdf/4.5.6
./wrf.exe
7
为系统设置默认module
一般当我们登入服务器之后,系统会自动为我们加载一些 module ,以保证用户的基本操作。如果我们想对其进行修改,比如去掉一些 module 或添加一些 module ,那么我们可以直接通过 vim ~/.bash_profile 命令完成修改,只需在该文件的最后添加前面提到的 module load 、module remove 等命令。
掌握了以上内容以后,我们就可以在同一软件的不同版本之间切换,也可以在同一功能的不同软件之间切换,以此来选择最合适的编程环境和运行环境啦。
参考资料:
https://bicmr.pku.edu.cn/~wenzw/pages/env.html