benchmark_train.sh 4.34 KB
Newer Older
1
2
3
4
5
#!/bin/bash
source test_tipc/common_func.sh

# run benchmark sh 
# Usage:
LDOUBLEV's avatar
LDOUBLEV committed
6
# bash run_benchmark_train.sh config.txt params
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

function func_parser_params(){
    strs=$1
    IFS="="
    array=(${strs})
    tmp=${array[1]}
    echo ${tmp}
}

function func_sed_params(){
    filename=$1
    line=$2
    param_value=$3

    # cmd="sed -n '${line}p' $filename"
    # params=`eval $cmd`
    params=`sed -n "${line}p" $filename`
    # params=`cmd`
    #params=$($cmd)
    IFS=":"
    array=(${params})
    key=${array[0]}
    value=${array[1]}
    if [[ $value =~ 'benchmark_train' ]];then
        IFS='='
        _val=(${value})
        param_value="${_val[0]}=${param_value}"
    fi
    new_params="${key}:${param_value}"
    IFS=";"
    cmd="sed -i '${line}s/.*/${new_params}/' '${filename}'"
    # echo $cmd
    eval $cmd
}

function set_gpu_id(){
    string=$1
    _str=${string:1:6}
LDOUBLEV's avatar
LDOUBLEV committed
45
    IFS="C"
46
    arr=(${_str})
LDOUBLEV's avatar
LDOUBLEV committed
47
    M=${arr[0]}
48
    P=${arr[1]}
LDOUBLEV's avatar
LDOUBLEV committed
49
50
    gn=`expr $P - 1`
    gpu_num=`expr $gn / $M`
51
52
53
54
    seq=`seq -s "," 0 $gpu_num`
    echo $seq
}

LDOUBLEV's avatar
LDOUBLEV committed
55
56
57
58
59
60
61
function get_repo_name(){
    IFS=";"
    cur_dir=$(pwd)
    IFS="/"
    arr=(${cur_dir})
    echo ${arr[-1]}
}
62
63


LDOUBLEV's avatar
LDOUBLEV committed
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
# FILENAME=$1
# # MODE be one of ['benchmark_train']
# MODE=$2
# params=$3
IFS="\n"

FILENAME="test_tipc/configs/det_mv3_db_v2.0/train_benchmark.txt"
MODE="benchmark_train"
params="dynamic_bs8_fp32_SingleP_DP_N1C4"

# parser params from input: modeltype_bs${bs_item}_${fp_item}_${run_process_type}_${run_mode}_${device_num}
IFS="_"
params_list=(${params})
model_type=${params_list[0]}
batch_size=${params_list[1]}
batch_size=`echo  ${batch_size} | tr -cd "[0-9]" `
precision=${params_list[2]}
run_process_type=${params_list[3]}
run_mode=${params_list[4]}
device_num=${params_list[5]}
device_num_copy=$device_num
IFS=";"

echo $precision
# sed batchsize and precision
func_sed_params "$FILENAME" "6" "$precision"
func_sed_params "$FILENAME" "9" "$batch_size"

# parser params from train_benchmark.txt
dataline=`cat $FILENAME`
# parser params
IFS=$'\n'
lines=(${dataline})
model_name=$(func_parser_value "${lines[1]}")

# 获取benchmark_params所在的行数
line_num=`grep -n "benchmark_params" $FILENAME  | cut -d ":" -f 1`
echo $line_num # debug
echo ${lines[$line_num]} # debug
# for train log parser
line_num=`expr $line_num + 3`
ips_unit_value=$(func_parser_value "${lines[line_num]}")

line_num=`expr $line_num + 1`
skip_steps_value=$(func_parser_value "${lines[line_num]}")

echo $skip_steps_value "haha"

line_num=`expr $line_num + 1`
keyword_value=$(func_parser_value "${lines[line_num]}")

line_num=`expr $line_num + 1`
convergence_key_value=$(func_parser_value "${lines[line_num]}")

line_num=`expr $line_num + 1`
flags_value=$(func_parser_value "${lines[line_num]}")

# echo "device_num: $device_num"
# gpu_id=$(set_gpu_id "N4C32")
# echo "gpuid: $gpu_id"

gpu_id=$(set_gpu_id $device_num)
echo "gpu_id: $gpu_id"
repo_name=$(get_repo_name )
echo "repo_name: ${repo_name}"

# train_log_file=${run_log_path}/${model_repo}_${model_name}_${device_num}_log
# profiling_log_file=${profiling_log_path}/${model_repo}_${model_name}_${device_num}_profiling
SAVE_LOG="benchmark_log"

if [ ${#gpu_id} -le 1 ];then
    echo "single_gpu train"
    log_path="$SAVE_LOG/profiling_log"
    mkdir -p $log_path
    log_name="${repo_name}_${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}_${device_num}_profiling"
    echo $log_name
    func_sed_params "$FILENAME" "4" "0"  # sed used gpu_id 
    cmd="bash test_tipc/test_train_inference_python.sh benchmark_train > ${log_path}/${log_name} 2>&1 "
    echo $cmd
    # without profile
    log_path="$SAVE_LOG/train_log"
    mkdir -p $log_path
    log_name="${repo_name}_${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}_${device_num}_log"
    func_sed_params "$FILENAME" "13" "null"  # sed used gpu_id 
    cmd="bash test_tipc/test_train_inference_python.sh benchmark_train > ${log_path}/${log_name} 2>&1 "
    echo $cmd
else
    echo "multi_gpu training"
    log_path="$SAVE_LOG/train_log"
    mkdir -p $log_path
    log_name="${repo_name}_${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}_${device_num}_log"
    func_sed_params "$FILENAME" "4" "$gpu_id"  # sed used gpu_id 
    func_sed_params "$FILENAME" "13" "$null"  # sed --profile_option as null
    cmd="bash test_tipc/test_train_inference_python.sh benchmark_train > ${log_path}/${log_name} 2>&1 "
    echo $cmd
fi
160
161