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

EnvironmentModules/sample

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で定義されてます。
その中身は

  • CentOS7(environment-modules-3.2.10がインストールされる)
    #
    #  @(#)$Id: 38aa24cc33a5f54a93781d63005a084f74418022 $
    #  Module version 3.2.10
    #  init/.modulespath.  Generated from .modulespath.in by configure.
    #
    #  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.
    #
    #                               # 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/your_contribs                       # Edit for your requirements
  • CentOS8(environment-modules-4.1.4がインストールされる)
    # This file defines the initial setup for the modulefiles search path
    # Each line containing one or multiple paths delimited by ':' will be
    # added to the MODULEPATH environment variable.
    /usr/share/Modules/modulefiles:/etc/modulefiles:/usr/share/modulefiles

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

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

  • CentOS7
    /usr/share/Modules/modulefiles
    /etc/modulefiles
    /home/Common/modules
  • CentOS8
    /usr/share/Modules/modulefiles:/etc/modulefiles:/usr/share/modulefiles:/home/Common/modules

*なのでヘッドノード、計算機全てに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
     
    prepend-path PATH            $RELION/bin
     
    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 の修正でアプリ追加や最新版の提供が可能となる


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-02-16 (日) 02:58:57 (54d)