Environment modulesは何者なのか

目次

これはrioyokotalab Advent Calendar 2020 8日目の記事です.

Environment modulesとは何か&嬉しい点

何なのかを一言で雑に言えば,使うソフトウェア等のバージョンを切り替えるためのツールです.
普段自分が使っているgccはバージョンXXだけれど,ある論文を再現するためにはバージョンYYにしたくなることがあります.
こんな時何をしなければいけないかというと,LinuxのPATHLD_LIBRARY_PATHと言った環境変数を編集し,使いたいバージョンのソフトウェアがはじめに探索に引っかかるようにします.
しかし,これは手動でやるには結構面倒な作業です.
そこで便利なのがEnvironment modulesです.
Environment modulesでは

module load gcc/XX
とするだけでgccのバージョンXXを使うのに必要な環境変数が設定されます.
バージョンを切り替えたければ
module switch gcc/YY
とすれば切り替えられます.
非常に便利です.


また,Environment modulesは簡単に使うのであれば簡単に設定ファイルを書けて嬉しいです.
先程の例のように

module load gcc/XX
としてバージョンXXのgccの環境変数を設定するには,そもそも設定されるべき環境変数を設定ファイルに書いておく必要があります.
例えばこんな感じです.
#%Module

conflict	gcc

set ver         7.5
set modroot     /nfs/shared/packages/x86_64/gcc/gcc-$ver

prepend-path   PATH            $modroot/bin
prepend-path   LD_LIBRARY_PATH $modroot/lib64
prepend-path   C_INCLUDE_PATH  $modroot/include
prepend-path   CPATH           $modroot/include
prepend-path   LIBRARY_PATH    $modroot/lib64
直感的に書けてとても共用計算機の管理者としても管理がとても楽です.
簡単な書き方についてはEnvironment Modulesを使う - 天炉48町をご覧いただければと思います.
依存関係の記述や衝突設定も行え,私の見てきた限り多くのスパコンで使われています.

お年は?

1991年7月に「Modules: Providing a FlexibleUser Environment」(John L. Furlani)という論文が発表されています.
これには設計思想が使用者や管理者の立場から書かれています.
論文が出たのが1991年なので,2020年現在おおよそ30歳と言ったところですかね.

設定ファイルはなにかの言語なの?

普通のEnvironment modulesの設定ファイルはTcl (Tool Command Language)で書かれています.
もし凝ったことをしようとするならば,Tclを駆使して書けばよいのです.
上で「普通のEnvironment modules」と書きましたが,Luaで書くLmodというものもあります.

参考になるEnvironment modulesの設定ファイル

自分自身いろいろなスパコンのmodulefilesを見てきましたが,産総研のABCIのものは非常に綺麗に書かれている&使いやすく,東工大のTSUBAME 3のものもとても参考になると思いました.
ABCIのmodulefilesはgitで管理されており,commitを見るにGitHubのPRを駆使して管理しているように見えます.
一方で,XXXXXXXXXXX.
これを書いたのが某国内の大きなベンダーと知った時はその会社の中の人の技術力を疑い,本気で心配になりました.
Tclを採用している分自由度が高く,アホみたいなmodulefilesを書くことも簡単にできてしまうのです.

Spackとの連携

例えば理研の富岳ではLLNLで開発されているSpackによるパッケージ管理を行っています.
このSpackをEnvironment modulesから使う機能もSpack側に用意されています.
Modules - Spack

カテゴリー:サーバ
記事作成日:2020-12-08