RoseTTAFold All-Atom環境構築 | 2024-03-11
※ 本記事はプライベートな時間とプライベートなマシンを使って執筆されました
※ まだ細かくチェックしていないのでミスあるかも
※ コードブロック
における 🦆
は、プロンプトを表している
🦆 はじめに
2024-03-07、プレプリントで注目を集めていた RoseTTAFold All-Atom
(以下 RFAA
と略す) の論文が、とうとうScience誌にpublishされた。
Deep learning methods have revolutionized protein structure prediction and design but are currently limited to protein-only systems. We describe RoseTTAFold All-Atom (RFAA) which combines a residue-based representation of amino acids and DNA bases with an atomic representation of all other groups to model assemblies containing proteins, nucleic acids, small molecules, metals, and covalent modifications given their sequences and chemical structures. By fine tuning on denoising tasks we obtain RFdiffusionAA, which builds protein structures around small molecules. Starting from random distributions of amino acid residues surrounding target small molecules, we design and experimentally validate, through crystallography and binding measurements, proteins that bind the cardiac disease therapeutic digoxigenin, the enzymatic cofactor heme, and the light harvesting molecule bilin.
Science | Generalized biomolecular modeling and design with RoseTTAFold All-Atom
プレプリント版はこちら
bioRxiv | Generalized Biomolecular Modeling and Design with RoseTTAFold All-Atom
コードはこちら
GitHub | Code for RoseTTAFold All-Atom
なにが注目されていたかというと、これまで AlphaFold
(公開版) や RoseTTAFold
では扱うことのできなかった、核酸、低分子化合物、金属イオン、および共有結合修飾を構造予測の中で扱えるようになったらしい。論文の中身も重要であるが、こういう面白いツールが公開されたときはとりあえず触ってみることが重要だ。というわけで、以下に環境構築の手順 ( Apptainer
コンテナを用いる/用いない場合) を示す。
以下の点には注意が必要である
- 2024-03-10時点では
RFAA
のコードおよび学習済みモデルパラメーターのライセンスは明記されていない (商用利用にあたる場合は特に注意) - 2024-03-10時点ではGitHub記載の通りだと動作しない (ので以下では無理やり動かしており、今後修正が入る可能性が高い)
以下、本記事を執筆した際の環境。
specifications | |
---|---|
CPU |
Ryzen 7 5700X (AMD) |
グラフィックボード |
GeForce RTX 2080 Ti VENTUS GP OC (MSI) |
メモリ |
DDR4-3200 16 GB×2 (Crucial) |
version | |
---|---|
Windows 10 |
22H2 |
NVIDIA グラフィクス ドライバー |
545.36 |
WSL2 |
2.0.14.0 |
Ubuntu 22.04 on WLS2 |
22.04.4 |
Apptainer |
1.2.5 |
🦆 RoseTTAFold All-Atom環境の構築
Apptainer環境の構築
Apptainer
環境の構築については以下を参照 (コンテナを使わずに RFAA
環境を構築する場合は不要です)。
Zenn | AlmaLinux 8 on WSL2にApptainer環境 (with GPU) を構築する
学習済みモデルパラメーターおよび各種データベースのダウンロード
RFAA
公式にしたがって、以下のように任意のディレクトリに学習済みモデルパラメーターと各種データベースをダウンロードする。この記事では /rfaa_param_db
にダウンロードする。
# 学習済みモデルパラメーターと各種データベース置き場を作る
🦆 mkdir -p /rfaa_param_db
🦆 cd /rfaa_param_db
# 学習済みモデルパラメーターをダウンロード
🦆 curl -L -O http://files.ipd.uw.edu/pub/RF-All-Atom/weights/RFAA_paper_weights.pt
# UniRef30をダウンロード
🦆 curl -L -O http://wwwuser.gwdg.de/~compbiol/uniclust/2020_06/UniRef30_2020_06_hhsuite.tar.gz
🦆 mkdir -p ./uniclust
🦆 tar -xvf ./UniRef30_2020_06_hhsuite.tar.gz -C ./uniclust
# BFDをダウンロード
🦆 curl -L -O https://bfd.mmseqs.com/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt.tar.gz
🦆 mkdir -p ./bfd
🦆 tar -xvf ./bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt.tar.gz -C ./bfd
# 構造データベースをダウンロード
🦆 curl -L -O https://files.ipd.uw.edu/pub/RoseTTAFold/pdb100_2021Mar03.tar.gz
🦆 tar -xvf ./pdb100_2021Mar03.tar.gz
ちなみに BFD
は非常にサイズが大きいため、単なる動作確認には small_bfd
を用いると良い。以降の検証は small_bfd
を用いた。
# Small BFDをダウンロード
🦆 curl -L -O https://storage.googleapis.com/alphafold-databases/reduced_dbs/bfd-first_non_consensus_sequences.fasta.gz
🦆 mkdir -p ./small_bfd
🦆 tar -xvf ./bfd-first_non_consensus_sequences.fasta.gz -C ./small_bfd
RoseTTAFold All-Atomのインストール
RFAA
を任意の場所 (本記事では /home/_machine/apps
) にインストールする。
まず GitHub
からリポジトリをクローンする。
# RoseTTAFold All-Atomのリポジトリをクローンする
🦆 git clone https://github.com/baker-laboratory/RoseTTAFold-All-Atom /home/_machine/apps/RoseTTAFold-AA
その後 RFAA
のための Python
環境を構築する。コンテナを用いる方法と用いない方法の2パターンを紹介する。
Apptainerコンテナを利用する場合
※ 本来 SignalP 6.0
というパッケージも必要であるが、ライセンスの関係で今回は含めていない (必要に応じて足してください)
公式で配布されている Apptainer
コンテナは現状うまく動作しないため (必要なパッケージが内包されていなかったり、そもそも挙動がおかしかったり)、自作のコンテナをビルドする。
/home/_machine/apps/RoseTTAFold-AA/def_file
にコンテナビルド用の RFAA.def
(ビルドレシピファイル) を以下の内容で作成する。
BootStrap: docker
From: nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04
%post
# localtime関係のWARNINGに対処
touch /etc/localtime
# RoseTTAFold All-Atomに必要なパッケージのインストール (冗長)
apt update && apt upgrade -y
apt install -y build-essential git curl wget libsparsehash-dev
# localeにen_US.UTF-8を追加する (WSL2だけで使用するなら不要)
apt install -y locales
locale-gen en_US.UTF-8
# apt関係のお掃除
rm -rf /var/lib/apt/lists/* && apt autoremove -y && apt clean
# 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をインストールし、MiniforgeにPATHを通す
pyenv install --list
pyenv install miniforge3-23.11.0-0
pyenv global miniforge3-23.11.0-0
pyenv versions
export MINIFORGE3_ROOT="${PYENV_ROOT}/versions/miniforge3-23.11.0-0"
export PATH="${MINIFORGE3_ROOT}/bin:${PATH}"
# conda自身のアップデート
conda update -n base conda
# conda環境rfaa-condaを作成
conda create -n rfaa-conda
# RoseTTAFold All-Atomに必要なライブラリのインストール
conda install -n rfaa-conda -c conda-forge -c pytorch -c nvidia \
python=3.10 cudatoolkit=11.7.1 pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7
conda install -n rfaa-conda -c conda-forge -c dglteam/label/cu117 -c pyg -c bioconda -c biocore \
dgl pyg hhsuite psipred=4.01 biocore::blast-legacy=2.2.26
conda install -n rfaa-conda -c conda-forge \
icecream openbabel pandas deepdiff
# conda関係のお掃除
conda clean --all --force-pkgs-dirs --yes
# conda環境rfaa-condaをアクティベート
export RFAA_CONDA="${MINIFORGE3_ROOT}/envs/rfaa-conda"
export PATH="${RFAA_CONDA}/bin:${PATH}"
# pip自身のアップデート
python3 -m pip install --no-cache-dir --upgrade pip
# RoseTTAFold All-Atomに必要なライブラリのインストール
python3 -m pip install --no-cache-dir hydra-core pyrsistent assertpy
# RoseTTAFold All-Atomのリポジトリをクローン
git clone https://github.com/baker-laboratory/RoseTTAFold-All-Atom /usr/local/apps/RoseTTAFold-AA
# SE(3)-Transformerのインストール
cd /usr/local/apps/RoseTTAFold-AA/rf2aa/SE3Transformer
python3 -m pip install --no-cache-dir -r ./requirements.txt
python3 ./setup.py install
# conda環境rfaa-condaにインストールしたパッケージの由来 (channel) を確認する
conda list -n rfaa-conda
%environment
# conda環境rfaa-condaのための環境設定
export MINIFORGE3_ROOT="/usr/local/apps/pyenv/versions/miniforge3-23.11.0-0"
export RFAA_CONDA="${MINIFORGE3_ROOT}/envs/rfaa-conda"
export PATH="${RFAA_CONDA}/bin:${PATH}"
export BLASTMAT="${RFAA_CONDA}/share/blast-2.2.26/data"
%runscript
# コンテナ実行時のスクリプトを定義
# "$@"は追加の引数を利用するための設定
"$@"
RFAA.def
を用いて RFAA
実行用のコンテナ RFAA.sif
を以下のようにビルドする。
# RFAA.sifのビルド
🦆 cd /home/_machine/apps/RoseTTAFold-AA
🦆 apptainer build ./RFAA.sif ./def_file/RFAA.def
conda
環境を作る場合)
Apptainerコンテナを利用しない場合 (普通に ※ 本来 SignalP 6.0
というパッケージも必要であるが、ライセンスの関係で今回は含めていない (必要に応じて足してください)
基本的には上述の RFAA.def
を基に RFAA
用の conda
環境を作成する。
# Pyenvを/home/_machine/apps/RoseTTAFold-AAにインストール
🦆 git clone https://github.com/yyuu/pyenv.git /home/_machine/apps/RoseTTAFold-AA/pyenv
🦆 export PYENV_ROOT="/home/_machine/apps/RoseTTAFold-AA/pyenv"
🦆 export PATH="${PYENV_ROOT}/bin:${PATH}"
# PyenvでMiniforgeをインストールし、MiniforgeにPATHを通す
🦆 pyenv install miniforge3-23.11.0-0
🦆 pyenv global miniforge3-23.11.0-0
🦆 export MINIFORGE3_ROOT="${PYENV_ROOT}/versions/miniforge3-23.11.0-0"
🦆 export PATH="${MINIFORGE3_ROOT}/bin:${PATH}"
# conda自身のアップデート
🦆 conda update -n base conda
# conda環境rfaa-condaを作成
🦆 conda create -n rfaa-conda
# RoseTTAFold All-Atomに必要なライブラリのインストール
🦆 conda install -n rfaa-conda -c conda-forge -c pytorch -c nvidia \
python=3.10 cudatoolkit=11.7.1 pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7
🦆 conda install -n rfaa-conda -c conda-forge -c dglteam/label/cu117 -c pyg -c bioconda -c biocore \
dgl pyg hhsuite psipred=4.01 biocore::blast-legacy=2.2.26
🦆 conda install -n rfaa-conda -c conda-forge \
icecream openbabel pandas deepdiff
# conda関係のお掃除
🦆 conda clean --all --force-pkgs-dirs --yes
# conda環境rfaa-condaをアクティベート
🦆 export RFAA_CONDA="${MINIFORGE3_ROOT}/envs/rfaa-conda"
🦆 export PATH="${RFAA_CONDA}/bin:${PATH}"
# pip自身のアップデート
🦆 python3 -m pip install --no-cache-dir --upgrade pip
# RoseTTAFold All-Atomに必要なライブラリのインストール
🦆 python3 -m pip install --no-cache-dir hydra-core pyrsistent assertpy
# SE(3)-Transformerのインストール
🦆 cd /home/_machine/apps/RoseTTAFold-AA/rf2aa/SE3Transformer
🦆 python3 -m pip install --no-cache-dir -r ./requirements.txt
🦆 python3 ./setup.py install
スクリプトやコンフィグまわりの修正
現時点では GitHub
リポジトリに含まれるスクリプトやコンフィグには修正が必要である。
base.yaml
の修正
/home/_machine/apps/RoseTTAFold-AA/rf2aa/config/inference
には base.yaml
や protein.yaml
などのコンフィグファイル ( RFAA
実行時に適用される設定) が格納されている。基本的には base.yaml
の設定を基に、インプットした hoge.yaml
の設定が追加されて計算が実行されることになる。
base.yaml
について checkpoint_path:
sequencedb:
hhdb:
を以下のように変更する。特に hhdb:
についてはデータベースの日付部分に間違いがないこと (自分がダウンロードしたものと合っているか) をよく確認すること。
job_name: "structure_prediction"
output_path: ""
checkpoint_path: "/rfaa_param_db/RFAA_paper_weights.pt"
database_params:
sequencedb: "/rfaa_param_db"
hhdb: "/rfaa_param_db/pdb100_2021Mar03/pdb100_2021Mar03"
command: make_msa.sh
num_cpus: 4
mem: 64
make_msa.sh
の修正
/home/_machine/apps/RoseTTAFold-AA/make_msa.sh
も今回作成した環境に合わせて以下のように修正する。 <- **
は実際には記載しません
# pipe_dir
PIPE_DIR="${RFAA_HOME}" ### 修正 ###
DB_TEMPL="$6"
# sequence databases
DB_UR30="${5}/uniclust/UniRef30_2020_06" ### 修正 ###
DB_BFD="${5}/bfd/bfd-first_non_consensus_sequences.fasta" ### 修正 ###
※ DB_BFD
は本記事では small_bfd
になっているので注意
# Running signalP 6.0
mkdir -p $out_dir/signalp
tmp_dir="$out_dir/signalp"
#signalp6 --fastafile $in_fasta --organism other --output_dir $tmp_dir --format none --mode slow ### コメントアウト ###
# setup hhblits command
#export HHLIB=/software/hhsuite/build/bin/ ### コメントアウト ###
#export PATH=$HHLIB:$PATH ### コメントアウト ###
mkdir -p ${out_dir}/log ### 追記 ###
cd ${our_dir} ### 追記 ###
echo "Running PSIPRED"
$PIPE_DIR/make_ss.sh $out_dir/t000_.msa0.a3m $out_dir/t000_.ss2 > $out_dir/log/make_ss.stdout 2> $out_dir/log/make_ss.stderr ### 修正 ###
※ 見づらいが $PIPE_DIR/make_ss.sh
のところ修正
make_ss.sh
を追加・修正
make_msa.sh
内で make_ss.sh
というシェルスクリプトが指定されているが、このシェルスクリプトが現時点ではリポジトリに含まれていない。
どうやら RoseTTAFold
のリポジトリに含まれている input_prep/make_ss.sh
を修正して利用すれば動くらしい。
GitHub | RoseTTAFold
make_ss.sh
を /home/_machine/apps/RoseTTAFold-AA
に作成し、以下のように修正する。
PIPEDIR="${RFAA_HOME}" ### 追記 ###
echo ${PIPEDIR} ### 追記 ###
DATADIR="${RFAA_CONDA}/share/psipred_4.01/data" ### 修正 ###
echo $DATADIR
chmod u+x make_ss.sh
で実行権限を付与しておく。
さらに make_ss.sh
の中で利用されている cs-blast
を以下のように /home/_machine/apps/RoseTTAFold-AA
にインストールする。
# cs-blastのインストール
🦆 cd /home/_machine/apps/RoseTTAFold-AA
🦆 curl -L -O https://wwwuser.gwdg.de/~compbiol/data/csblast/releases/csblast-2.2.3_linux64.tar.gz
🦆 mkdir -p ./csblast-2.2.3
🦆 tar -xvf ./csblast-2.2.3_linux64.tar.gz -C ./csblast-2.2.3 --strip-components=1
🦆 rm -f ./csblast-2.2.3_linux64.tar.gz
🦆 RoseTTAFold All-Atomの実行
単量体蛋白質構造予測
リポカリン型プロスタグランジンD合成酵素 (L-PGDS) の構造を予測してみる。
# インプットおよびアウトプットディレクトリの作成
mkdir -p /home/_machine/Documents/RFAA/LPGDS/fasta
/home/_machine/Documents/RFAA/LPGDS/fasta
に以下の LPGDS.fasta
を配置する。
>LPGDS_noSingalPept
APEAQVSVQPNFQQDKFLGRWFSAGLASNSSWLREKKAALSMCKSVVAPATDGGLNLTSTFLRKNQCETR
TMLLQPAGSLGSYSYRSPHWGSTYSVSVVETDYDQYALLYSQGSKGPGEDFRMATLYSRTQTPRAELKEK
FTAFCKAQGFTEDTIVFLPQTDKCMTEQ
/home/_machine/Documents/RFAA/LPGDS
にインプット設定ファイル 20240311_LPGDS.yaml
を作成する。
defaults:
- base
job_name: "20240311_LPGDS"
output_path: "/home/_machine/Documents/RFAA/LPGDS"
protein_inputs:
A:
fasta_file: "/home/_machine/Documents/RFAA/LPGDS/fasta/LPGDS.fasta"
/home/_machine/Documents/RFAA/LPGDS
に実行スクリプト run_rfaa.sh
を作成する。
Apptainerコンテナを利用する場合
#!/usr/bin/bash -e
# インプットする.yamlファイル名 (.yamlはつけない)
config_name="20240311_LPGDS"
# 本.shが配置されたディレクトリをDIR_WORKとして設定
DIR_WORK="$(cd $(dirname $0) && pwd)"
# RoseTTAFold-AAのインストールディレクトリを設定
export RFAA_HOME="/home/_machine/apps/RoseTTAFold-AA"
# RoseTTAFold-AAを実行するApptainerコマンドを作成
# --bindは任意 (homeディレクトリ以外で実行したいときに必要)
function rfaa-apptainer() {
apptainer run --nvccli --bind /rfaa_param_db \
${RFAA_HOME}/RFAA.sif "$@"
}
# RoseTTAFold-AAを実行する
cd ${RFAA_HOME}
cp ${DIR_WORK}/${config_name}.yaml ./rf2aa/config/inference
rfaa-apptainer python3 -m rf2aa.run_inference --config-name ${config_name}
rm -f ./rf2aa/config/inference/${config_name}.yaml
Apptainerコンテナを利用しない場合
#!/usr/bin/bash -e
# インプットする.yamlファイル名 (.yamlはつけない)
config_name="20240311_LPGDS"
# 本.shが配置されたディレクトリをDIR_WORKとして設定
DIR_WORK="$(cd $(dirname $0) && pwd)"
# RoseTTAFold-AAのインストールディレクトリを設定
export RFAA_HOME="/home/_machine/apps/RoseTTAFold-AA"
# RoseTTAFold-AAのためのPython設定
export MINIFORGE3_ROOT="${RFAA_HOME}/pyenv/versions/miniforge3-23.11.0-0"
export RFAA_CONDA="${MINIFORGE3_ROOT}/envs/rfaa-conda"
export PATH="${RFAA_CONDA}/bin:${PATH}"
export BLASTMAT="${RFAA_CONDA}/share/blast-2.2.26/data"
# RoseTTAFold-AAを実行する
cd ${RFAA_HOME}
cp ${DIR_WORK}/${config_name}.yaml ./rf2aa/config/inference
python3 -m rf2aa.run_inference --config-name ${config_name}
rm -f ./rf2aa/config/inference/${config_name}.yaml
run_rfaa.sh
に実行権限を与えた後、実行する。
# run_rfaa.shの実行
🦆 cd /home/_machine/Documents/RFAA/LPGDS
🦆 chmod u+x ./run_rfaa.sh
🦆 ./run_rfaa.sh
蛋白質/低分子化合物複合体
(工事中)
Discussion