Modules简介
- 在 Linux 超算平台上,通常会安装有不同版本的多种编译器和其他软件等,如常用的编译器有 intel 和 gnu,常用的 MPI 并行库包括 intel mpi,openmpi,mpich2 等,而且对于同一软件,还包含不同的版本或采用不同编译设置得到的可执行程序和链接库等。在使用这些程序时,经常需要对环境变量进行修改。并且由于程序编译时会调用不同类型编译器或第三库,这时程序之间还存在着依赖关系。这使得当执行某个特定版本的程序时,环境变量的修改变得十分复杂。
- Environment Modules 包是一个简化 shell 初始化的工具,它允许用户在使用 modulefiles 进行会话期间轻松修改其环境。每个模块文件都包含为应用程序配置 shell 所需的信息。模块文件可以由系统上的许多用户共享,并且用户可以拥有自己的集合来补充或替换共享模块文件。
Modules安装
可以使用yum安装,这里用普通用户以源码安装方式安装,在Modules官网下载最新版本的源代码。此处提供modules-4.4.0的网盘下载地址,提取码:
tdpx
。以下为实际安装过程,路径设置请根据各自所需。
下载完毕后上传到服务器上,压缩包上传目录为
/home/lyh/MDT/package/
,安装目录为/home/lyh/MDT/software/
。
1
cd ~/MDT/package/
2
tar -zxvf modules-4.4.0.tar.gz -C ../software/
3
cd ../software/modules-4.4.0
4
./configure --prefix=/home/lyh/MDT/software/modules
5
make
6
make install
- 安装完毕后我们将modules设置脚本添加入环境变量中,注意,modules中包含多种shell设置脚本,可以根据不同情况设置。这里由于我用的是bash,输入如下命令即可
1
echo 'source /home/lyh/MDT/software/modules/init/bash' >> ~/.bashrc
2
source ~/.bashrc
- 输入如下命令,查看当前包含的模块并加载用户模块
1
module avail
2
------------------------------------------------------------------------ /home/lyh/MDT/software/modules/modulefiles -------------------------------------------------------------------------
3
dot module-git module-info modules null use.own
4
module load use.own
5
module list
6
Currently Loaded Modulefiles:
7
1) use.own
- 此时,用户目录下会出现
privatemodules
文件夹,用户可以直接在此文件夹中添加自定义模块文件添加环境变量。
Modules使用
- Modules 使用包括
shell
命令和modulefile
文件定义两部分内容,下面将分别进行介绍。
Moudels指令
module 安装好后,即可调用
module [command]
来查看或加载模块,主要指令如下:1
module avail #列出当前module path 中的所有可用模块文件
2
----------------------------------------------------------------------- /home/lyh/MDT/software/modules/modulefiles -------------------------------------------------------------------------
3
dot module-git module-info modules null use.own
4
5
--------------------------------------------------------------------------------- /home/lyh/privatemodules ----------------------------------------------------------------------------------
6
cmake-3.15.3 null
7
module load cmake-3.15.3 #加载模块文件/类
8
module list #显示已经加载的模块
9
Currently Loaded Modulefiles:
10
1) use.own 2) cmake-3.15.3
11
module unload cmake-3.15.3 #卸载模块文件/类
12
module list #显示已经加载的模块
13
Currently Loaded Modulefiles:
14
1) use.own
Modules脚本内容
采用
module load
命令时,可用的模块其实都是安装在module path
目录下的modulefile
文件。一个基本 modulefile 内容如下:1
%Module -*- tcl -*-
2
# This is a module to access something
3
4
显示 module help 主要内容
5
proc ModulesHelp { } {
6
puts stderr "This module sets up access to something"
7
}
8
9
显示 module whatis 显示主要内容
10
module-whatis "sets up access to something"
11
module 加载前需要模块类
12
prereq module_flag
13
module 加载冲突模块类
14
conflict another_module_flag
15
16
加载其他模块
17
module load gcc
18
设置环境变量
19
setenv SOMEVERION 0.95
20
添加环境变量
21
append-path PATH /home/[user]/[somedir]/bin
22
append-path MANPATH /home/[user]/[somedir]/man
23
append-path LD_LIBRARY_PATH /home/[user]/[somedir]/lib
其中包含的设置关键字有以下几个
- prereq 指示加载此脚本需要预先加载的模块名,当这些模块没有预先加载时,module load 此模块会报错;
- conflict 指示与此模块冲突的其他模块类,注意这里不仅可以添加 modulefile 文件名称,也可添加 modulefile 所在路径文件名,此时代表模块和文件内所有模块类都会产生冲突;
- module load 指示加载此模块同时自动加载的模块,注意其和 prereq 命令的不同;
- setenv 设定环境变量;
- append-path 添加环境变量。
Modules脚本示例
- 以Cmake3.15.3为例:
1
cat ~/privatemodules/cmake-3.15.3
2
%Module1.0#####################################################################
3
# modules modulefile
4
#
5
module-whatis "Cmake-3.15.3"
6
prepend-path PATH /home/lyh/MDT/software/cmake/bin