本家様 https://github.com/SBC-Utrecht/PyTom
PyTom is a toolbox developed for interpreting cryo electron tomography data. All steps from reconstruction, localization, alignment and classification are covered with standard and improved methods.
(DeepL先生訳)
PyTomは低温電子トモグラフィデータを解釈するために開発されたツールボックスです。再構成、ローカライズ、アライメント、分類の全てのステップを標準的な手法と改良された手法でカバーしています。
他、テンプレートマッチングに特化した pytom-match-pick (本家様 https://github.com/SBC-Utrecht/pytom-match-pick
) も扱います
実行環境はこんな感じです。nvidiaドライバのみ入っていてcudaライブラリは入ってないです.
[root@rockylinux9 ~]# cat /etc/redhat-release
Rocky Linux release 9.6 (Blue Onyx)
[root@rockylinux9 ~]# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX Open Kernel Module for x86_64 570.181 Release Build (dvs-builder@U22-I3-AF02-20-5) Wed Jul 30 18:41:07 UTC 2025
GCC version: gcc version 11.5.0 20240719 (Red Hat 11.5.0-5) (GCC)
[root@rockylinux9 ~]# ls /usr/local/cuda
ls: cannot access '/usr/local/cuda': No such file or directory
[root@rockylinux9 ~]#まず、pyenv/anaconda で仮想実行環境を作れるようにします。
git clone https://github.com/yyuu/pyenv.git /apps/pyenv
export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
pyenv install --list <--これでanaconda,minicondaのバージョンが一覧されます.
pyenv install miniforge3-25.3.1-0
source /apps/pyenv/versions/miniforge3-25.3.1-0/etc/profile.d/conda.sh
conda update conda -yっで構築します。
[root@rockylinux9 ~]# dnf install fftw-devel
[root@rockylinux9 ~]# cd /apps/
[root@rockylinux9 apps]# git clone https://github.com/SBC-Utrecht/PyTom
[root@rockylinux9 apps]# cd PyTom/
[root@rockylinux9 PyTom]#python 3.7とかでないとコンパイルできないようなので「environments/pytom_full.yaml」を修正します.
cupyはv13.4以上でblackwell対応です. pytomのコードの仕様なのか最新のgcc(v14とかv15)ではコンパイルエラーになるみたい.
|
その上で
[root@rockylinux9 PyTom]# conda env create -f environments/pytom_full.yaml --name pytom
[root@rockylinux9 PyTom]# conda activate pytom
(pytom) [root@rockylinux9 PyTom]# conda list
:
cuda-cccl_linux-64 13.1.78 ha770c72_0 conda-forge
cuda-cudart-dev_linux-64 13.1.80 h376f20c_0 conda-forge
cuda-cudart-static_linux-64 13.1.80 h376f20c_0 conda-forge
cuda-cudart_linux-64 13.1.80 h376f20c_0 conda-forge
cuda-nvrtc 13.1.80 hecca717_0 conda-forge
cuda-version 13.1 h2ff5cdb_3 conda-forge
cupy 13.6.0 py310hcc3e0c5_2 conda-forge
cupy-core 13.6.0 py310h1d24f8f_2 conda-forge
:
gcc 11.4.0 h602e360_13 conda-forge
gcc_impl_linux-64 11.4.0 h00c12a0_13 conda-forge
gcc_linux-64 11.4.0 ha077dfb_4 conda-forge
gfortran_impl_linux-64 11.4.0 hd465bd8_13 conda-forge
gfortran_linux-64 11.4.0 hddf7001_4 conda-forge
:
mpi 1.0 openmpi conda-forge
mpi4py 4.1.1 py310h42af892_102 conda-forge
:
numpy 1.26.4 py312heda63a1_0 conda-forge
:
openmpi 5.0.5 h6ae21d5_103 conda-forge
openmpi-mpicc 5.0.5 hc43e4ee_103 conda-forge
openmpi-mpicxx 5.0.5 hc10b7d8_103 conda-forge
openmpi-mpifort 5.0.5 hede194e_103 conda-forge
:
python 3.12.12 hd63d673_1_cpython conda-forge
:っで $CONDA_PREFIX の場所を確認して pytom を作ります
(pytom) [root@rockylinux9 PyTom]# echo $CONDA_PREFIX
/apps/pyenv/versions/miniforge3-25.3.1-0/envs/pytom
(pytom) [root@rockylinux9 PyTom]# python setup.py install --prefix $CONDA_PREFIX
:
Searching : mpicc Found : True
Searching : mpic++ Found : True
Searching : libmpi.so Found : True
Searching : mpi.h Found : True
Searching : Python.h Found : True
Searching : libpython3.12.so Found : True
Searching : fftw3.h Found : True
Searching : libfftw3.so Found : True
Searching : type_traits.hpp Found : True
Searching : ndarrayobject.h Found : False
Searching : ndarrayobject.h Found : True
Check compiling prerequisites:
:
(pytom) [root@rockylinux9 PyTom]# conda list
:
cuda-version 13.1 h2ff5cdb_3 conda-forge
cupy 13.6.0 py312h045ee1a_2 conda-forge
:
gcc 11.4.0 h602e360_13 conda-forge
:
mpi 1.0 openmpi conda-forge
mpi4py 4.1.1 py312hd140a38_102 conda-forge
:
numpy 1.26.4 py312heda63a1_0 conda-forge
:
pyqt 5.15.11 py312h82c0db2_2 conda-forge
pyqt5-sip 12.17.0 py312h1289d80_2 conda-forge
pyqtgraph 0.14.0 pyhd8ed1ab_0 conda-forge
pyside6 6.9.2 py312h5654102_1 conda-forge
python 3.12.12 hd63d673_1_cpython conda-forge
python-dateutil 2.9.0.post0 pyhe01879c_2 conda-forge
python_abi 3.12 8_cp312 conda-forge
pytom 1.0 pypi_0 pypi
:
(pytom) [root@rockylinux9 PyTom]# conda deactivate
[root@rockylinux9 PyTom]#以上で完成です。
pytomGUI「/apps/PyTom/pytom/gui/pytomGUI.py」の最下行あたりに下記のような記載があります
[root@rockylinux9 ~]# tail /apps/PyTom/pytom/gui/pytomGUI.py
print(exctype, value, traceback)
sys._excepthook(exctype, value, traceback)
sys.exit(1)
sys.excepthook = exception_hook
for fname, module in [( 'motioncor2', 'motioncor2/1.2.1' ), ('header', 'imod/4.10.25')]:
if subprocess.run(['which', fname], capture_output=True, text=True).returncode != 0:
print('Please load the {} module'.format(module))
main()
[root@rockylinux9 ~]#と motioncor2/1.2.1 をロードさせて motioncor2 の存在確認、imod/4.10.25 をロードして header の存在確認を行うようになってます。
ですが事前にmoduleコマンドで正しくMotionCor2やimodをロードしていればよろしいかと。ただMotionCor2は「motioncor2」として打てること.
いつものEnvironmentModules
こちらは「/apps/modulefiles/PyTom」として中身は下記のようにします。PyTomから imod や MotionCor2 を使うので予めロードさせておきます。
#%Module1.0
module load IMOD
module load MotionCor2
set root /apps/pyenv/versions/miniforge3-25.3.1-0/envs/pytom
prepend-path PATH $root/bin
prepend-path LD_LIBRARY_PATH $root/lib起動は
[saber@rockylinux9 ~]$ module use /apps/modulefiles
[saber@rockylinux9 ~]$ module load PyTom
[saber@rockylinux9 ~]$ pytomGUI
Please load the motioncor2/1.2.1 module
Please load the imod/4.10.25 module
となって下記画面が表示される

本家様 https://github.com/SBC-Utrecht/pytom-match-pick
pipy https://pypi.org/project/pytom-match-pick/
[root@rockylinux9 ~]# source /apps/pyenv/versions/miniforge3-25.3.1-0/etc/profile.d/conda.sh
[root@rockylinux9 ~]# conda create -n pytom_tm -c conda-forge python=3.12 "cupy<14" cuda-version=12.8
[root@rockylinux9 ~]# conda activate pytom_tm
(pytom_tm) [root@rockylinux9 ~]# python -m pip install pytom-match-pick[plotting]
(pytom_tm) [root@rockylinux9 ~]# conda list
:
cuda-cccl_linux-64 12.8.90 ha770c72_1 conda-forge
cuda-cudart-dev_linux-64 12.8.90 h3f2d84a_1 conda-forge
cuda-cudart-static_linux-64 12.8.90 h3f2d84a_1 conda-forge
cuda-cudart_linux-64 12.8.90 h3f2d84a_1 conda-forge
cuda-nvrtc 12.8.93 h5888daf_1 conda-forge
cuda-version 12.8 h5d125a7_3 conda-forge
cupy 13.6.0 py312h0317cef_2 conda-forge
cupy-core 13.6.0 py312h16a6543_2 conda-forge
:
numpy 2.4.2 py312h33ff503_1 conda-forge
:
python 3.12.12 hd63d673_2_cpython conda-forge
python-dateutil 2.9.0.post0 pypi_0 pypi
python_abi 3.12 8_cp312 conda-forge
pytom-match-pick 0.12.1 pypi_0 pypi
:
(pytom_tm) [root@rockylinux9 ~]#
(pytom_tm) [root@rockylinux9 ~]# python -c "import pytom_tm"
(pytom_tm) [root@rockylinux9 ~]# python -c "import cupy as cp; a = cp.zeros((100,100))"
->上記2つともエラーなしで動いたので cupy は問題ないかとEnvironmentModules
「/apps/modulefiles/pytom-match-pick」として
#%Module1.0
set root /apps/pyenv/versions/miniforge3-25.3.1-0/envs/pytom_tm
prepend-path PATH $root/binチュートリアルの実行 https://github.com/SBC-Utrecht/pytom-match-pick/wiki/Tutorial
まず https://doi.org/10.34894/TLGJCM
からデータセットを取得します。40枚のファイルです。
CentOS/repoで devtoolset-11 を組み込んでgcc-11を有効にさせます.
[root@centos7 ~]# yum install centos-release-scl-rh
[root@centos7 ~]# vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
(vault.centos.orgを参照させるように修正します)
[root@centos7 ~]# yum install devtoolset-11 -y
[root@centos7 ~]# source scl_source enable devtoolset-11
[root@centos7 ~]# gcc --version
gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@centos7 ~]#
[root@centos7 ~]# source /apps/pyenv/versions/miniforge3-25.3.1-0/etc/profile.d/conda.sh
[root@centos7 ~]# conda create -n pytom_tm -c conda-forge python=3.11 cupy cuda-version=11.8
[root@centos7 ~]# conda activate pytom_tm
(pytom_tm) [root@centos7 ~]# conda install -c conda-forge pyarrow
(pytom_tm) [root@centos7 ~]# python -m pip install pytom-match-pick[plotting]
(pytom_tm) [root@centos7 ~]# conda list
:
cuda-version 11.8 h70ddcb2_3 conda-forge
cudatoolkit 11.8.0 h4ba93d1_13 conda-forge
cupy 13.6.0 py311he6248c7_2 conda-forge
cupy-core 13.6.0 py311h7b40851_2 conda-forge
:
pyarrow 21.0.0 py311h38be061_1 conda-forge
pyarrow-core 21.0.0 py311h342b5a4_1_cpu conda-forge
pyparsing 3.2.5 pypi_0 pypi
python 3.11.13 h9e4cc4f_0_cpython conda-forge
python-dateutil 2.9.0.post0 pypi_0 pypi
python_abi 3.11 8_cp311 conda-forge
pytom-match-pick 0.12.0 pypi_0 pypi
:
(pytom_tm) [root@centos7 ~]# conda deactivate
[root@centos7 ~]#
conda で pyarrow を入れる必要あり。その後に pip で pytom-match-pick を入れる流れで.
そうでないと pyarrow のビルドが始まるが、centos7ではそのコンパイル環境を作るだけで一苦労.
テスト.
git clone https://github.com/SBC-Utrecht/pytom-match-pick
cd pytom-match-pick/tests
python -m unittest discover計算系によってはGPUメモリーが足らないと言われる.
正しい方法かは不明だが、ユニファイドメモリーを使って回避できたけど...
下記のように追記します.
vi /apps/pyenv/versions/miniforge3-23.11.0-0/envs/pytom_tm/lib/python3.12/site-packages/pytom_tm/matching.py
:
pool = cp.cuda.MemoryPool(cp.cuda.malloc_managed)
cp.cuda.set_allocator(pool.malloc)
: