Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Serving
提交
f59c5017
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看板
提交
f59c5017
编写于
5月 06, 2022
作者:
T
TeslaZhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update doc
上级
ed943208
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
68 addition
and
32 deletion
+68
-32
doc/Offical_Docs/12-0_FAQ_CN.md
doc/Offical_Docs/12-0_FAQ_CN.md
+45
-27
doc/Offical_Docs/3-1_QuickStart_Cpp_Resnet_CN.md
doc/Offical_Docs/3-1_QuickStart_Cpp_Resnet_CN.md
+22
-3
doc/Offical_Docs/7-1_Python_Pipeline_Design_CN.md
doc/Offical_Docs/7-1_Python_Pipeline_Design_CN.md
+1
-2
未找到文件。
doc/Offical_Docs/12-0_FAQ_CN.md
浏览文件 @
f59c5017
# FAQ
# 常见问题与解答
常见问题解答分为8大类问题:
-
[
版本升级问题
](
#1
)
-
[
基础知识
](
#2
)
-
[
安装问题
](
#3
)
-
[
编译问题
](
#4
)
-
[
环境问题
](
#5
)
-
[
部署问题
](
#6
)
-
[
预测问题
](
#7
)
-
[
日志排查
](
#8
)
<a
name=
"1"
></a>
## 版本升级问题
...
...
@@ -8,15 +20,17 @@ Failed to predict: (data_id=1 log_id=0) [det|0] Failed to postprocess: postproce
```
**A:**
在服务端程序(例如 web_service.py)的postprocess函数定义中增加参数data_id,改为 def postprocess(self, input_dicts, fetch_dict,
**data_id**
, log_id) 即可。
<a
name=
"2"
></a>
## 基础知识
#### Q: Paddle Serving 、Paddle Inference、PaddleHub Serving 三者的区别及联系?
**A:**
Paddle Serving 是远程服务,即发起预测的设备(手机、浏览器、客户端等)与实际预测的硬件不在一起。 paddle inference 是一个 library,适合嵌入到一个大系统中保证预测效率,Paddle Serving 调用 paddle inference 做远程服务。paddlehub serving 可以认为是一个示例,都会使用 Paddle Serving 作为统一预测服务入口。如果在 web 端交互,一般是调用远程服务的形式,可以使用 Paddle Serving 的 web service 搭建。
#### Q: Paddle Serving
是否支持Int32支持
#### Q: Paddle Serving
支持哪些数据类型?
**A:**
在 protobuf 定义中
`feed_type`
和
`fetch_type`
编号与数据类型对应如下,完整信息可参考
[
保存用于
Paddle Serving 部署的模型参数
](
5-1_Save_Model_Params_CN.md
)
**A:**
在 protobuf 定义中
`feed_type`
和
`fetch_type`
编号与数据类型对应如下,完整信息可参考
[
保存用于
Serving 部署的模型参数
](
./
5-1_Save_Model_Params_CN.md
)
| 类型 | 类型值 |
|------|------|
...
...
@@ -33,9 +47,9 @@ Failed to predict: (data_id=1 log_id=0) [det|0] Failed to postprocess: postproce
| complex64 | 10
| complex128 | 11 |
#### Q: Paddle Serving 是否支持 Windows 和 Linux
环境下
部署?
#### Q: Paddle Serving 是否支持 Windows 和 Linux
原生环境
部署?
**A:**
安装
`Linux Docker`
,在 Docker 中部署 Paddle Serving
**A:**
安装
`Linux Docker`
,在 Docker 中部署 Paddle Serving
,参考
[
安装指南
](
./2-0_Index_CN.md
)
#### Q: Paddle Serving 如何修改消息大小限制
...
...
@@ -49,6 +63,8 @@ Failed to predict: (data_id=1 log_id=0) [det|0] Failed to postprocess: postproce
**A:**
支持 HTTP、gRPC 和 bRPC 协议。其中 HTTP 协议既支持 HTTP + Json 格式,同时支持 HTTP + proto 格式。
<a
name=
"3"
></a>
## 安装问题
#### Q: `pip install` 安装 `python wheel` 过程中,报错信息如何修复?
...
...
@@ -88,7 +104,7 @@ Collecting opencv-python
**A:**
指定
`opencv-python`
安装版本4.2.0.32,运行
`pip3 install opencv-python==4.2.0.32`
#### Q: pip3 install wh
EEl包过程报错
信息如下:
#### Q: pip3 install wh
eel包过程报错,详细
信息如下:
```
Complete output from command python setup.py egg_info:
...
...
@@ -106,7 +122,7 @@ pip3 install --upgrade pip
pip3 install --upgrade setuptools
```
#### Q: 运行过程中
报错
,信息如下:
#### Q: 运行过程中
出现 `No module named xxx` 错误
,信息如下:
```
Traceback (most recent call last):
...
...
@@ -119,7 +135,7 @@ Traceback (most recent call last):
ImportError: No module named shapely.geometry
```
**A:**
有2种方法,第一种通过 pip3 安装shapely,第二种通过 pip3 安装所有依赖组件。
**A:**
有2种方法,第一种通过 pip3 安装shapely,第二种通过 pip3 安装所有依赖组件
[
requirements.txt
](
https://github.com/PaddlePaddle/Serving/blob/develop/python/requirements.txt
)
。
```
方法1:
...
...
@@ -129,11 +145,13 @@ pip3 install shapely==1.7.0
pip3 install -r python/requirements.txt
```
<a
name=
"4"
></a>
## 编译问题
#### Q: 如何使用自己编译的 Paddle Serving 进行预测?
**A:**
通过 pip3 命令安装自己编译出的 wheel 包,并设置环境变量
`export SERVING_BIN=serving二进制文件完全路径`
。
**A:**
编译 Paddle Serving 请阅读
[
编译 Serving
](
https://github.com/PaddlePaddle/Serving/blob/v0.8.3/doc/Compile_CN.md
)
。
#### Q: 使用 Java 客户端,mvn compile 过程出现 "No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?" 错误
...
...
@@ -151,13 +169,15 @@ Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
```
**A:**
运行命令安装 libbz2:
`apt install libbz2-dev`
**A:**
Ubuntu 系统运行命令安装 libbz2:
`apt install libbz2-dev`
,
<a
name=
"5"
></a>
## 环境问题
#### Q:使用过程中出现 CXXABI 错误。
这个问题出现的原因是
Python 使用的 gcc 版本和 Serving 编译的 gcc 版本对不上
。对于 Docker 用户,推荐使用
[
Docker容器
](
https://github.com/PaddlePaddle/Serving/blob/develop/doc/Docker_Images_CN.md
)
,由于 Docker 容器内的 Python 版本与 Serving 在发布前都做过适配,这样就不会出现类似的错误。如果是其他开发环境,首先需要确保开发环境中具备 GCC 8.2,如果没有 GCC 8.2,参考安装方式
这个问题出现的原因是
编译 Python 使用的 GCC 版本和编译 Serving 的 GCC 版本不一致
。对于 Docker 用户,推荐使用
[
Docker容器
](
https://github.com/PaddlePaddle/Serving/blob/develop/doc/Docker_Images_CN.md
)
,由于 Docker 容器内的 Python 版本与 Serving 在发布前都做过适配,这样就不会出现类似的错误。如果是其他开发环境,首先需要确保开发环境中具备 GCC 8.2,如果没有 GCC 8.2,参考安装方式
```
bash
wget
-q
https://paddle-ci.gz.bcebos.com/gcc-8.2.0.tar.xz
...
...
@@ -175,7 +195,7 @@ ln -s /usr/local/gcc-8.2/lib64/libstdc++.so.6 ${lib_so_6} && \
cp
/usr/local/gcc-8.2/lib64/libstdc++.so.6.0.25
${
lib_path
}
```
如果已有 GCC 8.2,可以自行安装 Python,此外我们也提供了 GCC 8.2 编译的
[
Python3.6
](
https://paddle-serving.bj.bcebos.com/others/Python3.6.10-gcc82.tar
)
。下载解压后,需要将对应的目录设置为
`PYTHONROOT`
,并设置
`PATH`
和
`LD_LIBRARY_PATH`
。
推荐使用 GCC 8.2 预编译的
[
Python3.6
](
https://paddle-serving.bj.bcebos.com/others/Python3.6.10-gcc82.tar
)
包
。下载解压后,需要将对应的目录设置为
`PYTHONROOT`
,并设置
`PATH`
和
`LD_LIBRARY_PATH`
。
```
bash
export
PYTHONROOT
=
/path/of/python
# 对应解压后的Python目录
...
...
@@ -217,6 +237,8 @@ wget https://paddle-serving.bj.bcebos.com/others/centos_ssl.tar && \
(3) CUDA 10.1及更高版本需要 TensorRT。安装 TensorRT 相关文件的脚本参考
[
install_trt.sh
](
../tools/dockerfiles/build_scripts/install_trt.sh
)
.
<a
name=
"6"
></a>
## 部署问题
#### Q: GPU 环境运行 Serving 报错,GPU count is: 0。
...
...
@@ -249,10 +271,6 @@ InvalidArgumentError: Device id must be less than GPU count, but received id is:
**A:**
支持 CentOS 和 Ubuntu 环境镜像 ,完整列表查阅
[
这里
](
https://github.com/PaddlePaddle/Serving/blob/develop/doc/Docker_Images_CN.md
)
#### Q: python 编译的 GCC 版本与 Serving 的版本不匹配
**A:**
: 1) 使用GPU Dockers,
[
这里是Docker镜像列表
](
https://github.com/PaddlePaddle/Serving/blob/develop/doc/Docker_Images_CN.md
)
解决环境问题;2) 修改 anaconda 的虚拟环境下安装的 python 的 GCC
[
改变python的GCC编译环境
](
https://www.jianshu.com/p/c498b3d86f77
)
#### Q: Paddle Serving 是否支持本地离线安装
**A:**
支持离线部署,需要把一些相关的
[
依赖包
](
https://github.com/PaddlePaddle/Serving/blob/develop/doc/Compile_CN.md
)
提前准备安装好
...
...
@@ -260,6 +278,8 @@ InvalidArgumentError: Device id must be less than GPU count, but received id is:
#### Q: Docker 中启动 Server IP地址 127.0.0.1 与 0.0.0.0 差异
**A:**
必须将容器的主进程设置为绑定到特殊的
`0.0.0.0`
表示“所有接口”地址,否则它将无法从容器外部访问。在 Docker 中
`127.0.0.1`
仅代表“这个容器”,而不是“这台机器”。如果您从容器建立到
`127.0.0.1`
的出站连接,它将返回到同一个容器;如果您将服务器绑定到
`127.0.0.1`
,接收不到来自外部的连接。
<a
name=
"7"
></a>
## 预测问题
#### Q: 使用 GPU 第一次预测时特别慢,如何调整 RPC 服务的等待时间避免超时?
...
...
@@ -276,11 +296,6 @@ client.load_client_config(sys.argv[1])
client.set_rpc_timeout_ms(100000)
client.connect(["127.0.0.1:9393"])
```
#### Q: 执行 GPU 预测时遇到 `InvalidArgumentError: Device id must be less than GPU count, but received id is: 0. GPU count is: 0`错误。
**A:**
将显卡驱动对应的
`libcuda.so`
的目录添加到
`LD_LIBRARY_PATH`
环境变量中
#### Q: 执行 GPU 预测时遇到 `ExternalError: Cudnn error, CUDNN_STATUS_BAD_PARAM at (../batch_norm_op.cu:198)`错误
**A:**
将 cuDNN 的 lib64路径添加到
`LD_LIBRARY_PATH`
,安装自
`pypi`
的 Paddle Serving 中
`post9`
版本使用的是
`cuDNN 7.3,post10`
使用的是
`cuDNN 7.5。如果是使用自己编译的 Paddle Serving,可以在 `
log/serving.INFO
` 日志文件中查看对应的 cuDNN 版本。
...
...
@@ -291,7 +306,7 @@ client.connect(["127.0.0.1:9393"])
#### Q: Client 的 `
fetch var
`变量名如何设置
**A:**
可以查看配置文件 `
serving_server_conf.prototxt
`,获取需要的变量名
**A:**
通过[保存用于 Serving 部署的模型参数](https://github.com/PaddlePaddle/Serving/blob/v0.8.3/doc/Save_EN.md) 生成配置文件 `
serving_server_conf.prototxt
`,获取需要的变量名。
#### Q: 如何使用多语言客户端
...
...
@@ -305,6 +320,7 @@ client.connect(["127.0.0.1:9393"])
**A:** 没有安装 TensorRT,安装 TensorRT 请参考链接: https://blog.csdn.net/hesongzefairy/article/details/105343525
<a name="8"></a>
## 日志排查
...
...
@@ -314,18 +330,20 @@ client.connect(["127.0.0.1:9393"])
Client 的日志直接打印到标准输出。
通过在部署服务之前 'export GLOG_v=3'可以输出更为详细的日志信息。
#### Q: Paddle Serving 启动成功后,相关的日志在哪里设置
**A:** 1)警告是 `
glog
` 组件打印的,告知 `
glog
` 初始化之前日志打印在 STDERR
#### Q: C++ Serving 启动成功后,日志文件在哪里,在哪里设置日志级别?
2)一般采用 `
GLOG_v
` 方式启动服务同时设置日志级别。
**A:** C++ Serving 服务的所有日志在程序运行的当前目录的`
log/
`目录下,分为 serving.INFO、serving.WARNING 和 serving.ERROR 文件。
1)警告是 `
glog
` 组件打印的,告知 `
glog
` 初始化之前日志打印在 STDERR;
2)一般采用 `
GLOG_v
` 方式启动服务同时设置日志级别。
例如:
```
GLOG_v=2 python -m paddle_serving_server.serve --model xxx_conf/ --port 9999
```
#### Q: Python Pipeline 启动成功后,日志文件在哪里,在哪里设置日志级别?
**A:** Python Pipeline 服务的日志信息请阅读[Python Pipeline 设计](./7-1_Python_Pipeline_Design_CN.md) 第三节服务日志。
#### Q: (GLOG_v=2下)Server 日志一切正常,但 Client 始终得不到正确的预测结果
...
...
doc/Offical_Docs/3-1_QuickStart_Cpp_Resnet_CN.md
浏览文件 @
f59c5017
# C++ Serving 快速部署案例
-
[
模型介绍
](
#1
)
-
[
部署步骤
](
#2
)
-
[
2.1 保存模型
](
#2.1
)
-
[
2.2 保存 Serving 部署的模型参数
](
#2.2
)
-
[
2.3 启动服务
](
#2.3
)
-
[
2.4 启动客户端
](
#2.4
)
<a
name=
"1"
></a>
## 模型介绍
残差网络(ResNet)于2015年被提出,摘得 ImageNet 榜单5项第一,成绩大幅领先第二名,是 CNN 图像史上的一个里程碑。
...
...
@@ -7,6 +16,8 @@
ResNet 网络是参考了 VGG19 网络,加入残差单元,ResNet50 有50层网络。
<a
name=
"2"
></a>
## 部署步骤
前提条件是你已完成
[
环境安装
](
)步骤,并已验证环境安装成功,此处不在赘述。
...
...
@@ -22,6 +33,8 @@ git clone https://github.com/PaddlePaddle/Serving
-
三.启动服务
-
四.启动客户端
<a
name=
"2.1"
></a>
**一.获取模型**
下载
`ResNet50_vd`
的 推理模型
...
...
@@ -30,6 +43,8 @@ wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/inference/ResNet5
```
<a
name=
"2.2"
></a>
**二.保存 Serving 部署的模型参数**
用
`paddle_serving_client`
把下载的推理模型转换成易于 Serving 部署的模型格式,完整信息请参考
[
保存用于 Serving 部署的模型参数
](
./5-1_Save_Model_Params_CN.md
)
。
...
...
@@ -42,7 +57,7 @@ python3 -m paddle_serving_client.convert --dirname ./ResNet50_vd_infer/ \
--serving_client ./ResNet50_vd_client/
```
保存参数后,会在当前文件夹多出
`ResNet50_vd_serving`
和
`ResNet50_vd_client`
的文件夹
:
保存参数后,会在当前文件夹多出
`ResNet50_vd_serving`
和
`ResNet50_vd_client`
的文件夹
,分别用户服务端和客户端。
```
├── daisy.jpg
├── http_client.py
...
...
@@ -63,6 +78,8 @@ python3 -m paddle_serving_client.convert --dirname ./ResNet50_vd_infer/ \
├── rpc_client.py
```
<a
name=
"2.3"
></a>
**三.启动服务**
C++ Serving 服务可以指定一个网络端口同时接收 HTTP、gRPC 和 bRPC 请求。命令参数
`--model`
指定模型路径,
`--gpu_ids`
指定 GPU 卡,
`--port`
指定端口。
...
...
@@ -71,15 +88,17 @@ C++ Serving 服务可以指定一个网络端口同时接收 HTTP、gRPC 和 bRP
python3 -m paddle_serving_server.serve --model ResNet50_vd_serving --gpu_ids 0 --port 9394
```
<a
name=
"2.4"
></a>
**四.启动客户端**
PYTHON 程序
`http_client.py`
封装了 HTTP 请求客户端,运行以下命令:
HTTP 客户端程序
`http_client.py`
创建请求参数,向服务端发起 HTTP 请求。
```
python3 http_client.py
```
PYTHON 程序
`rpc_client.py`
封装了 gRPC 请求客户端,运行以下命令:
RPC 客户端程序
`rpc_client.py`
创建请求参数,向服务端发起 gRPC 请求。
```
python3 rpc_client.py
...
...
doc/Offical_Docs/7-1_Python_Pipeline_Design_CN.md
浏览文件 @
f59c5017
...
...
@@ -138,8 +138,7 @@ Channel的设计原则:
</div>
**三. 服务日志**
**三.服务日志**
Pipeline 服务日志在当前目录的
`PipelineServingLogs`
目录下,有3种类型日志,分别是
`pipeline.log`
、
`pipeline.log.wf`
、
`pipeline.tracer`
。
-
`pipeline.log`
: 记录 debug & info日志信息
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录