什么Module
module是一個專門管理環(huán)境變量的工具,全稱是module environment,一般應(yīng)用于軟件或運行庫等設(shè)備有多個版本,且需要分別配置這些環(huán)境變量。其官網(wǎng)為:
https://modules.readthedocs.io/en/latest/index.html
通常,對于多版本的軟件包,我們可以通過修改~/.bashrc
文件,通過修改PATH
、LD_LIBRARY_PATH
等全局環(huán)境變量來修改。這是最簡單粗暴的方法,但是需要熟悉各個軟件包的安裝位置,在。當(dāng)軟件包數(shù)量多的時候,服務(wù)器的用戶可能不清楚軟件包的安裝路徑,也不清楚具體有那些版本的包可以使用,這就導(dǎo)致軟件版本切換非常麻煩。而module則讓我們擺脫了這種麻煩。
安裝Module
Module 工具可以使用二進制編譯安裝(過程比較復(fù)雜,參考:Installing Modules on Unix),也可以使用 yum/apt 快速安裝,如下所示:
- Redhat/Centos 等使用yum的操作系統(tǒng),命令如下:
sudo yum install environment-modules
- Ubuntu 等apt的操作系統(tǒng),命令如下:
sudo apt-get install environment-modules
注意:本文是在Ubuntu20.04下進行工具安裝和管理的,使用的是sudo apt-get install environment-modules
,所以安裝路徑是/usr/share/modules
,如果是使用源碼安裝,則安裝路徑是由./configure --prefix=/usr/local/tools/modules ...
命令的–prefix指定,這個時候,下文相應(yīng)的路徑也得修改為對應(yīng)的安裝位置!
安裝 module 工具后,你會發(fā)現(xiàn)它并不是一個可執(zhí)行的二進制文件,你需要對 module 工具進行一次初始化。在 /usr/share/modules/init (注意此處,可能是 module 也可能是 modules) 內(nèi)部你可以找到針對各個腳本的二進制初始化文件,找到你當(dāng)前的腳本,source 這個二進制文件,例如你是 bash 腳本,source /usr/share/modules/init/bash
之后,你就可以使用 module 工具了。
cd /usr/share/modules/init
ls
source /usr/share/modules/init/bash
為了避免每次打開終端的時候都需要source /usr/share/modules/init/bash
,你需要把該命令添加到/etc/profile
文件當(dāng)中,如下所示:
- 打開
/etc/profile
文件:
sudo vim /etc/profile
- 在文件末尾加入以下語句:
if [ -f /usr/share/modules/init/bash ]; then
source /usr/share/modules/init/bash
fi
配置Module
Module 工具依托于 MODULEPATH 這個環(huán)境變量來查找配置信息目錄,也就是說你在設(shè)置好目錄結(jié)構(gòu),配置好環(huán)境變量后,只需要設(shè)置這一個 module 的環(huán)境變量,那么 module 工具就會自動去查找這個路徑下的所有配置信息。
echo $MODULEPATH
返回如下結(jié)果:
/etc/environment-modules/modules:/usr/share/modules/versions:/usr/share/modules/$MODULE_VERSION/modulefiles:/usr/share/modules/modulefiles
**注意:**一般情況下,我們安裝完module后,就會自動配置好 MODULEPATH 這個環(huán)境變量,不需要我們進行額外配置。
當(dāng)我們希望某個軟件包能通過module模塊調(diào)用時,在安裝完軟件包之后,需要在/usr/share/modules/modulefiles
路徑下增加相應(yīng)的Modulefile文件。因此,我們需要知道如何編寫Modulefile文件。
我們可以看一個例子來理解Modulefile文件:
查看/usr/share/modules/modulefiles
路徑下當(dāng)前有那些
cd /usr/share/modules/modulefiles
ls
返回如下結(jié)果:
dot module-git module-info modules null use.own
我們使用module avail
命令查看有那些包可以用
module avail
返回如下結(jié)果:
---------------------------------------- /usr/share/modules/modulefiles -----------------------------------------
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
:把工具路徑添加到環(huán)境變量的前面; -
setenv
:把你需要的環(huán)境變量配置到系統(tǒng)中。
具體各個命令可以參考https://modules.readthedocs.io/en/latest/modulefile.html
特別地,如果一個軟件有多個版本,我們可以在/usr/share/modules/modulefiles
目錄下為這個軟件構(gòu)建一個子目錄,然后在子目錄下構(gòu)建多個版本的子目錄,在
例如,我這里有兩個版本的cuda,安裝路徑分別是/usr/local/cuda-11.6
、/usr/local/cuda-12.0
,則需要進行以下操作:
1、在/usr/share/modules/modulefiles
路徑下創(chuàng)建cuda的專屬文件夾
cd /usr/share/modules/modulefiles
sudo mkdir cuda
cd cuda
2、在cuda文件夾下撰寫不同版本cuda對應(yīng)的Modulefile文件:
(a) 撰寫cuda-11.6的Modulefile文件:
sudo vim 11.6
(b) 添加以下代碼并保存:
#%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的Modulefile文件:
sudo vim 11.6
(b) 添加以下代碼并保存:
#%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 avail
返回如下結(jié)果:
---------------------------------------- /usr/share/modules/modulefiles -----------------------------------------
cuda/11.6 cuda/12.0 dot module-git module-info modules null use.own
可以發(fā)現(xiàn),module工具已經(jīng)可以使用cuda/11.6
、cuda/12.0
兩個版本
其他多版本的軟件的配置流程同上,這里總結(jié)一下:
1、安裝多個版本的軟件包;
2、在/usr/share/modules/modulefiles
目錄下為這個軟件構(gòu)建一個子目錄;
3、在該子目錄下為每個版本創(chuàng)建一個Modulefile文件,使用setenv
、prepend-path
等命令配置相應(yīng)的全局變量(這得參考軟件本身的全局變量配置);
4、使用source /usr/share/modules/init/bash
命令刷新module模塊。
使用Module
這里列舉一下常用命令:
1、顯示可以使用的模塊
module avail
2、加載模塊
module load/add [模塊名稱]
3、卸載模塊
module unload/rm [模塊名稱]
4、顯示已經(jīng)加載的模塊
module list
本文簡單測試一下CUDA的版本切換:
- 切換到cuda-11.6
module load cuda/11.6
module list
返回如下結(jié)果:
Currently Loaded Modulefiles:
1) cuda/11.6
查看設(shè)置是否生效:
nvcc -V
返回如下結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-487110.html
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
Build cuda_11.6.r11.6/compiler.31057947_0
- 切換到cuda-12.0
module unload cuda/11.6
module load cuda/12.0
module list
返回如下結(jié)果:
Currently Loaded Modulefiles:
1) cuda/12.0
查看設(shè)置是否生效:
nvcc -V
返回如下結(jié)果:
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
Build cuda_12.0.r12.0/compiler.32267302_0
參考:
https://modules.readthedocs.io/en/latest/INSTALL.html
https://www.fasteda.cn/post/22.html
https://blog.csdn.net/Michael177/article/details/121152904文章來源地址http://www.zghlxwxcb.cn/news/detail-487110.html
到了這里,關(guān)于【服務(wù)器管理】Ubuntu20.04安裝包管理工具module配置并且使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!