-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheval.sh
More file actions
172 lines (151 loc) · 14.7 KB
/
eval.sh
File metadata and controls
172 lines (151 loc) · 14.7 KB
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
#!/bin/bash
#SBATCH -o logs/2024.12.12.
#SBATCH -J pert_seq
#SBATCH --time=5-00:00:00
#SBATCH --ntasks=1
#SBATCH --ntasks-per-node=1
#SBATCH --mem=150G
#SBATCH --cpus-per-task=20
#SBATCH --nodes=1
#SBATCH --gres=gpu:1
#SBATCH --partition=gpu
#--partition=gpu or defq
echo " "
echo " Nodelist:= " $SLURM_JOB_NODELIST
echo " Number of nodes:= " $SLURM_JOB_NUM_NODES
echo " GPUs per node:= " $SLURM_JOB_GPUS
echo " Ntasks per node:= " $SLURM_NTASKS_PER_NODE
echo " Run started at:- "
date
export SBATCH_EXPORT=ALL
host=$(hostname)
if [[ $host =~ "gamma" ]]; then
echo "host is gamma"
source ~/miniconda3/etc/profile.d/conda.sh
else
echo "host is not gamma"
source ~/.bashrc
cd perturb_seq
fi
conda activate perturb_seq
pwd
##==============================================
##train models and then evaluate
##==============================================
python gears_runner.py
##test out human CP on perturb seq test
python runner.py --mode=test --data_name=adamson --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/eval_human_cp_foundation/adamson/
python runner.py --mode=test --data_name=norman --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/eval_human_cp_foundation/norman/
python runner.py --mode=test --data_name=replogle_k562_essential --filter_perturbations=True --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/eval_human_cp_foundation/replogle_k562_essential/
python runner.py --mode=test --data_name=adam_corrected --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/eval_human_cp_foundation/adam_corrected/
python runner.py --mode=test --data_name=adam_corrected_upr --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/eval_human_cp_foundation/adam_corrected_upr/
# # #train scGPT from pretrained models/scgpt-pretrained/scGPT_human
for n in {1..10}
do
python runner.py --mode=train --data_name=adamson --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/default_config_baseline/adamson_run_$n
python runner.py --mode=train --data_name=norman --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/default_config_baseline/norman_run_$n
##replogle dataset is special because we need to filter the dataloaders to remove perturbations not part of dataset's gene set
python runner.py --mode=train --data_name=replogle_k562_essential --filter_perturbations=True --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/default_config_baseline/replogle_k562_essential_run_$n
python runner.py --mode=train --data_name=adam_corrected --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/default_config_baseline/adam_corrected_run_$n
python runner.py --mode=train --data_name=adam_corrected_upr --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/default_config_baseline/adam_corrected_upr_run_$n
done
# #train simple affine model (no pretraining)
# #will use default config, which has variables that won't be used or affect anything, but are kept for ease and sake of consistency with scGPT variables - requires less changes to the core code base
for n in {1..10}
do
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=adamson --load_model=None --pretrain_control=True --save_dir=save/simple_affine/adamson_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=norman --load_model=None --pretrain_control=True --save_dir=save/simple_affine/norman_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=replogle_k562_essential --filter_perturbations=True --load_model=None --pretrain_control=True --save_dir=save/simple_affine/replogle_k562_essential_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=adam_corrected --load_model=None --pretrain_control=True --save_dir=save/simple_affine/adam_corrected_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=adam_corrected_upr --load_model=None --pretrain_control=True --save_dir=save/simple_affine/adam_corrected_upr_run_$n/
done
# ##perturBench models
for n in {1..10}
do
python runner.py --mode=benchmark --data_name=adamson --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/perturbench/adamson_run_$n/
python runner.py --mode=benchmark --data_name=norman --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/perturbench/norman_run_$n/
python runner.py --mode=benchmark --data_name=replogle_k562_essential --filter_perturbations=True --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/perturbench/replogle_k562_essential_run_$n/
python runner.py --mode=benchmark --data_name=adam_corrected --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/perturbench/adam_corrected_run_$n/
python runner.py --mode=benchmark --data_name=adam_corrected_upr --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/perturbench/adam_corrected_upr_run_$n/
done
# ##train scGPT pretraining control (don't load any weights prior to fine tuning)
for n in {1..10}
do
python runner.py --mode=train --data_name=adamson --load_model=None --pretrain_control=True --save_dir=save/no_pretraining/adamson_run_$n/
python runner.py --mode=train --data_name=norman --load_model=None --pretrain_control=True --save_dir=save/no_pretraining/norman_run_$n/
python runner.py --mode=train --data_name=replogle_k562_essential --filter_perturbations=True --load_model=None --pretrain_control=True --save_dir=save/no_pretraining/replogle_k562_essential_run_$n/
python runner.py --mode=train --data_name=adam_corrected --load_model=None --pretrain_control=True --save_dir=save/no_pretraining/adam_corrected_run_$n/
python runner.py --mode=train --data_name=adam_corrected_upr --load_model=None --pretrain_control=True --save_dir=save/no_pretraining/adam_corrected_upr_run_$n/
done
# ##input encoder control (don't load any input encoder weights prior to fine tuning)
for n in {1..10}
do
python runner.py --mode=train --data_name=adamson --load_model=models/scgpt-pretrained/scGPT_human --input_encoder_control=True --save_dir=save/input_encoder_control/adamson_run_$n/
python runner.py --mode=train --data_name=norman --load_model=models/scgpt-pretrained/scGPT_human --input_encoder_control=True --save_dir=save/input_encoder_control/norman_run_$n/
python runner.py --mode=train --data_name=replogle_k562_essential --filter_perturbations=True --load_model=models/scgpt-pretrained/scGPT_human --input_encoder_control=True --save_dir=save/input_encoder_control/replogle_k562_essential_run_$n/
python runner.py --mode=train --data_name=adam_corrected --load_model=models/scgpt-pretrained/scGPT_human --input_encoder_control=True --save_dir=save/input_encoder_control/adam_corrected_run_$n/
python runner.py --mode=train --data_name=adam_corrected_upr --load_model=models/scgpt-pretrained/scGPT_human --input_encoder_control=True --save_dir=save/input_encoder_control/adam_corrected_upr_run_$n/
done
# ##transformer encoder control (don't load any transformer encoder weights prior to fine tuning)
for n in {1..10}
do
python runner.py --mode=train --data_name=adamson --load_model=models/scgpt-pretrained/scGPT_human --transformer_encoder_control=True --save_dir=save/transformer_encoder_control/adamson_run_$n/
python runner.py --mode=train --data_name=norman --load_model=models/scgpt-pretrained/scGPT_human --transformer_encoder_control=True --save_dir=save/transformer_encoder_control/norman_run_$n/
python runner.py --mode=train --data_name=replogle_k562_essential --filter_perturbations=True --load_model=models/scgpt-pretrained/scGPT_human --transformer_encoder_control=True --save_dir=save/transformer_encoder_control/replogle_k562_essential_run_$n/
python runner.py --mode=train --data_name=adam_corrected --load_model=models/scgpt-pretrained/scGPT_human --transformer_encoder_control=True --save_dir=save/transformer_encoder_control/adam_corrected_run_$n/
python runner.py --mode=train --data_name=adam_corrected_upr --load_model=models/scgpt-pretrained/scGPT_human --transformer_encoder_control=True --save_dir=save/transformer_encoder_control/adam_corrected_upr_run_$n/
done
##use LoRa for finetuning
lora_ranks=(800)
for lora_rank in "${lora_ranks[@]}"
do
for n in {1..10}
do
python runner.py --mode=train --data_name=adamson --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/LoRa=${lora_rank}/adamson_run_${n} --use_lora=True --lora_rank=$lora_rank
python runner.py --mode=train --data_name=norman --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/LoRa=${lora_rank}/norman_run_${n} --use_lora=True --lora_rank=$lora_rank
python runner.py --mode=train --data_name=replogle_k562_essential --filter_perturbations=True --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/LoRa=${lora_rank}/replogle_run_${n} --use_lora=True --lora_rank=$lora_rank
python runner.py --mode=train --data_name=adam_corrected --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/LoRa=${lora_rank}/adam_corrected_run_${n} --use_lora=True --lora_rank=$lora_rank
python runner.py --mode=train --data_name=adam_corrected_upr --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/LoRa=${lora_rank}/adam_corrected_upr_run_${n} --use_lora=True --lora_rank=$lora_rank
done
done
#train simple affine model (w/ pretraining - keep the gene embeddings from scGPT foundation model)
for n in {1..10}
do
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=adamson --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/simple_affine_with_pretraining/adamson_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=norman --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/simple_affine_with_pretraining/norman_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=replogle_k562_essential --filter_perturbations=True --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/simple_affine_with_pretraining/replogle_k562_essential_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=adam_corrected --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/simple_affine_with_pretraining/adam_corrected_run_$n/
python runner.py --mode=train --model_type=simple_affine --fixed_seed=False --data_name=adam_corrected_upr --load_model=models/scgpt-pretrained/scGPT_human --save_dir=save/simple_affine_with_pretraining/adam_corrected_upr_run_$n/
done
##=================================================================================================================================================
##=================================================================================================================================================
##various analyses using best front running models of the 10 independently trained (see find_best_models())
# # ##scGPT front running models (no pre-training)
python runner.py --mode=analysis --data_name=adam_corrected --load_model=save/no_pretraining/adam_corrected_run_6 --save_dir=save/null
python runner.py --mode=analysis --data_name=adam_corrected_upr --load_model=save/no_pretraining/adam_corrected_upr_run_3 --save_dir=save/null
python runner.py --mode=analysis --data_name=adamson --load_model=save/no_pretraining/adamson_run_4 --save_dir=save/null
python runner.py --mode=analysis --data_name=norman --load_model=save/no_pretraining/norman_run_6 --save_dir=save/null
python runner.py --mode=analysis --data_name=replogle_k562_essential --filter_perturbations=True --load_model=save/no_pretraining/replogle_k562_essential_run_4 --save_dir=save/null
# # ##scGPT front running models (with pre-training)
python runner.py --mode=analysis --data_name=adam_corrected --load_model=save/default_config_baseline/adam_corrected_run_1 --save_dir=save/null
python runner.py --mode=analysis --data_name=adam_corrected_upr --load_model=save/default_config_baseline/adam_corrected_upr_run_1 --save_dir=save/null
python runner.py --mode=analysis --data_name=adamson --load_model=save/default_config_baseline/adamson_run_9 --save_dir=save/null
python runner.py --mode=analysis --data_name=norman --load_model=save/default_config_baseline/norman_run_2 --save_dir=save/null
python runner.py --mode=analysis --data_name=replogle_k562_essential --filter_perturbations=True --load_model=save/default_config_baseline/replogle_k562_essential_run_8 --save_dir=save/null
# # ##simple affine (no pretraining)
python runner.py --mode=analysis --data_name=adam_corrected --model_type=simple_affine --load_model=save/simple_affine/adam_corrected_run_2 --save_dir=save/null
python runner.py --mode=analysis --data_name=adam_corrected_upr --model_type=simple_affine --load_model=save/simple_affine/adam_corrected_upr_run_5 --save_dir=save/null
python runner.py --mode=analysis --data_name=adamson --model_type=simple_affine --load_model=save/simple_affine/adamson_run_8 --save_dir=save/null
python runner.py --mode=analysis --data_name=norman --model_type=simple_affine --load_model=save/simple_affine/norman_run_5 --save_dir=save/null
python runner.py --mode=analysis --data_name=replogle_k562_essential --filter_perturbations=True --model_type=simple_affine --load_model=save/simple_affine/replogle_k562_essential_run_8 --save_dir=save/null
# # ##simple affine (with pretraining)
python runner.py --mode=analysis --data_name=adam_corrected --model_type=simple_affine --load_model=save/simple_affine_with_pretraining/adam_corrected_run_2 --save_dir=save/null
python runner.py --mode=analysis --data_name=adam_corrected_upr --model_type=simple_affine --load_model=save/simple_affine_with_pretraining/adam_corrected_upr_run_7 --save_dir=save/null
python runner.py --mode=analysis --data_name=adamson --model_type=simple_affine --load_model=save/simple_affine_with_pretraining/adamson_run_9 --save_dir=save/null
python runner.py --mode=analysis --data_name=norman --model_type=simple_affine --load_model=save/simple_affine_with_pretraining/norman_run_9 --save_dir=save/null
python runner.py --mode=analysis --data_name=replogle_k562_essential --filter_perturbations=True --model_type=simple_affine --load_model=save/simple_affine_with_pretraining/replogle_k562_essential_run_8 --save_dir=save/null
python analysis.py
##=================================================================================================================================================
##=================================================================================================================================================
echo "Run completed at:- "
date