本家様 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

っで構築します。

PyTom

[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」を修正します.

@@ -2,7 +2,7 @@ name: pytom_env
 channels:
 - conda-forge
 dependencies:
-- python=3
+- python=3.7
 - ipython
 - numpy<2
 - lxml

その上で

[root@rockylinux9 PyTom]# conda env create -f environments/pytom_full.yaml --name pytom
 
[root@rockylinux9 PyTom]# conda activate pytom
 
(pytom) [root@rockylinux9 PyTom]#

ここからpytomをコンパイルするのですが、なぜか「#include <crypt.h>」が読めないようで環境変数に「crypt.h」のありかを加えます

(pytom) [root@rockylinux9 PyTom]# export CFLAGS="$CFLAGS -I/usr/include"
(pytom) [root@rockylinux9 PyTom]# export CPPFLAGS="$CPPFLAGS -I/usr/include"
(pytom) [root@rockylinux9 PyTom]# export C_INCLUDE_PATH="/usr/include"

そして「expytom_mpi_wrap.cpp」のコンパイル時も「crypt.h」がないと言われる.
こちらは「pytom/pytomc/Makefile」を下記のように修正しました

@@ -103,9 +103,9 @@ MPIOBJECTS= $(SWIGLIBS)swigMPI.o \
 $(SWIGLIBS)swigMPI.o: src/swigMPI.cpp
        $(MPICXX) $(GCCSWIGFLAGS) $(INCLUDE) $(INCLUDE_MPI) $< -o $@
 $(SWIGCPP)pytom_mpi_wrap.cpp: $(SWIGCODE)pytom_mpi.i $(HEADERS) ./src/swigMPI.cpp
-       swig $(SWIGFLAGS) $(SWIGINCLUDE) $(INCLUDE_MPI) -o $@ $<
+       swig $(SWIGFLAGS) $(SWIGINCLUDE) $(INCLUDE_MPI) -I/usr/include -o $@ $<
 $(SWIGLIBS)pytom_mpi_wrap.o: $(SWIGCPP)pytom_mpi_wrap.cpp
-       $(MPICXX) $(GCCSWIGFLAGS) $(INCLUDE) $< -o $@
+       $(MPICXX) $(GCCSWIGFLAGS) $(INCLUDE) -I/usr/include $< -o $@
 $(PYMODULESPATH)_pytom_mpi.so: $(SWIGLIBS)pytom_mpi_wrap.o
        $(MPICXX)  $< -o $@  $(LDFLAGS) $(LDFLAGS_MPI) $(LIBS) $(INCLUDE_MPI)

あとOS由来のPYTHONでコンパイルしてしまうようで、

(pytom) [root@rockylinux9 PyTom]# export PYTHON_VERSION=python3.7

とします。

っで $CONDA_PREFIX の場所を確認して

(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
 
(pytom) [root@rockylinux9 PyTom]# conda list
 :
cudatoolkit                      11.8.0           h4ba93d1_13             conda-forge
cupy                             11.2.0           py37h17e6d27_0          conda-forge
 :
gcc                              12.4.0           h236703b_2              conda-forge
gcc_impl_linux-64                12.4.0           h26ba24d_2              conda-forge
gcc_linux-64                     12.4.0           h6b7512a_10             conda-forge
 :
libgcrypt                        1.11.1           ha770c72_0              conda-forge
libgcrypt-devel                  1.11.1           hb9d3cd8_0              conda-forge
 :
mpi                              1.0              openmpi                 conda-forge
mpi4py                           3.1.3            py37h910e6d8_2          conda-forge
 :
numpy                            1.21.6           py37h976b520_0          conda-forge
 :
pyqt                             5.15.7           py37hf30b843_1          conda-forge
pyqt5-sip                        12.11.0          py37hd23a5d3_1          conda-forge
pyqtgraph                        0.12.4           pyhd8ed1ab_0            conda-forge
python                           3.7.12           hf930737_100_cpython    conda-forge
python-dateutil                  2.9.0            pyhd8ed1ab_0            conda-forge
python_abi                       3.7              4_cp37m                 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/bin

起動は

[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

となって下記画面が表示される
2024y07m11d_192818881.png

pytom-match-pick

本家様 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.11 cupy cuda-version=11.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-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
 :
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@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枚のファイルです。

pytom-match-pick (CentOS7で)

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)
 :
最新の60件
2025-12-09 2025-12-08 2025-12-07 2025-12-05 2025-11-30 2025-11-27 2025-11-24 2025-11-23 2025-11-19
  • PyTom
2025-11-18 2025-11-16 2025-11-05 2025-11-03 2025-11-02 2025-10-31 2025-10-30 2025-10-29 2025-10-28 2025-10-26 2025-10-25 2025-10-24 2025-10-22 2025-10-21 2025-10-17 2025-10-13 2025-10-11 2025-10-06 2025-10-05 2025-09-30 2025-09-29 2025-09-28 2025-09-25 2025-09-24 2025-09-23 2025-09-21 2025-09-20 2025-09-14 2025-09-13

edit


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