diff --git a/README.md b/README.md index 3bf8ca7f9f3cb82e6440a746ebb6eddfa8a96365..f95b58d263e146a42f016706c22ce334cb6d965e 100755 --- a/README.md +++ b/README.md @@ -42,8 +42,9 @@ The goal of Paddle Serving is to provide high-performance, flexible and easy-to- - AIStudio tutorial(Chinese) : [Paddle Serving服务化部署框架](https://www.paddlepaddle.org.cn/tutorials/projectdetail/1975340) - - Video tutorial(Chinese) : [深度学习服务化部署-以互联网应用为例](https://aistudio.baidu.com/aistudio/course/introduce/19084) +- Edge AI solution based on Paddle Serving & Baidu Intelligent Edge(Chinese) : [基于Paddle Serving&百度智能边缘BIE的边缘AI解决方案](https://mp.weixin.qq.com/s/j0EVlQXaZ7qmoz9Fv96Yrw) +

diff --git a/README_CN.md b/README_CN.md index ae94a50e2cecbf9168ece65d5a040d0ca6fd5218..903d357a9a2994935d87fe0516a6d70ebb31e822 100755 --- a/README_CN.md +++ b/README_CN.md @@ -40,8 +40,9 @@ Paddle Serving依托深度学习框架PaddlePaddle旨在帮助深度学习开发

教程

- AIStudio教程-[Paddle Serving服务化部署框架](https://www.paddlepaddle.org.cn/tutorials/projectdetail/1975340) - - 视频教程-[深度学习服务化部署-以互联网应用为例](https://aistudio.baidu.com/aistudio/course/introduce/19084) +- Edge AI solution based on Paddle Serving & Baidu Intelligent Edge(Chinese) : [基于Paddle Serving&百度智能边缘BIE的边缘AI解决方案](https://mp.weixin.qq.com/s/j0EVlQXaZ7qmoz9Fv96Yrw) +

diff --git a/doc/C++_Serving/Request_Cache_CN.md b/doc/C++_Serving/Request_Cache_CN.md new file mode 100644 index 0000000000000000000000000000000000000000..12322cfa87a41a4c251471ecb1a5d21ce37edd3e --- /dev/null +++ b/doc/C++_Serving/Request_Cache_CN.md @@ -0,0 +1,15 @@ +# Request Cache + +本文主要介绍请求缓存功能及实现原理。 + +服务中请求由张量tensor、结果名称fetch_var_names、调试开关profile_server、标识码log_id组成,预测结果包含输出张量等。这里缓存会保存请求与结果的键值对。当请求命中缓存时,服务不会执行模型预测,而是会直接从缓存中提取结果。对于某些特定场景而言,这能显著降低请求耗时。 + +缓存可以通过设置`--request_cache_size`来开启。该标志默认为0,即不开启缓存。当设置非零值时,服务会以设置大小为存储上限开启缓存。这里设置的内存单位为字节。注意,如果设置`--request_cache_size`为0是不能开启缓存的。 + +缓存中的键为64位整形数,是由请求中的tensor和fetch_var_names数据生成的128位哈希值。如果请求命中,那么对应的处理结果会提取出来用于构建响应数据。如果请求没有命中,服务则会执行模型预测,在返回结果的同时将处理结果放入缓存中。由于缓存设置了存储上限,因此需要淘汰机制来限制缓存容量。当前,服务采用了最近最少使用(LRU)机制用于淘汰缓存数据。 + +## 注意事项 + + - 只有预测成功的请求会进行缓存。如果请求失败或者在预测过程中返回错误,则处理结果不会缓存。 + - 缓存是基于请求数据的哈希值实现。因此,可能会出现两个不同的请求生成了相同的哈希值即哈希碰撞,这时服务可能会返回错误的响应数据。哈希值为64位数据,发生哈希碰撞的可能性较小。 + - 不论使用同步模式还是异步模式,均可以正常使用缓存功能。 diff --git a/doc/Install_CN.md b/doc/Install_CN.md index 8648d26d42a88859e5744badc74629b92f395da1..24dbaba054ad7638d9d50a021e0bb3e29b9ff338 100644 --- a/doc/Install_CN.md +++ b/doc/Install_CN.md @@ -10,7 +10,7 @@ ## 1.启动开发镜像 -**同时支持使用Serving镜像和Paddle镜像,1.1和1.2章节中的操作2选1即可。** +**同时支持使用Serving镜像和Paddle镜像,1.1和1.2章节中的操作2选1即可。** 在Paddle docker镜像上部署Serving服务需要安装额外依赖库,因此,我们直接使用Serving开发镜像。 ### 1.1 Serving开发镜像(CPU/GPU 2选1) **CPU:** ``` diff --git a/doc/Install_EN.md b/doc/Install_EN.md index db4fbe211a50c9a4219d4d4e36c51f54c869fc0b..c687e30bd915a74fb0181a7df306adc9fce5d782 100644 --- a/doc/Install_EN.md +++ b/doc/Install_EN.md @@ -9,7 +9,7 @@ **Tip-2**: The GPU environments in the following examples are all cuda10.2-cudnn7. If you use Python Pipeline to deploy and need Nvidia TensorRT to optimize prediction performance, please refer to [Supported Mirroring Environment and Instructions](#4.-Supported-Docker-Images-and-Instruction) to choose other versions. ## 1. Start the Docker Container -**Both Serving Dev Image and Paddle Dev Image are supported at the same time. You can choose 1 from the operation 2 in chapters 1.1 and 1.2.** +**Both Serving Dev Image and Paddle Dev Image are supported at the same time. You can choose 1 from the operation 2 in chapters 1.1 and 1.2.**Deploying the Serving service on the Paddle docker image requires the installation of additional dependency libraries. Therefore, we directly use the Serving development image. ### 1.1 Serving Dev Images (CPU/GPU 2 choose 1) **CPU:** diff --git a/doc/Run_On_Kubernetes_CN.md b/doc/Run_On_Kubernetes_CN.md index 951fda78dd0c04d2faa7db5b84cfa845235fbaa5..9b676d4aa18d09f8eee7f4b965898e9eb632f967 100644 --- a/doc/Run_On_Kubernetes_CN.md +++ b/doc/Run_On_Kubernetes_CN.md @@ -2,13 +2,13 @@ Paddle Serving在0.6.0版本开始支持在Kubenetes集群上部署,并提供反向代理和安全网关支持。与Paddle Serving在Docker镜像中开发类似,Paddle Serving 模型在Kubenetes集群部署需要制作轻量化的运行镜像,并使用kubectl工具在集群上部署。 -### 集群准备 +### 1.集群准备 如果您还没有Kubenetes集群,我们推荐[购买并使用百度智能云CCE集群](https://cloud.baidu.com/doc/CCE/index.html). 如果是其他云服务商提供的集群,或者自行安装Kubenetes集群,请遵照对应的教程。 您还需要准备一个用于Kubenetes集群部署使用的镜像仓库,通常与云服务提供商绑定,如果您使用的是百度智能云的CCE集群,可以参照[百度智能云CCR镜像仓库使用方式](https://cloud.baidu.com/doc/CCR/index.html)。当然Docker Hub也可以作为镜像仓库,但是可能在部署时会出现下载速度慢的情况。 -### 环境准备 +### 2.环境准备 需要在Kubenetes集群上安装网关工具KONG。 @@ -16,20 +16,20 @@ Paddle Serving在0.6.0版本开始支持在Kubenetes集群上部署,并提供 kubectl apply -f https://bit.ly/kong-ingress-dbless ``` +### 选择Serving开发镜像 (可选) +您可以直接选择已生成的Serving [DOCKER开发镜像列表](./Docker_Images_CN.md)作为Kubernetes部署的首选,携带了开发工具,可用于调试和编译代码。 +### 制作Serving运行镜像(可选) -### 制作Serving运行镜像(可选): +与[DOCKER开发镜像列表](./Docker_Images_CN.md)文档相比,开发镜像用于调试、编译代码,携带了大量的开发工具,因此镜像体积较大。运行镜像通常容器体积更小的轻量级容器,可在边缘端设备上部署。如您不需要轻量级运行容器,请直接跳过这一部分。 -首先您需要确定运行镜像的具体环境。和[DOCKER开发镜像列表](./Docker_Images_CN.md)文档相比,开发镜像用于调试、编译代码,携带了大量的开发工具,因此镜像体积较大。运行镜像通常要求缩小容器体积以提高部署的灵活性。如果您不太需要轻量级的运行容器,请直接跳过这一部分。 - -在`tools/generate_runtime_docker.sh`文件下,它的使用方式如下 +我们提供了运行镜像的生成脚本在Serving代码库下`tools/generate_runtime_docker.sh`文件,通过以下命令可生成代码。 ```bash -bash tools/generate_runtime_docker.sh --env cuda10.1 --python 3.6 --name serving_runtime:cuda10.1-py36 +bash tools/generate_runtime_docker.sh --env cuda10.1 --python 3.7 --image_name serving_runtime:cuda10.1-py37 --paddle 2.2.0 --serving 0.7.0 ``` -会生成 cuda10.1,python 3.6,serving版本0.7.0 还有 paddle版本2.2.0的运行镜像。如果有其他疑问,可以执行下列语句得到帮助信息。 -如果您需要老版本Serving运行镜像,请checkout到老版本分支。 +会生成 cuda10.1,python 3.7,serving版本0.7.0 还有 paddle版本2.2.0的运行镜像。如果有其他疑问,可以执行下列语句得到帮助信息。强烈建议您使用最新的paddle和serving的版本(2个版本是对应的如paddle 2.2.x 与serving 0.7.0对应,paddle 2.1.x 与 serving 0.6.x对应),因为更早的版本上出现的错误只在最新版本修复,无法在历史版本中修复。 ``` bash tools/generate_runtime_docker.sh --help @@ -40,7 +40,7 @@ bash tools/generate_runtime_docker.sh --help - paddle-serving-server, paddle-serving-client,paddle-serving-app,paddlepaddle,具体版本可以在tools/runtime.dockerfile当中查看,同时,如果有定制化的需求,也可以在该文件中进行定制化。 - paddle-serving-server 二进制可执行程序 -也就是说,运行镜像在生成之后,我们只需要将我们运行的代码(如果有)和模型搬运到镜像中就可以。生成后的镜像名为`paddle_serving:cuda10.2-py36` +也就是说,运行镜像在生成之后,我们只需要将我们运行的代码(如果有)和模型搬运到镜像中就可以。生成后的镜像名为`paddle_serving:cuda10.2-py37` ### 添加您的代码和模型 diff --git a/doc/Serving_Configure_CN.md b/doc/Serving_Configure_CN.md index 9564dcbd51f7e280cd19c13f71885c5b9fcc2064..4288970afdc8df87558ad6b8a01f630b94df63c8 100644 --- a/doc/Serving_Configure_CN.md +++ b/doc/Serving_Configure_CN.md @@ -100,6 +100,7 @@ workdir_9393 | `use_calib` | bool | False | Use TRT int8 calibration | | `gpu_multi_stream` | bool | False | EnableGpuMultiStream to get larger QPS | | `use_ascend_cl` | bool | False | Enable for ascend910; Use with use_lite for ascend310 | +| `request_cache_size` | int | `0` | Bytes size of request cache. By default, the cache is disabled | #### 当您的某个模型想使用多张GPU卡部署时. ```BASH diff --git a/doc/Serving_Configure_EN.md b/doc/Serving_Configure_EN.md index 04c4ad18fb54192bad587feff04635f4e7a1e6d7..68c52cffe690d8a97512adef0a4c073ffa23824b 100644 --- a/doc/Serving_Configure_EN.md +++ b/doc/Serving_Configure_EN.md @@ -100,6 +100,7 @@ More flags: | `use_calib` | bool | False | Use TRT int8 calibration | | `gpu_multi_stream` | bool | False | EnableGpuMultiStream to get larger QPS | | `use_ascend_cl` | bool | False | Enable for ascend910; Use with use_lite for ascend310 | +| `request_cache_size` | int | `0` | Bytes size of request cache. By default, the cache is disabled | #### Serving model with multiple gpus. ```BASH diff --git a/doc/images/wechat_group_1.jpeg b/doc/images/wechat_group_1.jpeg index d907bee65143b83107393ba763e194937d72111a..9259862d82879075dd40ca8243a58f049378c887 100644 Binary files a/doc/images/wechat_group_1.jpeg and b/doc/images/wechat_group_1.jpeg differ diff --git a/python/paddle_serving_server/server.py b/python/paddle_serving_server/server.py index e369c57d4d350207d65d048a96eb052db279bd30..45f826470fff16cfab577caa4937dc81de61a2e9 100755 --- a/python/paddle_serving_server/server.py +++ b/python/paddle_serving_server/server.py @@ -599,9 +599,7 @@ class Server(object): "-workflow_path {} " \ "-workflow_file {} " \ "-bthread_concurrency {} " \ - "-max_body_size {} " \ - "-enable_prometheus={} " \ - "-prometheus_port {} ".format( + "-max_body_size {} ".format( self.bin_path, self.workdir, self.infer_service_fn, @@ -616,9 +614,7 @@ class Server(object): self.workdir, self.workflow_fn, self.num_threads, - self.max_body_size, - self.enable_prometheus, - self.prometheus_port) + self.max_body_size) if self.enable_prometheus: command = command + \ "-enable_prometheus={} " \