Relionの特定のプログラムはGPUに処理を回してより高速に計算することができる。
ただし使えるGPUはnvidiaなカードでcompute capability3.5 以上のもの
一応本家様にリストがあります https://developer.nvidia.com/cuda-gpus
こっちの方が見やすいです https://en.wikipedia.org/wiki/CUDA

ここではRelion-3.1(GPU-acceleration版) を CentOS 8にインストールしてみます.

計算が速くなる計算項目

relion_refine と relion_autopick の2種(mpi版の relion_refine_mpi と relion_autopick_mpi も含みます)
relionのGUI画面からすると、下記計算項目のオレンジでくくった箇所の計算がGPU利用可能な計算項目となる。
2019y02m26d_232611777.png

CUDAライブラリをインストール

nvidiaのカードをマシンに刺して、cudaライブラリをインストールします。ここではcuda10.0を使います
参照 CUDA

コンパイル

既にRelionにてパッケージの取得が完了して、コンパイルに必要なパッケージもインストール済みとします

[root@c ~]# cd /apps/src/relion
[root@c relion]#
[root@c relion]# git branch   <--一応どの路線にいるか確認.
  master
  ver3.0
* ver3.1
[root@c relion]# git pull                    <--最新版にする
[root@c relion]# mkdir build && cd build     <--ビルドの場所を作ってそこに移ります
[root@c build]# module load mpi              <--openmpi環境をロードします
 
[root@c build]# cmake -DCUDA=ON -DCudaTexture=ON -DCUDA_ARCH=52 -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1 ..
(-DCUDA_ARCHはMaxwell系なら5x, 10x0なら61, 20x0なら75, 30x0なら86)
(-DCMAKE_INSTALL_PREFIXはインストール先を指定します)
  :
-- BUILD TYPE set to the default type:  'Release'
  :
[root@c build]# make                         -->「make VERBOSE=1」で詳細表示になります
[root@c build]# make install

これでインストールは完了です

ちょいとcudaライブラリが参照できるか確認してみる

[root@c ~]# ldd /apps/relion-3.1/bin/relion_refine_mpi
        linux-vdso.so.1 =>  (0x00007ffc90b13000)
        libcufft.so.10 => /usr/local/cuda/lib64/libcufft.so.10 (0x00007effda503000)
          :
[root@c ~]#

大丈夫みたい. これで使用できます.



(備考1)
GPU-accelerationに intel Math Kernel Library(MKL)の FFT を組み入れてみる. relion_refineで10%前後の効果があったけど系に寄るかな
一応作り方は事前にMKLを導入してから下記の流れで作ります
*Intel Compilers runtime ライブラリ」にはヘッダファイルが含まれていないので無理

source /opt/intel/bin/compilervars.sh intel64
(あるいは「source /opt/intel/compilers_and_libraries/linux/mkl/bin/mklvars.sh intel64」)
 
module load mpi
cmake -DCUDA=ON  -DCudaTexture=ON -DCUDA_ARCH=52 -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.0 -DMKLFFT=ON ..
make
make install



(備考2)
GCCのオプションも使ってより最適化を図りたいなら「-DCMAKE_CXX_FLAGS_RELEASE」を使って修正する. 既定は「-O3 -DNDEBUG」みたい
単純に「-DCMAKE_CXX_FLAGS_RELEASE='-O3 -DNDEBUG -march=core-avx2'」とかで.
でも却って遅くなる場合もあるようなので要注意. ...実際にrelion_refine計算は遅くなりました

source /opt/intel/bin/compilervars.sh intel64
(あるいは「source /opt/intel/compilers_and_libraries/linux/mkl/bin/mklvars.sh intel64」)
 
cmake -DCUDA=ON  -DCudaTexture=ON -DCUDA_ARCH=52 -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.0 -DMKLFFT=ON -DCMAKE_CXX_FLAGS_RELEASE='-O3 -DNDEBUG -march=core-avx2' ..
make VERBOSE=1
make install


(備考3)
CentOS 7のGCCは4.8.5 である. もっと新しいコンパイラで調理したいなら devtool CentOS/devtoolsetを使うと簡単にできる
でも実際にrelionをコンパイルすのはほとんど mpicxx であって、 GPU関係に多少絡むくらい.
*cuda-10-2のnvccは gcc8 以降は未サポート

っでdevtoolにはopenmpiがない. 故devtoolでGCCをバージョンアップしてより効率がいいバイナリーを作るには初めにopenmpiを作る必要がある.

(備考4)
cuda-11.4を使っているが、cuda-11.2でコンパイルしたい場合は「-DCUDA_TOOLKIT_ROOT_DIR」でcudaライブラリを指定する

cmake -DCUDA=ON -DCudaTexture=ON -DCUDA_ARCH=35 -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.2 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.2 ..

実行

参照 Relion#l84c3f30


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-07-08 (木) 22:45:18 (81d)