diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000000000000000000000000000000000000..55b3690b105a60453e71c67702968af4df894b7d --- /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 0afd21490d46d37e5eeb72475b6343b433dc98c4..f5add2e9a078a44de12aba3b48f1ad6e070960eb 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 445609bf8a75aa325d2733afe3a2b2c28325df07..aa7f9ac10db613ecef88505a889d7f3bb738e7d8 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 35782fd01322bab4398a6b26b36c86de2b15efe7..6f9701a101e42b3feba1d2d46008b449ca8c3519 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 b573bf4832fb3ed4205982c460a78a4cc13aa2ea..b369912647ff9fad27ffc279df870b0be5ecfd80 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}"