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

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

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

インストール

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

(CentOS7)
[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

「modules.csh」は「/usr/share/Modules/init/csh」へのリンクであるが、
「modules.sh」はちょいと調整があって「/usr/share/Modules/init/sh」を丸呑み。

設計

クラスター計算機での運用を想定します。
パス環境変数らを定義するmodulefileの配置場所は
ヘッドノード、計算機で共有されているのが望ましいので、ここでは /home/Common/modules をそれにします。
そのために/usr/share/Modules/init/.modulespathを修正します。

[root@client ~]# diff -u /usr/share/Modules/init/.modulespath.orig /usr/share/Modules/init/.modulespath
--- /usr/share/Modules/init/.modulespath.orig   2015-11-20 00:43:58.000000000 -0500
+++ /usr/share/Modules/init/.modulespath        2018-12-28 11:08:26.163730843 -0500
@@ -15,6 +15,7 @@
 #
 #                              # location of version files
 #/usr/share/Modules/$MODULE_VERSION/modulefiles        # Module pkg modulefiles (if versioning)
-/usr/share/Modules/modulefiles # Module pkg modulefiles (if no versioning)
-/etc/modulefiles                               # General module files
+#/usr/share/Modules/modulefiles        # Module pkg modulefiles (if no versioning)
+#/etc/modulefiles                              # General module files
 #/usr/share/Modules/your_contribs                      # Edit for your requirements
+/home/Common/modules
[root@client ~]#

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

modulefileの用意

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

  • gccでコンパイルされたバージョン
    [root@c ~]# mkdir -p /home/Common/modules/relion
    [root@c ~]# vi /home/Common/modules/relion/3.0-beta-2
    #%Module1.0
    set RELION /Appl/relion-3.0-beta-2
    set mpi    /usr/lib64/openmpi
     
    prepend-path PATH            $RELION/bin:$mpi/bin
    prepend-path LD_LIBRARY_PATH $RELION/lib:$mpi/lib
     
    setenv RELION_QSUB_TEMPLATE  $RELION/bin/qsub.sh
    setenv RELION_QUEUE_NAME     s3
    setenv RELION_QUEUE_USE      false
     
    setenv RELION_CTFFIND_EXECUTABLE     /Appl/ctf/ctffind4.exe
    setenv RELION_MOTIONCOR2_EXECUTABLE  /Appl/local/bin/MotionCor2
    setenv RELION_GCTF_EXECUTABLE        /Appl/Gctf/bin/gctf
    setenv RELION_RESMAP_EXECUTABLE      /Appl/local/bin/ResMap
  • iccでコンパイルされたバージョン
    [root@c ~]# vi /home/Common/modules/relion/3.0-beta-2.icc
    #%Module1.0
    set RELION /Appl/relion-3.0-beta-2.icc
    set mpi    /Appl/local/openmpi-1.10.7_intel-18.0.2
    set intel  /opt/intel/compilers_and_libraries_2018.2.199/linux
     
    prepend-path PATH            $RELION/bin:$mpi/bin
    prepend-path LD_LIBRARY_PATH $RELION/lib:$mpi/lib
    prepend-path LD_LIBRARY_PATH $intel/compiler/lib/intel64:$intel/mkl/lib/intel64
     
    setenv RELION_QSUB_TEMPLATE  $RELION/bin/qsub.sh
    setenv RELION_QUEUE_NAME     s3
    setenv RELION_QUEUE_USE      false
     
    setenv RELION_CTFFIND_EXECUTABLE     /Appl/ctf/ctffind4.exe
    setenv RELION_MOTIONCOR2_EXECUTABLE  /Appl/local/bin/MotionCor2
    setenv RELION_GCTF_EXECUTABLE        /Appl/Gctf/bin/gctf
    setenv RELION_RESMAP_EXECUTABLE      /Appl/local/bin/ResMap

とする。
*「[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 の修正でアプリ追加や最新版の提供が可能となる

サンプル

EnvironmentModules/run


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-07-28 (日) 20:48:06 (25d)