本家様 http://modules.sourceforge.net/

EnvironmentModules/sample EnvironmentModules/package

relion向けに作ったopenmpiを用意したいのだが、eman2.22に同封のopenmpiと被る....
パス環境変数や、aliasを使って回避してきたが pyenv が参戦して来て混乱が増した... なので modules で統制を試みる。

一見するとkernel module関連?っと思ってしまうが別物です

インストール

パッケージ「environment-modules」をインストールします

(CentOS7/CentOS8)
[root@c ~]# yum install environment-modules
 
(ubuntu18.04)
apt-get install environment-modules tcl

関連して必須パッケージらが同時にインストールされます

留意
インストールすると、/etc/profile.dに下記が追加されます

/etc/profile.d/modules.csh
/etc/profile.d/modules.sh

設計

パス環境変数らを定義するmodulefileの配置場所は/usr/share/Modules/init/.modulespathで定義されてます。
その中身は

クラスター計算機での運用を想定するなら、ログインノード、計算ノードでmodulefileが共有されているのが望ましい。
なのでここでは /home/Common/modules/ をそれにします。

っで/usr/share/Modules/init/.modulespathを下記のように修正します。

*なのでヘッドノード、計算機全てにenvironment-modulesをインストールする必要あり

modulefileの用意

ここでは /home/Common/modulesmodulefile の設置場所にしました。
/home/Common/modulesの直下に modulefile を設置してもいいのだが、
アプリケーション毎に中間ディレクトリを配置して管理したいと思う。
例えばRelionにて下記のように2種のバージョンを用意したなら

とする。
*「[module-info shell]」から使っているshellを判定して「/opt/intel/bin/compilervars.sh intel64」を動かそうと思ったが、それだと「module unload」でintel ccのPATH/LD_LIBRARY_PATHが消えないので却下
上記はコンパイル別であるが、relionのリリースバージョン毎で用意されるのが普通でしょうか。ver2.0とv2.1、v3.0b1とか。

実際に使用するには、module availで利用可能な/home/Common/modulesを探して、

[saber@c ~]$ module avail
 
----------------------- /home/Common/modules ------------------------
relion/3.0-beta-2
relion/3.0-beta-2.icc
[saber@c ~]$

「module load」コマンドで取り込む

[saber@c ~]$ module load relion/3.0-beta-2

今現在取り込んでいるmoduleを調べるには「module list」で調べる。

[saber@c ~]$ module list
Currently Loaded Modulefiles:
  1) relion/3.0-beta-2
[saber@c ~]$

既に既定で常に使うmodulefile があるのなら、そのディレクトリに .version ファイルを設置します。
中身は、modulefileの「3.0-beta-2」を常に採用するなら

[root@c ~]# vi /home/Common/modules/relion/.version
#%Module1.0
set ModulesVersion "3.0-beta-2"

とする。すると

[saber@c ~]$ module avail
 
--------------------- /home/Common/modules ---------------------
relion/3.0-beta-2(default)
relion/3.0-beta-2.icc
[saber@c ~]$

と表記される。

PATH環境変数が、「module load」の前と後で比較して確認しましょう。

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/saber/.local/bin:/home/saber/bin
 から
/usr/lib64/openmpi/bin:/Appl/relion-3.0-beta-2/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/saber/.local/bin:/home/saber/bin
 へ

その後、「module unload」で取り込んだmoduleを削除して、再度PATH環境変数の変化を見てみます。

[saber@c ~]$ module unload relion/3.0-beta-2
[saber@c ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/saber/.local/bin:/home/saber/bin
[saber@c ~]$

と元に環境変数が戻ります。

めも

ログインと共に有効となるmodulesの設定

単純に ~/.bashrc や ~/.tcshrc に記載する

[illya@c ~]$ cat .bashrc
 :
 :
module load relion

あるいは別途 /home/Common/modules.load なるファイルを用意して

[root@c ~]# cat /home/Common/modules.load
 
module load em
module load relion
module load eman2/2.12
module load chimera/1.3.1

このファイルをユーザの ~/.bashrc もしくは ~/.cshrc、~/.tcshrc の末尾に

 :
 :
source /home/Common/modules.load

と入れる。これで modules.load の修正でアプリ追加や最新版の提供が可能となる

モジュールの非表示

CentOS7.9にしらたenvironment-modulesが 4.7.1 になっている.
そこで環境設定ファイル(例: /etc/modulefiles/relion/3.1.3)に入れ子で「module load mpi/openmpi-x86_64」とかを入れると

Loading relion/3.1.3
  Loading requirement: mpi/openmpi-x86_64

と表示される.
回避方法としては

module --silent relion/3.1.3

と「--silent」(あるいは単に「-s」)を入れてロードさせる.

あるいはこのmpiを非表示に変更させる。具体的には

[root@c ~]# vi /etc/modulefiles/mpi/.modulerc
#%Module4.7
module-hide --soft --hidden-loaded mpi
[root@c ~]#

https://modules.readthedocs.io/en/latest/design/hide-or-forbid-modulefile.html

この場合は「module list」あるいは「ml」としても「mpi」は表示されないです。
表示するには「module list -a」あるいは「ml -a」と実行すれば表示されます

メモ

ubuntuなら「apt install environment-modules」でいいのだが、これを実行後、コンソールで「module」と実行しても

saber@ubuntu:~$ module
module: command not found
saber@ubuntu:~$

と言われる.
だけど、リモートからのアクセス経由、あるいはコンソールでも「a.sh」とかなスクリプトを作ってその中でmoduleコマンドを
実行してもエラーにはならない.

コンソール上でもmoduleコマンドを実行するには「~/.bashrc」の末尾に

if [ -f /etc/profile.d/modules.sh ]; then
  . /etc/profile.d/modules.sh
fi

を入れる.

メモその2

Rockyのenvironment-modulesは4.5.2
「/apps/em.sh」に

module -s load relion
module -s load chimera
 :

と記載して $HOME/.bashrc に「. /apps/em.sh」と定義するとリモートアクセスでは問題ないのだが、
ローカルアクセスでは「set-alias」を使ったmodule fileが正しく定義できないみたい
*prepend-pathとかは問題なけど. あとこれは version 5.0.x で解消されている
っで回避策は
「load」の代わりに「swap」あるいは「switch」を使うといいみたい

最新の60件
2024-02-23 2024-02-22 2024-02-21 2024-02-20 2024-02-19 2024-02-18 2024-02-17 2024-02-16 2024-02-13 2024-02-12 2024-02-09 2024-02-04 2024-02-03 2024-01-31 2024-01-30 2024-01-29 2024-01-28 2024-01-22 2024-01-16 2024-01-15 2024-01-13 2024-01-12 2024-01-09 2024-01-08 2024-01-07 2024-01-03 2023-12-22 2023-12-17 2023-12-16 2023-12-11 2023-12-09 2023-12-06 2023-11-30 2023-11-27 2023-11-21 2023-11-19 2023-11-18 2023-11-14 2023-11-10 2023-11-09 2023-11-05 2023-11-03 2023-10-30 2023-10-26

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-03-18 (金) 20:07:24