WSLでmoduleコマンドを使ってみた【初心者向け】

みなさんこんにちはいかがお過ごしでしょうか?
最近また急に寒くなってきてしんどい思いをしています。
さて今回は仕事でModuelコマンドを触る機会があったので
早速管理人のPCで試してみました。
moduleコマンドって?
moduleコマンドは環境切り替えソフトウェアを使用するためのコマンドです。Environment modulesをインストールすると使用できるようになります。
調べた限りではスーパーコンピュータ業界で使われているソフトのようです。
パッと内容を見た限りスクリプトで設定すればいいんじゃないか?とも思ってしまいましたがスーパーコンピュータ業界ではよく使われている技術のようです。
確かに環境を切り替えるのであれば、ツールで一元管理されていたほうが便利ですし、スクリプトを修正するよりは簡単なのかもしれません。
Environment modulesのインストール
さてまずはmoduleコマンドを使用するうえで必要なEnvironment modulesをインストールしていきましょう。以下のコマンドを実行することで安定版をインストールできます。
sudo apt install environment-modules
environment-modulesではなくmoduleだけだとインストールできないので注意してください(いい感じに補完してくれると思って入力しましたがダメでした…)。
インストールが完了したら以下のコマンドを実行してみましょう。
module --version
このコマンドを実行して特に問題なくバージョン情報が出力されればインストールは無事成功です。moduleコマンドが利用できるようになっているはずです。
試しに以下のコマンドを実行して、どのような利用できるモジュールを確認しましょう。

現在はデフォルトの設定のためこれだけしか利用できるモジュールはありませんがここに自分で作成したmoduleファイルを追加していくことで、実行結果も充実していきます。
moduleファイルの作成
さて、無事にインストールも完了したところで次はいよいよmoduleファイルの作成をしていきましょう。moduleファイルの作成というと難しく聞こえるかもしれませんが、そこまで難しくありません。スクリプトを作成したことがある人ならば結構簡単に作れるのではないかと思います。
まずは先ほど確認した使用できるモジュールのうちのmodule-infoを実行してみましょう。以下のコマンドを実行することでモジュールを実行することができます。なお、コマンドの入力時にはtabキーを利用することで入力が補完されます。
module load module-info

このように様々な情報が表示されました。実はこのmodule-info自体がすでにmoduleファイルとなっています。実際に中身を確認してみると以下のような構成になっています。
これだけ見ても何のことかさっぱりだと思うので上から解説していきたいと思います。まずは1行目の
#%Module1.0##################################################################
これですが、これはシェルスクリプトなどで見かけるシェバンと呼ばれるおまじないのようなものと一緒で、これからmoduleコマンドを使いますよみたいな宣言です。moduleファイルの先頭には必ず書きましょう。
2、3行目はコメントなので解説は飛ばします。#を付けることでコメントを書くことができるといったように覚えてもらえればと思います。
この辺りもシェルスクリプトと同様なので特に問題はないと思います。
proc ModulesHelp { } {~}
次に上記の行ですがこれはmoduleコマンドにはmodule helpコマンドが用意されておりそのコマンドを実行した際に表示される内容です。
proc InfoOut { } {~}
このInfoOutという部分がこのモジュールの本体となります。
内容を解説するとputs stderrを使用して文字列を出力しています。
このputs stderrというのはEnvironment modulesで使用できる内部コマンドです。この他にも様々なコマンドが用意されています。
ちなみにですがprocと宣言することで関数を作ることができます。この辺りもスクリプトと似たような部分があるのでスクリプトの経験がある方は比較的スムーズに溶け込めるのではないでしょうか。
さてこれらの情報を基に簡単にですが管理人もmoduleファイルを作成してみました。内容としては指定したパMPIファイルの実行です。
自作したモジュールを利用可能にする
さて、moduleファイルも作成したところで早速実行と行きたいところですが残念ながらこの状態では実行することはできません。
実行するためには以下のコマンドを実行しmoduleファイルへのパスを通してやる必要があります。
module use moduleファイルのパス
こうすることで、利用可能な状態となります。module availを実行して実際に利用可能になっているか確認してみてください。
利用可能となっている状態で以下のコマンドを実行するとmoduleファイルが実行されます。ここでは管理人の作成したmoduleファイルを実行してみます。
module load MPI_LOAD
これで無事にMPIファイルを実行することができました。
最後に
今回はスーパーコンピュータ業界で使用されているものを紹介しましたが
個人的には大規模な人数がかかわるプロジェクトなどスクリプトを使用してもよいですが、このようなツールを使用して一元管理していくやり方もよいと思いました、
基本的なものは提供しつつ、ユーザ個人で自分の環境設定を変えられるなど
色々と想像の幅が広がりそうです。
ぜひ皆さんもインストールして試してみてください。
それでは今回はこの辺で!
