PSP - タンパク質構造予測のためのデータ読み込み OpenFold Multimer トレーニング モデル

私の 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._mmcifs2 つのキー変数と があり、self.mmcif_data_cache2 つのキーは一貫している必要があります。

今すぐ:

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

おすすめ

転載: blog.csdn.net/u012515223/article/details/132597659