本家様 https://github.com/tbepler/topaz
Singularityで利用するならtopaz/Singularity
各自のホームディレクトリに各種pythonアプリの実行環境を用意するのではなく、rootで一元管理させるために「pyenv-anaconda」を使ってます.
pyenvでOS提供のpython,anaconda環境から離れ、そのpyenv上にanaconda環境を独自に敷いてます
ここでは「/apps/pyenv」を起点としています
git clone https://github.com/yyuu/pyenv.git /apps/pyenv
export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
pyenv install anaconda3-2024.10-1
pyenv global anaconda3-2024.10-1
source /apps/pyenv/versions/anaconda3-2024.10-1/etc/profile.d/conda.sh
conda update conda
(既に環境があるなら)
source /apps/pyenv/versions/anaconda3-2024.10-1/etc/profile.d/conda.shっと準備を終わらせます
本家様ではanaconda/conda、pipでのインストールを紹介していますが、condaではうまく行かなかったのでpipで淹れてます.
[root@rockylinux9 ~]# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 565.57.01 Thu Oct 10 12:29:05 UTC 2024
GCC version: gcc version 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC)
[root@rockylinux9 ~]# conda create -n topaz python=3.8 -c conda-forge
[root@rockylinux9 ~]# conda activate topaz
(topaz) [root@rockylinux9 ~]# pip install topaz-em
(topaz) [root@rockylinux9 ~]# topaz --version
0.3.6
(topaz) [root@rockylinux9 ~]# conda list
:
nvidia-cublas-cu12 12.1.3.1 pypi_0 pypi
nvidia-cuda-cupti-cu12 12.1.105 pypi_0 pypi
nvidia-cuda-nvrtc-cu12 12.1.105 pypi_0 pypi
nvidia-cuda-runtime-cu12 12.1.105 pypi_0 pypi
nvidia-cudnn-cu12 8.9.2.26 pypi_0 pypi
nvidia-cufft-cu12 11.0.2.54 pypi_0 pypi
nvidia-curand-cu12 10.3.2.106 pypi_0 pypi
nvidia-cusolver-cu12 11.4.5.107 pypi_0 pypi
nvidia-cusparse-cu12 12.1.0.106 pypi_0 pypi
nvidia-nccl-cu12 2.20.5 pypi_0 pypi
nvidia-nvjitlink-cu12 12.6.85 pypi_0 pypi
nvidia-nvtx-cu12 12.1.105 pypi_0 pypi
:
python 3.8.20 h4a871b0_2_cpython conda-forge
python-dateutil 2.9.0.post0 pypi_0 pypi
pytz 2024.2 pypi_0 pypi
:
topaz-em 0.3.6 pypi_0 pypi
torch 2.3.1 pypi_0 pypi
torchvision 0.18.1 pypi_0 pypi
tqdm 4.67.1 pypi_0 pypi
:
(topaz) [root@rockylinux9 ~]#
torchの動作検証
(topaz) [root@rockylinux9 ~]# python
Python 3.8.20 (default, Oct 3 2024, 15:24:27)
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> print(torch.cuda.get_device_name())
NVIDIA GeForce GTX 1070
>>> quit();
(topaz) [root@rockylinux9 ~]# conda deactivate
[root@rockylinux9 ~]#大丈夫みたい.
環境を削除するには
[root@rockylinux9 ~]# conda env remove --name topazとします.
[root@rockylinux9 ~]# vi /apps/modulefiles/topaz
#%Module
set root /apps/pyenv/versions/anaconda3-2024.10-1/envs/topaz
prepend-path PATH $root/bin
[root@rockylinux9 ~]#公式の使い方はこちらhttps://github.com/tbepler/topaz
に記載されてます。
チュートリアルもきちんと用意されてますhttps://github.com/tbepler/topaz#tutorial
ここではごくごく簡単な使い方をしてみます。本来ならトレーニングを行うのでしょうが、既存のモデルをそのまま使っています。
対象はGautomatchのサンプルで。
実行は単に「module load topaz」でtopaz実行環境をロードして
[saber@rockylinux9 ~]$ module use /apps/modulefiles/
[saber@rockylinux9 ~]$ module load topaz
[saber@rockylinux9 ~]$ which topaz
/apps/pyenv/versions/anaconda3-2024.10-1/envs/topaz/bin/topaz
[saber@rockylinux9 ~]$対象ファイルを確認して、topaz実行場所を作る.
[saber@rockylinux9 ~]$ ls -l /apps/GCTF_Gautomatch_Cu10.1/ribosome/test[87].mrc
-rw-rw-r--. 1 root root 67109888 Feb 7 2016 /apps/GCTF_Gautomatch_Cu10.1/ribosome/test7.mrc
-rw-rw-r--. 1 root root 67109888 Feb 7 2016 /apps/GCTF_Gautomatch_Cu10.1/ribosome/test8.mrc
[saber@rockylinux9 ~]$
[saber@rockylinux9 ~]$ mkdir -p test/topaz
[saber@rockylinux9 ~]$ cd test/topaz/
[saber@rockylinux9 topaz]$まずは 対象のmrcファイルに topaz の preprocess を掛ける
[saber@rockylinux9 topaz]$ topaz preprocess -v -s 8 -o ./ /apps/GCTF_Gautomatch_Cu10.1/ribosome/test[78].mrc
# processed: test7
# processed: test8
[saber@rockylinux9 topaz]$
[saber@rockylinux9 topaz]$ ls -lh
total 2.1M
-rw-r--r--. 1 saber saber 1.1M Jan 8 01:07 test7.mrc
-rw-r--r--. 1 saber saber 1.1M Jan 8 01:07 test8.mrc
[saber@rockylinux9 topaz]$preprocess が終わったmrcファイルでpickを試みる
[saber@rockylinux9 topaz]$ topaz extract -r 14 -o predicted_particles.txt *.mrc
[saber@rockylinux9 topaz]$ ls -lh
total 2.1M
-rw-r--r--. 1 saber saber 57K Jan 8 01:26 predicted_particles.txt
-rw-r--r--. 1 saber saber 1.1M Jan 8 01:07 test7.mrc
-rw-r--r--. 1 saber saber 1.1M Jan 8 01:07 test8.mrc
[saber@rockylinux9 topaz]$「UserWarning」が発生しましたが予測結果の「predicted_particles.txt」は得られました
得られた「predicted_particles.txt」の中身は下記になります
[saber@rockylinux9 topaz]$ less predicted_particles.txt
image_name x_coord y_coord score
test7 186 148 6.538029193878174
test7 257 13 6.200371742248535
test7 96 181 6.096801280975342
test7 12 419 5.8089165687561035
test7 344 432 5.687950611114502
test7 444 495 5.635932445526123
:
:
[saber@rockylinux9 topaz]$「ファイル名 X Y スコア」って感じですね. スコアはマイナスもあります.
v0.2.5より小数点以下の桁数が増えた感じ
っでこれを使って実際にどこが拾われているかを調べた.

スコアは2以上です
本来なら、自分でpickした座標データでトレーニングさせて、得られたモデルで「topaz extract」する感じかな.
ここでは標準装備のモデルを使ってます。「topaz extract -h」でモデルの指定方法が明記されてます.
*「-r」のサイズを小さくするとオーバーラップした粒子がpickされるみたい
「conda create -n topaz python=3.6 -y」なら問題ないが、「conda create -n topaz python=3.9 -y」とかpythonを3.6より大きくすると
「UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors.」とか言われます.
topazのサイトで言及されています
https://github.com/tbepler/topaz/issues/68
無視して問題ないみたいです
miniforge3で作ってると
ImportError: /apps/pyenv/versions/miniforge3-23.11.0-0/envs/topaz/lib/python3.6/site-packages/torch/lib/libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent
と表示される。どうも原因はMKLみたいで
source /apps/pyenv/versions/miniforge3-23.11.0-0/etc/profile.d/conda.sh
conda activate topaz
conda install mkl==2024.0で回避される
[root@rockylinux9 ~]# source /apps/pyenv/versions/miniforge3-24.11.2-1/etc/profile.d/conda.sh
[root@rockylinux9 ~]# conda create -n topaz python=3.8 -c conda-forge
[root@rockylinux9 ~]# conda activate topaz
(topaz) [root@rockylinux9 ~]# pip install topaz-em
(topaz) [root@rockylinux9 ~]# conda list
:
nvidia-cublas-cu12 12.1.3.1 pypi_0 pypi
nvidia-cuda-cupti-cu12 12.1.105 pypi_0 pypi
nvidia-cuda-nvrtc-cu12 12.1.105 pypi_0 pypi
nvidia-cuda-runtime-cu12 12.1.105 pypi_0 pypi
nvidia-cudnn-cu12 8.9.2.26 pypi_0 pypi
nvidia-cufft-cu12 11.0.2.54 pypi_0 pypi
nvidia-curand-cu12 10.3.2.106 pypi_0 pypi
nvidia-cusolver-cu12 11.4.5.107 pypi_0 pypi
nvidia-cusparse-cu12 12.1.0.106 pypi_0 pypi
nvidia-nccl-cu12 2.20.5 pypi_0 pypi
nvidia-nvjitlink-cu12 12.6.85 pypi_0 pypi
nvidia-nvtx-cu12 12.1.105 pypi_0 pypi
:
python 3.8.20 h4a871b0_2_cpython conda-forge
python-dateutil 2.9.0.post0 pypi_0 pypi
:
setuptools 75.3.0 pyhd8ed1ab_0 conda-forge
:
topaz-em 0.3.6 pypi_0 pypi
torch 2.3.1 pypi_0 pypi
torchvision 0.18.1 pypi_0 pypi
:
(topaz) [root@rockylinux9 ~]#これで動きました.
「3D particle-picking is in development on the dev-topaz3d branch」とある.
ちょいと作ってみた.
[root@rockylinux9 ~]# source /apps/pyenv/versions/anaconda3-2024.10-1/etc/profile.d/conda.sh
[root@rockylinux9 ~]# conda create -n topaz3d python=3.8 pytorch torchvision tqdm h5py pillow numpy pandas scipy scikit-learn -c conda-forge
[root@rockylinux9 ~]# conda activate topaz3d
(topaz3d) [root@rockylinux9 ~]# conda list
:
cuda-cudart 12.6.77 h5888daf_0 conda-forge
cuda-cudart_linux-64 12.6.77 h3f2d84a_0 conda-forge
cuda-nvrtc 12.6.85 hbd13f7d_0 conda-forge
cuda-nvtx 12.6.77 hbd13f7d_0 conda-forge
cuda-version 12.6 h7480c83_3 conda-forge
cudnn 8.9.7.29 h092f7fd_3 conda-forge
:
h5py 3.11.0 nompi_py38h55b5aab_102 conda-forge
:
mkl 2023.2.0 h84fe81f_50496 conda-forge
:
numpy 1.24.4 py38h59b608b_0 conda-forge
:
pandas 2.0.3 py38h01efb38_1 conda-forge
pillow 10.4.0 py38h2bc05a7_0 conda-forge
:
python 3.8.20 h4a871b0_2_cpython conda-forge
python-dateutil 2.9.0 pyhd8ed1ab_0 conda-forge
python-tzdata 2024.2 pyhd8ed1ab_0 conda-forge
python_abi 3.8 5_cp38 conda-forge
pytorch 2.4.0 cuda120_py38hc4689d7_301 conda-forge
pytz 2024.2 pyhd8ed1ab_0 conda-forge
:
scikit-learn 1.3.2 py38ha25d942_2 conda-forge
scipy 1.10.1 py38h59b608b_3 conda-forge
setuptools 75.3.0 pyhd8ed1ab_0 conda-forge
:
torchvision 0.19.0 cuda120py38h0f49aeb_0 conda-forge
tqdm 4.67.1 pyhd8ed1ab_0 conda-forg
:
(topaz3d) [root@rockylinux9 ~]#
(topaz3d) [root@rockylinux9 ~]# cd /apps/
(topaz3d) [root@rockylinux9 apps]# git clone https://github.com/tbepler/topaz
(topaz3d) [root@rockylinux9 apps]# cd topaz/
(topaz3d) [root@rockylinux9 topaz]#
(topaz3d) [root@rockylinux9 topaz]# git branch --all
* master
remotes/origin/HEAD -> origin/master
remotes/origin/alphamax
remotes/origin/auto-masking
remotes/origin/dev
remotes/origin/dev-topaz3d
remotes/origin/master
remotes/origin/recomb-2018
(topaz3d) [root@rockylinux9 topaz]#
(topaz3d) [root@rockylinux9 topaz]# git checkout dev-topaz3d
(topaz3d) [root@rockylinux9 topaz]# git branch
* dev-topaz3d
master
(topaz3d) [root@rockylinux9 topaz]# pip install .
(topaz3d) [root@rockylinux9 topaz]# conda deactivate
[root@rockylinux9 topaz]#[root@rockylinux9 ~]# vi /apps/modulefiles/topaz3d
#%Module
set root /apps/pyenv/versions/anaconda3-2024.10-1/envs/topaz3d
prepend-path PATH $root/bin
[root@rockylinux9 ~]#通常のtopazのhelpと比べると
[topazのtopaz -h]
commands:
Particle picking:
train train 2D region classifier from images with labeled
coordinates
segment segment images using a trained region classifier
[topaz3dのtopaz -h]
commands:
Particle picking:
train train 2D region classifier from images with labeled
coordinates
train3d train 3D region classifier from volumes with labeled
coordinates
segment segment images using a trained region classifierと「train3d」が加わっている.
最新のnvidiaドライバーだと0.2.5が上手く機能しないみたい
conda create -n topaz-0.2.5 python=3.6 -c conda-forge -y
conda activate topaz-0.2.5
pip install topaz-em==0.2.5
conda list
:
python 3.6.15 hb7a2778_0_cpython conda-forge
:
topaz-em 0.2.5 pypi_0 pypi
torch 1.10.1 pypi_0 pypi
torchvision 0.11.2 pypi_0 pypi
:としてテスト計算を行うと
RuntimeError: CUDA error: no kernel image is available for execution on the device
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.と「no kernel image」と出るので恐らく nvidia ドライバーかなぁ...
一応GPU対応でない場合は上手く行く。cryoSPARCのドキュメントにはCPU版で記載されているので、この0.2.5のCPU版と最新版でGPU対応の2つを入れることにする
conda env remove --name topaz-0.2.5 -y
conda create -n topaz-0.2.5 python=3.6
conda activate topaz-0.2.5
conda install topaz=0.2.5 mkl=2020.2 -c tbepler -c pytorchGPU版
conda create -n topaz-0.3.11 python=3.11 -y
conda activate topaz-0.3.11
pip install topaz-em==0.3.11
conda install 'setuptools<80'