"doc/vscode:/vscode.git/clone" did not exist on "5021b5a9e4e9f954281c69916032cb37832511a0"
test.sh 17.2 KB
Newer Older
LDOUBLEV's avatar
LDOUBLEV committed
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
#!/bin/bash
FILENAME=$1
# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer', 'infer']
MODE=$2

dataline=$(cat ${FILENAME})

# parser params
IFS=$'\n'
lines=(${dataline})

function func_parser_key(){
    strs=$1
    IFS=":"
    array=(${strs})
    tmp=${array[0]}
    echo ${tmp}
}
function func_parser_value(){
    strs=$1
    IFS=":"
    array=(${strs})
    tmp=${array[1]}
    echo ${tmp}
}
function func_set_params(){
    key=$1
    value=$2
    if [ ${key} = "null" ];then
        echo " "
    elif [[ ${value} = "null" ]] || [[ ${value} = " " ]] || [ ${#value} -le 0 ];then
        echo " "
    else 
        echo "${key}=${value}"
    fi
}
LDOUBLEV's avatar
LDOUBLEV committed
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function func_parser_params(){
    strs=$1
    IFS=":"
    array=(${strs})
    key=${array[0]}
    tmp=${array[1]}
    IFS="|"
    res=""
    for _params in ${tmp[*]}; do
        IFS="="
        array=(${_params})
        mode=${array[0]}
        value=${array[1]}
        if [[ ${mode} = ${MODE} ]]; then
            IFS="|"
LDOUBLEV's avatar
LDOUBLEV committed
52
            #echo $(func_set_params "${mode}" "${value}")
LDOUBLEV's avatar
LDOUBLEV committed
53
            echo $value
LDOUBLEV's avatar
LDOUBLEV committed
54
55
56
57
58
59
            break
        fi
        IFS="|"
    done
    echo ${res}
}
LDOUBLEV's avatar
LDOUBLEV committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function status_check(){
    last_status=$1   # the exit code
    run_command=$2
    run_log=$3
    if [ $last_status -eq 0 ]; then
        echo -e "\033[33m Run successfully with command - ${run_command}!  \033[0m" | tee -a ${run_log}
    else
        echo -e "\033[33m Run failed with command - ${run_command}!  \033[0m" | tee -a ${run_log}
    fi
}

IFS=$'\n'
# The training params
model_name=$(func_parser_value "${lines[1]}")
python=$(func_parser_value "${lines[2]}")
gpu_list=$(func_parser_value "${lines[3]}")
LDOUBLEV's avatar
LDOUBLEV committed
76
77
78
79
80
train_use_gpu_key=$(func_parser_key "${lines[4]}")
train_use_gpu_value=$(func_parser_value "${lines[4]}")
autocast_list=$(func_parser_value "${lines[5]}")
autocast_key=$(func_parser_key "${lines[5]}")
epoch_key=$(func_parser_key "${lines[6]}")
LDOUBLEV's avatar
LDOUBLEV committed
81
epoch_num=$(func_parser_params "${lines[6]}")
LDOUBLEV's avatar
LDOUBLEV committed
82
83
save_model_key=$(func_parser_key "${lines[7]}")
train_batch_key=$(func_parser_key "${lines[8]}")
LDOUBLEV's avatar
LDOUBLEV committed
84
train_batch_value=$(func_parser_params "${lines[8]}")
LDOUBLEV's avatar
LDOUBLEV committed
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
pretrain_model_key=$(func_parser_key "${lines[9]}")
pretrain_model_value=$(func_parser_value "${lines[9]}")
train_model_name=$(func_parser_value "${lines[10]}")
train_infer_img_dir=$(func_parser_value "${lines[11]}")
train_param_key1=$(func_parser_key "${lines[12]}")
train_param_value1=$(func_parser_value "${lines[12]}")

trainer_list=$(func_parser_value "${lines[14]}")
trainer_norm=$(func_parser_key "${lines[15]}")
norm_trainer=$(func_parser_value "${lines[15]}")
pact_key=$(func_parser_key "${lines[16]}")
pact_trainer=$(func_parser_value "${lines[16]}")
fpgm_key=$(func_parser_key "${lines[17]}")
fpgm_trainer=$(func_parser_value "${lines[17]}")
distill_key=$(func_parser_key "${lines[18]}")
distill_trainer=$(func_parser_value "${lines[18]}")
trainer_key1=$(func_parser_key "${lines[19]}")
trainer_value1=$(func_parser_value "${lines[19]}")
LDOUBLEV's avatar
LDOUBLEV committed
103
trainer_key2=$(func_parser_key "${lines[20]}")
LDOUBLEV's avatar
LDOUBLEV committed
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
trainer_value2=$(func_parser_value "${lines[20]}")

eval_py=$(func_parser_value "${lines[23]}")
eval_key1=$(func_parser_key "${lines[24]}")
eval_value1=$(func_parser_value "${lines[24]}")

save_infer_key=$(func_parser_key "${lines[27]}")
export_weight=$(func_parser_key "${lines[28]}")
norm_export=$(func_parser_value "${lines[29]}")
pact_export=$(func_parser_value "${lines[30]}")
fpgm_export=$(func_parser_value "${lines[31]}")
distill_export=$(func_parser_value "${lines[32]}")
export_key1=$(func_parser_key "${lines[33]}")
export_value1=$(func_parser_value "${lines[33]}")
export_key2=$(func_parser_key "${lines[34]}")
export_value2=$(func_parser_value "${lines[34]}")

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
# parser inference model 
infer_model_dir_list=$(func_parser_value "${lines[36]}")
infer_export_list=$(func_parser_value "${lines[37]}")
infer_is_quant=$(func_parser_value "${lines[38]}")
# parser inference 
inference_py=$(func_parser_value "${lines[39]}")
use_gpu_key=$(func_parser_key "${lines[40]}")
use_gpu_list=$(func_parser_value "${lines[40]}")
use_mkldnn_key=$(func_parser_key "${lines[41]}")
use_mkldnn_list=$(func_parser_value "${lines[41]}")
cpu_threads_key=$(func_parser_key "${lines[42]}")
cpu_threads_list=$(func_parser_value "${lines[42]}")
batch_size_key=$(func_parser_key "${lines[43]}")
batch_size_list=$(func_parser_value "${lines[43]}")
use_trt_key=$(func_parser_key "${lines[44]}")
use_trt_list=$(func_parser_value "${lines[44]}")
precision_key=$(func_parser_key "${lines[45]}")
precision_list=$(func_parser_value "${lines[45]}")
infer_model_key=$(func_parser_key "${lines[46]}")
image_dir_key=$(func_parser_key "${lines[47]}")
infer_img_dir=$(func_parser_value "${lines[47]}")
save_log_key=$(func_parser_key "${lines[48]}")
benchmark_key=$(func_parser_key "${lines[49]}")
benchmark_value=$(func_parser_value "${lines[49]}")
infer_key1=$(func_parser_key "${lines[50]}")
infer_value1=$(func_parser_value "${lines[50]}")
tink2123's avatar
tink2123 committed
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# parser serving
trans_model_py=$(func_parser_value "${lines[52]}")
infer_model_dir_key=$(func_parser_key "${lines[53]}")
infer_model_dir_value=$(func_parser_value "${lines[53]}")
model_filename_key=$(func_parser_key "${lines[54]}")
model_filename_value=$(func_parser_value "${lines[54]}")
params_filename_key=$(func_parser_key "${lines[55]}")
params_filename_value=$(func_parser_value "${lines[55]}")
serving_server_key=$(func_parser_key "${lines[56]}")
serving_server_value=$(func_parser_value "${lines[56]}")
serving_client_key=$(func_parser_key "${lines[57]}")
serving_client_value=$(func_parser_value "${lines[57]}")
serving_dir_value=$(func_parser_value "${lines[58]}")
web_service_py=$(func_parser_value "${lines[59]}")
pipline_py=$(func_parser_value "${lines[60]}")

LDOUBLEV's avatar
LDOUBLEV committed
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178

LOG_PATH="./tests/output"
mkdir -p ${LOG_PATH}
status_log="${LOG_PATH}/results.log"


function func_inference(){
    IFS='|'
    _python=$1
    _script=$2
    _model_dir=$3
    _log_path=$4
    _img_dir=$5
    _flag_quant=$6
    # inference 
    for use_gpu in ${use_gpu_list[*]}; do
LDOUBLEV's avatar
LDOUBLEV committed
179
        if [ ${use_gpu} = "False" ] || [ ${use_gpu} = "cpu" ]; then
LDOUBLEV's avatar
LDOUBLEV committed
180
            for use_mkldnn in ${use_mkldnn_list[*]}; do
181
182
183
                if [ ${use_mkldnn} = "False" ] && [ ${_flag_quant} = "True" ]; then
                    continue
                fi
LDOUBLEV's avatar
LDOUBLEV committed
184
185
186
187
188
                for threads in ${cpu_threads_list[*]}; do
                    for batch_size in ${batch_size_list[*]}; do
                        _save_log_path="${_log_path}/infer_cpu_usemkldnn_${use_mkldnn}_threads_${threads}_batchsize_${batch_size}.log"
                        set_infer_data=$(func_set_params "${image_dir_key}" "${_img_dir}")
                        set_benchmark=$(func_set_params "${benchmark_key}" "${benchmark_value}")
LDOUBLEV's avatar
LDOUBLEV committed
189
190
191
                        set_batchsize=$(func_set_params "${batch_size_key}" "${batch_size}")
                        set_cpu_threads=$(func_set_params "${cpu_threads_key}" "${threads}")
                        set_model_dir=$(func_set_params "${infer_model_key}" "${_model_dir}")
192
                        set_infer_params1=$(func_set_params "${infer_key1}" "${infer_value1}")
Double_V's avatar
Double_V committed
193
                        command="${_python} ${_script} ${use_gpu_key}=${use_gpu} ${use_mkldnn_key}=${use_mkldnn} ${set_cpu_threads} ${set_model_dir} ${set_batchsize} ${set_infer_data} ${set_benchmark} ${set_infer_params1} > ${_save_log_path} 2>&1 "
LDOUBLEV's avatar
LDOUBLEV committed
194
                        eval $command
Double_V's avatar
Double_V committed
195
196
197
                        last_status=${PIPESTATUS[0]}
                        eval "cat ${_save_log_path}"
                        status_check $last_status "${command}" "${status_log}"
LDOUBLEV's avatar
LDOUBLEV committed
198
199
200
                    done
                done
            done
LDOUBLEV's avatar
LDOUBLEV committed
201
        elif [ ${use_gpu} = "True" ] || [ ${use_gpu} = "gpu" ]; then
LDOUBLEV's avatar
LDOUBLEV committed
202
203
            for use_trt in ${use_trt_list[*]}; do
                for precision in ${precision_list[*]}; do
204
205
206
                    if [[ ${_flag_quant} = "False" ]] && [[ ${precision} =~ "int8" ]]; then
                        continue
                    fi 
207
                    if [[ ${precision} =~ "fp16" || ${precision} =~ "int8" ]] && [ ${use_trt} = "False" ]; then
LDOUBLEV's avatar
LDOUBLEV committed
208
209
                        continue
                    fi
210
                    if [[ ${use_trt} = "False" || ${precision} =~ "int8" ]] && [ ${_flag_quant} = "True" ]; then
LDOUBLEV's avatar
LDOUBLEV committed
211
212
213
214
215
216
                        continue
                    fi
                    for batch_size in ${batch_size_list[*]}; do
                        _save_log_path="${_log_path}/infer_gpu_usetrt_${use_trt}_precision_${precision}_batchsize_${batch_size}.log"
                        set_infer_data=$(func_set_params "${image_dir_key}" "${_img_dir}")
                        set_benchmark=$(func_set_params "${benchmark_key}" "${benchmark_value}")
LDOUBLEV's avatar
LDOUBLEV committed
217
218
219
220
                        set_batchsize=$(func_set_params "${batch_size_key}" "${batch_size}")
                        set_tensorrt=$(func_set_params "${use_trt_key}" "${use_trt}")
                        set_precision=$(func_set_params "${precision_key}" "${precision}")
                        set_model_dir=$(func_set_params "${infer_model_key}" "${_model_dir}")
LDOUBLEV's avatar
LDOUBLEV committed
221
222
                        set_infer_params1=$(func_set_params "${infer_key1}" "${infer_value1}")
                        command="${_python} ${_script} ${use_gpu_key}=${use_gpu} ${set_tensorrt} ${set_precision} ${set_model_dir} ${set_batchsize} ${set_infer_data} ${set_benchmark} ${set_infer_params1} > ${_save_log_path} 2>&1 "
LDOUBLEV's avatar
LDOUBLEV committed
223
                        eval $command
Double_V's avatar
Double_V committed
224
225
226
227
                        last_status=${PIPESTATUS[0]}
                        eval "cat ${_save_log_path}"
                        status_check $last_status "${command}" "${status_log}"
                        
LDOUBLEV's avatar
LDOUBLEV committed
228
229
230
                    done
                done
            done
LDOUBLEV's avatar
LDOUBLEV committed
231
        else
232
            echo "Does not support hardware other than CPU and GPU Currently!"
LDOUBLEV's avatar
LDOUBLEV committed
233
234
235
236
        fi
    done
}

LDOUBLEV's avatar
LDOUBLEV committed
237
if [ ${MODE} = "infer" ]; then
LDOUBLEV's avatar
LDOUBLEV committed
238
239
240
241
242
243
    GPUID=$3
    if [ ${#GPUID} -le 0 ];then
        env=" "
    else
        env="export CUDA_VISIBLE_DEVICES=${GPUID}"
    fi
244
245
246
247
248
249
250
251
252
    # set CUDA_VISIBLE_DEVICES
    eval $env
    export Count=0
    IFS="|"
    infer_run_exports=(${infer_export_list})
    infer_quant_flag=(${infer_is_quant})
    for infer_model in ${infer_model_dir_list[*]}; do
        # run export
        if [ ${infer_run_exports[Count]} != "null" ];then
LDOUBLEV's avatar
LDOUBLEV committed
253
            save_infer_dir=$(dirname $infer_model)
LDOUBLEV's avatar
LDOUBLEV committed
254
            set_export_weight=$(func_set_params "${export_weight}" "${infer_model}")
LDOUBLEV's avatar
LDOUBLEV committed
255
            set_save_infer_key=$(func_set_params "${save_infer_key}" "${save_infer_dir}")
LDOUBLEV's avatar
LDOUBLEV committed
256
            export_cmd="${python} ${norm_export} ${set_export_weight} ${set_save_infer_key}"
257
258
259
260
261
            eval $export_cmd
            status_export=$?
            if [ ${status_export} = 0 ];then
                status_check $status_export "${export_cmd}" "${status_log}"
            fi
LDOUBLEV's avatar
fix  
LDOUBLEV committed
262
        else
LDOUBLEV's avatar
LDOUBLEV committed
263
            save_infer_dir=${infer_model}
264
265
266
        fi
        #run inference
        is_quant=${infer_quant_flag[Count]}
LDOUBLEV's avatar
LDOUBLEV committed
267
        func_inference "${python}" "${inference_py}" "${save_infer_dir}" "${LOG_PATH}" "${infer_img_dir}" ${is_quant}
268
        Count=$(($Count + 1))
tink2123's avatar
tink2123 committed
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
        #run serving
        set_dirname=$(func_set_params "${infer_model_dir_key}" "${infer_model_dir_value}")
        set_model_filename=$(func_set_params "${model_filename_key}" "${model_filename_value}")
        set_params_filename=$(func_set_params "${params_filename_key}" "${params_filename_value}")
        set_serving_server=$(func_set_params "${serving_server_key}" "${serving_server_value}")
        set_serving_client=$(func_set_params "${serving_client_key}" "${serving_client_value}")
        trans_model_cmd="${python} ${trans_model_py} ${set_dirname} ${set_model_filename} ${set_params_filename} ${set_serving_server} ${set_serving_client}"
        eval $trans_model_cmd
        cd ${serving_dir_value}
        echo $PWD
        web_service_cmd="${python} ${web_service_py}"
        echo $web_service_cmd
        eval $web_service_cmd
        pipline_cmd="${python} ${pipline_py}"
        echo $pipline_cmd
        eval $pipline_cmd

286
    done
LDOUBLEV's avatar
LDOUBLEV committed
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382

else
    IFS="|"
    export Count=0
    USE_GPU_KEY=(${train_use_gpu_value})
    for gpu in ${gpu_list[*]}; do
        use_gpu=${USE_GPU_KEY[Count]}
        Count=$(($Count + 1))
        if [ ${gpu} = "-1" ];then
            env=""
        elif [ ${#gpu} -le 1 ];then
            env="export CUDA_VISIBLE_DEVICES=${gpu}"
            eval ${env}
        elif [ ${#gpu} -le 15 ];then
            IFS=","
            array=(${gpu})
            env="export CUDA_VISIBLE_DEVICES=${array[0]}"
            IFS="|"
        else
            IFS=";"
            array=(${gpu})
            ips=${array[0]}
            gpu=${array[1]}
            IFS="|"
            env=" "
        fi
        for autocast in ${autocast_list[*]}; do 
            for trainer in ${trainer_list[*]}; do 
                flag_quant=False
                if [ ${trainer} = ${pact_key} ]; then
                    run_train=${pact_trainer}
                    run_export=${pact_export}
                    flag_quant=True
                elif [ ${trainer} = "${fpgm_key}" ]; then
                    run_train=${fpgm_trainer}
                    run_export=${fpgm_export}
                elif [ ${trainer} = "${distill_key}" ]; then
                    run_train=${distill_trainer}
                    run_export=${distill_export}
                elif [ ${trainer} = ${trainer_key1} ]; then
                    run_train=${trainer_value1}
                    run_export=${export_value1}
                elif [[ ${trainer} = ${trainer_key2} ]]; then
                    run_train=${trainer_value2}
                    run_export=${export_value2}
                else
                    run_train=${norm_trainer}
                    run_export=${norm_export}
                fi

                if [ ${run_train} = "null" ]; then
                    continue
                fi
                
                set_autocast=$(func_set_params "${autocast_key}" "${autocast}")
                set_epoch=$(func_set_params "${epoch_key}" "${epoch_num}")
                set_pretrain=$(func_set_params "${pretrain_model_key}" "${pretrain_model_value}")
                set_batchsize=$(func_set_params "${train_batch_key}" "${train_batch_value}")
                set_train_params1=$(func_set_params "${train_param_key1}" "${train_param_value1}")
                set_use_gpu=$(func_set_params "${train_use_gpu_key}" "${use_gpu}")
                save_log="${LOG_PATH}/${trainer}_gpus_${gpu}_autocast_${autocast}"
                
                # load pretrain from norm training if current trainer is pact or fpgm trainer
                if [ ${trainer} = ${pact_key} ] || [ ${trainer} = ${fpgm_key} ]; then
                    set_pretrain="${load_norm_train_model}"
                fi

                set_save_model=$(func_set_params "${save_model_key}" "${save_log}")
                if [ ${#gpu} -le 2 ];then  # train with cpu or single gpu
                    cmd="${python} ${run_train} ${set_use_gpu}  ${set_save_model} ${set_epoch} ${set_pretrain} ${set_autocast} ${set_batchsize} ${set_train_params1} "
                elif [ ${#gpu} -le 15 ];then  # train with multi-gpu
                    cmd="${python} -m paddle.distributed.launch --gpus=${gpu} ${run_train} ${set_save_model} ${set_epoch} ${set_pretrain} ${set_autocast} ${set_batchsize} ${set_train_params1}"
                else     # train with multi-machine
                    cmd="${python} -m paddle.distributed.launch --ips=${ips} --gpus=${gpu} ${run_train} ${set_save_model} ${set_pretrain} ${set_epoch} ${set_autocast} ${set_batchsize} ${set_train_params1}"
                fi
                # run train
                eval "unset CUDA_VISIBLE_DEVICES"
                eval $cmd
                status_check $? "${cmd}" "${status_log}"

                set_eval_pretrain=$(func_set_params "${pretrain_model_key}" "${save_log}/${train_model_name}")
                # save norm trained models to set pretrain for pact training and fpgm training 
                if [ ${trainer} = ${trainer_norm} ]; then
                    load_norm_train_model=${set_eval_pretrain}
                fi
                # run eval 
                if [ ${eval_py} != "null" ]; then
                    set_eval_params1=$(func_set_params "${eval_key1}" "${eval_value1}")
                    eval_cmd="${python} ${eval_py} ${set_eval_pretrain} ${set_use_gpu} ${set_eval_params1}" 
                    eval $eval_cmd
                    status_check $? "${eval_cmd}" "${status_log}"
                fi
                # run export model
                if [ ${run_export} != "null" ]; then 
                    # run export model
                    save_infer_path="${save_log}"
LDOUBLEV's avatar
LDOUBLEV committed
383
384
385
                    set_export_weight=$(func_set_params "${export_weight}" "${save_log}/${train_model_name}")
                    set_save_infer_key=$(func_set_params "${save_infer_key}" "${save_infer_path}")
                    export_cmd="${python} ${run_export} ${set_export_weight} ${set_save_infer_key}"
LDOUBLEV's avatar
LDOUBLEV committed
386
387
388
389
390
391
392
393
394
395
396
397
398
                    eval $export_cmd
                    status_check $? "${export_cmd}" "${status_log}"

                    #run inference
                    eval $env
                    save_infer_path="${save_log}"
                    func_inference "${python}" "${inference_py}" "${save_infer_path}" "${LOG_PATH}" "${train_infer_img_dir}" "${flag_quant}"
                    eval "unset CUDA_VISIBLE_DEVICES"
                fi
            done  # done with:    for trainer in ${trainer_list[*]}; do 
        done      # done with:    for autocast in ${autocast_list[*]}; do 
    done          # done with:    for gpu in ${gpu_list[*]}; do
fi  # end if [ ${MODE} = "infer" ]; then
tink2123's avatar
tink2123 committed
399