From 2f1892855b47923359bfbadf999ac8dd04fe72b5 Mon Sep 17 00:00:00 2001 From: dongshuilong Date: Wed, 29 Sep 2021 04:26:51 +0000 Subject: [PATCH] kl_quant for whole_chain and add readme --- tests/README.md | 70 +++++++++++++++++++++++++ tests/config/MobileNetV3_large_x1_0.txt | 2 +- tests/config/ResNet50_vd.txt | 2 +- tests/prepare.sh | 1 + tests/test.sh | 27 ++++++---- 5 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 tests/README.md diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 00000000..55b3690b --- /dev/null +++ b/tests/README.md @@ -0,0 +1,70 @@ + +# 从训练到推理部署工具链测试方法介绍 + +test.sh和config文件夹下的txt文件配合使用,完成Clas模型从训练到预测的流程测试。 + +# 安装依赖 +- 安装PaddlePaddle >= 2.0 +- 安装PaddleClass依赖 + ``` + pip3 install -r ../requirements.txt + ``` +- 安装autolog + ``` + git clone https://github.com/LDOUBLEV/AutoLog + cd AutoLog + pip3 install -r requirements.txt + python3 setup.py bdist_wheel + pip3 install ./dist/auto_log-1.0.0-py3-none-any.whl + cd ../ + ``` + +# 目录介绍 + +```bash +tests/ +├── config # 测试模型的参数配置文件 +| |--- *.txt +└── prepare.sh # 完成test.sh运行所需要的数据和模型下载 +└── test.sh # 测试主程序 +``` + +# 使用方法 + +test.sh包四种运行模式,每种模式的运行数据不同,分别用于测试速度和精度,分别是: + +- 模式1:lite_train_infer,使用少量数据训练,用于快速验证训练到预测的走通流程,不验证精度和速度; +```shell +bash tests/prepare.sh ./tests/config/ResNet50_vd.txt 'lite_train_infer' +bash tests/test.sh ./tests/config/ResNet50_vd.txt 'lite_train_infer' +``` + +- 模式2:whole_infer,使用少量数据训练,一定量数据预测,用于验证训练后的模型执行预测,预测速度是否合理; +```shell +bash tests/prepare.sh ./tests/config/ResNet50_vd.txt 'whole_infer' +bash tests/test.sh ./tests/config/ResNet50_vd.txt 'whole_infer' +``` + +- 模式3:infer 不训练,全量数据预测,走通开源模型评估、动转静,检查inference model预测时间和精度; +```shell +bash tests/prepare.sh ./tests/config/ResNet50_vd.txt 'infer' +# 用法1: +bash tests/test.sh ./tests/config/ResNet50_vd.txt 'infer' +``` + +需注意的是,模型的离线量化需使用`infer`模式进行测试 + +- 模式4:whole_train_infer , CE: 全量数据训练,全量数据预测,验证模型训练精度,预测精度,预测速度; +```shell +bash tests/prepare.sh ./tests/config/ResNet50_vd.txt 'whole_train_infer' +bash tests/test.sh ./tests/config/ResNet50_vd.txt 'whole_train_infer' +``` + +- 模式5:cpp_infer , CE: 验证inference model的c++预测是否走通; +```shell +bash tests/prepare.sh ./tests/config/ResNet50_vd.txt 'cpp_infer' +bash tests/test.sh ./tests/config/ResNet50_vd.txt 'cpp_infer' +``` + +# 日志输出 +最终在```tests/output```目录下生成.log后缀的日志文件 diff --git a/tests/config/MobileNetV3_large_x1_0.txt b/tests/config/MobileNetV3_large_x1_0.txt index 0afd2149..f5add2e9 100644 --- a/tests/config/MobileNetV3_large_x1_0.txt +++ b/tests/config/MobileNetV3_large_x1_0.txt @@ -35,7 +35,7 @@ export1:null export2:null inference_model_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/whole_chain/MobileNetV3_large_x1_0_inference.tar infer_model:../inference/ -infer_export:null +kl_quant:deploy/slim/quant_post_static.py -c ppcls/configs/ImageNet/MobileNetV3/MobileNetV3_large_x1_0.yaml -o Global.save_inference_dir=./inference infer_quant:Fasle inference:python/predict_cls.py -c configs/inference_cls.yaml -o Global.use_gpu:True|False diff --git a/tests/config/ResNet50_vd.txt b/tests/config/ResNet50_vd.txt index 445609bf..aa7f9ac1 100644 --- a/tests/config/ResNet50_vd.txt +++ b/tests/config/ResNet50_vd.txt @@ -35,7 +35,7 @@ export1:null export2:null infer_model_url:https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/whole_chain/ResNet50_vd_inference.tar infer_model:../inference/ -infer_export:null +kl_quant:deploy/slim/quant_post_static.py -c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml -o Global.save_inference_dir=./inference infer_quant:Fasle inference:python/predict_cls.py -c configs/inference_cls.yaml -o Global.use_gpu:True|False diff --git a/tests/prepare.sh b/tests/prepare.sh index 35782fd0..6f9701a1 100644 --- a/tests/prepare.sh +++ b/tests/prepare.sh @@ -42,6 +42,7 @@ elif [ ${MODE} = "infer" ] || [ ${MODE} = "cpp_infer" ];then ln -s whole_chain_infer ILSVRC2012 cd ILSVRC2012 mv val.txt val_list.txt + ln -s val_list.txt train_list.txt cd ../../ # download inference model eval "wget -nc $inference_model_url" diff --git a/tests/test.sh b/tests/test.sh index b573bf48..b3699126 100644 --- a/tests/test.sh +++ b/tests/test.sh @@ -299,17 +299,6 @@ if [ ${MODE} = "infer" ]; then infer_quant_flag=(${infer_is_quant}) cd deploy for infer_model in ${infer_model_dir_list[*]}; do - # run export - if [ ${infer_run_exports[Count]} != "null" ];then - set_export_weight=$(func_set_params "${export_weight}" "${infer_model}") - set_save_infer_key=$(func_set_params "${save_infer_key}" "${infer_model}") - export_cmd="${python} ${norm_export} ${set_export_weight} ${set_save_infer_key}" - eval $export_cmd - status_export=$? - if [ ${status_export} = 0 ];then - status_check $status_export "${export_cmd}" "../${status_log}" - fi - fi #run inference is_quant=${infer_quant_flag[Count]} echo "is_quant: ${is_quant}" @@ -317,6 +306,22 @@ if [ ${MODE} = "infer" ]; then Count=$(($Count + 1)) done cd .. + + # for kl_quant + echo "kl_quant" + if [ ${infer_run_exports} ]; then + command="${python} ${infer_run_exports}" + eval $command + last_status=${PIPESTATUS[0]} + status_check $last_status "${command}" "${status_log}" + cd inference/quant_post_static_model + ln -s __model__ inference.pdmodel + ln -s __params__ inference.pdiparams + cd ../../deploy + is_quant=True + func_inference "${python}" "${inference_py}" "${infer_model}/quant_post_static_model" "../${LOG_PATH}" "${infer_img_dir}" ${is_quant} + cd .. + fi elif [ ${MODE} = "cpp_infer" ]; then cd deploy func_cpp_inference "./cpp/build/clas_system" "../${LOG_PATH}" "${infer_img_dir}" -- GitLab