DiffSBDDを使ってみた(拡散モデルを用いたSBDD)
はじめに
言うまでもなく昨今は創薬分野における生成AIの活用が盛んです。例えば標的分子のポケットの形状相補性やアミノ酸との相互作用に合わせて適切に原子や官能基を配置しながら分子を生成することができるツールがあれば効率的にリード探索研究を実施することができると考えられます。拡散モデルに基づく分子生成ツールのDiffSBDDを使えばそのような事が可能との事なので実際に使用感を確かめてみることにしました。

下記GitHubページより抜粋、拡散モデルにより標的ポケットに相補的な分子を生成できるらしい
動作検証済み環境
| Hard/Software | version |
|---|---|
Windows 11 |
24H2 |
Ubuntu on WLS2 |
24.04.2 LTS |
使用しているのは標準的なノートPCです。拡散モデルに基づく深層学習を行いますが、GPUは使用せずCPUのみで動く方法を解説します。また、Ubuntu+WLS2によってwindows上に構築したLinux環境上で動かすことを前提としています。windows単体で動かすのは無理そうです。Linux環境の構築についてはネット上に様々な記事がございますのでそちらをご参照ください。Macはすみませんが、分かりません。
環境構築手順
1.conda 環境を作成し、有効化
Ubuntuを起動して以下を打ち込みます。ここでは「diffsbdd」という仮想環境を構築するとします。
conda create -n diffsbdd python=3.10 -y
conda activate diffsbdd
2.依存ライブラリをインストール
conda install -c conda-forge rdkit -y
conda install -c conda-forge openbabel
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install biopython pandas numpy tqdm matplotlib scikit-learn seaborn pytorch-lightning
pip install wandb
pip install imageio
pip install biopython==1.79
biopythonを2回インストールしている点に違和感を覚えるかもしれませんが、DiffSBDDとの互換性を持たせるためにダウングレードする必要がありましたのでこのようにしています。
また、torch-scatter のインストールのため、下記コマンドを打ち込んでまず PyTorch のバージョンを確認して下さい。
python -c "import torch; print(torch.__version__)"
その結果、私の場合は2.7.0+cpuと出力されましたので、これに対応した torch-scatter のCPUバージョンを下記コマンドによりインストールします。
pip install torch-scatter -f https://data.pyg.org/whl/torch-2.7.0+cpu.html
3.作業環境の準備
続いて作業環境をセットアップします。まず、下図のようにLinux>Ubuntu>home>ユーザー名フォルダの下にDiffSBDDというフォルダを作成してください。

次に最初に述べたDiffSBDDのGitHubページ行き、右上のCodeボタンからDownload ZIPをクリックします。そうするとDiffSBDD-main.zipというzipファイルがダウンロードされますので、解凍して中身を先ほど作成したDiffSBDDフォルダに格納します。

さらにUbuntuのプロンプト画面に戻ってcd DiffSBDDとコマンドを入力し、DiffSBDDディレクトリに移動します。

さらに下記コマンドを入力することで、DiffSBDDフォルダ内にcheckpointsフォルダを作成して、その中にトレーニング済みモデル(チェックポイントファイル)をダウンロードします。
mkdir -p ~/DiffSBDD/checkpoints
wget -P ~/DiffSBDD/checkpoints/ https://zenodo.org/record/8183747/files/crossdocked_fullatom_cond.ckpt
また、「新規作成」でもmkdir -pコマンドでもどちらでもいいですが、outputという名前のフォルダも作成してください。生成された分子ファイルが格納されるフォルダとなります。
最終的にDiffSBDDフォルダ内は下図のようになっていると思います。以上で環境構築は終了です。

DiffSBDDの実行
環境が構築できたところで実際にDiffSBDDを実行してタンパクの結合サイトに合致するような低分子を生成してみます。例としてSBDDによって開発されたとされるCOVID-19の治療薬「エンシトレルビル」(ゾコーバ)を取り上げます。Pymolを立ち上げてPDB ID : 8HURを読み込みタンパク-リガンド複合体を表示させます。
1.標的分子とリガンドの準備
-
右のタブで
8HURのA:Action中のremove watersを選択し結晶水を削除します。

-
8HURは2量体として登録されているので単量体に編集します。Pymolコマンドラインにsele chain Bと入力してください。一方のモノマーがリガンドも含めsele オブジェクトとして選択されます。

-
右のタブで
seleのA:Action中のremove atomsを選択し単量体を削除します。

-
File>Export Structure...>Export Molecule...を選択しファイル名8HUR.pdbとして保存します。

続いて3で作成したDiffSBDDフォルダ内にさらにexampleというフォルダがあるので、その中に先ほど保存した8HUR.pdbファイルを格納します。exampleフォルダには既にDiffSBDDのチュートリアルサンプルとして他のpdbファイルやsdfファイルが入っています。

2.実行コマンドと各引数の解説
DiffSBDDの基本的な実行コマンドは以下の通りです。今回はリガンドであるエンシトレルビルの結合サイトに合致するような分子を生成させます。
python generate_ligands.py checkpoints/crossdocked_fullatom_cond.ckpt \
--pdbfile example/8HUR.pdb \
--ref_ligand A:401 \
--outfile output/output.sdf \
--n_samples 50
| 引数 | 説明 |
|---|---|
--pdbfile |
参照する標的分子のファイルの指定。今回はexampleフォルダの8HUR.pdb |
--ref_ligand |
分子を生成させるポケットの情報をリガンドによって指定します(後述)。 |
--outfile |
生成分子の保存場所の指定。今回の場合はoutputフォルダに「output」という名前のsdfファイルとして保存される。 |
--n_samples |
生成される分子の数。今回は50 |
--ref_ligandに続く入力について説明します。まず、8HUR.pdbをテキストファイルとして開いてください。

最終行あたりまでスクロールするとエンシトレルビルのリガンドIDである7YYが表示される行にたどり着きます。その横のアルファベットと数字をコロンで区切ってA:401と記載すれば、分子の生成場所をエンシトレルビルの結合サイトに指定できます。
実行結果
実行コマンドを押すとwindowsが発熱し生成が始まります。50分子だと大体2時間くらいで終了しました。分子生成終了後の画面には警告が出されており、どうやらAtropisomer(アトロプ異性体)を上手く解釈出来なかった分子が存在し、分子の平面性や結合方向に矛盾が生じているようです。すなわち、「化学的に不自然な立体構造」が含まれている可能性を示しています。

分子生成終了後のUbuntuのプロンプト画面
outputフォルダに結果のsdfファイルoutput.sdfが出来ているので具体的に分子の構造を見てみます。sdfファイルを開くのにDataWarriorという医薬研究で化合物管理によく用いられるフリーソフトを用いています。
生成された50分子の一部を下図に示します。
お気づきの通り、合成出来そうな分子がほとんどありません……。そもそも安定に存在できそうもない分子もあります。高極性のヘテロ官能基を適当な箇所にたくさん含んでいたり、かと思えば1番目の列の2番目の分子のように炭化水素しか含まない分子が存在したり、やたら立体化学が限定されていたりと良く解りません。

生成された分子の一部
あくまで個人の主観ですが、残念ながら今回生成された50分子中に、めぼしい分子はありませんでした。
その中で1,2,3,4-Tetrahydrocarbazoleという分子は国内メーカーのものが25 gで¥10,000しない価格で売っていて手に入り易そうでした。しかしながら、この分子のどこがエンシトレルビルと共通のポケットに結合するものとして生成されたのかは謎です。

一応pymolでも生成分子と8HURの重ね合わせ図を見てみました。分子生成AIあるあるですが、一部の大きな分子はタンパクのポケットにめり込んでいるものもあり、そういう意味でも適切に生成できていないようでした。

1,2,3,4-Tetrahydrocarbazoleと8HURの重ね合わせ
エンシトレルビルのトリフルオロベンゼン環としか構造的な共有部分がない
まとめ
以上、拡散モデルに基づく分子生成ツールであるDiffSBDDの実行結果を紹介してみました。今回の結果から判断する限りでは、正直、実用的なツールではないなというのが使ってみた感想です。ただ、MITの優秀な研究者達が開発したツールを凡人の私が使えないと判断するのはおこがましいとも思います。そこで期待するような分子が生成できなかった要因として私が考えている点を以下に挙げます。
-
- 理解力不足
実行コマンドには今回指定した引数以外にも様々な引数が存在するようです。それらの条件付けを適切に行うことで妥当な構造の分子を生成できるものと考えています。また、今回のように結合ポケットに合致するような全く新規の構造の分子を生成するのではなく、参照リガンドの指定した構造を維持しつつ、他の部位を改変した分子を生成するような使い方もできるようです。下図はそのようなことを解説しているGitHubのキャプチャになります。元論文も含めまだまだ読み込みが必要です。
- 理解力不足
-
- 分子生成数が少ない
今回はCPUオンリーでの使用ということで生成分子数は若干少なめでしたが、ひょっとするとGPUを用いて何千~何万単位の分子を生成させ、その後実際の合成可能性であったり、pymol等で標的とのフィッティングを確かめたりして判断するというのが本来の使い方なのかもしれません。
- 分子生成数が少ない
本ツールについては今後も検証を続けるつもりでいます。もし、私の使用方法について誤りを見つけられた方がいらっしゃいましたらどうぞご指摘いただけると幸いです。
Discussion