本家様 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 |
GCC | Intel oneAPI |
openmpi | openmpi (oneAPIで構築) | Intel MPI |
3.1.X | CUDA対応可 | 作れない CPU版は作れる |
4.0.X | CUDA対応可 | 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