未验证 提交 1c01d7a7 编写于 作者: C cuicheng01 提交者: GitHub

Merge pull request #1274 from RainFrost1/whole_chain_kl_quant

kl_quant for whole_chain and add readme
# 从训练到推理部署工具链测试方法介绍
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后缀的日志文件
......@@ -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
......
......@@ -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
......
......@@ -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"
......
......@@ -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}"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册