現在地

Environment Modules

最終更新: 2023/6/2

はじめに

Environment Modules(moduleコマンド)の利用は必須ではありません。
これまで通り、手動でPATHやLD_LIBRARY_PATHを設定したり、アプリケーション側で提供している
設定ファイル(*.sh,*.csh)を読み込んだりして使うことができます。
ただ、csh の場合は module を使わないと対応が難しいケースが増加傾向にあります。

moduleコマンドを使うメリット

  • 複雑な初期設定を要するアプリケーションについての設定がすっきりする
  • アプリケーション側の設定ファイルの場所を意識する必要がなくなる
  • 依存関係を切り替える時(例: CUDA 8.0/9.1)の手間が減る、考える必要がなくなる

moduleコマンドのデメリットや注意点

  • ログインシェルやジョブスクリプトがcshの場合に一手間多い
    • ログインシェルがbash系で、ジョブスクリプトもsh, bash, zshならば特別な設定は必要ありません
    • csh のジョブスクリプトでは module コマンド利用前に source /etc/profile.d/modules.csh を明示的に実行する必要があります
    • ログインシェルが csh で、ジョブスクリプトを /bin/sh にする場合にも、source /etc/profile.d/modules.sh (sourceは.で書いても可)を事前に実行する必要があります
  • 既に複雑な環境を自身のホームにある設定ファイルで構築している場合は移行が困難
  • 設定が簡略化されているアプリケーションについてはメリットが極めて薄い

基本的な利用方法

moduleコマンドで操作します。フロントエンドサーバ、計算ノードで共通に利用できます。
ただし、cshスクリプトでは特殊な注意が必要です。ページ下部をご覧ください。
ログイン時に自動でいくつかのパッケージが読み込まれていることにご注意ください。

  • モジュールの読み込み(load)

% module load (モジュール名)

  • モジュールのアンロード(unload; removeも可)。依存関係が複雑なものについては環境が壊れる可能性があります。そのような時は申し訳ありませんが一度purgeしてから必要なモジュールをloadするようにしてください。

% module unload (モジュール名)

  • 全モジュールのアンロード

% module purge

  • 利用可能なモジュールの表示(パスを指定しない場合は全て)

% module avail (パス; オプション)

  • 現在読み込んでいるモジュールの表示

% module list

  • モジュールの簡単な説明(一行程度; モジュール名を指定しない場合には全てについて表示します)

% module whatis (モジュール名; オプション)

  • 現在の設定を保存することができます。名前を省略すると default が使われます。default の内容は次回ログインした時に自動で読み込まれます。
    • 自分で作成した module を読み込んだ状態で save することもできます。保存した内容は module restore (名前) で読み込めます。

% module save (名前; オプション)

  • 保存した設定を削除します。名前を省略すると default が対象になります。

% module saverm (名前; オプション)

moduleのデフォルトバージョン

大抵のモジュールではデフォルトのバージョンが設定されています。バージョンを指定しないでloadすると、このデフォルトのバージョンが使われます。

% module purge
% module avail openmpi
------------------------- /home/users/qf7/modules/util -------------------------
openmpi/3.1.6/aocc3          openmpi/4.1.4-hpcx/gcc11          
openmpi/3.1.6/aocc4          openmpi/4.1.4-hpcx/nv22           
openmpi/3.1.6/gcc8           openmpi/4.1.5-hpcx/               
openmpi/3.1.6/gcc9           openmpi/4.1.5-hpcx/aocc3          
openmpi/3.1.6/gcc10          openmpi/4.1.5-hpcx/aocc4          
openmpi/3.1.6/gcc11          openmpi/4.1.5-hpcx/gcc8           
openmpi/3.1.6/intel2022.2.1  openmpi/4.1.5-hpcx/gcc9           
openmpi/3.1.6/nv22           openmpi/4.1.5-hpcx/gcc10          
openmpi/4.1.4-hpcx/aocc3     openmpi/4.1.5-hpcx/gcc11          
openmpi/4.1.4-hpcx/aocc4     openmpi/4.1.5-hpcx/intel2022.0.2  
openmpi/4.1.4-hpcx/gcc8      openmpi/4.1.5-hpcx/intel2022.2.1  
openmpi/4.1.4-hpcx/gcc9      openmpi/4.1.5-hpcx/nv22           
openmpi/4.1.4-hpcx/gcc10     

Key:
modulepath  directory/  default-version
% module load openmpi
Loading openmpi/4.1.5-hpcx/gcc8
  Loading requirement: pbs/22.05.11
% module list
Currently Loaded Modulefiles:
 1) pbs/22.05.11   2) openmpi/4.1.5-hpcx/gcc8(default:openmpi)  

Key:
(symbolic-version)  default-version  auto-loaded

なお、moduleをunloadする際にも簡略化した表記が有効です。

% module list
Currently Loaded Modulefiles:
 1) pbs/22.05.11   2) openmpi/4.1.5-hpcx/gcc8(default:openmpi)  

Key:
(symbolic-version)  default-version  auto-loaded  
% module unload openmpi
Unloading openmpi/4.1.5-hpcx/gcc8
  Unloading useless requirement: pbs/22.05.11
% module list
No Modulefiles Currently Loaded.

ジョブスクリプトでの利用例

これまでの方法(sh)

#!/bin/sh
#PBS select=ncpus=1:mpiprocs=1:ompthreads=1:ngpus=1
#PBS -l walltime=72:00:00

if [ ! -z $PBS_O_WORKDIR ]; then
  cd $PBS_O_WORKDIR
fi

export PATH=/local/apl/lx/cuda-9.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/local/apl/lx/cuda-9.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
. /local/apl/lx/amber18-bf1/amber.sh

pmemd.cuda -O -i mdin ......

shスクリプトでmodule利用

#!/bin/sh
#PBS select=ncpus=1:mpiprocs=1:ompthreads=1:ngpus=1
#PBS -l walltime=72:00:00

if [ ! -z $PBS_O_WORKDIR ]; then
  cd $PBS_O_WORKDIR
fi

module -s load amber/18/bugfix1

pmemd.cuda -O -i mdin ......

ログインシェルが csh で、スクリプトだけsh, bashの場合は、module コマンド実行前に source /etc/profile.d/modules.sh が必要です

cshジョブスクリプトでmodule利用

cshの場合、moduleコマンドは/etc/profile.d/modules.cshでaliasとして定義されています。
ログインして対話型シェルで使う場合には特に設定は要りませんが、
ジョブスクリプトで利用する場合には明示的に/etc/profile.d/modules.cshを読み込む必要があります。

#!/bin/csh -f
#PBS select=ncpus=1:mpiprocs=1:ompthreads=1:ngpus=1
#PBS -l walltime=72:00:00

if ( $?PBS_O_WORKDIR ) then
  cd $PBS_O_WORKDIR
endif

source /etc/profile.d/modules.csh # required!
module load amber/18/bugfix1

pmemd.cuda -O -i mdin .......

 

参考リンク