DiffSBDD実行コンテナの作成 | Singularity (on WSL2 & with GPU)


コードブロック における 🍅 は、プロンプト を表している
$SINGULARITY_IMAGE~/apps/singularity_image です (私の環境)


WSL2 にインストールした Singularity で遊んでみる

参照:Singularity (on WSL2 & with GPU) はじめました! | 環境構築とOmegaFold実行コンテナ作成

今回は DiffSBDD を実行するコンテナイメージ ( .sif ) を作成し、簡単な動作テストを実施する

Structure-based drug design (SBDD) aims to design small-molecule ligands that bind with high affinity and specificity to pre-determined protein targets. Traditional SBDD pipelines start with large-scale docking of compound libraries from public databases, thus limiting the exploration of chemical space to existent previously studied regions. Recent machine learning methods approached this problem using an atom-by-atom generation approach, which is computationally expensive. In this paper, we formulate SBDD as a 3D-conditional generation problem and present DiffSBDD, an E(3)-equivariant 3D-conditional diffusion model that generates novel ligands conditioned on protein pockets. Furthermore, we curate a new dataset of experimentally determined binding complex data from Binding MOAD to provide a realistic binding scenario that complements the synthetic CrossDocked dataset. Comprehensive in silico experiments demonstrate the efficiency of DiffSBDD in generating novel and diverse drug-like ligands that engage protein pockets with high binding energies as predicted by in silico docking.

参照:arXiv | Structure-based Drug Design with Equivariant Diffusion Models
参照:GitHub | DiffSBDD: Structure-based Drug Design with Equivariant Diffusion Models
参照:Twitter | @rneschneuingによる紹介

以下、本記事を執筆した際の環境。Singularity (on WSL2 & with GPU) 環境の構築については以前の記事を参照

CPU Ryzen 7 3700X (AMD)
グラフィックボード GeForce RTX 2080 Ti VENTUS GP OC (MSI)
メモリ DDR4-3200 16 GB×2 (Crucial)
Windows 10 21H2
NVIDIA グラフィクス ドライバー 516.94
Ubuntu on WLS2 20.04.5



DiffSBDD を実行するコンテナイメージ ( .sif ) をビルドするための .def ファイルを下記のように作成する。

基本的にはDiffSBDDのGitHubに従うが、今回の環境では networkx パッケージのインストールが追加で必要だった。

BootStrap: docker
From: nvidia/cuda:10.2-cudnn8-devel-ubuntu18.04

  # localtime関係のWARNINGに対処
  touch /etc/localtime
  # DiffSBDDに必要なパッケージのインストール (冗長)
  apt update && apt upgrade -y
  apt install build-essential git curl -y
  # localeにen_US.UTF-8を追加する (WSL2だけで使用するなら不要)
  apt install locales -y
  locale-gen en_US.UTF-8

  # Pyenvを/usr/local/appsにインストール
  git clone https://github.com/yyuu/pyenv.git /usr/local/apps/pyenv
  export PYENV_ROOT="/usr/local/apps/pyenv"
  export PATH="${PYENV_ROOT}/bin:${PATH}"

  # PyenvでMiniforgeをインストールし、MinicondaにPATHを通す
  pyenv install --list
  pyenv install miniforge3-4.10.3-10
  pyenv global miniforge3-4.10.3-10
  pyenv versions
  export PATH="${PYENV_ROOT}/versions/miniforge3-4.10.3-10/bin:${PATH}"
  # Miniforgeのchannel構成を優先順位1. pytorch; 2. pyg; 3. conda-forgeとする
  conda config --add channels pyg
  conda config --add channels pytorch
  conda config --get channels
  # conda自身のアップデート
  conda update -n base -c conda-forge --override-channels conda -y

  # DiffSBDD用のconda環境 (diffsbdd-conda) を作成しPATHを通す (activateのかわり)
  conda create -n diffsbdd-conda -c conda-forge --override-channels python==3.10.4 -y
  export PATH="${PYENV_ROOT}/versions/miniforge3-4.10.3-10/envs/diffsbdd-conda/bin:${PATH}"
  # DiffSBDDに必要なパッケージをconda環境diffsbdd-condaにcondaでインストールする
  conda install -n diffsbdd-conda \
    pytorch==1.12.1 cudatoolkit=10.2 cudnn=8 \
    pytorch-lightning==1.7.4 wandb==0.13.1 rdkit==2022.03.2 biopython==1.79 \
    imageio==2.21.2 scipy==1.7.3 pytorch-scatter==2.0.9 openbabel==3.1.1 \
  # conda環境diffsbdd-condaにインストールしたパッケージの由来 (channel) を確認する
  conda list -n diffsbdd-conda

  # DiffSBDDを/usr/local/appsにインストールする
  git clone https://github.com/arneschneuing/DiffSBDD.git /usr/local/apps/DiffSBDD

  # DiffSBDD実行のための環境設定
  export PYENV_ROOT="/usr/local/apps/pyenv"
  export PATH="${PYENV_ROOT}/versions/miniforge3-4.10.3-10/envs/diffsbdd-conda/bin:${PATH}"
  export DIFFSBDD_HOME="/usr/local/apps/DiffSBDD"

  # コンテナ実行時のスクリプトを定義
  # "$@"は追加の引数を利用するための設定
  python3 ${DIFFSBDD_HOME}/generate_ligands.py ${DIFFSBDD_HOME}/checkpoints/full_atom.ckpt "$@"


作成した .def ファイルからコンテナイメージ ( .sif ) をビルドする。

🍅 singularity build --fakeroot DiffSBDD.sif ./def_file/DiffSBDD.def


D drive ( WSL2 において /mnt/d ) 上で DiffSBDD を実行してみる。
/mnt/d/diffsbdd/7vu6 というディレクトリを作成し、その中に以下のファイルを準備する。

PDB code: 7VU6 (with chain A without water molecules)

以下のように generate_ligand コマンドの alias を作成する。

alias generate_ligand="singularity run --nv --nvccli --bind /run/shm:/run/shm,/mnt/d:/mnt/d ${SINGULARITY_IMAGE}/DiffSBDD.sif"

Singularity--bind オプションで /run/shm:/run/shm を指定しているのは、OpenMP のエラー回避のため。
参照:GitHub | Singularity "No such file or directory"

以下のように DiffSBDD を実行する。

🍅 source ~/.bashrc
🍅 cd /mnt/d/diffsbdd/7vu6
🍅 mkdir -p result
🍅 generate_ligand --pdbfile ./7vu6_A_noWAT.pdb --outdir ./result --ref_ligand A:501 --sanitize --relax 

ポケットは 7vu6_A_noWAT.pdb に含まれるligand (残基番号:501) の座標をリファレンスとして指定した。