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

# run benchmark sh 
# Usage:
L
LDOUBLEV 已提交
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

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
    params=`sed -n "${line}p" $filename`
    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}'"
    eval $cmd
}

function set_gpu_id(){
    string=$1
    _str=${string:1:6}
L
LDOUBLEV 已提交
39
    IFS="C"
40
    arr=(${_str})
L
LDOUBLEV 已提交
41
    M=${arr[0]}
42
    P=${arr[1]}
L
LDOUBLEV 已提交
43 44
    gn=`expr $P - 1`
    gpu_num=`expr $gn / $M`
45 46 47 48
    seq=`seq -s "," 0 $gpu_num`
    echo $seq
}

L
LDOUBLEV 已提交
49 50 51 52 53 54 55
function get_repo_name(){
    IFS=";"
    cur_dir=$(pwd)
    IFS="/"
    arr=(${cur_dir})
    echo ${arr[-1]}
}
56

L
LDOUBLEV 已提交
57 58 59 60 61
FILENAME=$1
# MODE be one of ['benchmark_train']
MODE=$2
params=$3
# bash test_tipc/benchmark_train.sh test_tipc/configs/det_mv3_db_v2.0/train_benchmark.txt  benchmark_train dynamic_bs8_null_SingleP_DP_N1C1
L
LDOUBLEV 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
IFS="\n"

# 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=";"

L
LDOUBLEV 已提交
77

L
LDOUBLEV 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
# 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`
# for train log parser
line_num=`expr $line_num + 3`
L
LDOUBLEV 已提交
93
speed_unit_value=$(func_parser_value "${lines[line_num]}")
L
LDOUBLEV 已提交
94 95 96 97 98 99

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

line_num=`expr $line_num + 1`
keyword_value=$(func_parser_value "${lines[line_num]}")
L
LDOUBLEV 已提交
100
echo $keyword_value
L
LDOUBLEV 已提交
101 102 103 104 105 106 107 108 109 110

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]}")

gpu_id=$(set_gpu_id $device_num)
repo_name=$(get_repo_name )

111 112
SAVE_LOG=${BENCHMARK_LOG_DIR:-$(pwd)}   # */benchmark_log
status_log="${SAVE_LOG}/benchmark_log/results.log"
L
LDOUBLEV 已提交
113

L
LDOUBLEV 已提交
114 115 116 117 118 119 120 121
# set export 
IFS=";"
flags_list=(${flags_value})
for _flag in ${flags_list[*]}; do
    cmd="export ${_flag}"
    eval $cmd
done

L
LDOUBLEV 已提交
122 123 124 125
if [ ${precision} = "null" ];then
    precision="fp32"
fi

L
set env  
LDOUBLEV 已提交
126 127 128
# set env
export model_branch=`git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3`
export model_commit=$(git log|head -n1|awk '{print $2}') 
L
LDOUBLEV 已提交
129
export str_tmp=$(echo `pip list|grep paddlepaddle-gpu|awk -F ' ' '{print $2}'`)
L
set env  
LDOUBLEV 已提交
130
export frame_version=${str_tmp%%.post*}
L
LDOUBLEV 已提交
131
export frame_commit=$(echo `python -c "import paddle;print(paddle.version.commit)"`)
L
set env  
LDOUBLEV 已提交
132 133


L
LDOUBLEV 已提交
134 135 136 137 138
if [ ${#gpu_id} -le 1 ];then
    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"
    func_sed_params "$FILENAME" "4" "0"  # sed used gpu_id 
L
LDOUBLEV 已提交
139
    cmd="bash test_tipc/test_train_inference_python.sh ${FILENAME} benchmark_train > ${log_path}/${log_name} 2>&1 "
L
LDOUBLEV 已提交
140
    echo $cmd
L
LDOUBLEV 已提交
141
    eval $cmd
L
LDOUBLEV 已提交
142
    eval "cat ${log_path}/${log_name}"
L
LDOUBLEV 已提交
143

L
LDOUBLEV 已提交
144 145
    # without profile
    log_path="$SAVE_LOG/train_log"
L
LDOUBLEV 已提交
146
    speed_log_path="$SAVE_LOG/index"
L
LDOUBLEV 已提交
147
    mkdir -p $log_path
L
LDOUBLEV 已提交
148
    mkdir -p $speed_log_path
L
LDOUBLEV 已提交
149
    log_name="${repo_name}_${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}_${device_num}_log"
L
LDOUBLEV 已提交
150
    speed_log_name="${repo_name}_${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}_${device_num}_speed"
L
LDOUBLEV 已提交
151
    func_sed_params "$FILENAME" "13" "null"  # sed used gpu_id 
L
LDOUBLEV 已提交
152
    cmd="bash test_tipc/test_train_inference_python.sh ${FILENAME} benchmark_train > ${log_path}/${log_name} 2>&1 "
L
LDOUBLEV 已提交
153
    echo $cmd
L
LDOUBLEV 已提交
154
    job_bt=`date '+%Y%m%d%H%M%S'`
L
LDOUBLEV 已提交
155
    eval $cmd
L
LDOUBLEV 已提交
156 157
    job_et=`date '+%Y%m%d%H%M%S'`
    export model_run_time=$((${job_et}-${job_bt}))
L
LDOUBLEV 已提交
158
    eval "cat ${log_path}/${log_name}"
L
LDOUBLEV 已提交
159 160 161

    # parser log
    _model_name="${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}"
L
LDOUBLEV 已提交
162
    cmd="python ${BENCHMARK_ROOT}/scripts/analysis.py --filename ${log_path}/${log_name} \
L
LDOUBLEV 已提交
163
            --speed_log_file '${speed_log_path}/${speed_log_name}' \
L
LDOUBLEV 已提交
164 165 166 167 168 169 170 171 172 173 174 175
            --model_name ${_model_name} \
            --base_batch_size ${batch_size} \
            --run_mode ${run_mode} \
            --run_process_type ${run_process_type} \
            --fp_item ${precision} \
            --keyword ${keyword_value}: \
            --skip_steps ${skip_steps_value} \
            --device_num ${device_num} \
            --speed_unit ${speed_unit_value} \
            --convergence_key ${convergence_key_value}: "
    echo $cmd
    eval $cmd
176 177
    last_status=${PIPESTATUS[0]}
    status_check $last_status "${cmd}" "${status_log}"
L
LDOUBLEV 已提交
178

L
LDOUBLEV 已提交
179 180
else
    log_path="$SAVE_LOG/train_log"
L
LDOUBLEV 已提交
181
    speed_log_path="$SAVE_LOG/index"
L
LDOUBLEV 已提交
182
    mkdir -p $log_path
L
LDOUBLEV 已提交
183
    mkdir -p $speed_log_path
L
LDOUBLEV 已提交
184
    log_name="${repo_name}_${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}_${device_num}_log"
L
LDOUBLEV 已提交
185
    speed_log_name="${repo_name}_${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}_${device_num}_speed"
L
LDOUBLEV 已提交
186
    func_sed_params "$FILENAME" "4" "$gpu_id"  # sed used gpu_id 
L
LDOUBLEV 已提交
187
    func_sed_params "$FILENAME" "13" "null"  # sed --profile_option as null
L
LDOUBLEV 已提交
188
    cmd="bash test_tipc/test_train_inference_python.sh ${FILENAME} benchmark_train > ${log_path}/${log_name} 2>&1 "
L
LDOUBLEV 已提交
189
    echo $cmd
L
LDOUBLEV 已提交
190
    job_bt=`date '+%Y%m%d%H%M%S'`
L
LDOUBLEV 已提交
191
    eval $cmd
L
LDOUBLEV 已提交
192 193
    job_et=`date '+%Y%m%d%H%M%S'`
    export model_run_time=$((${job_et}-${job_bt}))
L
LDOUBLEV 已提交
194
    eval "cat ${log_path}/${log_name}"
L
LDOUBLEV 已提交
195 196 197
    # parser log
    _model_name="${model_name}_bs${batch_size}_${precision}_${run_process_type}_${run_mode}"
    
L
LDOUBLEV 已提交
198
    cmd="python ${BENCHMARK_ROOT}/scripts/analysis.py --filename ${log_path}/${log_name} \
L
LDOUBLEV 已提交
199
            --speed_log_file '${speed_log_path}/${speed_log_name}' \
L
LDOUBLEV 已提交
200 201 202 203 204 205 206 207 208 209 210 211
            --model_name ${_model_name} \
            --base_batch_size ${batch_size} \
            --run_mode ${run_mode} \
            --run_process_type ${run_process_type} \
            --fp_item ${precision} \
            --keyword ${keyword_value}: \
            --skip_steps ${skip_steps_value} \
            --device_num ${device_num} \
            --speed_unit ${speed_unit_value} \
            --convergence_key ${convergence_key_value}: "
    echo $cmd
    eval $cmd
212 213
    last_status=${PIPESTATUS[0]}
    status_check $last_status "${cmd}" "${status_log}"
L
LDOUBLEV 已提交
214
fi
215