本家様 https://relion.readthedocs.io/en/latest/
以前の内容はこちらを参照でhttps://web.chaperone.jp/w/index.php?cmd=backup&page=Relion&age=48

RelionをRHEL8系のRockyLinuxで構築してみます. AlmaLinuxと変わらないかな. 同じRHEL8のクローンなので

全ての計算はCPUで行えます. 特定の計算項目によっては、NVIDIA謹製のGPUカードで処理速度が向上します.
GPUの恩恵が得られない計算項目でもoneAPIを使えば処理速度の向上が図られる場合があります.

Relion/OpenPBS relion向けにジョブ管理システム「OpenPBS」を作成する
Relion/qsub/original ジョブ管理システム経由でrelionを利用する場合の「qsub.sh」について
Relion/qsub ジョブ管理システム経由でrelionを利用する場合の「qsub.sh」について. その2. パネルを変えてみた

下拵え

relionのコンパイル要件は本家様にも書かれております
relion-3.1https://relion.readthedocs.io/en/release-3.1/Installation.html
relion-4.0https://relion.readthedocs.io/en/latest/Installation.html
まずは必要なパッケージをインストール

(RHEL7系)
yum groupinstall "Development Tools"
yum install cmake openmpi-devel libX11-devel fftw-devel libtiff-devel texlive-latex-bin texlive-cm texlive-dvips ghostscript evince fltk-fluid
 
(RHEL8系)
dnf groupinstall "Development Tools"
dnf install cmake openmpi-devel libX11-devel fftw-devel libtiff-devel texlive-latex-bin texlive-cm texlive-dvips ghostscript evince python2-tkinter
dnf --enablerepo=devel,powertools install fltk-fluid
 
(ubuntu20.04)
apt update
apt install cmake git build-essential mpi-default-bin mpi-default-dev libx11-dev libfftw3-dev libtiff-dev libpng-dev libfltk1.3-dev \
    evince xdvik-ja texlive-fonts-extra texlive-fonts-recommended texlive-lang-cjk xdvik-ja python2 python-tk

python2-tkinter, python-tkは relion_it.py に必要だから

ソースコード取得

mkdir -p /apps/src
cd /apps/src/
git clone https://github.com/3dem/relion

存在しているgitのbranchは下記の通りで、現行リリースはver3.1系なので「ver3.1」のbranchに移ります.

[root@c ~]# cd /apps/src/relion
[root@c relion]# git branch --all
* master
  remotes/origin/HEAD -> origin/master
(略)
  remotes/origin/master
  remotes/origin/ver2.1
  remotes/origin/ver3.0
  remotes/origin/ver3.1
  remotes/origin/ver4.0
[root@c relion]# git checkout ver3.1
[root@c relion]# git branch
  master
* ver3.1
[root@c relion]#

これでソースコードはver3.1の最新コミットになりました. この状態でコンパイルを行います. tagの3.1.3から多少コード修正されてます
version番号の確認は直接ソースコードからかな.

[root@c relion]# grep RELION_SHORT_VERSION src/macros.h   <-- ソースコードに明記されているversionを確認
#define RELION_SHORT_VERSION "3.1.3"
[root@c relion]#

最新のver4.0系をコンパイルするには「git checkout ver4.0」として乗り換えます. 「git checkout」でファイルが書き換わります. 不思議ですがそうゆうものです

[root@c relion]# git checkout ver4.0
(確認)
[root@c relion]# grep RELION_SHORT_VERSION src/macros.h
#define RELION_SHORT_VERSION "4.0-beta-2"
[root@c relion]#

コンパイル

色々組み合わせがある.

  • コンパイラ
    単純にOS提供のGCC を使う. devtoolsetのGCCを使う. oneAPIのICCを使う.
  • mpi
    OS提供のopenmpiを使う. oneAPIのintel-mpiを使う. oneAPIで作ったopenmpiを使う.

  • oneAPIのMKLを使う. GPU[nvidia]を有効にする. CPUのAVX512を活用する. CPUのAVX2を活用する.

などなど.
relion-3.1.X系でoneAPIを使うとCUDAは有効にできない. 一つ前のバージョンなら出来たけど.
RHEL7系の標準GCC-4.8.5ではCUDA-11.4のライブラリでコンパイルできない

OS提供のGCCでコンパイル

RHEL7系ではdevtoolsetを活用して使用するGCCのバージョンを上げたほうがいい. RHEL7系のGCCは古すぎる...
しかしGPUと絡めるときCUDAライブラリのバージョンによっては使えないGCCのバージョンが存在します. CUDAのインストールはCUDAを参照してください
CUDA-10.2は devtoolset-8 が上限. それ以上のdevtoolset-9とかではコンパイルできません. 参照CUDA#e5f4f37a

(RHEL7系)
[root@c relion]# yum install centos-release-scl-rh
[root@c relion]# yum install devtoolset-8
[root@c relion]# source scl_source enable devtoolset-8
[root@c relion]# module load mpi
[root@c relion]# mkdir 313 && cd 313
[root@c 313]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.3 ..
[root@c 313]# make -j 20 && make install
 
(RHEL8系)
[root@c relion]# mkdir 313 && cd 313
[root@c 313]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.3 ..
[root@c 313]# make -j 20 && make install

-DCUDA=ONは不要のご様子. -DCUDA_ARCH=86とかはお好みで. -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.4 とかも
CUDAを利用できるかはcmakeの最中に自動判断されます. cmakeの際のログに注意してください
*git操作でrelionのソースコードをver4.0系に変更しても同じ要領でコンパイル可能です

OS提供のGCCでコンパイル(intel謹製MKLを使いたい)

無償で使えるintelコンパイラ. OS提供のGCCを使うけど、無償で使えるintel謹製MKL(MathKernelLibary)を載せてみる
無償で使えるintelコンパイラのインストール方法はoneAPIを参照してください
CUDAはintel謹製MKLが入っても有効になります

(RHEL7系)
[root@c relion]# source /opt/intel/oneapi/setvars.sh
[root@c relion]# yum install centos-release-scl-rh
[root@c relion]# yum install devtoolset-8
[root@c relion]# source scl_source enable devtoolset-8
[root@c relion]# module load mpi
[root@c relion]# mkdir 313 && cd 313
[root@c 313]# CC=cc CXX=c++ cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.3 -DMKLFFT=ON ..
[root@c 313]# make -j 20 && make install
 
(RHEL8系)
[root@c relion]# source /opt/intel/oneapi/setvars.sh
[root@c relion]# module load mpi
[root@c relion]# mkdir 313 && cd 313
[root@c 313]# CC=cc CXX=c++ cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.3 -DMKLFFT=ON ..
[root@c 313]# make -j 20 && make install

*git操作でrelionのソースコードをver4.0系に変更しても同じ要領でコンパイル可能です

インテルコンパイラoneAPIでコンパイル(AVX512を有効にして)

relion-3.1.XではインテルコンパイラoneAPIでCUDAライブラリを噛ましてのコンパイルができないみたい. 以前の「Intel Parallel Studio XE」とかなら作れたのに..
なのでCUDAを利用しないバイナリーを作ってみます

(RHEL7系/RHEL8系)
[root@c relion]# source /opt/intel/oneapi/setvars.sh
[root@c relion]# mkdir 313 && cd 313
[root@c 313]# LANG=C cmake -DALTCPU=ON -DMKLFFT=ON  \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DMPI_C_COMPILER=mpiicc \
-DMPI_CXX_COMPILER=mpiicpc \
-DCMAKE_C_FLAGS="-O3 -ip -g -xCOMMON-AVX512 -restrict " \
-DCMAKE_CXX_FLAGS="-O3 -ip -g -xCOMMON-AVX512 -restrict " \
-DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.3.impi-icc-avx512 ..
[root@c 313]# make -j 20 && make install

mpiはintel謹製のmpiを使うことになります.
relionのver4.0系ならインテルコンパイラoneAPIでCUDA対応バイナリーが作れます. CUDA-11.5以上なら
*注意: cmakeはversion3系列が必要です. RHEL7系なら「yum install cmake3」で「cmake3」を使ってください
AMD社製CPUの場合はFLAGS部分を「-O3 -march=core-avx2」へ. AVX512はまだないので

(RHEL7系/RHEL8系)
[root@c relion]# source /opt/intel/oneapi/setvars.sh
[root@c relion]# git checkout ver4.0
[root@c relion]# mkdir 400b && cd 400b
[root@c 400b]# LANG=C cmake -DALTCPU=OFF -DMKLFFT=ON  \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DMPI_C_COMPILER=mpiicc \
-DMPI_CXX_COMPILER=mpiicpc \
-DCMAKE_C_FLAGS="-O3 -ip -g -xCOMMON-AVX512 -restrict " \
-DCMAKE_CXX_FLAGS="-O3 -ip -g -xCOMMON-AVX512 -restrict " \
-DCMAKE_INSTALL_PREFIX=/apps/relion-4.0-beta-2.impi-icc-avx512 ..
[root@c 400b]# make -j 20 && make install

インテルコンパイラoneAPIでコンパイル(AVX512を有効にして)(openmpiを使いたい)

intel謹製のmpiとopenmpiは別物でオプションが異なります. OS提供のopenmpi系を使いたいなら、一旦intelコンパイラでopenmpiを作る必要があります
こちらもrelion-3.1.XだとどうもCUDAを含むのができないようで、まずはCUDAなしの場合を下記に示します.

(RHEL7系/RHEL8系)
[root@c ~]# cd /apps/src
[root@c src]# tar xf openmpi-4.1.1.tar.gz && cd openmpi-4.1.1
[root@c openmpi-4.1.1]# source /opt/intel/oneapi/setvars.sh
[root@c openmpi-4.1.1]# CC=icc CXX=icpc ./configure --without-verbs --prefix=/apps/openmpi-4.1.1_icc-2021.4.0
[root@c openmpi-4.1.1]# make -j 20 && make install
 
[root@c openmpi-4.1.1]# export PATH=/apps/openmpi-4.1.1_icc-2021.4.0/bin:$PATH
[root@c openmpi-4.1.1]# export LD_LIBRARY_PATH=/apps/openmpi-4.1.1_icc-2021.4.0/lib:$LD_LIBRARY_PATH
[root@c openmpi-4.1.1]# cd /apps/src/relion/313
[root@c 313]# LANG=C cmake -DALTCPU=ON -DMKLFFT=ON  \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DMPI_C_COMPILER=mpicc \
-DMPI_CXX_COMPILER=mpicxx \
-DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.3.ompi-icc ..
[root@c 313]# make -j 20 && make install

そして同様にrelion ver4.0系ならCUDA対応バイナリーが作れる. cmakeはver2系のcmakeで行けます

(RHEL7系/RHEL8系)
[openmpi-4.1.1_icc-2021.4.0の構築は上記と同じ]
 
[root@c relion]# source /opt/intel/oneapi/setvars.sh
[root@c relion]# export PATH=/apps/openmpi-4.1.1_icc-2021.4.0/bin:$PATH
[root@c relion]# export LD_LIBRARY_PATH=/apps/openmpi-4.1.1_icc-2021.4.0/lib:$LD_LIBRARY_PATH
[root@c relion]# git checkout ver4.0
 
[root@c relion]# mkdir 400b && cd 400b
[root@c 400b]# LANG=C cmake -DALTCPU=OFF -DMKLFFT=ON  \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DMPI_C_COMPILER=mpicc \
-DMPI_CXX_COMPILER=mpicxx \
-DCMAKE_INSTALL_PREFIX=/apps/relion-4.0-beta-2.ompi-icc ..
[root@c 400b]# make -j 20 && make install

CUDA対応バイナリ作成

だいたいこんな感じかな

relion versionコンパイラとMPI
GCCIntel oneAPI
openmpiopenmpi
(oneAPIで構築)
Intel MPI
3.1.XCUDA対応可作れない
CPU版は作れる
4.0.XCUDA対応可CUDA対応可CUDA対応可
(要 cmake3)

*ただ、、3.1系でoneAPIの前のバージョン「Intel Parallel Studio XE」でCUDA対応版を作成したが、CUDAを使うClass2D処理とかが若干GCC版よりも遅かった記憶が...
CUDAを使う計算ならGCCのバイナリーで、それ以外の計算はCUDA未対応のintel版を使った方がいい感じだったけど...oneAPIおよびrelion-4ではどうなったかは未検証

EnvironmentModules

GCCなら

#%Module1.0
module load mpi/openmpi-x86_64
 
set RELION /apps/relion-3.1.3
prepend-path PATH            $RELION/bin
 
setenv RELION_QSUB_COMMAND   qsub
setenv RELION_MPIRUN         mpirun
setenv RELION_QSUB_TEMPLATE  $RELION/bin/qsub.sh
setenv RELION_QUEUE_NAME     s3
setenv RELION_QUEUE_USE      false
 
setenv RELION_QSUB_NRTHREADS         4
setenv RELION_THREAD_MAX             16
setenv RELION_QSUB_NRMPI             4
setenv RELION_MPI_MAX                32
setenv RELION_ERROR_LOCAL_MPI        32
setenv RELION_SHELL                  csh
setenv RELION_EXTERNAL_RECONSTRUCT_EXECUTABLE relion_external_reconstruct
 
setenv RELION_CTFFIND_EXECUTABLE     /apps/ctffind-4.1.14/ctffind
setenv RELION_MOTIONCOR2_EXECUTABLE  /apps/MotionCor2/MotionCor2_1.4.2_Cuda111-02-15-2020
setenv RELION_GCTF_EXECUTABLE        /apps/GCTF_Gautomatch_Cu10.1/GCTF_v1.18_sm30-75_cu10.1
setenv RELION_RESMAP_EXECUTABLE      /apps/ResMap/ResMap-1.1.4-linux64
setenv RELION_PDFVIEWER_EXECUTABLE   evince
setenv RELION_SCRATCH_DIR            \$TMPDIR    # scratchの場所. pbsproのTMPDIRを使うなら
 
setenv RELION_EXTERNAL_RECONSTRUCT_EXECUTABLE /apps/SIDESPLITTER/sidesplitter_wrapper.sh
setenv SIDESPLITTER                           /apps/SIDESPLITTER/sidesplitter

ver4.0系なら
「set RELION /apps/relion-3.1.3」を「set RELION /apps/relion-4.0-beta-2」に変更して
「setenv RELION_TOPAZ_EXECUTABLE /apps/pyenv/versions/anaconda3-5.3.1/envs/topaz/bin/topaz」を加える. topazを入れた場合
oneAPIで作った場合は、「module load mpi/openmpi-x86_64」を外して「module load mkl/latest mpi/latest」を代わりに入れる.
oneAPIで作ったonempiの場合は「module load mpi/openmpi-x86_64」を外して、下記を代わりに入れる

module load mkl/latest
set MPI /apps/openmpi-4.1.1_icc-2021.4.0
prepend-path PATH $MPI/bin
prepend-path LD_LIBRARY_PATH $MPI/lib

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-05-17 (火) 01:05:27 (95d)