Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Serving
提交
aff56c53
S
Serving
项目概览
PaddlePaddle
/
Serving
大约 1 年 前同步成功
通知
186
Star
833
Fork
253
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
105
列表
看板
标记
里程碑
合并请求
10
Wiki
2
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Serving
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
105
Issue
105
列表
看板
标记
里程碑
合并请求
10
合并请求
10
Pages
分析
分析
仓库分析
DevOps
Wiki
2
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
aff56c53
编写于
2月 22, 2022
作者:
T
TeslaZhao
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' of
https://github.com/TeslaZhao/Serving
into develop
上级
4b6cc8d1
ad3e820d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
88 addition
and
41 deletion
+88
-41
doc/Check_Env_CN.md
doc/Check_Env_CN.md
+22
-0
doc/TensorRT_Dynamic_Shape_CN.md
doc/TensorRT_Dynamic_Shape_CN.md
+66
-41
未找到文件。
doc/Check_Env_CN.md
0 → 100644
浏览文件 @
aff56c53
# Paddle Serving 环境检查功能介绍
## 概览
Paddle Serving 提供了一键运行示例,检查 Paddle Serving 环境是否安装正确。
## 启动方式
```
python3 -m paddle_serving_server.serve check
```
|命令|描述|
|---------|----|
|check_all|检查 Paddle Inference、Pipeline Serving、C++ Serving。只打印检测结果,不记录日志|
|check_pipeline|检查 Pipeline Serving,只打印检测结果,不记录日志|
|check_cpp|检查 C++ Serving,只打印检测结果,不记录日志|
|check_inference|检查 Paddle Inference 是否安装正确,只打印检测结果,不记录日志|
|debug|发生报错后,该命令将打印提示日志到屏幕,并记录详细日志文件|
|exit|退出|
>> **注意**:<br>
>> 1.当 C++ Serving 启动报错且是自己编译后 pip 安装的paddle_serving_server, 确认是否执行 `export SERVING_BIN` 导入`SERVING_BIN`真实路径。<br>
>> 2.可以通过 `export SERVING_LOG_PATH` 指定`debug`命令生成log的路径,默认是在当前路径下记录日志。
doc/TensorRT_Dynamic_Shape_CN.md
浏览文件 @
aff56c53
# 如何
配置TensorRT动态
shape
# 如何
开启 TensorRT 并配置动态
shape
(简体中文|
[
English
](
./TensorRT_Dynamic_Shape_EN.md
)
)
##
引言
##
概览
在Pipeline/C++开启TensorRT
`--use_trt`
后,关于如何进行动态shape的配置,以下会分别给出Pipeline Serving和C++ Serving示例
TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。
以下将分别从 Pipeline Serving 和 C++ Serving 介绍 Tensorrt 开启方式以及配置动态 shape(Dynamic Shape)。
以下是动态shape a
pi
## Paddle Inference Dynamic Shape A
pi
```
void SetTRTDynamicShapeInfo(
std::map<std::string, std::vector<int>> min_input_shape,
...
...
@@ -15,7 +16,23 @@
```
具体API说明请参考
[
C++
](
https://paddleinference.paddlepaddle.org.cn/api_reference/cxx_api_doc/Config/GPUConfig.html#tensorrt
)
/
[
Python
](
https://paddleinference.paddlepaddle.org.cn/api_reference/python_api_doc/Config/GPUConfig.html#tensorrt
)
### C++ Serving
## C++ Serving
**一. C++ Serving Tensorrt 开启方式**
在 C++ Serving 启动命令加上
`--use_trt`
```
python -m paddle_serving_server.serve \
--model serving_server \
--thread 2 --port 9000 \
--gpu_ids 0 \
--use_trt \
--precision FP16
```
**二. C++ Serving 设置动态 shape**
在
`**/paddle_inference/paddle/include/paddle_engine.h`
修改如下代码
```
...
...
@@ -111,44 +128,52 @@
```
##
#
Pipeline Serving
## Pipeline Serving
在
`**/python/paddle_serving_app/local_predict.py`
中修改如下代码
**一. Pipeline Serving Tensorrt 开启方式**
在示例目录下的 config.yml 文件, 修改
`device_type: 2`
, 配置 GPU 使用的核心
`devices: "0,1,2,3"`
>> **注意**: Tensorrt 需要配合 GPU 使用
**二. Pipeline Serving 设置动态 shape**
在示例目录下的 web_service.py, 在每个 op 下可以通过
`def set_dynamic_shape_info(self):`
添加动态 shape 相关的配置
示例如下
```
if use_trt:
config.enable_tensorrt_engine(
precision_mode=precision_type,
workspace_size=1 << 20,
max_batch_size=32,
min_subgraph_size=3,
use_static=False,
use_calib_mode=False)
head_number = 12
names = [
"placeholder_0", "placeholder_1", "placeholder_2", "stack_0.tmp_0"
]
min_input_shape = [1, 1, 1]
max_input_shape = [100, 128, 1]
opt_input_shape = [10, 60, 1]
config.set_trt_dynamic_shape_info(
{
names[0]: min_input_shape,
names[1]: min_input_shape,
names[2]: min_input_shape,
names[3]: [1, head_number, 1, 1]
}, {
names[0]: max_input_shape,
names[1]: max_input_shape,
names[2]: max_input_shape,
names[3]: [100, head_number, 128, 128]
}, {
names[0]: opt_input_shape,
names[1]: opt_input_shape,
names[2]: opt_input_shape,
names[3]: [10, head_number, 60, 60]
})
def set_dynamic_shape_info(self):
min_input_shape = {
"x": [1, 3, 50, 50],
"conv2d_182.tmp_0": [1, 1, 20, 20],
"nearest_interp_v2_2.tmp_0": [1, 1, 20, 20],
"nearest_interp_v2_3.tmp_0": [1, 1, 20, 20],
"nearest_interp_v2_4.tmp_0": [1, 1, 20, 20],
"nearest_interp_v2_5.tmp_0": [1, 1, 20, 20]
}
max_input_shape = {
"x": [1, 3, 1536, 1536],
"conv2d_182.tmp_0": [20, 200, 960, 960],
"nearest_interp_v2_2.tmp_0": [20, 200, 960, 960],
"nearest_interp_v2_3.tmp_0": [20, 200, 960, 960],
"nearest_interp_v2_4.tmp_0": [20, 200, 960, 960],
"nearest_interp_v2_5.tmp_0": [20, 200, 960, 960],
}
opt_input_shape = {
"x": [1, 3, 960, 960],
"conv2d_182.tmp_0": [3, 96, 240, 240],
"nearest_interp_v2_2.tmp_0": [3, 96, 240, 240],
"nearest_interp_v2_3.tmp_0": [3, 24, 240, 240],
"nearest_interp_v2_4.tmp_0": [3, 24, 240, 240],
"nearest_interp_v2_5.tmp_0": [3, 24, 240, 240],
}
self.dynamic_shape_info = {
"min_input_shape": min_input_shape,
"max_input_shape": max_input_shape,
"opt_input_shape": opt_input_shape,
}
```
具体可以参考
[
Pipeline OCR
](
../examples/Pipeline/PaddleOCR/ocr/
)
>> **注意**: 由于不同的模型具有不同的动态 shape 配置,因此不存在通用的动态 shape 配置方法。当运行 Pipeline Serving
>> 出现报错信息时,应该使用[netron](https://netron.app/) 加载模型,查看各个 op 的输入输出 shape。之后,结合报错信息,在 web_service.py
>> 添加相应的动态 shape 配置代码。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录