File size: 5,629 Bytes
3967f69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#!/bin/bash
set -euo pipefail
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib/:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib/python3.11/site-packages/fastpt/torch/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH=${ROCM_PATH}/opencl/lib:$LD_LIBRARY_PATH

SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
EXAMPLE_DIR=$(cd "${SCRIPT_DIR}/.." && pwd)
REPO_ROOT=$(cd "${SCRIPT_DIR}/../../../.." && pwd)
# echo "*** REPO_ROOT : ${REPO_ROOT}"
# source "${REPO_ROOT}/env.sh"

if [[ -n "${ROCM_PATH:-}" && -f "${ROCM_PATH}/cuda/env.sh" ]]; then
  source "${ROCM_PATH}/cuda/env.sh"
fi

export PYTHONPATH="${REPO_ROOT}/src:${REPO_ROOT}:${PYTHONPATH:-}"
export HIP_VISIBLE_DEVICES="${HIP_VISIBLE_DEVICES:-0}"
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-${HIP_VISIBLE_DEVICES}}"
export OMP_NUM_THREADS="${OMP_NUM_THREADS:-4}"

DIFFDOCK_DATA_ROOT="${DIFFDOCK_DATA_ROOT:-${ONESCIENCE_DATASETS_DIR}/diffdock}"
DIFFDOCK_DATASETS_DIR="${DIFFDOCK_DATASETS_DIR:-${DIFFDOCK_DATA_ROOT}/datasets}"
export TORCH_HOME="${TORCH_HOME:-${DIFFDOCK_DATA_ROOT}/torch_home}"

RUN_NAME="${RUN_NAME:-diffdock_pdbbind_smoke100_val20_cpu}"
LOG_DIR="${LOG_DIR:-${EXAMPLE_DIR}/outputs/train}"
CACHE_PATH="${CACHE_PATH:-${EXAMPLE_DIR}/outputs/cache_pdbbind_smoke100_val20}"
CONFIG_PATH="${CONFIG_PATH:-${LOG_DIR}/${RUN_NAME}_train_config.yml}"

DEVICE="${DEVICE:-cuda:0}"
BATCH_SIZE="${BATCH_SIZE:-2}"
N_EPOCHS="${N_EPOCHS:-1}"
NUM_WORKERS="${NUM_WORKERS:-1}"
NUM_DATALOADER_WORKERS="${NUM_DATALOADER_WORKERS:-0}"
LR="${LR:-0.001}"
SEED="${SEED:-0}"

PDBBIND_DIR="${PDBBIND_DIR:-${DIFFDOCK_DATASETS_DIR}/PDBBind_processed}"
SPLIT_TRAIN="${SPLIT_TRAIN:-${DIFFDOCK_DATASETS_DIR}/splits/timesplit_no_lig_overlap_train_smoke100}"
SPLIT_VAL="${SPLIT_VAL:-${DIFFDOCK_DATASETS_DIR}/splits/timesplit_no_lig_overlap_val_smoke20}"

mkdir -p "${LOG_DIR}" "${CACHE_PATH}"
LOG_DIR=$(cd "${LOG_DIR}" && pwd)
CACHE_PATH=$(cd "${CACHE_PATH}" && pwd)
CONFIG_DIR=$(dirname "${CONFIG_PATH}")
CONFIG_NAME=$(basename "${CONFIG_PATH}")
mkdir -p "${CONFIG_DIR}"
CONFIG_PATH=$(cd "${CONFIG_DIR}" && pwd)/"${CONFIG_NAME}"

yaml_value() {
  if [[ -z "${1:-}" || "${1}" == "null" ]]; then
    printf "null"
  else
    local value
    value=$(printf "%s" "$1" | sed "s/'/''/g")
    printf "'%s'" "$value"
  fi
}

cat > "${CONFIG_PATH}" <<EOF
runtime:
  run_name: $(yaml_value "${RUN_NAME}")
  log_dir: $(yaml_value "${LOG_DIR}")
  device: $(yaml_value "${DEVICE}")
  seed: ${SEED}
  cudnn_benchmark: false
  wandb: false
  project: diffdock

data:
  dataset: 'pdbbind'
  cache_path: $(yaml_value "${CACHE_PATH}")
  pdbbind_dir: $(yaml_value "${PDBBIND_DIR}")
  moad_dir: $(yaml_value "${PDBBIND_DIR}")
  split_train: $(yaml_value "${SPLIT_TRAIN}")
  split_val: $(yaml_value "${SPLIT_VAL}")
  protein_file: protein_processed
  limit_complexes: null
  num_conformers: 1
  num_workers: ${NUM_WORKERS}
  num_dataloader_workers: ${NUM_DATALOADER_WORKERS}
  batch_size: ${BATCH_SIZE}
  pin_memory: false
  dataloader_drop_last: false
  remove_hs: true
  receptor_radius: 30
  c_alpha_max_neighbors: 10
  atom_radius: 5
  atom_max_neighbors: 8
  chain_cutoff: null
  max_lig_size: null
  matching_popsize: 20
  matching_maxiter: 20
  matching_tries: 1
  not_knn_only_graph: false
  include_miscellaneous_atoms: false
  all_atoms: false
  triple_training: false
  combined_training: false
  double_val: false
  train_multiplicity: 1
  val_multiplicity: 1
  max_receptor_size: null
  remove_promiscuous_targets: null
  min_ligand_size: 0
  unroll_clusters: false
  enforce_timesplit: false
  crop_beyond: 20
  moad_esm_embeddings_path: null
  pdbbind_esm_embeddings_path: null
  moad_esm_embeddings_sequences_path: null
  esm_embeddings_model: null

diffusion:
  no_torsion: false
  tr_sigma_min: 0.1
  tr_sigma_max: 30.0
  rot_sigma_min: 0.1
  rot_sigma_max: 1.65
  tor_sigma_min: 0.0314
  tor_sigma_max: 3.14
  sampling_alpha: 1.0
  sampling_beta: 1.0
  tr_weight: 0.33
  rot_weight: 0.33
  tor_weight: 0.33
  backbone_loss_weight: 0.0
  sidechain_loss_weight: 0.0

model:
  num_conv_layers: 2
  max_radius: 5.0
  scale_by_sigma: true
  norm_by_sigma: false
  ns: 16
  nv: 4
  distance_embed_dim: 32
  cross_distance_embed_dim: 32
  no_batch_norm: true
  use_second_order_repr: false
  cross_max_distance: 80
  dynamic_max_cross: false
  dropout: 0.0
  smooth_edges: false
  odd_parity: false
  embedding_type: sinusoidal
  sigma_embed_dim: 32
  embedding_scale: 1000
  no_aminoacid_identities: false
  sh_lmax: 2
  no_differentiate_convolutions: false
  tp_weights_layers: 2
  num_prot_emb_layers: 0
  reduce_pseudoscalars: false
  embed_also_ligand: true
  depthwise_convolution: false
  use_old_atom_encoder: false

optimization:
  n_epochs: ${N_EPOCHS}
  lr: ${LR}
  w_decay: 0.0
  scheduler: null
  scheduler_patience: 20
  lr_start_factor: 0.001
  warmup_dur: 4
  use_ema: true
  ema_rate: 0.999
  restart_dir: null
  restart_ckpt: last_model
  restart_lr: null
  pretrain_dir: null
  pretrain_ckpt: null
  save_model_freq: null

validation:
  test_sigma_intervals: false
  inference_samples: 1
  val_inference_freq: null
  train_inference_freq: null
  inference_steps: 20
  num_inference_complexes: 20
  inference_earlystop_metric: valinf_min_rmsds_lt2
  inference_secondary_metric: null
  inference_earlystop_goal: max
EOF

echo "DiffDock smoke training config: ${CONFIG_PATH}"
echo "PDBBind dir: ${PDBBIND_DIR}"
echo "Train split: ${SPLIT_TRAIN}"
echo "Val split: ${SPLIT_VAL}"
echo "Cache path: ${CACHE_PATH}"
echo "Run output: ${LOG_DIR}/${RUN_NAME}"
echo "TORCH_HOME: ${TORCH_HOME}"

cd "${REPO_ROOT}"
python "${SCRIPT_DIR}/train_diffdock.py" --config "${CONFIG_PATH}"