TSUBAME4, container, install roshambo
What is this?
(Sorry, Japanese only)
今回は化合物の三次元重ね合わせができるオープンソースプログラムであるroshamboをTSUBAME4上で自分用にインストールした。dockerとかapptainer(旧:singularity)は、まあ正直よくわかっていないので、使えるようにする過程をメモしたかった。
ライセンスは2024年11月時点でGPL
Procedures
Using an interactive job
TSUBAME4のログインノードにはGPUは入っていないので、GPUが入っているノードにログインする必要がある。下記のTSUBAME上のディスクのパスは適時入れ替えること。例えば、[group_name]は各自グループIDになる。
# GPU=1 CPU=4のノードを1つ取得
qrsh -g [group_name] -l gpu_h=1 -l h_rt=2:00:00
Get the container
dockerhubからホストとcudaのバージョンが一致しているのを選んだ。私はnvidia/cuda:12.1.0-devel-ubuntu22.04を最終的に選択した。OSはroshamboのサイトでは特に指定がないようだが、色々と古すぎない新しすぎないubuntu 22.04 にした。
$ apptainer build -s ubuntu2204cuda12.1.0 docker:nvi
dia/cuda:12.1.0-devel-ubuntu22.04
$ mkdir ubuntu2204cuda12.1.0/gs ubuntu2204cuda12.1.0/apps
# ホストのデータにアクセスするためのディレクトリを作成。人によっては不要
$ mkdir -p ubuntu2204cuda12.1.0/mnt/mydir
cuda-12.1.0をロード
$ module load cuda/12.1.0
# module listで本当に使えるようになっているか確認した。
$ module list
Currently Loaded Modulefiles:
1) cuda/12.1.0
コンテナを起動するコマンド
--no-home をつけないと、 ファイルはホストのホームディレクトリに保存されるようです。(1敗)
# --nvか--nvccliはどっちかいいかは不明。今回は--nvccli がよさげなのでこちらを使用した。
# --no-home でコンテナの/rootに直接ファイルを置く。
$ apptainer shell -f -w -B /gs -B /apps --bind /gs/bs/[group_name]/[自分のディレクトリ]:/mnt/mydir --no-home --nvccli ubuntu2204cuda12.1.0
必要なパッケージをaptでinstallする。gccやvimなど。
$ apt update
$ apt install build-essential git vim autoconf automake libtool wget
# 例えばgccが使えるようになっているか確認
$ gcc -v
...
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
Install libraries and programs related to roshambo
- Install miniforge3
$ wget https://github.com/conda-forge/miniforge/releases/download/24.9.2-0/Miniforge3-Linux-x86_64.sh
$ chmod +x Miniforge3-Linux-x86_64.sh
$ ./Miniforge3-Linux-x86_64.sh
# ここで、ライセンスに同意したり、インストールする場所を指定する。
# conda環境を反映
$ source ~/.bashrc
- Install the python libraries by conda
他ののLinuxでは、boostは新しすぎると少し古いrdkitのbuild時にエラーがでたので、ちょっとだけ古いの(1.78)に変更した。不要かもしれない。
$ conda create -n roshambo boost-cpp boost=1.78 cairo pandas pillow freetype cmake numpy eigen matplotlib
$ conda activate roshambo
- Install rdkit
roshamboのgithubページで指定されたのでRelease_2023_03_1.tar.gzをどうにかしてダウンロード、展開し、ビルドする。
$ tar -xzf Release_2023_03_1.tar.gz
$ cd rdkit-Release_2023_03_1/
$ mkdir build; cd build
$ cmake -DRDK_BUILD_INCHI_SUPPORT=ON -DRDK_BUILD_YAEHMOP_SUPPORT=ON -DRDK_BUILD_XYZ2MOL_SUPPORT=ON ..
途中でmd5のチェックに関するエラーがでたので、md5 checksumをチェックしないようにファイルを修正(多分大丈夫!?)
vi ../Code/GraphMol/MolDraw2D/CMakeLists.txt
if(RDK_BUILD_FREETYPE_SUPPORT AND RDK_INSTALL_COMIC_FONTS)
set(needDownload "TRUE")
if(EXISTS "${RDKit_DataDir}/Fonts/ComicNeue-Regular.ttf")
message("${RDKit_DataDir}/Fonts/ComicNeue-Regular.ttf already there, skipping the download")
set(needDownload "FALSE")
endif()
if(needDownload)
#この辺から修正
file(DOWNLOAD
"https://fonts.google.com/download?family=Comic%20Neue"
"${CMAKE_CURRENT_SOURCE_DIR}/Comic_Neue.zip"
SHOW_PROGRESS
STATUS download_status)
# ここまで修正
execute_process(COMMAND ${CMAKE_COMMAND} -E tar x
${CMAKE_CURRENT_SOURCE_DIR}/Comic_Neue.zip --format=zip
WORKING_DIRECTORY ${RDKit_DataDir}/Fonts)
endif(needDownload)
endif()
もう一回cmake
$ cmake -DRDK_BUILD_INCHI_SUPPORT=ON -DRDK_BUILD_YAEHMOP_SUPPORT=ON -DRDK_BUILD_XYZ2MOL_SUPPORT=ON ..
cmakeでエラーがない場合はmakeを実行。実行後、エラーがないなら、make installを実行する。
# -j 4で4並列でmakeする。
$ make -j 4
$ make install
自分でbuildしたrdkitを使うように設定を作成し、シェルに反映させる。どこかのファイルに記載しておくとよい。~/env.shなど
export RDBASE=/root/rdkit-Release_2023_03_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$RDBASE/lib:$CONDA_PREFIX/lib
export RDKIT_LIB_DIR=$RDBASE/lib
export RDKIT_INCLUDE_DIR=$RDBASE/Code
export RDKIT_DATA_DIR=$RDBASE/Data
export PYTHONPATH=$PYTHONPATH:$RDBASE
testを実行
$ cd build
$ ctest -j4 –output-on-failure
結果は二個失敗... 原因の追究はしていないが影響はないと期待する。
99% tests passed, 2 tests failed out of 218
Total Test time (real) = 115.31 sec
The following tests FAILED:
212 - pythonTestDirML (Failed)
218 - pythonTestDirChem (Failed)
Errors while running CTest
Install cuda on the container
今回構築したコンテナにはすでcudaやnvccはあるので何もしなかった。
Install roshambo
環境変数を追加
# roshamboのgithubの指示通りCUDA_HOMEを設定
export CUDA_HOME=/usr/local/cuda
# roshamboのbuild過程においてboostのヘッダーファイルを教えるため。コンパイルがboost関連で落ちるなど必要なら追加する。
export CPLUS_INCLUDE_PATH=/root/miniforge3/envs/roshambo/include:$CPLUS_INCLUDE_PATH
$ git clone
$ cd roshambo
$ pip install -e .
コンパイルエラーがでるので、ここに書いてあるとおり、2つのファイルを指示通りに置き換える。
- setup.py
- paper/cudaVolumeTypes.h
インストール継続
$ pip install -e .
$ pip install IPython pandas jupyter
ヘルプメッセージがでてくれば成功
$ roshambo -h
Test calculation
gitでcloneしたroshamboディレクトリ中のファイルを使って実際に動作するか確認できた。
$ cd notebooks
# githubのコードに出力ファイル名を追加した。
# ファイルはworking_dirの中にある必要がある。
# --filename で出力ファイル名を指定できる。--working_dirの先に書き込まれる。
$ roshambo --n_confs 0 --ignore_hs --color --sort_by ComboTanimoto --write_to_file --working_dir data/basic_run --gpu_id 0 query.sdf dataset.sdf --filename myout.sdf
Preparing mols took: 1.3095777034759521
Preparing mols took: 1.5151820182800293
Total number of molecules for transformation: 153
# Executing PAPER on GPU 0
# Shape overlay optimization used 10 iterations of BFGS
Run time: 0.332660956075415
Running paper took: 0.3451657295227051
Converting transformation arrays took: 0.0015702247619628906
Transforming molecules took: 0.03581690788269043
Calculating shape scores took: 3.0244781970977783
Calculating color scores took: 2.1026697158813477
Creating dataframe took: 0.06976842880249023
Writing molecule file took: 0.05328083038330078
#出力ファイルの確認
$ ls -l data/basic_run/myout.sdf
-rw-r--r-- 1 root root 751968 Nov 28 03:34 data/basic_run/myout.sdf
Conclusion
apptainerは初めて使ったが、試行錯誤は概ね24時間以内には完了した。ChatGPTや多くのWebの情報が役に立った。今後は.sifを作ったり、roshamboを自分の研究に使ってみる予定
References
- [TSUBAME4のマニュアル] https://www.t4.gsic.titech.ac.jp/docs/handbook.ja/jobs/
- [roshamboのgithub] https://github.com/molecularinformatics/roshambo
- [roshamboのgithubで紹介されいたrdkitに関するサイト] https://greglandrum.github.io/rdkit-blog/posts/2023-03-17-setting-up-a-cxx-dev-env2.html
- [TSUBAME4でのコンテナの使用例、私の情報より詳細です] https://alvinvin.hatenablog.jp/entry/4
Discussion