Module 工具介绍
Module
是一个专门管理环境变量的工具,全称为 module environment
,通常应用于需要管理多个版本的软件或运行库,能够分别配置这些环境变量。其官网为:Module 官网
通常,对于多版本的软件包,我们可以通过修改 ~/.bashrc
文件,手动修改 PATH
、LD_LIBRARY_PATH
等全局环境变量来配置。但当软件包数量增多时,用户往往不清楚软件包的安装路径和可用的版本,这就使得软件版本的切换变得非常麻烦。module
工具则能够有效解决这一问题。
安装 Module 工具
Module
工具可以通过二进制编译安装(过程比较复杂,参考:Installing Modules on Unix),也可以通过包管理工具快速安装。
1. 使用 yum
安装(适用于 RedHat/CentOS 等):
sudo yum install environment-modules
2. 使用 apt-get
安装(适用于 Ubuntu 等):
sudo apt-get install environment-modules
安装路径通常为 /usr/share/modules
。如果使用源码安装,则可以通过 ./configure --prefix=/usr/local/tools/modules
指定安装路径。
初始化 Module 工具
安装完 module
工具后,需要对其进行初始化。根据不同的 shell,初始化的文件位置可能不同。通常,在 /usr/share/modules/init/
目录下可以找到相应的初始化脚本。以 Bash 为例:
source /usr/share/modules/init/bash
为了避免每次打开终端时都需要手动执行此命令,可以将其添加到 /etc/profile
文件中:
sudo vim /etc/profile
在文件末尾加入以下语句:
if [ -f /usr/share/modules/init/bash ]; then
source /usr/share/modules/init/bash
fi
配置 Module 工具
Module
工具依赖 MODULEPATH
环境变量来查找配置文件目录。安装完 module
后,通常会自动配置好该环境变量。可以使用以下命令查看 MODULEPATH
的值:
echo $MODULEPATH
通常返回的结果如下:
/etc/environment-modules/modules:/usr/share/modules/versions:/usr/share/modules/$MODULE_VERSION/modulefiles:/usr/share/modules/modulefiles
编写 Modulefile 文件
要让一个软件包通过 module
调用,安装完该软件包后,需要在 /usr/share/modules/modulefiles
目录下增加相应的 Modulefile
文件。以下是一个 Modulefile
示例:
示例:查看 /usr/share/modules/modulefiles
目录下的文件
cd /usr/share/modules/modulefiles
ls
返回结果:
dot module-git module-info modules null use.own
查看 modules
文件内容
cd /usr/share/modules/modulefiles
vim modules
示例内容:
#%Module1.0#####################################################################
##
## modules modulefile
##
proc ModulesHelp { } {
global version prefix
puts stderr "\tmodules - loads the modules software & application environment"
puts stderr "\n\tThis adds $prefix/* to several of the"
puts stderr "\tenvironment variables."
puts stderr "\n\tVersion $version\n"
}
module-whatis "loads the modules environment" # for Tcl script use only
set version 4.4.1
set prefix /usr/share/modules
setenv MODULESHOME $prefix
prepend-path PATH /usr/bin
prepend-path MANPATH /usr/share/man
# enable module versioning
modulepath
#module use /usr/share/modules/versions
解释常用命令:
%Module1.0
: 标识文件为modulefile
,没有该语句文件不会被识别。prepend-path
: 将工具路径添加到环境变量的前面。setenv
: 配置所需的环境变量。
可以参考 Modulefile 文档 了解更多命令。
多版本软件的配置
如果一个软件有多个版本,我们可以在 /usr/share/modules/modulefiles
目录下为该软件创建一个子目录,然后在该子目录下为每个版本创建 Modulefile
文件。例如,如果有两个版本的 cuda
,安装路径分别为 /usr/local/cuda-11.6
和 /usr/local/cuda-12.0
,配置过程如下:
1. 创建 cuda
目录:
cd /usr/share/modules/modulefiles
sudo mkdir cuda
cd cuda
2. 为不同版本的 CUDA 创建 Modulefile
文件:
- 对于
cuda-11.6
:
sudo vim 11.6
添加以下内容并保存:
#%Module1.0#####################################################################
setenv CUDA_HOME /usr/local/cuda-11.6
prepend-path PATH /usr/local/cuda-11.6/bin
prepend-path LD_LIBRARY_PATH /usr/local/cuda-11.6/lib64
- 对于
cuda-12.0
:
sudo vim 12.0
添加以下内容并保存:
#%Module1.0#####################################################################
setenv CUDA_HOME /usr/local/cuda-12.0
prepend-path PATH /usr/local/cuda-12.0/bin
prepend-path LD_LIBRARY_PATH /usr/local/cuda-12.0/lib64
3. 刷新 module
模块并查看可用模块:
source /usr/share/modules/init/bash
module avail
返回结果:
---------------------------------------- /usr/share/modules/modulefiles -----------------------------------------
cuda/11.6 cuda/12.0 dot module-git module-info modules null use.own
4. 切换 CUDA 版本
切换到 cuda-11.6
:
module load cuda/11.6
module list
返回结果:
Currently Loaded Modulefiles:
1) cuda/11.6
验证是否生效:
nvcc -V
返回结果:
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:18:20_PST_2022
Cuda compilation tools, release 11.6, V11.6.124
切换到 cuda-12.0
:
module unload cuda/11.6
module load cuda/12.0
module list
返回结果:
Currently Loaded Modulefiles:
1) cuda/12.0
验证是否生效:
nvcc -V
返回结果:
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Jan__6_16:45:21_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
常用 Module 命令
显示可用模块:
module avail
加载模块:
module load [模块名称]
卸载模块:
module unload [模块名称]
显示当前已加载的模块:
module list
module 具体版本文件下有 .verison文件 可以修改默认版本