本家様 https://relion.readthedocs.io/en/latest/

RelionをRHEL9系のRockyLinuxで構築してみます.

全ての計算はCPUで行えます. 特定の計算項目によっては、NVIDIA様、AMD様、Intel様のGPU(Graphics Processing Unit)カードで計算速度が向上します.

GPUの恩恵が得られない計算項目でもoneAPIを使えば処理速度の向上が図られる場合があります.

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

下拵え

relionのコンパイル要件は本家様にも書かれております
relion-5.0https://relion.readthedocs.io/en/release-5.0/Installation.html
relion-4.0https://relion.readthedocs.io/en/release-4.0/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 python3-tk pbzip2

python2-tkinter, python-tkは relion_it.py に必要だから. REHL9はpython2を未サポートなので relion_it.py は使えないみたい. pbzip2はパラレルでbzip2で圧縮されたイメージを展開できる代物

あとnvidiaドライバーとcudaライブラリのインストールを行います. 参照NVIDIA

ソースコード取得

gitで取得します. ここでは /apps/src にソースを置いて /apps/ にアプリを配置してます.

[root@rockylinux9 ~]# mkdir /apps/src  &&   cd $_
[root@rockylinux9 src]# git clone https://github.com/3dem/relion
[root@rockylinux9 src]# cd relion
 
[root@rockylinux9 relion]# less src/macros.h
 :
#define RELION_SHORT_VERSION "4.0.1"
 :
[root@rockylinux9 relion]#

gitで取得した時点のversionは 4.0.1 のようです. これをgit操作で ver5.0 系に切り替えます.

[root@rockylinux9 relion]# git checkout ver5.0
 
[root@rockylinux9 relion]# less src/macros.h
 :
#define RELION_SHORT_VERSION "5.0-beta-0"
 :
[root@rockylinux9 relion]#

これで「/apps/src/relion」の中身は ver5.0 になりました

conda環境作成

っと次はコンパイルなのですが、ver5.0からpythonアプリとより仲良くなるようで事前にrelion向けのconda環境が必要のようです.
そのconda環境にrelion以外の外部プログラムの一部を置いておくという感じかな.

っでまずはconda環境の構築. ここでは topazcrYOLOのように pyenv/anaconda で環境を作っているので同じようにしてます. ドキュメントでは miniconda で対処されてます. anacondaのライセンス回避ならminicondaは必須ですからね

git clone https://github.com/yyuu/pyenv.git /apps/pyenv
export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
pyenv install anaconda3-2023.09-0
pyenv global anaconda3-2023.09-0

っでその上でrelion向けconda環境を作ります. 必要なパッケージは git で配布の「environment.yml」に纏められていて、これで環境を作ります

[root@rockylinux9 relion]# pwd
/apps/src/relion
[root@rockylinux9 relion]# less environment.yml
name: relion-5.0
channels:
  - conda-forge
  - defaults
dependencies:
  - pip
  - python=3.10
  - setuptools=59.5.0
  - pip:
      - torch==2.0.1
 :
      - napari[all]==0.4.18
 :
      - scipy
      - git+https://github.com/3dem/relion-classranker@b6e751e5cb4205d8e9b36d0ae38c3687b3395acb
      - git+https://github.com/3dem/relion-blush
      - git+https://github.com/3dem/DynaMight
      - git+https://github.com/3dem/topaz
      - -e git+https://github.com/3dem/model-angelo#egg=model-angelo
      - ".[vis]"
[root@rockylinux9 relion]#
[root@rockylinux9 relion]# source /apps/pyenv/versions/anaconda3-2023.09-0/etc/profile.d/conda.sh
[root@rockylinux9 relion]# conda env create -f environment.yml
 
[root@rockylinux9 relion]# conda env list
# conda environments:
#
base                     /apps/pyenv/versions/anaconda3-2023.09-0
relion-5.0               /apps/pyenv/versions/anaconda3-2023.09-0/envs/relion-5.0
 
[root@rockylinux9 relion]#

コンパイル

っで本体relionのコンパイルになります
使う「コンパイラ」「mpi」「acceleration(CPU,GPU)」で色々な組み合わせがある.
ここでは単純なGCCでのコンパイルと無償のintel oneAPIで使えるMKLを加えた場合を提示します.

まずはOS搭載のGCCとopenmpiで作ってみます
事前に学習データを保存するフォルダ「/apps/relion-torch」を用意しておきます

[root@rockylinux9 relion]# mkdir /apps/relion-torch
[root@rockylinux9 relion]# mkdir 50b && cd $_
 
[root@rockylinux9 50b]# module load mpi/openmpi-x86_64
 
[root@rockylinux9 50b]# cmake .. -DCMAKE_INSTALL_PREFIX=/apps/relion-5.0-beta-0 \
-DCUDA_ARCH=86 \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.3 \
-DPYTHON_EXE_PATH=/apps/pyenv/versions/anaconda3-2023.09-0/envs/relion-5.0/bin/python \
-DTORCH_HOME_PATH=/apps/relion-torch
 :
 :
(この段階で/apps/relion-torch に Classranker model、Blush model、ModelAngeloのweightsファイルがダウンロードされます)
 :
[root@rockylinux9 50b]# du -hs /apps/relion-torch
12G     /apps/relion-torch
 
[root@rockylinux9 50b]# make -j 20 ;  make install

これで一応完成.
作ったconda環境のpathが /apps/relion-5.0-beta-0/bin/relion_python_* に組み込まれています.

もし無償のintel oneAPIから使えるMKLにあるFFTを使いたい場合. コンパイラの類は前述のGCCと同じです. 単にFFTをintel謹製MKLのFFTを差し替えたい場合ですね.
まずoneAPIのリポジトリを入れて、MKLを入れます.

[root@rockylinux9 ~]# vi /etc/yum.repos.d/oneAPI.repo
[oneAPI]
name=Intel® oneAPI repository
baseurl=https://yum.repos.intel.com/oneapi
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
 
[root@rockylinux9 ~]# 
[root@rockylinux9 ~]# dnf install intel-oneapi-mkl-devel intel-oneapi-compiler-dpcpp-cpp-runtime
 
[root@rockylinux9 ~]# /opt/intel/oneapi/modulefiles-setup.sh --output-dir=/apps/oneAPI --ignore-latest

っでMKLを交えてのコンパイル

[root@rockylinux9 ~]# cd /apps/src/relion/50b
[root@rockylinux9 50b]# rm -rf ./*
 
[root@rockylinux9 50b]# module load mpi/openmpi-x86_64
 
[root@rockylinux9 50b]# module use /apps/oneAPI
[root@rockylinux9 50b]# module load mkl
 
 
[root@rockylinux9 50b]# cmake .. -DCMAKE_INSTALL_PREFIX=/apps/relion-5.0-beta-0 \
-DCUDA_ARCH=86 \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.3 \
-DPYTHON_EXE_PATH=/apps/pyenv/versions/anaconda3-2023.09-0/envs/relion-5.0/bin/python \
-DTORCH_HOME_PATH=/apps/relion-torch -DMKLFFT=ON
 :
 :
-- MKL FFTW wrapper header files: /opt/intel/oneapi/mkl/2023.2.0/include/fftw
 :
[root@rockylinux9 50b]# make -j 20 ;  make install

起動するとこんな感じ
2023y10m29d_013549794.png

EnvironmentModules

こんな感じかな

#%Module1.0
 
#module load mkl  # intel mklを使ったら.
module load mpi
 
set RELION /apps/relion-5.0-beta-0
prepend-path PATH            $RELION/bin
 
setenv RELION_QSUB_COMMAND   sbatch --gres=gpu:4     # guiパネルで使用するGPU枚数を修正可能に.
setenv RELION_MPIRUN         mpirun
setenv RELION_QSUB_TEMPLATE  $RELION/bin/qsub.sh
setenv RELION_QUEUE_NAME     workq
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    #ローカルで32mpiより多く指定して計算するとエラー掲示
setenv RELION_SHELL                  csh   # ctffindを外部コールに使用するSHELL
setenv RELION_EXTERNAL_RECONSTRUCT_EXECUTABLE relion_external_reconstruct
 
setenv RELION_CTFFIND_EXECUTABLE     /apps/ctffind-4.1.14/bin/ctffind
setenv RELION_MOTIONCOR2_EXECUTABLE  /apps/MotionCor2/MotionCor2_1.6.4_Cuda121_Mar312023
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を使うなら
 
#setevn RELION_IMOD_WRAPPER_EXECUTABLE    # 調査中
 
setenv RELION_EXTERNAL_RECONSTRUCT_EXECUTABLE /apps/SIDESPLITTER/sidesplitter_wrapper.sh
setenv SIDESPLITTER                           /apps/SIDESPLITTER/sidesplitter

memo

DynaMightでの描画ツールを動かそうとしているのだが、なかなか重い. リモート操作で結構なデータ転送がある. あとちょっと動かすとアクセス先のCPUが結構使われる. ある分だけ?
Xming/mobaXterm経由で画面描画は遅い. XDMCPでも重い.
nvidiaドライバ由来の openGL ライブラリを使うと多少は軽くなるっぽい. XDMCPとX11サーバとで

(nvidia-smiの出力)
|=======================================================================================|
|    0   N/A  N/A      5381      G   /usr/libexec/Xorg                             4MiB |   <-- 「graphical.target」ならgdmが使うので.
|    0   N/A  N/A      8468    C+G   ...023.09-0/envs/relion-5.0/bin/python     1090MiB |   type欄のCはCompute(CUDAを使った計算など), GはGraphics(描画プロセス).
+---------------------------------------------------------------------------------------+   nvidia由来のopenGLライブラリがないと「C」のみ表記される

左がOS由来のopenGL、右がNVIDIA由来のopenGLでの「glxinfo -B」の結果.

[root@rockylinux9 ~]# glxinfo -B                                                [root@rockylinux9 ~]# glxinfo -B
name of display: localhost:10.0                                                 name of display: localhost:10.0
display: localhost:10  screen: 0                                                display: localhost:10  screen: 0
direct rendering: Yes                                                           direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):                               Memory info (GL_NVX_gpu_memory_info):
    Vendor: Mesa/X.org (0xffffffff)                                                 Dedicated video memory: 6138 MB
    Device: llvmpipe (LLVM 15.0.7, 256 bits) (0xffffffff)                           Total available memory: 6138 MB
    Version: 22.3.0                                                                 Currently available dedicated video memory: 5925 MB
    Accelerated: no                                                             OpenGL vendor string: NVIDIA Corporation
    Video memory: 15983MB                                                       OpenGL renderer string: NVIDIA RTX A2000/PCIe/SSE2
    Unified memory: yes                                                         OpenGL core profile version string: 4.6.0 NVIDIA 535.113.01
    Preferred profile: core (0x1)                                               OpenGL core profile shading language version string: 4.60 NVIDIA
    Max core profile version: 4.5                                               OpenGL core profile context flags: (none)
    Max compat profile version: 4.5                                             OpenGL core profile profile mask: core profile
    Max GLES1 profile version: 1.1                                              
    Max GLES[23] profile version: 3.2                                           OpenGL version string: 4.6.0 NVIDIA 535.113.01
OpenGL vendor string: Mesa/X.org                                                OpenGL shading language version string: 4.60 NVIDIA
OpenGL renderer string: llvmpipe (LLVM 15.0.7, 256 bits)                        OpenGL context flags: (none)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 22.3.0              OpenGL profile mask: (none)
OpenGL core profile shading language version string: 4.50                       
OpenGL core profile context flags: (none)                                       OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 535.113.01
OpenGL core profile profile mask: core profile                                  OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
 
OpenGL version string: 4.5 (Compatibility Profile) Mesa 22.3.0
OpenGL shading language version string: 4.50
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile
 
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 22.3.0
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

「NAPARI_PERFMON=1 relion」と実行すると描画のスピード(?)が表示される. 1フレームに掛かった秒数でしょうか

noVNCとか、xrdpとか、VirtualGLとかでも検証かなぁ.

oneAPIで

最新の60件
2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-06 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29 2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17 2024-09-12 2024-09-09 2024-09-08 2024-09-06 2024-09-05 2024-09-04 2024-09-02 2024-09-01 2024-08-31 2024-08-28 2024-08-18 2024-08-17 2024-08-16 2024-08-15 2024-08-14 2024-08-11

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-04-11 (木) 21:19:31