File size: 3,572 Bytes
d643072 |
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 |
#!/bin/bash
export PATH="$HOME/anaconda3/envs/dpg/bin:$PATH"
# ===================== hyper =================
dpg=true
np=8 # number of GPU to use
py=tools/metrics/dpg_bench/compute_dpg_bench.py
default_img_size=512 # 256, 512, 1024
default_sample_nums=1065
report_to=wandb
default_log_suffix_label=''
# parser
img_path=$1
exp_names=$2
job_name=$(basename $(dirname "$img_path"))
for arg in "$@"
do
case $arg in
--img_size=*)
img_size="${arg#*=}"
shift
;;
--sample_nums=*)
sample_nums="${arg#*=}"
shift
;;
--suffix_label=*)
suffix_label="${arg#*=}"
shift
;;
--log_dpg*)
log_dpg="${arg#*=}"
shift
;;
*)
;;
esac
done
img_size=${img_size:-$default_img_size}
sample_nums=${sample_nums:-$default_sample_nums}
pic_nums_per_prompt=4
log_suffix_label=${suffix_label:-$default_log_suffix_label}
log_dpg=${log_dpg:-true}
PORT=${PORT:-29500}
echo "img_size: $img_size"
echo "sample_nums: $sample_nums"
echo "log_dpg: $log_dpg"
if [ "$dpg" = true ]; then
# =============== compute DPG-Bench from json ==================
echo "==================== computing DPG-Bench ===================="
# cmd_template="python \
cmd_template="accelerate launch --num_machines 1 --num_processes $np --multi_gpu --mixed_precision 'fp16' --main_process_port $PORT \
$py --image-root-path {img_path} --exp_name {exp_name} \
--pic-num $pic_nums_per_prompt --resolution $img_size --vqa-model mplug \
--report_to $report_to --name {job_name} "
if [[ "$exp_names" != *.txt ]]; then
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_names}"
cmd="${cmd//\{job_name\}/$job_name}"
eval $cmd
else
if [ ! -f "$exp_names" ]; then
echo "Model paths file not found: $exp_names"
exit 1
fi
echo "" >> "$exp_names" # add a new line to the file avoid skipping last line dir
while IFS= read -r exp_name; do
echo $exp_name
if [ -n "$exp_name" ] && ! [[ $exp_name == \#* ]]; then
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_name}"
cmd="${cmd//\{job_name\}/$job_name}"
eval $cmd
fi
done < "$exp_names"
wait
fi
fi
# =============== log DPG-Bench result online after the above result saving ==================
if [ "$log_dpg" = true ] && [ "$dpg" = true ]; then
echo "==================== logging onto $report_to ===================="
cmd_template="python $py --image-root-path {img_path} --exp_name {exp_name} \
--pic-num $pic_nums_per_prompt --resolution $img_size --vqa-model mplug \
--report_to $report_to --name {job_name} "
if [ -n "${log_suffix_label}" ]; then
echo "log_suffix_label: $log_suffix_label"
cmd_template="${cmd_template} --suffix_label ${log_suffix_label}"
fi
if [[ "$exp_names" != *.txt ]]; then
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_names}"
cmd="${cmd//\{job_name\}/$job_name}"
echo $cmd
eval $cmd --log_dpg
else
while IFS= read -r exp_name; do
if [ -n "$exp_name" ] && ! [[ $exp_name == \#* ]]; then
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_name}"
cmd="${cmd//\{job_name\}/$job_name}"
eval $cmd --log_dpg
fi
done < "$exp_names"
wait
fi
fi
export PATH="$HOME/anaconda3/envs/sana/bin:$PATH"
echo DPG-Bench finally done
|