未验证 提交 bce2f8bb 编写于 作者: littletomatodonkey's avatar littletomatodonkey 提交者: GitHub

polish folder (#5461)

* polish folder

* fix pact
上级 f427a987
# 论文复现赛指南-推荐方向
> 本文为针对 `推荐` 方向的复现赛指南
>
> 如果希望查阅 `CV` 方向的复现赛指南,可以参考:[CV方向论文复现赛指南](./ArticleReproduction_CV.md)
>
> 如果希望查阅 `NLP` 方向的复现赛指南,可以参考:[NLP方向论文复现赛指南](./ArticleReproduction_NLP.md)
## 目录
- [1. 总览](#1)
- [1.1 背景](#1.1)
- [1.2 前序工作](#1.2)
- [2. 整体框图](#2)
- [3. 论文复现理论知识](#3)
- [4. 论文复现注意事项与FAQ](#4)
- [4.1 通用注意事项](#4.0)
- [4.2 TIPC基础链条测试接入](#4.1)
<a name="1"></a>
## 1. 总览
<a name="1.1"></a>
### 1.1 背景
* 以深度学习为核心的人工智能技术仍在高速发展,通过论文复现,开发者可以获得
* 学习成长:自我能力提升
* 技术积累:对科研或工作有所帮助和启发
* 社区荣誉:成果被开发者广泛使用
<a name="1.2"></a>
### 1.2 前序工作
基于本指南复现论文过程中,建议开发者准备以下内容。
* 熟悉paddle
* 文档和API
* 80%以上的API在功能上与pytorch相同
* [PaddlePaddle文档链接](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/index_cn.html)
* [Pytorch-Paddlepaddle API映射表](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/08_api_mapping/pytorch_api_mapping_cn.html)
* [10分钟快速上手飞浆](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/01_quick_start_cn.html)
* 数据处理[DataLoader](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/io/DataLoader_cn.html)
* 了解该数据格式。以Criteo数据集为例,该数据包含了13个连续特征和26个离散特征;还有一个标签,点击用1表示,未点击用0表示。
* 准备好训练/验证数据集,用于模型训练与评估
* 准备好fake input data以及label,与模型输入shape、type等保持一致,用于后续模型前向对齐。
* 在对齐模型前向过程中,我们不需要考虑数据集模块等其他模块,此时使用fake data是将模型结构和数据部分解耦非常合适的一种方式。
* 将fake data以文件的形式存储下来,也可以保证PaddlePaddle与参考代码的模型结构输入是完全一致的,更便于排查问题。
* 在该步骤中,以AlexNet为例,生成fake data的脚本可以参考:[gen_fake_data.py](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/fake_data/gen_fake_data.py)
* 在特定设备(CPU/GPU)上,跑通参考代码的预测过程(前向)以及至少2轮(iteration)迭代过程,保证后续基于PaddlePaddle复现论文过程中可对比。
* 在复现的过程中,只需要将PaddlePaddle的复现代码以及打卡日志上传至github,不能在其中添加参考代码的实现,在验收通过之后,需要删除打卡日志。建议在初期复现的时候,就将复现代码与参考代码分成2个文件夹进行管理。
* 飞桨训推一体认证 (Training and Inference Pipeline Certification, TIPC) 是一个针对飞桨模型的测试工具,方便用户查阅每种模型的训练推理部署打通情况,并可以进行一键测试。论文训练对齐之后,需要为代码接入TIPC基础链条测试文档与代码,关于TIPC基础链条测试接入规范的文档可以参考:[链接](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md)。更多内容在`4.2`章节部分也会详细说明。
<a name="2"></a>
## 2. 整体框图
可参考[cv部分](https://github.com/PaddlePaddle/models/blob/tipc/docs/lwfx/ThesisReproduction_CV.md)
<a name="3"></a>
## 3. 论文复现理论知识
可参考[cv部分](https://github.com/PaddlePaddle/models/blob/tipc/docs/lwfx/ThesisReproduction_CV.md)
<a name="4"></a>
## 4. 论文复现注意事项与FAQ
本部分主要总结大家在论文复现赛过程中遇到的问题,如果本章内容没有能够解决你的问题,欢迎给该文档提出优化建议或者给Paddle提[ISSUE](https://github.com/PaddlePaddle/Paddle/issues/new/choose)
<a name="4.0"></a>
### 4.1 通用注意事项
* 常见问题和误区
* 不要主动调参,目的是复现而不是提升精度
* 不要加论文中没提到的模型结构
* 数据和指标先行对齐
* 数据集获取
* PaddleRec提供了大量推荐数据集,可优先从[这里查找](https://github.com/PaddlePaddle/PaddleRec/tree/master/datasets)
<a name="4.1"></a>
### 4.2 TIPC基础链条接入
**【基本流程】**
* 完成模型的训练、导出inference、基于PaddleInference的推理过程的文档与代码。参考链接:
* [insightface训练预测使用文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/README_cn.md)
* [PaddleInference使用文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/inference_cn.html)
* [PaddleRecInference使用文档](https://github.com/PaddlePaddle/PaddleRec/blob/master/doc/inference.md)
* 基于[TIPC基础链条测试接入规范](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md),完成该模型的TIPC基础链条开发以及测试文档/脚本,目录为`test_tipc`,测试脚本名称为`test_train_inference_python.sh`,该任务中只需要完成`少量数据训练模型,少量数据预测`的模式即可,用于测试TIPC流程的模型和少量数据需要放在当前repo中。
**【注意事项】**
* 基础链条测试接入时,只需要验证`少量数据训练模型,少量数据预测`的模式,只需要在Linux下验证通过即可。
* 在文档中需要给出一键测试的脚本与使用说明。
* 接入TIPC功能是需安装[特定版本paddle](https://paddleinference.paddlepaddle.org.cn/master/user_guides/download_lib.html#python)
**【实战】**
TIPC基础链条测试接入用例可以参考:[PaddlRec TIPC基础链条测试开发文档](https://github.com/PaddlePaddle/PaddleRec/tree/master/test_tipc), [InsightFace-paddle TIPC基础链条测试开发文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/test_tipc/readme.md)
**【验收】**
* TIPC基础链条测试文档清晰,`test_train_inference_python.sh`脚本可以成功执行并返回正确结果。
......@@ -10,27 +10,30 @@
## 2. 不同环境不同训练推理方式的开发文档
- Linux GPU/CPU 基础训练推理开发文档 (coming soon)
- [Linux GPU/CPU 基础训练推理开发文档](./train_infer_python/README.md)
- 更多训练方式开发文档
- Linux GPU 多机多卡训练推理开发文档 (coming soon)
- Linux GPU 混合精度训练推理开发文档 (coming soon)
- [Linux GPU 混合精度训练推理开发文档](./train_amp_infer_python/README.md)
- 更多部署方式开发文档
- Linux GPU/CPU PYTHON 服务化部署开发文档 (coming soon)
- [Linux GPU/CPU PYTHON 服务化部署开发文档](./serving_python/README.md)
- Linux GPU/CPU C++ 服务化部署开发文档 (coming soon)
- Linux GPU/CPU C++ 推理开发文档 (coming soon)
- Paddle.js 部署开发文档 (coming soon)
- Paddle2ONNX 开发文档 (coming soon)
- ARM CPU 部署开发文档 (coming soon)
- [Paddle2ONNX 开发文档](./paddle2onnx/README.md)
- [Lite ARM CPU 部署开发文档](./lite_infer_cpp_arm_cpu/README.md)
- OpenCL ARM GPU 部署开发文档 (coming soon)
- Metal ARM GPU 部署开发文档 (coming soon)
- Jetson 部署开发文档 (coming soon)
- XPU 部署开发文档 (coming soon)
- Slim训练部署开发文档
- [Linux GPU/CPU PACT量化训练开发文档](./train_pact_infer_python/README.md)
- [Linux GPU/CPU 离线量化开发文档](./ptq_infer_python/README.md)
- 更多训练环境开发文档
- Linux XPU2 基础训练推理开发文档 (coming soon)
- Linux DCU 基础训练推理开发文档 (coming soon)
- [Linux DCU 基础训练推理开发文档](./linux_dcu_train_infer_python/README.md)
- Linux NPU 基础训练推理开发文档 (coming soon)
- Windows GPU 基础训练推理开发文档 (coming soon)
- macOS CPU 基础训练推理开发文档 (coming soon)
......@@ -16,7 +16,7 @@ Linux DCU 基础训练推理开发过程主要步骤与[《Linux GPU/CPU 基础
## 2. Linux DCU 基础训练推理功能开发与规范
参考[《Linux GPU/CPU 基础训练推理开发》](../train_infer_python/README.md)
参考[《Linux GPU/CPU 基础训练推理开发文档](../train_infer_python/README.md)
<a name="3"></a>
......
# Linux DCU 基础训练推理开发文档
# 目录
- [1. 简介](#1---)
- [2. Linux DCU 基础训练推理开发文档](#2---)
- [3. Linux DCU 高级训练推理开发文档](#3---)
- [4. FAQ](#4---)
# Linux DCU 基础训练推理测试开发文档
# 目录
- [1. 简介](#1---)
- [2. Linux DCU 基础训练推理测试开发文档](#2---)
- [3. Linux DCU 高级训练推理测试开发文档](#3---)
- [4. FAQ](#4---)
......@@ -9,3 +9,48 @@
- [3. Lite ARM CPU 推理测试开发与规范](#3)
- [3.1 开发流程](#3.1)
- [3.2 核验点](#3.2)
<a name="1"></a>
## 1. 简介
该系列文档主要介绍飞桨模型基于 Linux ARM CPU 推理开发过程,主要包含2个步骤。
- 步骤一:参考[《Lite ARM CPU 推理开发文档》](./lite_infer_cpp_arm_cpu.md),完成基于Paddle-Lite的Lite ARM CPU 推理程序开发。
- 步骤二:参考[《Lite ARM CPU 推理测试开发文档》](./test_lite_infer_cpp_arm_cpu.md),完成Lite ARM CPU 推理测试程序开发。
<a name="2"></a>
# 2. Lite ARM CPU 推理功能开发与规范
### 2.1 开发流程
Lite ARM CPU 推理开发过程可以分为下面7个步骤。
<div align="center">
<img src="../images/lite_infer_arm_cpu_guide.png" width="800">
</div>
更多的介绍可以参考:[Lite ARM CPU 推理开发文档](./lite_infer_cpp_arm_cpu.md)
<a name="2.2"></a>
### 2.2 核验点
#### 2.2.1 准备推理模型
* 使用Paddle-Lite提供的opt工具进行转换之后,需要生成后缀为`*.nb`的推理模型。
#### 2.2.2 验证推理结果正确性
* 对于相同的输入,Lite ARM CPU 推理结果需要与Paddle Inference推理结果相同。**如果预处理或者后处理部分无法保持一致,导致输出结果有不同,需要给出详细的原因说明**
# 3. Lite ARM CPU 推理测试开发与规范
coming soon!
......@@ -19,7 +19,7 @@
在 ARM CPU 上部署需要使用 [Paddle Lite](https://github.com/PaddlePaddle/Paddle-Lite) 进行部署,Paddle Lite 是一个轻量级、灵活性强、易于扩展的高性能的深度学习预测框架,它可以支持诸如 ARM、OpenCL 、NPU 等等多种终端,同时拥有强大的图优化及预测加速能力。如果您希望将 Paddle Lite 框架集成到自己的项目中,那么只需要如下几步简单操作即可。
<div align="center">
<img src="../images/paddleliteworkflow.png" width=600">
<img src="../images/lite_infer_arm_cpu_guide.png" width=800">
</div>
图中的2、7是核验点,需要核验结果正确性。
......@@ -28,15 +28,15 @@
### 2.1 准备推理数据与环境
- 推理环境
开发机器:一台开发机,可以是 x86 linux 或者 Mac 设备。开发机器上需要安装开发环境。
- 推理环境
开发机器:一台开发机,可以是 x86 linux 或者 Mac 设备。开发机器上需要安装开发环境。
推理设备:一台 ARM CPU 设备,可以连接到开发机上。开发板的系统可以是 Android 或 Armlinux。
开发机上安装开发环境以及对推理设备的配置参考[mobilenet_v3开发实战](../../mobilenetv3_prod/Step6/deploy/lite_infer_cpp_arm_cpu)中的**准备开发环境****在 Android 手机上部署**章节。
- 推理数据
- 推理数据
一张可用于推理的[图片](../../mobilenetv3_prod/Step6/images/demo.jpg)和用于前处理的[配置文件](../../mobilenetv3_prod/Step6/deploy/lite_infer_cpp_arm_cpu/mobilenet_v3/config.txt)(可选,和前处理有关)以及用于推理结果后处理相关的 [label](../../mobilenetv3_prod/Step6/deploy/lite_infer_cpp_arm_cpu/mobilenet_v3/imagenet1k_label_list.txt) 文件(可选,跟后处理有关)。
......
......@@ -3,9 +3,57 @@
# 目录
- [1. 简介](#1)
- [2. Paddle2ONNX功能开发与规范](#2)
- [2. Paddle2ONNX 功能开发与规范](#2)
- [2.1 开发流程](#2.1)
- [2.2 核验点](#2.2)
- [3. Paddle2ONNX功能测试开发与规范](#3)
- [3. Paddle2ONNX 功能测试开发与规范](#3)
- [3.1 开发流程](#3.1)
- [3.2 核验点](#3.2)
<a name="1"></a>
## 1. 简介
该系列文档主要介绍 Paddle2ONNX 推理开发过程,主要包含2个步骤。
- 步骤一:参考[《Paddle2ONNX 功能开发文档》](./paddle2onnx.md),完成Paddle2ONNX 推理程序开发。
- 步骤二:参考[《Paddle2ONNX 功能测试开发文档》](./test_paddle2onnx.md),完成Paddle2ONNX 推理测试程序开发。
<a name="2"></a>
# 2. Paddle2ONNX 功能开发与规范
<a name="2.1"></a>
### 2.1 开发流程
Paddle2ONNX 开发过程可以分为下面6个步骤。
<div align="center">
<img src="../images/paddle2onnx_guide.png" width="800">
</div>
更多的介绍可以参考:[Paddle2ONNX 开发文档](./paddle2onnx.md)
<a name="2.2"></a>
### 2.2 核验点
#### 2.2.1 转换模型
* 使用Paddle2ONNX对模型转换成功之后,需要生成后缀为`*.onnx`的推理模型。
#### 2.2.2 验证推理结果正确性
* 对于相同的输入,Paddle2ONNX 推理结果需要与Paddle Inference推理结果相同。
<a name="3"></a>
# 3. Paddle2ONNX 功能测试开发与规范
coming soon!
......@@ -24,7 +24,7 @@ Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式,算
基于Paddle2ONNX的推理过程可以分为6个步骤,如下图所示。
<div align="center">
<img src="./images/py2onnx_inference_pipeline.png" width="600">
<img src="../images/paddle2onnx_guide.png" width="600">
</div>
其中设置了2个核验点,分别为
......@@ -32,6 +32,7 @@ Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式,算
* 准备推理模型
* 验证推理结果正确性
<a name="2.1"></a>
### 2.1 准备环境
......@@ -54,6 +55,8 @@ python3 -m pip install paddle2onnx
python3 -m pip install onnxruntime==1.9.0
```
<a name="2.2"></a>
### 2.2 转换模型
- Paddle 模型动转静导出
......@@ -64,7 +67,7 @@ python3 -m pip install onnxruntime==1.9.0
**【实战】**
参考MobileNetV3的Paddle2ONNX [说明文档](../../mobilenetv3_prod/Step6/deploy/onnx_python/README.md) 中的第2.2章节
参考MobileNetV3的Paddle2ONNX [说明文档](../../mobilenetv3_prod/Step6/deploy/onnx_python/README.md) 中的第2.2章节
- ONNX 模型转换
......@@ -98,8 +101,9 @@ paddle2onnx --model_dir=${your_inference_model_dir}
**【核验】**
执行完毕后,将产出${output_file} ONNX 模型文件,其中文件后缀为.onnx
执行完毕后,将产出${output_file} ONNX 模型文件,其中文件后缀为`.onnx`
<a name="2.3"></a>
### 2.3 开发数据预处理程序
......@@ -109,6 +113,7 @@ paddle2onnx --model_dir=${your_inference_model_dir}
使用ONNX模型进行推理时,使用的数据预处理方法,和使用Paddle Inference进行推理时的预处理方法一样。
<a name="2.4"></a>
### 2.4 开发ONNX模型推理程序
......@@ -132,12 +137,15 @@ ort_outs = sess.run(output_names=None, input_feed={sess.get_inputs()[0].name: ${
${input_data} 是预处理后的数据,作为网络的输入,数据是ndarray类型。
<a name="2.5"></a>
### 2.5 开发数据后处理程序
在完成ONNX模型进行推理后,基于不同的任务,需要对网络的输出进行后处理,这部分和使用Paddle Inference进行模型推理后的后处理方法一样。
<a name="2.6"></a>
### 2.6 验证ONNX推理结果正确性
**【基本内容】**
......@@ -194,6 +202,8 @@ paddlevision 模块位于MobileNetV3_prod/Step6目录下
参考MobileNetV3的Paddle2ONNX [说明文档](../../mobilenetv3_prod/Step6/deploy/onnx_python/README.md) 中的第2.3章节
<a name="3"></a>
## 3. FAQ
如果您在使用该文档完成Paddle模型转ONNX的过程中遇到问题,可以给在[这里](https://github.com/PaddlePaddle/Paddle2ONNX/issues)提一个ISSUE,我们会高优跟进。
......@@ -9,3 +9,50 @@
- [3. Linux GPU/CPU 离线量化测试开发与规范](#3)
- [3.1 开发流程](#3.1)
- [3.2 核验点](#3.2)
<a name="1"></a>
## 1. 简介
该系列文档主要介绍飞桨模型的Linux GPU/CPU离线量化过程,主要包含2个步骤。
- 步骤一:参考[《Linux GPU/CPU 离线量化功能开发文档》](./ptq_infer_python.md),完成Linux GPU/CPU 离线量化程序开发。
- 步骤二:参考[《Linux GPU/CPU 离线量化功能测试开发文档》](./test_ptq_infer_python.md),完成Linux GPU/CPU 离线量化测试程序开发。
<a name="2"></a>
# 2. Linux GPU/CPU 离线量化功能开发与规范
<a name="2.1"></a>
### 2.1 开发流程
Linux GPU/CPU 离线量化开发过程可以分为下面5个步骤。
<div align="center">
<img src="../images/post_infer_quant_guide.png" width="800">
</div>
更多的介绍可以参考:[Linux GPU/CPU 离线量化功能开发文档](./ptq_infer_python.md)
<a name="2.2"></a>
### 2.2 核验点
#### 2.2.1 准备推理模型
* 如果已经参考[模型推理功能开发文档](../train_infer_python/infer_python.md),生成Inference模型,那么该核验步骤可以跳过,否则该过程会产出Inference模型,分别包含模型结构(后缀为`*pdiparams`)和模型参数文件(后缀为`*pdmodel`)。
#### 2.2.2 验证推理结果正确性
* 开发基于量化模型的评估程序,使用Paddle Inference库评估离线量化模型,给出量化模型的精度,确保模型精度符合预期。一般情况下,大模型的精度损失不明显,轻量级模型的精度损失会稍微多一些。
<a name="3"></a>
# 3. Linux GPU/CPU 离线量化测试开发与规范
coming soon!
......@@ -25,10 +25,10 @@ Paddle中静态离线量化,使用少量校准数据计算量化因子,可
## 2. 离线量化功能开发
Paddle 混合精度训练开发可以分为4个步骤,如下图所示。
Paddle 离线量化开发可以分为个步骤,如下图所示。
<div align="center">
<img src="../images/post_training_quant_guide.png" width="600">
<img src="../images/post_infer_quant_guide.png" width="600">
</div>
其中设置了2个核验点,分别为:
......
......@@ -9,3 +9,52 @@
- [3. 服务化部署测试开发与规范](#3)
- [3.1 开发流程](#3.1)
- [3.2 核验点](#3.2)
<a name="1"></a>
## 1. 简介
该系列文档主要介绍 Linux GPU/CPU PYTHON 服务化部署开发过程,主要包含2个步骤。
- 步骤一:参考[《Linux GPU/CPU PYTHON 服务化部署功能开发文档》](./serving_python.md),完成Linux GPU/CPU PYTHON 服务化部署功能开发。
- 步骤二:参考[《Linux GPU/CPU PYTHON 服务化部署功能测试开发文档》](./test_serving_python.md),完成Linux GPU/CPU PYTHON 服务化部署功能测试开发。
<a name="2"></a>
## 2. 服务化部署开发规范
<a name="2.1"></a>
### 2.1 开发流程
Linux GPU/CPU PYTHON 服务化部署功能开发过程以分为下面8个步骤。
<div align="center">
<img src="../images/serving_guide.png" width="800">
</div>
更多内容请参考:[Linux GPU/CPU PYTHON 服务化部署功能开发文档](./serving_python.md)
<a name="2.2"></a>
### 2.2 核验点
在开发过程中,至少需要产出下面的内容。
#### 2.2.1 模型服务部署成功
* 成功启动模型预测服务,并在客户端完成访问,返回结果。
#### 2.2.2 服务化部署结果正确性
* 返回结果与基于Paddle Inference的模型推理结果完全一致。
<a name="3"></a>
## 3. 服务化部署测试开发规范
coming soon!
......@@ -30,7 +30,10 @@ Paddle Serving是飞桨开源的**服务化部署**框架,提供了C++ Serving
<a name="2"></a>
## 2. Paddle Serving服务化部署
Paddle Serving服务化部署主要包括以下步骤:
![deploy_process](./images/serving_deploy_process.png)
<div align="center">
<img src="../images/serving_guide.png" width="800">
</div>
其中设置了2个核验点,分别为:
* 启动服务端
......@@ -52,23 +55,23 @@ Paddle Serving服务化部署主要包括以下步骤:
(1)以下安装docker的Paddle Serving环境,CPU/GPU版本二选一即可。
1)docker环境安装(CPU版本)
```bash
# 拉取并进入 Paddle Serving的 CPU Docker
docker pull paddlepaddle/serving:0.7.0-devel
docker run -p 9292:9292 --name test -dit paddlepaddle/serving:0.7.0-devel bash
docker exec -it test bash
````
2)docker环境安装(GPU版本)
```bash
# 拉取并进入 Paddle Serving的GPU Docker
docker pull paddlepaddle/serving:0.7.0-cuda10.2-cudnn7-devel
nvidia-docker run -p 9292:9292 --name test -dit paddlepaddle/serving:0.7.0-cuda10.2-cudnn7-devel bash
nvidia-docker exec -it test bash
```
(2)安装Paddle Serving四个安装包,分别是:paddle-serving-server(CPU/GPU版本二选一), paddle-serving-client, paddle-serving-app和paddlepaddle(CPU/GPU版本二选一)。
```bash
......@@ -77,7 +80,7 @@ Paddle Serving服务化部署主要包括以下步骤:
pip3 install paddle-serving-server-gpu==0.7.0.post102 # GPU with CUDA10.2 + TensorRT6
pip3 install paddle-serving-app==0.7.0
#pip3 install paddlepaddle==2.2.1 # CPU
pip3 install paddlepaddle-gpu==2.2.1
pip3 install paddlepaddle-gpu==2.2.1
```
您可能需要使用国内镜像源(例如百度源, 在pip命令中添加`-i https://mirror.baidu.com/pypi/simple`)来加速下载。
Paddle Serving Server更多不同运行环境的whl包下载地址,请参考:[下载页面](https://github.com/PaddlePaddle/Serving/blob/v0.7.0/doc/Latest_Packages_CN.md)
......@@ -174,7 +177,7 @@ class MobileNetV3Op(Op):
pass
def postprocess(self, input_dicts, fetch_dict, data_id, log_id):
pass
class MobileNetV3Service(WebService):
def get_pipeline_response(self, read_op):
mobilenetv3_op = MobileNetV3Op(name="imagenet", input_ops=[read_op])
......@@ -218,7 +221,7 @@ import base64
from PIL import Image
import io
from preprocess_ops import ResizeImage, CenterCropImage, NormalizeImage, ToCHW, Compose
```
```
修改MobileNetV3Op中的init_op和preprocess函数相关代码:
```py
......@@ -227,7 +230,7 @@ class MobileNetV3Op(Op):
self.seq = Compose([
ResizeImage(256), CenterCropImage(224), NormalizeImage(), ToCHW()
])
def preprocess(self, input_dicts, data_id, log_id):
(_, input_dict), = input_dicts.items()
batch_size = len(input_dict.keys())
......@@ -282,7 +285,7 @@ result, None, ""
- OP名称:第14行修改成imagenet
- model_config:与2.4转换后服务化部署模型文件夹路径一致,这里使用默认配置 "./serving_server"
- device_type:使用默认配置1,基于GPU预测;使用参数0,基于CPU预测。
- devices:使用默认配置"0",0号卡预测
- devices:使用默认配置"0",0号卡预测
<a name="2.6"></a>
### 2.6 客户端修改
......@@ -299,7 +302,7 @@ result, None, ""
```
url = "http://127.0.0.1:18080/imagenet/prediction"
img_path = "./images/demo.jpg"
```
```
<a name="2.7"></a>
### 2.7 启动服务端模型预测服务
......@@ -310,13 +313,13 @@ img_path = "./images/demo.jpg"
```bash
python3 web_service.py &
```
```
**【实战】**
针对MobileNet网络, 启动成功的界面如下:
![图片](./images/py_serving_startup_visualization.jpg)
<a name="2.8"></a>
#### 2.8 启动客户端
......@@ -325,12 +328,12 @@ python3 web_service.py &
当成功启动了模型预测服务,可以启动客户端代码,访问服务。
**【实战】**
客户端访问服务的命令如下:
```bash
python3 pipeline_http_client.py
```
```
访问成功的界面如下图:
![图片](./images/serving_client_result.png)
......
# Linux GPU 多机多卡训练推理开发文档
# Linux GPU 混合精度训练开发文档
# 目录
- [1. 简介](#1)
- [2. 多机多卡训练功能开发与规范](#2)
- [2. Linux GPU 混合精度训练功能与规范](#2)
- [2.1 开发流程](#2.1)
- [2.2 核验点](#2.2)
- [3. 多机多卡训练推理测试开发与规范](#3)
- [3. Linux GPU 混合精度训练功能测试与规范](#3)
- [3.1 开发流程](#3.1)
- [3.2 核验点](#3.2)
## 1. 简介
该系列文档主要介绍 Linux GPU 混合精度训练功能开发过程,主要包含2个步骤。
- 步骤一:参考[《Linux GPU 混合精度训练功能开发文档》](./train_amp_infer_python.md),完成Linux GPU 混合精度训练功能开发。
- 步骤二:参考[《Linux GPU 混合精度训练功能测试开发文档》](./test_train_amp_infer_python.md),完成Linux GPU 混合精度训练功能测试开发。
<a name="2"></a>
# 2. Linux GPU 混合精度训练功能与规范
<a name="2.1"></a>
### 2.1 开发流程
Paddle 混合精度训练开发可以分为4个步骤,如下图所示。
<div align="center">
<img src="../images/train_amp_guide.png" width="800">
</div>
更多的介绍可以参考:[Linux GPU 混合精度训练功能开发文档](./train_amp_infer_python.md)
<a name="2.2"></a>
### 2.2 核验点
#### 2.2.1 准备混合精度训练环境
* 混合精度训练的加速依赖于NVIDIA显卡的Tensor Core,目前Tensor Core仅支持Compute Capability在7.0及其以上的显卡,因此在开发混合精度训练之前,需要首先检查显卡是否支持混合精度训练。具体地,进入python环境,执行如下命令:
```
>>> import paddle
>>> paddle.device.cuda.get_device_capability()
```
打印出`(7, 0)`或者以上版本的内容,即可认为该环境满足混合精度训练的环境要求。
#### 2.2.2 验证混合精度训练正确开启
* 开启混合精度后,可以通过开启`GLOG_v=5`查看Op的执行是否满足预期,默认情况下`matmul``conv2d`均应执行在FP16下。可以查看日志,确保上述op执行了FP16 kernel。
<a name="3"></a>
# 3. Linux GPU 混合精度训练功能测试与规范
coming soon!
# 论文复现赛指南-推荐方向
> 本文为针对 `推荐` 方向的复现赛指南
>
> 如果希望查阅 `CV` 方向的复现赛指南,可以参考:[CV方向论文复现赛指南](./ArticleReproduction_CV.md)
>
> 如果希望查阅 `NLP` 方向的复现赛指南,可以参考:[NLP方向论文复现赛指南](./ArticleReproduction_NLP.md)
## 目录
- [1. 总览](#1)
- [1.1 背景](#1.1)
- [1.2 前序工作](#1.2)
- [2. 整体框图](#2)
- [3. 论文复现理论知识](#3)
- [4. 论文复现注意事项与FAQ](#4)
- [4.1 通用注意事项](#4.0)
- [4.2 TIPC基础链条测试接入](#4.1)
<a name="1"></a>
## 1. 总览
<a name="1.1"></a>
### 1.1 背景
* 以深度学习为核心的人工智能技术仍在高速发展,通过论文复现,开发者可以获得
* 学习成长:自我能力提升
* 技术积累:对科研或工作有所帮助和启发
* 社区荣誉:成果被开发者广泛使用
<a name="1.2"></a>
### 1.2 前序工作
基于本指南复现论文过程中,建议开发者准备以下内容。
* 熟悉paddle
* 文档和API
* 80%以上的API在功能上与pytorch相同
* [PaddlePaddle文档链接](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/index_cn.html)
* [Pytorch-Paddlepaddle API映射表](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/08_api_mapping/pytorch_api_mapping_cn.html)
* [10分钟快速上手飞浆](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/01_quick_start_cn.html)
* 数据处理[DataLoader](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/io/DataLoader_cn.html)
* 了解该数据格式。以Criteo数据集为例,该数据包含了13个连续特征和26个离散特征;还有一个标签,点击用1表示,未点击用0表示。
* 准备好训练/验证数据集,用于模型训练与评估
* 准备好fake input data以及label,与模型输入shape、type等保持一致,用于后续模型前向对齐。
* 在对齐模型前向过程中,我们不需要考虑数据集模块等其他模块,此时使用fake data是将模型结构和数据部分解耦非常合适的一种方式。
* 将fake data以文件的形式存储下来,也可以保证PaddlePaddle与参考代码的模型结构输入是完全一致的,更便于排查问题。
* 在该步骤中,以AlexNet为例,生成fake data的脚本可以参考:[gen_fake_data.py](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/fake_data/gen_fake_data.py)
* 在特定设备(CPU/GPU)上,跑通参考代码的预测过程(前向)以及至少2轮(iteration)迭代过程,保证后续基于PaddlePaddle复现论文过程中可对比。
* 在复现的过程中,只需要将PaddlePaddle的复现代码以及打卡日志上传至github,不能在其中添加参考代码的实现,在验收通过之后,需要删除打卡日志。建议在初期复现的时候,就将复现代码与参考代码分成2个文件夹进行管理。
* 飞桨训推一体认证 (Training and Inference Pipeline Certification, TIPC) 是一个针对飞桨模型的测试工具,方便用户查阅每种模型的训练推理部署打通情况,并可以进行一键测试。论文训练对齐之后,需要为代码接入TIPC基础链条测试文档与代码,关于TIPC基础链条测试接入规范的文档可以参考:[链接](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md)。更多内容在`4.2`章节部分也会详细说明。
<a name="2"></a>
## 2. 整体框图
可参考[cv部分](https://github.com/PaddlePaddle/models/blob/tipc/docs/lwfx/ThesisReproduction_CV.md)
<a name="3"></a>
## 3. 论文复现理论知识
可参考[cv部分](https://github.com/PaddlePaddle/models/blob/tipc/docs/lwfx/ThesisReproduction_CV.md)
<a name="4"></a>
## 4. 论文复现注意事项与FAQ
本部分主要总结大家在论文复现赛过程中遇到的问题,如果本章内容没有能够解决你的问题,欢迎给该文档提出优化建议或者给Paddle提[ISSUE](https://github.com/PaddlePaddle/Paddle/issues/new/choose)
<a name="4.0"></a>
### 4.1 通用注意事项
* 常见问题和误区
* 不要主动调参,目的是复现而不是提升精度
* 不要加论文中没提到的模型结构
* 数据和指标先行对齐
* 数据集获取
* PaddleRec提供了大量推荐数据集,可优先从[这里查找](https://github.com/PaddlePaddle/PaddleRec/tree/master/datasets)
<a name="4.1"></a>
### 4.2 TIPC基础链条接入
**【基本流程】**
* 完成模型的训练、导出inference、基于PaddleInference的推理过程的文档与代码。参考链接:
* [insightface训练预测使用文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/README_cn.md)
* [PaddleInference使用文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/inference_cn.html)
* [PaddleRecInference使用文档](https://github.com/PaddlePaddle/PaddleRec/blob/master/doc/inference.md)
* 基于[TIPC基础链条测试接入规范](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md),完成该模型的TIPC基础链条开发以及测试文档/脚本,目录为`test_tipc`,测试脚本名称为`test_train_inference_python.sh`,该任务中只需要完成`少量数据训练模型,少量数据预测`的模式即可,用于测试TIPC流程的模型和少量数据需要放在当前repo中。
**【注意事项】**
* 基础链条测试接入时,只需要验证`少量数据训练模型,少量数据预测`的模式,只需要在Linux下验证通过即可。
* 在文档中需要给出一键测试的脚本与使用说明。
* 接入TIPC功能是需安装[特定版本paddle](https://paddleinference.paddlepaddle.org.cn/master/user_guides/download_lib.html#python)
**【实战】**
TIPC基础链条测试接入用例可以参考:[PaddlRec TIPC基础链条测试开发文档](https://github.com/PaddlePaddle/PaddleRec/tree/master/test_tipc), [InsightFace-paddle TIPC基础链条测试开发文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/test_tipc/readme.md)
**【验收】**
* TIPC基础链条测试文档清晰,`test_train_inference_python.sh`脚本可以成功执行并返回正确结果。
......@@ -17,9 +17,9 @@
## 1. 简介
该系列文档主要介绍飞桨模型基于 Linux GPU/CPU 基础训练推理开发过程,主要包含个步骤。
该系列文档主要介绍飞桨模型基于 Linux GPU/CPU 基础训练推理开发过程,主要包含3个步骤。
- 步骤一:参考 [《模型复现指南》](../../lwfx/ArticleReproduction_CV.md),完成模型的训练与基于训练引擎的预测程序开发。
- 步骤一:参考 [《模型复现指南》](../../article-implementation/ArticleReproduction_CV.md),完成模型的训练与基于训练引擎的预测程序开发。
- 步骤二:参考[《Linux GPU/CPU 模型推理开发文档》](./infer_python.md),在基于训练引擎预测的基础上,完成基于Paddle Inference的推理程序开发。
......@@ -38,10 +38,10 @@
如果您在模型复现方面经验较少,或者复现过程中遇到问题,希望快速排查问题,强烈建议您按照模型复现指南进行操作。以CV任务为例,复现指南将模型复现分为13个步骤,如下所示。
<div align="center">
<img src="../../lwfx/images/framework_reprodcv.png" width="800">
<img src="../../article-implementation/images/framework_reprodcv.png" width="800">
</div>
更多内容请参考:[模型复现指南](../../lwfx/ArticleReproduction_CV.md)
更多内容请参考:[模型复现指南](../../article-implementation/ArticleReproduction_CV.md)
<a name="2.2"></a>
......@@ -53,7 +53,7 @@
**【参考】**
* [模型复现指南](../../lwfx/ArticleReproduction_CV.md)`3.2`章节。
* [模型复现指南](../../article-implementation/ArticleReproduction_CV.md)`3.2`章节。
**【要求】**
......@@ -64,7 +64,7 @@ repo中包含`lite_data`小数据集压缩包,解压之后可以获取`lite_da
**【参考】**
* [模型复现指南](../../lwfx/ArticleReproduction_CV.md)中第`3`章节。
* [模型复现指南](../../article-implementation/ArticleReproduction_CV.md)中第`3`章节。
**【要求】**
......@@ -76,7 +76,7 @@ repo中包含`lite_data`小数据集压缩包,解压之后可以获取`lite_da
**【参考】**
[模型复现指南](../../lwfx/ArticleReproduction_CV.md)`3.12`章节。
[模型复现指南](../../article-implementation/ArticleReproduction_CV.md)`3.12`章节。
**【要求】**
......@@ -90,7 +90,7 @@ repo中包含`lite_data`小数据集压缩包,解压之后可以获取`lite_da
**【参考】**
* [模型复现指南](../../lwfx/ArticleReproduction_CV.md)`3.13`章节。
* [模型复现指南](../../article-implementation/ArticleReproduction_CV.md)`3.13`章节。
**【要求】**
......@@ -120,7 +120,7 @@ repo中包含`lite_data`小数据集压缩包,解压之后可以获取`lite_da
<img src="./images/py_inference_pipeline.png" width="800">
</div>
更多的介绍可以参考:[模型推理开发规范](./inference.md)
更多的介绍可以参考:[模型推理开发文档](./infer_python.md)
<a name="3.2"></a>
......@@ -148,7 +148,7 @@ repo中包含`lite_data`小数据集压缩包,解压之后可以获取`lite_da
<img src="./images/test_linux_train_infer_python_pipeline.png" width="400">
</div>
更多的介绍可以参考:[Linux GPU/CPU 基础训练推理测试开发规范](./test_linux_train_infer_python.md)
更多的介绍可以参考:[Linux GPU/CPU 基础训练推理测试开发规范](./test_train_infer_python.md)
<a name="4.2"></a>
......
......@@ -43,7 +43,7 @@ Paddle Inference 是飞桨的原生推理库, 作用于服务器端和云端
基于Paddle Inference的推理过程可以分为9个步骤,如下图所示。
<div align="center">
<img src="./images/py_inference_pipeline.png" width="600">
<img src="../images/inference_guide.png" width="600">
</div>
其中设置了3个核验点,分别为
......
......@@ -3,9 +3,57 @@
# 目录
- [1. 简介](#1)
- [2. Linux GPU/CPU 量化训练功能开发文档](#2)
- [2. Linux GPU/CPU PACT量化训练功能开发规范](#2)
- [2.1 开发流程](#2.1)
- [2.2 核验点](#2.2)
- [3. Linux GPU/CPU 量化训练测试开发与规范](#3)
- [3. Linux GPU/CPU PACT量化训练测试开发与规范](#3)
- [3.1 开发流程](#3.1)
- [3.2 核验点](#3.2)
<a name="1"></a>
## 1. 简介
该系列文档主要介绍 Linux GPU/CPU PACT量化训练开发过程,主要包含2个步骤。
- 步骤一:参考[《Linux GPU/CPU PACT量化训练功能开发文档》](./train_pact_infer_python.md),完成Linux GPU/CPU PACT量化训练功能开发。
- 步骤二:参考[《Linux GPU/CPU PACT量化训练测试开发文档》](./test_train_pact_infer_python.md),完成Linux GPU/CPU PACT量化训练测试开发。
<a name="2"></a>
# 2. Linux GPU/CPU PACT量化训练功能开发规范
<a name="2.1"></a>
### 2.1 开发流程
Linux GPU/CPU PACT量化训练功能开发过程可以分为下面5个步骤。
<div align="center">
<img src="../images/quant_aware_training_guide.png" width="800">
</div>
更多的介绍可以参考:[Linux GPU/CPU PACT量化训练功能开发文档](././train_pact_infer_python.md)
<a name="2.2"></a>
### 2.2 核验点
#### 2.2.1 准备待量化模型
* 需要定义继承自`paddle.nn.Layer`的网络模型,该模型与Linux GPU/CPU基础训练过程一致。定义完成之后,建议加载预训练模型权重,加速量化收敛。
#### 2.2.2 验证推理结果正确性
* 使用Paddle Inference库测试离线量化模型,确保模型精度符合预期。对于CV任务来说,PACT在线量化之后的精度基本无损。
<a name="3"></a>
# 3. Linux GPU/CPU PACT量化训练测试开发与规范
coming soon!
......@@ -6,8 +6,9 @@
- [2. 量化训练功能开发](#2)
- [2.1 准备数据和环境](#2.1)
- [2.2 准备待量化模型](#2.2)
- [2.3 开始量化训练及保存模型](#2.3)
- [2.4 验证推理结果正确性](#2.4)
- [2.3 准备量化训练代码](#2.3)
- [2.4 开始量化训练及保存模型](#2.4)
- [2.5 验证推理结果正确性](#2.5)
- [3. FAQ](#3)
- [3.1 通用问题](#3.1)
......@@ -24,7 +25,7 @@ Paddle 量化训练(Quant-aware Training, QAT)是指在训练过程中对模
## 2. 量化训练功能开发
Paddle 混合精度训练开发可以分为4个步骤,如下图所示。
Linux GPU/CPU PACT量化训练功能开发可以分为5个步骤,如下图所示。
<div align="center">
<img src="../images/quant_aware_training_guide.png" width="600">
......@@ -77,7 +78,19 @@ fp32_model = mobilenet_v3_small()
<a name="2.3"></a>
### 2.3 开始量化训练及保存模型
### 2.3 准备量化训练代码
**【基本流程】**
PACT在线量化训练开发之前,要求首先有Linux GPU/CPU基础训练的代码并可以正常训练与收敛。
**【实战】**
参考MobileNetV3_small的训练过程说明文档:[链接](https://github.com/PaddlePaddle/models/blob/release%2F2.2/tutorials/mobilenetv3_prod/Step6/README.md#41-%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83)
<a name="2.4"></a>
### 2.4 开始量化训练及保存模型
**【基本流程】**
......@@ -128,9 +141,9 @@ quanter.save_quantized_model(net, 'save_dir', input_spec=[paddle.static.InputSpe
量化训练配置、训练及保存量化模型请参考[MobileNetv3量化训练文档](https://github.com/PaddlePaddle/models/tree/release/2.2/tutorials/mobilenetv3_prod/Step6/docs/train_pact_infer_python.md)
<a name="2.4"></a>
<a name="2.5"></a>
### 2.4 验证推理结果正确性
### 2.5 验证推理结果正确性
**【基本流程】**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册