私の CSDN をフォローしてください: https://spike.blog.csdn.net/
この記事のアドレス: https://spike.blog.csdn.net/article/details/132597659
OpenFold Multimer は、タンパク質のマルチマー構造と相互作用を予測するための深層学習ベースの方法です。大規模なタンパク質の配列と構造データ、および高度なニューラル ネットワーク アーキテクチャを活用して、タンパク質の表現と特徴を学習します。ホモ多量体やヘテロ多量体、複雑なタンパク質間相互作用ネットワークなど、さまざまな種類の多量体を処理できます。OpenFold Multimer の目標は、生物学者にタンパク質多量体の機能とメカニズムを調査するための、高速、正確、そして使いやすいツールを提供することです。
トレーニングパラメータ:
python3 train_openfold.py \
--train_data_dir [your folder]/af2-data-v230/pdb_mmcif/mmcif_files/ \
--train_alignment_dir mydata/alignment_dir/ \
--train_mmcif_data_cache_path mmcif_cache.json \
--template_mmcif_dir [your folder]/af2-data-v230/pdb_mmcif/mmcif_files/ \
--output_dir mydata/output_dir/ \
--max_template_date "2021-10-10" \
--config_preset "model_1_multimer_v3" \
--template_release_dates_cache_path mmcif_cache.json \
--precision bf16 \
--gpus 1 \
--replace_sampler_ddp=True \
--seed 42 \
--deepspeed_config_path deepspeed_config.json \
--checkpoint_every_epoch \
--train_chain_data_cache_path chain_data_cache.json \
--obsolete_pdbs_file_path [your folder]/af2-data-v230/pdb_mmcif/obsolete.dat
1. train_alignment_dir
中心的な懸念はtrain_alignment_dir
、この部分がキャッシュの前処理機能であるということです。呼び出しパスは次のとおりです。
train_openfold.py
クラスargs
で渡されるパラメータOpenFoldMultimerDataModule
- 次に
dataset_gen()
、メソッド、つまりOpenFoldSingleMultimerDataset
クラスが受信します。 - パラメータは から、 に
alignment_dir=self.train_alignment_dir
変換されます。alignment_dir
- 次に
OpenFoldMultimerDataModule
、クラスからOpenFoldSingleMultimerDataset
クラスを呼び出します
今すぐ
# train_openfold.py
# ...
if "multimer" in args.config_preset:
data_module = OpenFoldMultimerDataModule(
config=config.data,
batch_seed=args.seed,
**vars(args))
# ...
# openfold/data/data_modules.py#OpenFoldMultimerDataModule
# ...
if self.training_mode:
train_dataset = dataset_gen(
data_dir=self.train_data_dir,
mmcif_data_cache_path=self.train_mmcif_data_cache_path,
alignment_dir=self.train_alignment_dir,
filter_path=self.train_filter_path,
max_template_hits=self.config.train.max_template_hits,
shuffle_top_k_prefiltered=
self.config.train.shuffle_top_k_prefiltered,
treat_pdb_as_distillation=False,
mode="train",
alignment_index=self.alignment_index,)
# ...
OpenFoldSingleMultimerDataset
授業中、の課題alignment_dir
に対して、_chain_ids
if alignment_index is not None:
self._chain_ids = list(alignment_index.keys())
else:
self._chain_ids = list(os.listdir(alignment_dir))
alignment_index_path
これはパラメータとしてサポートされ、渡されます。デフォルトは空です。関連する説明は次のとおりです。中心となるのは、最初に単一のファイルにコンパイルしてから読み込むことです。これにより、効率が向上します。
各チェーンのアライメントに対して個別のファイルを作成するのが面倒な場合は、scripts/alignment_db_scripts/ のスクリプトを使用してアライメント ディレクトリを統合できます。まず、create_alignment_db.py を実行して、アライメント ディレクトリをデータベース ファイルとインデックス ファイルのペアに統合します。すべてのアライメント ディレクトリ (または単一のアライメント ディレクトリのシャード) がコンパイルされたら、unify_alignment_db_indices.py でインデックスを統合します。結果のインデックス super.index は、alignment_index というフレーズを含むトレーニング スクリプト フラグに渡すことができます。このシナリオでは、alignment_dir フラグは、コンパイルされたアライメント データベースを含むディレクトリを表します。トレーニング データセットと蒸留データセットの両方をこの方法でコンパイルできます。逸話的には、これにより、I/O ボトルネックの環境でのトレーニングが高速化されます。
その中には、self._chain_ids
トレーニング セット全体が含まれます。
def __len__(self):
return len(self._chain_ids)
ロガーログを設定します。
import logging
logging.basicConfig()
logger = logging.getLogger(__file__)
logger.setLevel(level=logging.INFO)
トレーニング データのトラバーサル パラメーター:
def __getitem__(self, idx):
mmcif_id = self.idx_to_mmcif_id(idx)
chains = self.mmcif_data_cache[mmcif_id]['chain_ids']
出力に基づいてトレーニング データを整理します。
mmcif_id is: 5ykn, idx: 8580 and has 1 chains
mmcif_id is: 2lna, idx: 3848 and has 1 chains
mmcif_id is: 7rrp, idx: 8447 and has 24 chains
mmcif_id is: 6k8h, idx: 7870 and has 2 chains
...
2.OpenFoldSingleMultimerDataset
特に OpenFoldSingleMultimerDataset クラスを分析します。このメソッドでは__getitem__
、以下に焦点を当ててトレーニング サンプルを繰り返します。
self.idx_to_mmcif_id()
関数呼び出しself._mmcifs[idx]
self._mmcifs
2 つのキー変数と があり、self.mmcif_data_cache
2 つのキーは一貫している必要があります。
今すぐ:
def __getitem__(self, idx):
mmcif_id = self.idx_to_mmcif_id(idx)
chains = self.mmcif_data_cache[mmcif_id]['chain_ids']
print(f"mmcif_id is: {
mmcif_id}, idx: {
idx} and has {
len(chains)} chains")
self._mmcifs
データに関してはmmcif_data_cache_path
-> self.mmcif_data_cache
->までお問い合わせください。self._mmcifs
mmcif_data_cache_path
前処理工程から
今すぐ:
# ...
logger.info(f"[CL] mmcif_data_cache_path: {
mmcif_data_cache_path}")
if mmcif_data_cache_path is not None:
with open(mmcif_data_cache_path, "r") as infile:
self.mmcif_data_cache = json.load(infile)
assert isinstance(self.mmcif_data_cache, dict)
# ...
if self.mmcif_data_cache is not None:
self._mmcifs = list(self.mmcif_data_cache.keys())
self._mmcif_id_to_idx_dict = {
mmcif: i for i, mmcif in enumerate(self._mmcifs)}
mmcif_cache.json
ファイル データには、次の PDB 情報が含まれます。
{
"4ewn": {
"release_date": "2012-12-05",
"chain_ids": ["D"],
"seqs": [
"MLAKRI..."
],
"no_chains": 1,
"resolution": 1.9
},
"5m9r": {
"release_date": "2017-02-22",
"chain_ids": ["A", "B"],
"seqs": [
"MQDNS...",
"MQDNS..."
],
"no_chains": 2,
"resolution": 1.44
},
# ...
バグ修正:train_mmcif_data_cache_path
パラメータの追加
--train_mmcif_data_cache_path mmcif_cache.json