Linuxで環境変数の切り替えを簡単に行うことができるmoduleコマンド(Environment Modules)のインストール方法を解説します。
インストール方法
以下のコマンドでインストールできます。
インストール先(–prefix)とmoduleファイルディレクトリ(–modulefilesdir)は任意の場所を設定してください。
wget https://github.com/cea-hpc/modules/releases/download/v5.4.0/modules-5.4.0.tar.gz
tar -zxvf modules-5.4.0.tar.gz
cd modules-5.4.0/
./configure --prefix=/home/apps/Modules --modulefilesdir=/home/apps/Modules/modulefiles
make
sudo make install
そしてシェルの起動と同時にmoduleを動くようにするには、インストール先にある以下のファイルのシンボリックリンクを/etc/profile.d/に置きます。
sudo ln -s /home/apps/Modules/init/profile.sh /etc/profile.d/modules.sh
sudo ln -s /home/apps/Modules/init/profile.csh /etc/profile.d/modules.csh
シェルと同時に起動させずに手作業で実行する場合やシェルスクリプト内で使用する場合は、
. /home/apps/Modules/init/profile.sh
modulefilesの追加方法
コマンド操作で追加する方法はこちらです。この設定方法ではシェルを閉じると設定が消えます。
module use --append /opt/nvidia/hpc_sdk/modulefiles
その場限りの設定ではなく、永続的な設定をしたい場合は3通りの方法があります。
方法1
スクリプトにmodulefilesのパスを記載する。
vi /home/apps/Modules/init/profile.sh
#このファイルに上記の module use --append を追記する
方法2
Modulepathを追加する。
vi /home/apps/Modules/etc/.modulespath
#このファイルにmodulefilesのパスを追記する
方法3
Moduleのファイルを方法2のModulepathが通っているディレクトリにコピーする。インストール時に–modulefilesdir=/home/apps/Modules/modulefilesを指定している場合はそこも可。
moduleコマンドの使用方法
moduleコマンドを使用するには予めinitのスクリプトが動いている必要があります。上記のインストール手順で/etc/profile.d/modules.shを設定していれば勝手に動くようになります。
なお、シェルスクリプト等でコマンドを実行したい場合は、スクリプトファイル内で以下のコマンドを書いておく必要があります。
. /etc/profile.d/modules.sh
これをやらないと module: not found と表示されてしまいます。
ではmoduleコマンドを打ってみましょう。
$ module
Modules Release 5.0.1 (2021-10-16)
Usage: module [options] [command] [args ...]
Loading / Unloading commands:
add | load modulefile [...] Load modulefile(s)
:
:
ヘルプ的なものが表示されます。キーボードのqを押すと脱出できます。
よく使うコマンドは
module avail | 使用できるmoduleの一覧を表示 |
module show compiler/latest | 指定したmoduleの内容を表示(例 compiler/latest) |
module load compiler/latest | 指定したmoduleを読み込む(例 compiler/latest) |
module list | 現在読み込まれているmoduleを表示 |
module purge | 何も読み込まれていない状態に戻す |
なお、moduleが動く状態では以下の環境変数が定義されます。
$MODULEPATH | moduleファイルが検索される場所 |
$MODULESHOME | moduleのインストール場所 |
例
WSLにNvidiaのHPC SDKを入れた場合は、上記の方法1で以下の内容を記載します。
module use --append /opt/nvidia/hpc_sdk/modulefiles
WSLにIntel OneAPIを入れた場合は、以下のコマンドを実行します。
cd /opt/intel/oneapi
sudo ./modulefiles-setup.sh --output-dir=/opt/intel/oneapi/modulefiles
これによって/opt/intel/oneapi/modulefiles ディレクトリにmoduleファイルが生成されます。
それを方法1のやり方で追記します。
module use --append /opt/intel/oneapi/modulefiles
以上のようにHPC SDKとOneAPIが入っている状態では次のようにmoduleが読み込まれます。
$ module avail
----------------------------------- /usr/share/modules/modulefiles ------------------------------------
dot module-git module-info modules null use.own
----------------------------------- /opt/nvidia/hpc_sdk/modulefiles -----------------------------------
nvhpc-byo-compiler/23.11 nvhpc-hpcx/23.11 nvhpc-openmpi3/23.11
nvhpc-hpcx-cuda12/23.11 nvhpc-nompi/23.11 nvhpc/23.11
------------------------------------ /opt/intel/oneapi/modulefiles ------------------------------------
advisor/2024.0 dal/2024.0.0 ifort/2024.0.2 mkl/2024.0
advisor/latest dal/latest ifort/latest mkl/latest
ccl/2021.11.2 debugger/2024.0.0 ifort32/2024.0.2 mkl32/2024.0
ccl/latest debugger/latest ifort32/latest mkl32/latest
compiler-rt/2024.0.2 dev-utilities/2024.0.0 inspector/2024.0 mpi/2021.11
compiler-rt/latest dev-utilities/latest inspector/latest mpi/latest
compiler-rt32/2024.0.2 dnnl/3.3.0 intel_ipp_intel64/2021.10 oclfpga/2024.0.0
compiler-rt32/latest dnnl/latest intel_ipp_intel64/latest oclfpga/latest
compiler/2024.0.2 dpct/2024.0.0 intel_ippcp_intel64/2021.9 tbb/2021.11
compiler/latest dpct/latest intel_ippcp_intel64/latest tbb/latest
compiler32/2024.0.2 dpl/2022.3 itac/2022.0 vtune/2024.0
compiler32/latest dpl/latest itac/latest vtune/latest
Key:
modulepath
modulefileの作り方
modulefileは簡単に作ることができます。例えばIntel OneAPIでコンパイルしたQEを実行するための環境は以下のように書くことができます。
#%Module1.0
##
## Quantum ESPRESSO 7.2 Intel OneAPI
##
module load mpi/latest
module load mkl/latest
prepend-path PATH "/home/wsl/.local/qe/bin"
setenv ESPRESSO_PSEUDO "/home/wsl/QE/pseudo"
このように書くことができます。module loadは別moduleから環境変数をロード、prepend-pathは指定した環境変数の先頭に書き加える、setenvは新たな環境変数を定義する、です。prepend-pathではなくappend-pathにすると末尾に追加されます。
これをファイル名qe7.2_cpuとしてmodulefilesのディレクトリに置くと、
$ module avail
中略
------------------------------------ /home/wsl/modulefiles ------------------------------------
qe7.2_cpu
$ module load qe7.2_cpu
$ mpiexec -n 8 pw.x -in sample.pwi
このような形で使用できます。
コメント