🎃

TSUBAME4, container, install roshambo

2024/11/29に公開

What is this?

(Sorry, Japanese only)

今回は化合物の三次元重ね合わせができるオープンソースプログラムであるroshamboをTSUBAME4上で自分用にインストールした。dockerとかapptainer(旧:singularity)は、まあ正直よくわかっていないので、使えるようにする過程をメモしたかった。

https://github.com/molecularinformatics/roshambo
ライセンスは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)
  1. 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 
  1. 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
  1. 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つのファイルを指示通りに置き換える。

  1. setup.py
  2. paper/cudaVolumeTypes.h

https://github.com/molecularinformatics/roshambo/issues/5#issuecomment-2375231641

インストール継続

$ 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

Discussion