|一键启动在线推理服务,轻松实现在线部署,这有个「炼丹」利器( 二 )


以上过程可以说是完全 0 代码部署在线推理服务 , 当然这只是最简单的 Paddle Serving 的使用方式 , 其中服务端和客户端之间是使用的 HTTP 协议通信 , 我们可以把这种在线服务称之为 Web 服务 。
如果用户希望使用性能更好的 RPC 通信协议 , 即部署 RPC 在线服务 , 或者需要部署的模型稍微复杂一些 , 需要数据预处理或后处理 , 那么就需要使用下面的进阶部署方案了 。
说到这里 , 有的用户可能就会头疼了 , 不是为别的 , 就是因为刚刚提到的数据处理 。 要知道无论是图像还是自然语言的文本 , 这些数据的处理都需要一定的领域知识 , 可是咱们大部分的用户朋友们可不是图像学或语言学专业毕业的 , 做个数据处理不仅需要学习相关的基础知识 , 还要编写不少代码 。 这样的情况下 , 使用 Paddle Serving 还会很简单完成部署吗?答案是当然可以!不过咱们也实事求是 , 0 代码是不太可能的 , 不过低代码还是没问题的 , 请往下看!
进阶流程—低代码完成带数据处理的在线服务部署
在 CV 和 NLP 领域 , 原始的数据通常要经过复杂的预处理才能转换为模型的直接输入 , 预测结果也需要经过后处理变成更直观的图像或者文字 , 这就咱们常说的数据预处理和后处理 。 这些本不是深度学习开发的核心环节 , 却经常成为开发者们最头疼的步骤 。
为了方便用户使用 Paddle Serving , 飞桨的工程师们开发了内置预处理模块 paddle-serving-app 。 paddle-serving-app 模块集成了许多辅助功能 , 可以帮助用户更快地体验示例推理服务、编写和部署自己的推理服务、分析推理服务中的各阶段耗时、对服务进行调试等 。 paddle-serving-app 的安装方法也很简单仅需要一条命令即可 。
pip install paddle_serving_app
paddle-serving-app 最主要的作用之一就是其内部添加了许多图像(CV)和文本(NLP)的预处理方法 。
对于 CV 任务 , 大部分预处理方法的操作都很相似 。 因此在 paddle-serving-app 中 , 这些预处理操作都被封装成了独立的类 , 然后 paddle-serving-app 提供了 Sequential 类 , Sequential 类可以将各个预处理操作的类串联起来 , 形成不同任务所需要的预处理方法 。 目前提供的预处理步骤包括:File2Image(从文件读取图像)、URL2Image(从链接中读取图像)、Normalize(归一化)、CenterCrop(裁剪)、Resize(尺寸变换)、RGB2BGR(格式转换)、Transpose(通道转换)等方法 。 此外对于图像检测、图像分割等任务 , paddle-serving-app 还提供了 RCNNPostProcess、SegPostProcess 等后处理方法 , 可以将推理结果可视化 。
对于 NLP 任务 , 不同类型的任务所对应的预处理方法会差异很大 , 定制化程度较深 。 因此对于不同的 NLP 任务分别实现了不同数据处理方法 , 分别是中文分词模型预处理 LACReader、中文语义模型预处理 ChineseBertReader 和中文情感分析模型预处理 SentaReader 。
此外 , paddle-serving-app 中内置了多种 NLP 和 CV 领域的示例模型的获取方法 , 用户可以通过执行如下命令即可下载模型文件压缩包 , 其中 model_name 为模型名称 。
python -m paddle_serving_app.package --get_model ${model_name}
因此 Paddle Serving 配合 paddle-serving-app 有如猛虎添翼 , 可以帮助用户轻松完成更加复杂的在线服务部署场景 。
下面我们将通过部署图像分割服务和中文情感分析服务两个示例 , 来为大家讲解如何使用 Paddle Serving 和 paddle-serving-app 模块实现低代码部署 RPC 服务和 Web 服务 。
部署图像分割服务
图像分割通过给出图像中每个像素点的标签 , 将图像划分成若干带类别标签的区块的视觉任务 , 可以看作对每个像素进行分类 。 图像分割是图像处理的重要组成部分 , 也是难点之一 。 随着人工智能的发展 , 图像分割技术已经在交通控制、医疗影像和人脸识别等多个领域得到了广泛的应用 。


推荐阅读