配置服务器运行环境
使用 Environment Modules
为了满足同学们计算任务的需求,服务器中安装了各种版本的软件。大家可在同一软件的不同版本之间切换,也可以在同一功能的不同软件之间切换,以此来选择最合适的编程环境和运行环境。使用系统命令 module 可以快速地达到这一效果。
查看当前已经加载的 module 与可用的 module
在你使用某个软件之前,你必须通过 module 命令来配置此软件的运行环境,否则将无法使用此软件或者使用一个错误的版本。
例如,在没有载入任何 module 的情况下,输入 python 来尝试打开 python
$ python
Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
注意到此时 python 命令代表系统内置的 python,版本是 2.6.6。这是一个比较旧的版本,官方已经停止维护,里面少了很多功能,和最新的许多包都无法兼容。
此时我们用 module 命令载入较新的 anaconda2
$ module add anaconda/2
$ python
Python 2.7.12 |Anaconda custom (64-bit)| (default, Jul 2 2016, 17:42:40)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>>
注意到此时 python 的版本是 2.7.12,并且显示是 Anaconda 内部集成的版本,module 添加成功。
查看当前所载入的所有 module,可以使用如下命令
$ module list
Currently Loaded Modulefiles:
1) anaconda/2
想要查看服务器中所有可用的 module,可以使用
$ module avail
------------------------------- /etc/modulefiles -------------------------------
anaconda/2(default) gcc/5.3.0(default) mvapich2-x86_64
anaconda/3 matlab/r2015b(default) mvapich-psm-x86_64
compat-openmpi-psm-x86_64 matlab/r2016b mvapich-x86_64
compat-openmpi-x86_64 mpich/3.2(default) openmpi/2.0.0(default)
gcc/4.7.4 mpich-x86_64 openmpi-x86_64
gcc/4.8.5 mvapich2-psm-x86_64 python/3.5.1
执行完毕后可以从系统当前的所有 module 中选出你需要的进行添加。添加某些软件时需要指定版本,例如
如果不写版本,则服务器会添加后面标注有(default)的项。例如 module 名字只写 anaconda,服务器默认会添加 anaconda2
删除与替换 module
如果要把某个模块从系统环境中删掉,需要使用
$ module remove <module name>
如果要删除全部的模块,可以直接使用
一个模块删除之后,你将无法直接使用与之相关的命令。对应软件的执行目录无法被直接访问,或者是还原成系统默认的版本。
有的时候,模块之间会有所冲突,你无法在同一时间同时加载两个模块。例如同一软件的不同版本,或者是接口相同的不同软件。当你载入其中一个后,再载入另一个就会出错。
# suppose we have anaconda/2 in our environment
# we try to add anaconda/3
$ module add anaconda/3
anaconda/3(3):ERROR:150: Module 'anaconda/3' conflicts with the currently loaded module(s) 'anaconda/2'
anaconda/3(3):ERROR:102: Tcl command execution failed: conflict anaconda
在 anaconda/2存在的情况下,无法继续加入 anaconda/3,这是因为两个 module 之间有冲突。因此需要切换软件的版本,你可以使用 module remove 命令将一个版本的 module 从环境中移除,
不过 module 提供了更方便的命令:
$ module swap anaconda/2 anaconda/3
这个命令的作用是交换两个 module,从当前环境中卸载 anaconda/2 并载入 anaconda/3。
在 SLURM 脚本中使用 module
module 命令仅作用在当前节点上,如果使用 SLURM 脚本提交任务,那么实际运行任务的
节点和当前节点是不同的,因此方便的做法是将 module 命令一并写在 SLURM 脚本中。
#!/bin/bash
#SBATCH -J test
#SBATCH -p cpu
#SBATCH -t 5:00
module add gcc/4.8.5
module add anaconda/3
# do your computation jobs...
定制你自己的默认载入 module
当你登录系统时,系统会默认载入一些 module。如果这些 module 不是你需要的,或者你
需要载入更多的 module,那么请直接在个人 HOME 目录下的 .bash_profile 文件的
最后添加
即可。每个 module 的添加单独占一行。这样每次你登录系统之后系统就会自动加载你指定的 module。
更改 .bash_profile 文件的同时,在你运行 SLURM 任务时也会自动载入这些 module,
因此无需在 SLURM 脚本中再次添加 module 命令!
|