2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Environment modules】デフォルトで読み込むモジュールパスを設定する

Posted at

やりたいこと

コンパイラのスイッチング用途でよく使われているEnvironment modules1ですが、新しくパッケージをインストールした際にはEnvironment modulesが認識できるようにモジュールファイルが格納されているディレクトリのパス(以下モジュールパス)を設定する必要があります。一般によく紹介されている方法としてはmodule use --append /path/to/modulefiles/dirでモジュールパスを指定するというのがあります2が、ユーザーごとに設定する手間を考えると、できれば採用したくはないところです。

本記事では、デフォルトで読み込むモジュールパスを設定する方法を紹介します。

モジュールパスの追加方法

Environment modulesは、環境変数$MODULEPATHで指定されているディレクトリに存在するモジュールファイルを認識してくれます3。ただし初期状態の場合には何も設定されていません。

user@pc:~$ echo $MODULEPATH

この時にmodule avail等のコマンドで認識できるのは、 /usr/share/modules/modulefiles配下に置かれたモジュールファイルだけです。

user@pc:~$ module avail
-------------------------------------------- /usr/share/modules/modulefiles --------------------------------------------
dot  module-git  module-info  modules  null  use.own

したがって新規にモジュールファイルをデフォルトで認識させるためには、モジュールパスを環境変数$MODULEPATHに追加しなければなりません。環境変数$MODULEPATHのデフォルト値を設定する方法としては、/etc/environment-modulesディレクトリ配下のmodulespathファイルにモジュールパスを書き込むのが最もシンプルかなと思います。

ここでは例として、NVIDIA HPC SDKのモジュールパスを設定しています(NVIDIA HPC SDKの場合にはモジュールファイルが同梱されているので、今回はそのモジュールパスをそのまま設定しています)。

user@pc:/etc/environment-modules$ sudo vi modulepath
#  Modulepath initial setup
#  ========================
#
#  This file defines the initial setup for the module files search path.
#  Comments may be added anywhere, which begin on # and continue until the
#     end of the line
#  Each line containing a single path will be added to the MODULEPATH
#     environment variable. You may add as many as you want - just
#     limited by the maximum variable size of your shell.
#
#/usr/share/modules/versions                            # location of version files
#/usr/share/modules/$MODULE_VERSION/modulefiles # Module pkg modulefiles (if versioning)
#/usr/share/modules/modulefiles                         # General module files
/opt/nvidia/hpc_sdk/modulefiles

書き込み後に再度ログインし、環境変数$MODULEPATHが正しく設定されているか確認します。
下記のように書き込んだモジュールパスが表示されればOKです。

user@pc:~$ echo $MODULEPATH
/opt/nvidia/hpc_sdk/modulefiles

またmodule availコマンドでモジュール一覧を表示すると、/opt/nvidia/hpc_sdk/modulefilesディレクトリ直下のモジュールファイル群を正常に認識されていることが分かります。

user@pc:~$ module avail
------------------------------------------- /opt/nvidia/hpc_sdk/modulefiles --------------------------------------------
nvhpc-byo-compiler/23.1  nvhpc-hpcx/23.1  nvhpc-nompi/23.1  nvhpc/23.1

-------------------------------------------- /usr/share/modules/modulefiles --------------------------------------------
dot  module-git  module-info  modules  null  use.own

まとめ

環境変数$MODULEPATHにモジュールパス追記することで、Environment modulesで当該ディレクトリを認識できるようになりました。

なお、デフォルトで参照されているディレクトリ /usr/share/modules/modulefilesにモジュールファイルを直置きする方法もありますが、この場合だと参照先のパッケージがアンインストールされた後もモジュールファイルが残ってしまうため、あまり宜しくありません。環境変数$MODULEPATHにモジュールパスを登録しておくのが無難かなと思います。

参考

  1. Environment Modules

  2. Environment modulesのインストール

  3. Environment Modulesについて

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?