README.md 7.4 KB
Newer Older
S
stephon 已提交
1 2 3 4 5

# 飞桨训推一体认证

## 1. 简介

6
飞桨除了基本的模型训练和预测,还提供了支持多端多平台的高性能推理部署工具。本文档提供了PaddleClas中所有模型的飞桨训推一体认证 (Training and Inference Pipeline Certification(TIPC)) 信息和测试工具,方便用户查阅每种模型的训练推理部署打通情况,并可以进行一键测试。
S
stephon 已提交
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

<div align="center">
    <img src="docs/guide.png" width="1000">
</div>

## 2. 汇总信息

打通情况汇总如下,已填写的部分表示可以使用本工具进行一键测试,未填写的表示正在支持中。

**字段说明:**
- 基础训练预测:包括模型训练、Paddle Inference Python预测。
- 更多训练方式:包括多机多卡、混合精度。
- 模型压缩:包括裁剪、离线/在线量化、蒸馏。
- 其他预测部署:包括Paddle Inference C++预测、Paddle Serving部署、Paddle-Lite部署等。

更详细的mkldnn、Tensorrt等预测加速相关功能的支持情况可以查看各测试工具的[更多教程](#more)
B
Bin Lu 已提交
23 24 25 26
| 算法论文 | 模型名称 | 模型类型 | 基础<br>训练预测 | 更多<br>训练方式 | 模型压缩 |  其他预测部署  |
| :--- | :--- |  :----:  | :--------: |  :----  |   :----  |   :----  |
| ResNet     |ResNet50_vd | 分类  | 支持 | 多机多卡 <br> 混合精度 | FPGM裁剪 <br> PACT量化|  |
| MobileNetV3     |MobileNetV3_large_x1_0 | 分类  | 支持 | 多机多卡 <br> 混合精度 | FPGM裁剪 <br> PACT量化|  |
D
dongshuilong 已提交
27
| PPLCNet     |PPLCNet_x2_5 | 分类  | 支持 | 多机多卡 <br> 混合精度 | - |  |
S
stephon 已提交
28

D
dongshuilong 已提交
29
## 3. 测试工具简介
S
stephon 已提交
30
### 目录介绍
B
Bin Lu 已提交
31
```
S
stephon 已提交
32
./test_tipc/
B
Bin Lu 已提交
33 34
├── common_func.sh                      #test_*.sh会调用到的公共函数
├── config     # 配置文件目录
D
dongshuilong 已提交
35
│   ├── MobileNetV3         # MobileNetV3系列模型测试配置文件目录
36 37 38 39 40 41 42
│   │   ├── MobileNetV3_large_x1_0_train_infer_python.txt                                    #基础训练预测配置文件
│   │   ├── MobileNetV3_large_x1_0_train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt  #多机多卡训练预测配置文件
│   │   └── MobileNetV3_large_x1_0_train_linux_gpu_normal_amp_infer_python_linux_gpu_cpu.txt #混合精度训练预测配置文件
│   └── ResNet              # ResNet系列模型测试配置文件目录
│       ├── ResNet50_vd_train_infer_python.txt                                        #基础训练预测配置文件
│       ├── ResNet50_vd_train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt      #多机多卡训练预测配置文件
│       └── ResNet50_vd_train_linux_gpu_normal_amp_infer_python_linux_gpu_cpu.txt     #混合精度训练预测配置文件
B
Bin Lu 已提交
43
|   ......
S
stephon 已提交
44 45 46
├── docs
│   ├── guide.png
│   └── test.png
B
Bin Lu 已提交
47 48 49 50
├── prepare.sh                          # 完成test_*.sh运行所需要的数据和模型下载
├── README.md                           # 使用文档
├── results                             # 预先保存的预测结果,用于和实际预测结果进行精读比对
└── test_train_inference_python.sh      # 测试python训练预测的主程序
B
Bin Lu 已提交
51
```
S
stephon 已提交
52

D
dongshuilong 已提交
53
### 测试流程概述
S
stephon 已提交
54 55 56 57 58
使用本工具,可以测试不同功能的支持情况,以及预测结果是否对齐,测试流程如下:
<div align="center">
    <img src="docs/test.png" width="800">
</div>

59
1. 运行`prepare.sh`准备测试所需数据和模型;
S
stephon 已提交
60 61 62
2. 运行要测试的功能对应的测试脚本`test_*.sh`,产出log,由log可以看到不同配置是否运行成功;
3.`compare_results.py`对比log中的预测结果和预存在results目录下的结果,判断预测精度是否符合预期(在误差范围内)。

D
dongshuilong 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
测试单项功能仅需两行命令,**如需测试不同模型/功能,替换配置文件即可**,命令格式如下:

```shell
# 功能:准备数据
# 格式:bash + 运行脚本 + 参数1: 配置文件选择 + 参数2: 模式选择
bash test_tipc/prepare.sh  configs/[model_name]/[params_file_name]  [Mode]

# 功能:运行测试
# 格式:bash + 运行脚本 + 参数1: 配置文件选择 + 参数2: 模式选择
bash test_tipc/test_train_inference_python.sh configs/[model_name]/[params_file_name]  [Mode]

```

例如,测试基本训练预测功能的`lite_train_lite_infer`模式,运行:

```shell
# 准备数据
bash test_tipc/prepare.sh ./test_tipc/configs/MobileNetV3/MobileNetV3_large_x1_0_train_infer_python.txt 'lite_train_lite_infer'
# 运行测试
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/MobileNetV3/MobileNetV3_large_x1_0_train_infer_python.txt 'lite_train_lite_infer'

```

关于本示例命令的更多信息可查看[基础训练预测使用文档](docs/test_train_inference_python.md)

### 配置文件命名规范

`configs`目录下,**按模型系列划分为子目录**,子目录中存放所有该模型系列测试需要用到的配置文件,如`MobileNetV3`文件夹下存放了所有`MobileNetV3`系列模型的配置文件。配置文件的命名遵循如下规范:

1. 基础训练预测配置简单命名为:`ModelName_train_infer_python.txt`,表示**Linux环境下单机、不使用混合精度训练+python预测**,其完整命名对应`ModelName_train_linux_gpu_normal_normal_infer_python_linux_gpu_cpu.txt`,由于本配置文件使用频率较高,这里进行了名称简化。其中`ModelName`指具体模型名称
2. 其他带训练配置命名格式为:`ModelName_train_训练硬件环境(linux_gpu/linux_dcu/…)_是否多机(fleet/normal)_是否混合精度(amp/normal)_预测模式(infer/lite/serving/js)_语言(cpp/python/java)_预测硬件环境(ModelName_linux_gpu/mac/jetson/opencl_arm_gpu/...).txt`。如,linux gpu下多机多卡+混合精度链条测试对应配置 `ModelName_train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt`,linux dcu下基础训练预测对应配置 `ModelName_train_linux_dcu_normal_normal_infer_python_linux_dcu.txt`
3. 仅预测的配置(如serving、lite等)命名格式:`ModelName_model_训练硬件环境(ModelName_linux_gpu/linux_dcu/…)_是否多机(fleet/normal)_是否混合精度(amp/normal)_(infer/lite/serving/js)_语言(cpp/python/java)_预测硬件环境(ModelName_linux_gpu/mac/jetson/opencl_arm_gpu/...).txt`,即,与2相比,仅第二个字段从train换为model,测试时模型直接下载获取,这里的“训练硬件环境”表示所测试的模型是在哪种环境下训练得到的。

**根据上述命名规范,可以直接从子目录名称和配置文件名找到需要测试的场景和功能对应的配置文件。**
S
stephon 已提交
97 98

<a name="more"></a>
D
dongshuilong 已提交
99 100 101

## 4 开始测试

S
stephon 已提交
102
各功能测试中涉及混合精度、裁剪、量化等训练相关,及mkldnn、Tensorrt等多种预测相关参数配置,请点击下方相应链接了解更多细节和使用教程:  
D
dongshuilong 已提交
103 104 105 106 107 108

- [test_train_inference_python 使用](docs/test_train_inference_python.md):测试基于Python的模型训练、评估、推理等基本功能,包括裁剪、量化、蒸馏。
- [test_inference_cpp 使用](docs/test_inference_cpp.md) :测试基于C++的模型推理。
- [test_serving 使用](docs/test_serving.md) :测试基于Paddle Serving的服务化部署功能。
- [test_lite_arm_cpu_cpp 使用](docs/test_lite_arm_cpu_cpp.md): 测试基于Paddle-Lite的ARM CPU端c++预测部署功能.
- [test_paddle2onnx 使用](docs/test_paddle2onnx.md):测试Paddle2ONNX的模型转化功能,并验证正确性。