Serverless 架构下 PaddleOCR 项目开发与部署
PaddlePaddle 团队首次开源文字识别模型套件 PaddleOCR,目标是打造丰富、领先、实用的文本识别模型/工具库。该模型套件是一个实用的超轻量 OCR 系统。主要由 DB 文本检测、检测框矫正和 CRNN 文本识别三部分组成。该系统从骨干网络选择和调整、预测头部的设计、数据增强、学习率变换策略、正则化参数选择、预训练模型使用以及模型自动裁剪量化 8 个方面,采用 19 个有效策略,对各个模块的模型进行效果调优和瘦身,最终得到整体大小为 3.5M 的超轻量中英文 OCR 和 2.8M 的英文数字 OCR。
本地开发
根据 PaddleOCR 的项目案例,采用轻量级 Python Web 框架 Bottle 框架进行项目开发:
开发完成之后,运行该项目:
可以看到服务已经启动:
然后通过 Postman 工具进行测试,首先准备一张图片(此处以 PaddleOCR 项目内置的测试图片为例):
通过将图片转换为 Base64 编码,并以 POST 方法请求刚刚启动的 Web 服务,可以看到 PaddleOCR 的执行结果:
部署到 Serverless 架构
部署前准备
首先需要完成 Dockerfile 文件:
编写符合 Serverless Devs 规范的 Yaml 文档:
项目部署
首先构建镜像,此处可以通过 Serverless Devs 进行构建:
构建完成之后,可以通过工具直接进行部署:
部署完成,可以看到系统返回的测试地址:
项目测试
此时,可以通过该测试地址进行测试,同样得到了预期效果:
项目优化
通过对部署在 Serverless 架构上的项目进行请求,可以看到冷启动和热启动的时间消耗:
通过冷启动与热启动的对比,我们可以发现,在热启动时,整个系统的性能是相对优秀的。但是遇到冷启动整个项目的响应时常是不可控的,此时可以考虑一下途径进行优化:
缩减容器镜像的体积,减少不必要的依赖、文件等,清理掉安装依赖时留下的缓存等;因为函数计算的冷启动包括镜像拉取时间;
部分流程进行优化,例如在 PaddleOCR 项目中有明确说明:“paddleocr 会自动下载 ppocr 轻量级模型作为默认模型”,所以这就意味着该项目在 Serverless 架构的冷启动过程中,相对比热启动还增加了一个模型下载和解压的流程,所以这一部分在必要时是可以打入到容器镜像中,进而减少冷启动带来的影响;
开启镜像加速,可以有效降低容器镜像的冷启动,在阿里云函数计算官方文档中有相关镜像加速的性能测试描述:“开启函数计算的镜像加速后,可提速 2~5 倍,将分钟级的镜像拉取缩短至秒级”;
实例预留,最大程度上降低冷启动率。通过实例预留,可以通过多种算法/策略进行实例的预热和预启动,可以最大程度上降低 Serverless 架构冷启动带来的影响;
版权声明: 本文为 InfoQ 作者【刘宇】的原创文章。
原文链接:【http://xie.infoq.cn/article/e8a1e8192921a50b707dde6c4】。文章转载请联系作者。
评论