本家様 https://relion.readthedocs.io/en/latest/
RelionをRHEL8系のRockyLinuxで構築してみます. AlmaLinuxと変わらないかな. 同じRHEL8のクローンなので
全ての計算はCPUで行えます. 特定の計算項目によっては、NVIDIA謹製のGPUカードで処理速度が向上します.
compute capability が 3.5 以上のモノが必要です. https://en.wikipedia.org/wiki/CUDA
GPUカードによって最低限のCUDAライブラリ、最大限のCUDAライブラリがあります. RTX30x0はCUDA11シリーズから、GTX Titan(Kepler)は11.3までみたい
GPUの恩恵が得られない計算項目でもoneAPIを使えば処理速度の向上が図られる場合があります.
Relion/OpenPBS relion向けにジョブ管理システム「OpenPBS」を作成する slurmの場合 Relion/slurm
Relion/qsub/original ジョブ管理システム経由でrelionを利用する場合の「qsub.sh」について
Relion/qsub ジョブ管理システム経由でrelionを利用する場合の「qsub.sh」について. その2. パネルを変えてみた
下拵え †
relionのコンパイル要件は本家様にも書かれております
relion-4.0https://relion.readthedocs.io/en/latest/Installation.html
relion-3.1https://relion.readthedocs.io/en/release-3.1/Installation.html
まずは必要なパッケージをインストール
(RHEL7系)
yum groupinstall "Development Tools"
yum --enablerepo=epel install cmake openmpi-devel libX11-devel fftw-devel libtiff-devel texlive-latex-bin \
texlive-cm texlive-dvips ghostscript evince fltk-fluid pbzip2 zstd
(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 pbzip2 zstd
dnf --enablerepo=devel,powertools install fltk-fluid
(RHEL9系)
dnf groupinstall "Development Tools"
dnf install cmake openmpi-devel libX11-devel fftw-devel libtiff-devel texlive-latex-bin \
texlive-cm texlive-dvips ghostscript evince pbzip2 zstd
dnf --enablerepo=devel install fltk-fluid
(ubuntu20.04/22.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 pbzip2
python2-tkinter, python-tkは relion_it.py に必要だから. REHL9はpython2を未サポートなので relion_it.py は使えないみたい. pbzip2はパラレルでbzip2で圧縮されたイメージを展開できる代物
あとnvidiaドライバーとcudaライブラリのインストールを行います. 参照NVIDIA
ソースコード取得 †
mkdir -p /apps/src
cd /apps/src/
git clone https://github.com/3dem/relion
gitのbranchは下記の通りで、git操作せずともそのままで「ver4.0」系になってます
[root@rockylinux9 ~]# cd /apps/src/relion
[root@rockylinux9 relion]# git branch --all
* master
remotes/origin/HEAD -> origin/master
(略
remotes/origin/ver3.1
remotes/origin/ver4.0
[root@rockylinux9 relion]# git log -1
commit ec417f5b36ce847c003723a51267116dc0a0c7ee (HEAD -> master, tag: 4.0.1, origin/ver4.0, origin/master, origin/HEAD)
(略
[root@rockylinux9 relion]#
バージョンは「src/macros.h」に書かれていて下記で確認できます
[root@rockylinux9 relion]# grep RELION_SHORT_VERSION src/macros.h <-- ソースコードに明記されているversionを確認
#define RELION_SHORT_VERSION "4.0.1"
[root@c relion]#
一世代前のver3.1をコンパイルするにはgit操作が必要で「git checkout ver3.1」で切り替えられます. 「git checkout」でファイルが書き換わります. 不思議ですがそうゆうものです
[root@rockylinux9 relion]# git checkout ver3.1
Branch 'ver3.1' set up to track remote branch 'ver3.1' from 'origin'.
Switched to a new branch 'ver3.1'
[root@rockylinux9 relion]# git branch
master
* ver3.1
[root@rockylinux9 relion]# grep RELION_SHORT_VERSION src/macros.h
#define RELION_SHORT_VERSION "3.1.4"
[root@rockylinux9 relion]#
そしてまたver4.0の現行に戻るなら
[root@rockylinux9 relion]# git checkout master
とします
コンパイル †
色々組み合わせがある.
- コンパイラ
単純にOS提供のGCC を使う. oneAPIの「Intel C++ Compiler Classic」あるいは「Intel oneAPI DPC++/C++ Compiler」を使う. CentOS7ならdevtoolsetで標準以外のGCCを. RockyLinuxならgcc-toolsetで標準以外のGCCを
- mpi
OS提供のopenmpiを使う. oneAPIのintel-mpiを使う. oneAPIで作ったopenmpiを使う.
- 他
oneAPIのMKLを使う. GPU[nvidia]を有効にする. CPUのAVX512を活用する. CPUのAVX2を活用する.
などなど.
RHEL7系の標準GCC-4.8.5ではCUDA-11.4のライブラリでコンパイルできない. またRHEL7系はoneAPI 2023.0のコンパイラには未対応.
OS提供のGCCでコンパイル †
RHEL7系ではdevtoolsetを活用して使用するGCCのバージョンを上げたほうがいい. RHEL7系のGCCは古すぎる...
しかしGPUと絡めるときCUDAライブラリのバージョンによっては使えないGCCのバージョンが存在します. CUDAのインストールはCUDAを参照してください
(RHEL8系/RHEL9系)
[root@rockylinux9 relion]# mkdir ver4.0 && cd ver4.0
[root@rockylinux9 ver4.0]# module load mpi/openmpi-x86_64
[root@rockylinux9 ver4.0]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0 ..
[root@rockylinux9 ver4.0]# make -j 20 ; make install
(RHEL7系)
[root@centos7 relion]# yum install centos-release-scl-rh
[root@centos7 relion]# yum install devtoolset-11
[root@centos7 relion]# source scl_source enable devtoolset-11
[root@centos7 relion]# module load mpi/openmpi-x86_64
[root@centos7 relion]# mkdir ver4.0 && cd ver4.0
[root@centos7 ver4.0]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0 ..
[root@centos7 ver4.0]# make -j 20 && make install
(ubuntu22.04)
root@ubuntu22:/apps/src/relion# mkdir ver4.0 && cd ver4.0
root@ubuntu22:/apps/src/relion/ver4.0# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0 ..
root@ubuntu22:/apps/src/relion/ver4.0# make -j 20 ; make install
「-DCUDA=ON」は不要のご様子. 「-DCUDA_ARCH=86」とか「-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.1」 とかはお好みで.
RHEL9系とubuntu22.04ではコンパイル中にwarningが結構出ます. GCCが11.3.xだからかな
OS提供のGCCでコンパイル(intel謹製MKLを拝借したい) †
OS提供のGCCを使うけど、無償で使えるintel謹製MKL(MathKernelLibary)を噛ませたい. intelコンパイラ icc/icx は使わない. MKLのみ拝借したい
無償で使えるintelコンパイラのインストール方法はoneAPIを参照してください
intel謹製MKLを噛ませてもCUDAが使えるバイナリーを作れます
(RHEL8系/RHEL9系)
[root@rockylinux relion]# module use --append /opt/intel/modulefiles/
[root@rockylinux relion]# module load mpi/openmpi-x86_64
[root@rockylinux relion]# module load mkl/2023.0.0
[root@rockylinux relion]# mkdir ver4.0 && cd ver4.0
[root@rockylinux ver4.0]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0 -DMKLFFT=ON .. -DCUDA_ARCH=86 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.1
[root@rockylinux ver4.0]# make -j 20 && make install
(RHEL7系)
[root@centos7 relion]# module use --append /opt/intel/modulefiles/
[root@centos7 relion]# module load mpi/openmpi-x86_64
[root@centos7 relion]# module load mkl/2023.0.0
[root@centos7 relion]# yum install centos-release-scl-rh
[root@centos7 relion]# yum install devtoolset-11
[root@centos7 relion]# source scl_source enable devtoolset-11
[root@centos7 relion]# mkdir ver4.0 && cd ver4.0
[root@centos7 ver4.0]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0 -DMKLFFT=ON .. -DCUDA_ARCH=86 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.1
[root@centos7 ver4.0]# make -j 20 && make install
(ubuntu22.04)
root@ubuntu22:/apps/src/relion# module use --append /opt/intel/modulefiles/
root@ubuntu22:/apps/src/relion# module load mkl/2023.0.0
root@ubuntu22:/apps/src/relion# mkdir ver4.0 && cd ver4.0
root@ubuntu22:/apps/src/relion/ver4.0# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0 -DMKLFFT=ON .. -DCUDA_ARCH=86 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.1
root@ubuntu22:/apps/src/relion/ver4.0# make -j 20 ; make install
centos7はEnvironmentModules/packageを参考にenvironment-modules-5.2.0を淹れてください
インテルコンパイラoneAPIでコンパイル †
「AVX512(AVX256)によるアクセラレーション」と「CUDAによるアクセラレーション」は相互に排他的の様子. AVX512(AVX256)を利用すればCUDAによる高速化の恩恵は受けられない. 逆もまた然り.
AVX512(AVX256)によるアクセラレーションを有効にするには下記のようにします
(ubuntu22.04)
root@ubuntu22:/apps/src/relion# module use --append /opt/intel/modulefiles/
root@ubuntu22:/apps/src/relion# module load icc/2023.0.0 mkl/2023.0.0 mpi/2021.8.0
root@ubuntu22:/apps/src/relion# mkdir ver4.0 && cd ver4.0
root@ubuntu22:/apps/src/relion/ver4.0# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0.icc -DMKLFFT=ON .. -DALTCPU=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"
root@ubuntu22:/apps/src/relion/ver4.0# make -j 20 && make install
(RHEL8系/RHEL9系)
[root@rockylinux9 relion]# module use --append /opt/intel/modulefiles/
[root@rockylinux9 relion]# module load icc/2023.0.0 mkl/2023.0.0 mpi/2021.8.0
[root@rockylinux9 relion]# mkdir ver4.0 && cd ver4.0
[root@rockylinux9 ver4.0]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0.icc -DMKLFFT=ON .. -DALTCPU=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"
[root@rockylinux9 ver4.0]# make -j 20 && make install
relion実行時に「Please verify that both the operating system and the processor support Intel(R) AVX512F and AVX512CD instructions.」と表記されるのはその計算機のCPUがAVX512に未対応のため
oneAPI 2023.0からCentOS7は未対応. でもintel謹製MKLは使えるみたい
mpiはintel謹製のmpiを使うことになります.
一方でAVX512(AVX256)によるアクセラレーションではなく、CUDAでのアクセラレーションを有効にしつつインテルコンパイラの恩恵を期待するなら下記のようにします.
CUDAによる高速化が適用されていない「relion's motioncorr」「polish」らの局面で有効かと
*繰り返しますが、AVX512(AVX256)によるアクセラレーションは無効でです. 速度に関しては未計測です. あとCUDA-11.5以上で作る必要があり
module use --append /opt/intel/modulefiles/
module load icc/2023.0.0 mkl/2023.0.0 mpi/2021.8.0
cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0.icc -DMKLFFT=ON .. -DALTCPU=OFF -DCUDA_ARCH=86 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.1 \
-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" 」を追加しても構いませんが、効くかは不明
GCCでAVX512(AVX256)によるアクセラレーション版は作れるの?...GCCのコンパイルオプションに「-mavx512f」とかあるからできそうな気がするけど試してないです
インテルコンパイラoneAPIでコンパイルしたopenmpiでコンパイルしたい †
intel謹製のmpiとOS提供のopenmpiは別物でオプションが異なります. OS提供のopenmpiの使い方を継続しつつintel謹製コンパイラ様の恩恵に期待するなら
intelコンパイラでソースからopenmpiを作る必要があります. ここではCUDAのアクセラレーションを有効にしてます.
(RHEL8系/RHEL9系)
[root@rockylinux9 ~]# cd /apps/src/
[root@rockylinux9 src]# module use --append /opt/intel/modulefiles/
[root@rockylinux9 src]# module load icc/2023.0.0 mkl/2023.0.0
[root@rockylinux9 src]# module unload mpi/2021.8.0
[root@rockylinux9 src]# wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.bz2
[root@rockylinux9 src]# tar xf openmpi-4.1.5.tar.bz2 && cd openmpi-4.1.5
[root@rockylinux9 openmpi-4.1.5]# CC=icc CXX=icpc FC=ifort ./configure --without-verbs --prefix=/apps/openmpi-4.1.5_icc-2023.0.0
[root@rockylinux9 openmpi-4.1.5]# make -j 20 ; make check ; make install
[root@rockylinux9 openmpi-4.1.5]# cd /apps/src/relion
[root@rockylinux9 relion]# mkdir ver4.0 && cd ver4.0
[root@rockylinux9 ver4.0]# export PATH=/apps/openmpi-4.1.5_icc-2023.0.0/bin:$PATH
[root@rockylinux9 ver4.0]# export LD_LIBRARY_PATH=/apps/openmpi-4.1.5_icc-2023.0.0/lib:$LD_LIBRARY_PATH
[root@rockylinux9 ver4.0]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0.icc-ompi -DMKLFFT=ON .. -DALTCPU=OFF -DCUDA_ARCH=86 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.1 \
-DCMAKE_C_COMPILER=icc \
-DCMAKE_CXX_COMPILER=icpc \
-DMPI_C_COMPILER=mpicc \
-DMPI_CXX_COMPILER=mpicxx
[root@rockylinux9 ver4.0]# make -j 20 ; make install
oneAPI 2023.0からCentOS7は未対応.
インテルコンパイラoneAPIのDPC++/C++でコンパイルしてみる †
インテル様の新しいLLVMベースのコンパイラ(icx/icpx)で作ってみる. これまで述べていたインテルコンパイラは「Intel(R) C++ Compiler Classic (ICC)」コンパイラで2023の第二四半期で製品から消えるそうな..
CUDA有効バイナリは下記のようにして作れます.
module use --append /opt/intel/modulefiles/
module load compiler/2023.0.0 mkl/2023.0.0 mpi/2021.8.0
cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0.icx -DMKLFFT=ON .. -DALTCPU=OFF \
-DCMAKE_C_COMPILER=icx \
-DCMAKE_CXX_COMPILER=icpx \
-DMPI_C_COMPILER=mpiicc \
-DMPI_CXX_COMPILER=mpiicpc \
-DCUDA_NVCC_FLAGS="-allow-unsupported-compiler"
どうもnvccから「unsupported clang version! clang version must be less than 16 and greater than 3.2 . The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk.」と言われる. 恐らく連携される「/opt/intel/oneapi/compiler/2023.0.0/linux/bin-llvm」のversion番号が2023となるかなかな. 「-DCUDA_NVCC_FLAGS="-allow-unsupported-compiler"」で騙しています.
これはintel mpiで作ってます. 次にopenmpiで用意してみます
module use --append /opt/intel/modulefiles/
module load compiler/2023.0.0 mkl/2023.0.0
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.bz2
tar xf openmpi-4.1.5.tar.bz2 && cd openmpi-4.1.5
CC=icx CXX=icpx FC=ifx ./configure --without-verbs --prefix=/apps/openmpi-4.1.5_icx-2023.0.0
make -j 20 ; make check ; make install
export PATH=/apps/openmpi-4.1.5_icx-2023.0.0/bin:$PATH
export LD_LIBRARY_PATH=/apps/openmpi-4.1.5_icx-2023.0.0/lib:$LD_LIBRARY_PATH
cmake -DCMAKE_INSTALL_PREFIX=/apps/relion-4.0.icx-ompi -DMKLFFT=ON .. -DCUDA_ARCH=86 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.1 \
-DCMAKE_C_COMPILER=icx \
-DCMAKE_CXX_COMPILER=icpx \
-DMPI_C_COMPILER=mpicc \
-DMPI_CXX_COMPILER=mpicxx \
-DCUDA_NVCC_FLAGS="-allow-unsupported-compiler"
EnvironmentModules †
EnvironmentModules/sample参照