modulefile(使用场景)

平台使用Environment Modules以模块的形式对环境变量进行管理。在高性能计算集群系统中,在高性能计算集群系统中,安装有多种软件及其不同版本,它们需要设置不同的环境变量,Environment Module可以将这些环境变量做成模块文件modulefile。模块可以被加载(load)、卸载(unload)、切换(switch)等,这些操作会改变相应的环境变量设置,让用户方便的在不同环境之间切换。相比直接source文件,Environment Module的操作可以撤销(卸载)。普通用户还可以自己编写module,具有很好的定制性。用户不仅可以在命令行中Environment Modules,也能在作业提交脚本中使用,对编译和计算环境都能够很好的控制。

首先介绍module常见的一些指令,接着介绍几个module的几个使用案例,最后介绍如何编写modulefile来管理自己的软件环境。

首先介绍module常见的一些指令:

module help       # 显示帮助信息
module avail      # 显示已经安装的软件环境
module load       # 导入相应的软件环境
module unload     # 删除相应的软件环境
module list       # 列出已经导入的软件环境
module purge      # 清除所有已经导入的软件环境
module switch [mod1] mod2# 删除mod1并导入mod2

接着介绍几个module的使用例子:

查看集群现有软件活库:

module avail

查看集群可用的intel版本:

module avail intel

导入intel/2017u5软件环境:

module load intel/2017u5

清除所有通过module导入的软件环境:

module purge

最后介绍如何编写modulefile来管理自己的软件环境。首先,创建目录用来存放自己的modulefile

mkdir${HOME}/mymodulefiles   # 创建目录用于放自己的module file
echoexport MODULEPATH=${HOME}/mymodulefiles:\$MODULEPATH>> ~/.bashrc
source ~/.bashrc# 或者退出重新登录即可
# 编写自己的第一个module file
cd${HOME}/mymodulefiles
vim myfirstmodulefile

然后在创建好的目录下编写modulefile,假设/share/home/test/soft/gcc/7.2.0安装了gcc编译器,则可以这么编写modulefile

#%Module1.0
##
##
module-whatis my first modulefile
 
set topdir /share/home/test/soft/gcc/7.2.0
prepend-path PATH${topdir}/bin
prepend-path LIBRARY_PATH ${topdir}/lib
prepend-path LD_LIBRARY_PATH ${topdir}/lib
prepend-path LIBRARY_PATH ${topdir}/lib64
prepend-path LD_LIBRARY_PATH ${topdir}/lib64
prepend-path CPATH ${topdir}/include
prepend-path CMAKE_PREFIX_PATH ${topdir}
setenv CC ${topdir}/bin/gcc
setenv CXX ${topdir}/bin/g++
setenv FC ${topdir}/bin/gfortran
setenv F77 ${topdir}/bin/gfortran
setenv F90 ${topdir}/bin/gfortran

编写好后执行module avail即可查看到刚刚写好的modulefile了。以下为编写modulefile文件常见的语法:

set           # 设置modulefile内部的变量
setenv        # 设置环境变量
prepend-path  # 效果类似于export PATH=xxx:$PATH
append-path   # 效果类似export PATH=$PATH:xxx