🦆

RoseTTAFold All-Atom環境構築 | 2024-03-11

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 (ビルドレシピファイル) を以下の内容で作成する。

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

Apptainerコンテナを利用しない場合 (普通に conda 環境を作る場合)

※ 本来 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.yamlprotein.yaml などのコンフィグファイル ( RFAA 実行時に適用される設定) が格納されている。基本的には base.yaml の設定を基に、インプットした hoge.yaml の設定が追加されて計算が実行されることになる。

base.yaml について checkpoint_path: sequencedb: hhdb: を以下のように変更する。特に hhdb: についてはデータベースの日付部分に間違いがないこと (自分がダウンロードしたものと合っているか) をよく確認すること。

base.yaml
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 も今回作成した環境に合わせて以下のように修正する。 <- ** は実際には記載しません

make_msa.sh
# pipe_dir
PIPE_DIR="${RFAA_HOME}"  ### 修正 ###
DB_TEMPL="$6"
make_msa.sh
# sequence databases
DB_UR30="${5}/uniclust/UniRef30_2020_06"  ### 修正 ###
DB_BFD="${5}/bfd/bfd-first_non_consensus_sequences.fasta"  ### 修正 ###

DB_BFD は本記事では small_bfd になっているので注意

make_msa.sh
# 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  ### コメントアウト ###
make_msa.sh
# setup hhblits command
#export HHLIB=/software/hhsuite/build/bin/  ### コメントアウト ###
#export PATH=$HHLIB:$PATH  ### コメントアウト ###
make_msa.sh
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 に作成し、以下のように修正する。

make_ss.sh
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.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コンテナを利用する場合

run_rfaa.sh
#!/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コンテナを利用しない場合

run_rfaa.sh
#!/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