Skip to content

5. Environment Modulesの利用

ABCIでは、1.3. ソフトウェア構成で挙げた、さまざまな開発環境、MPI、ライブラリ、ユーティリティ等を提供しています。利用者はこれらのソフトウェアを「モジュール」として、組み合わせて利用できます。

Environment Modulesは、これらのモジュールを利用するのに必要な環境設定を柔軟かつ動的に行う機能を提供します。

利用方法

利用者は、moduleコマンドを用いて環境の設定を行えます。

$ module [options] <sub-command> [sub-command options]

以下にサブコマンドの一覧を示します。

サブコマンド 説明
list ロード済みのモジュールの一覧表示
avail 利用可能なモジュールの一覧表示
show module moduleの設定内容の表示
load module moduleのロード
unload module moduleのアンロード
switch moduleA moduleB モジュールの切り替え(moduleAmoduleBに置き換える)
purge ロード済みのすべてのモジュールをアンロード(初期化)
help module moduleの使用方法の表示

実行例

モジュールのロード

[username@g0001 ~]$ module load cuda/10.0/10.0.130.1 cudnn/7.6/7.6.2

ロード済みのモジュールの一覧表示

[username@g0001 ~]$ module list
Currently Loaded Modulefiles:
  1) cuda/10.0/10.0.130.1   2) cudnn/7.6/7.6.2

モジュールの設定内容の表示

[username@g0001 ~]$ module show cuda/10.0/10.0.130.1
-------------------------------------------------------------------
/apps/modules/modulefiles/gpgpu/cuda/10.0/10.0.130.1:

module-whatis    cuda 10.0.130.1
conflict     cuda
prepend-path     CUDA_HOME /apps/cuda/10.0.130.1
prepend-path     CUDA_PATH /apps/cuda/10.0.130.1
prepend-path     PATH /apps/cuda/10.0.130.1/bin
prepend-path     LD_LIBRARY_PATH /apps/cuda/10.0.130.1/lib64
prepend-path     CPATH /apps/cuda/10.0.130.1/include
prepend-path     LIBRARY_PATH /apps/cuda/10.0.130.1/lib64
prepend-path     MANPATH /apps/cuda/10.0.130.1/doc/man
-------------------------------------------------------------------

ロード済みのすべてのモジュールをアンロード(初期化)

[username@g0001 ~]$ module purge
[username@g0001 ~]$ module list
No Modulefiles Currently Loaded.

依存関係のあるモジュールのロード

[username@g0001 ~]$ module load cudnn/7.6/7.6.2
WARNING: cudnn/7.6/7.6.2 cannot be loaded due to missing prereq.
HINT: at least one of the following modules must be loaded first: cuda/9.0 cuda/9.2 cuda/10.0

依存関係があるため、cuda/9.0cuda/9.2cuda/10.0のいずれかのモジュールを先にロードしないとcudnn/7.6/7.6.2をロードできません。

[username@g0001 ~]$ module load cuda/10.0/10.0.130.1
[username@g0001 ~]$ module load cudnn/7.6/7.6.2

排他関係にあるモジュールのロード

同一ライブラリの異なるバージョンのモジュールなど、排他関係にあるモジュールは同時に利用することはできません。

[username@g0001 ~]$ module load cuda/10.0/10.0.130.1
[username@g0001 ~]$ module load cuda/9.2/9.2.148.1
cuda/9.2/9.2.148.1(5):ERROR:150: Module 'cuda/9.2/9.2.148.1' conflicts with the currently loaded module(s) 'cuda/10.0/10.0.130.1'

モジュールの切り替え

[username@g0001 ~]$ module switch python/2.7/2.7.15 python/3.6/3.6.5

依存関係があると切り替えがうまくできない場合があります。

[username@g0001 ~]$ module load cuda/10.0/10.0.130.1
[username@g0001 ~]$ module load cudnn/7.6/7.6.2
[username@g0001 ~]$ module switch cuda/10.0/10.0.130.1 cuda/9.2/9.2.148.1
[username@g0001 ~]$ env | grep LD_LIBRARY_PATH
LD_LIBRARY_PATH=/apps/cudnn/7.6.2/cuda10.0/lib64:/apps/cuda/9.2.148.1/lib64

CUDA9.2と、CUDA10.0用のcuDNNがロードされた状態になっています。

以下のように対象のモジュールに依存しているモジュールを事前にアンロード、切り替え後の再ロードする必要があります。

[username@g0001 ~]$ module load cuda/10.0/10.0.130.1
[username@g0001 ~]$ module load cudnn/7.6/7.6.2
[username@g0001 ~]$ module unload cudnn/7.6/7.6.2
[username@g0001 ~]$ module switch cuda/10.0/10.0.130.1 cuda/9.2/9.2.148.1
[username@g0001 ~]$ module load cudnn/7.6/7.6.2
[username@g0001 ~]$ env | grep LD_LIBRARY_PATH
LD_LIBRARY_PATH=/apps/cudnn/7.6.2/cuda9.2/lib64:/apps/cuda/9.2.148.1/lib64

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

バッチ利用時のジョブスクリプトでmoduleコマンドを利用する場合には、以下のように初期設定を加える必要があります。

sh, bashの場合:

source /etc/profile.d/modules.sh
module load cuda/10.0/10.0.130.1

csh, tcshの場合:

source /etc/profile.d/modules.csh
module load cuda/10.0/10.0.130.1