使用Modelbox+Mindspore+昇腾芯片部署OCR推理应用,最高可节约75%资源!
1、前言
传统AI应用研发和部署通常将模型和‘支持工程(如解码、HTTP、预处理、后处理、运行环境)’分开研发,在部署时使用GPU部署PB或者TRT模型。这种场景下,尤其是对新应用,核心模型研发和支持工程研发会一样耗时。同时在未来的运维更迭中,算法性能和可靠性通常随开发人员水平变得参差不齐,影响上线效率。ModelBox+Mindspore可以有效解决上述痛点,帮助用户高效、高质量开发AI应用。下文将按照 Modelbox和Mindspore简介、昇腾和TRT7性能比对 和 如何切换到昇腾工程 三个子项 介绍OCR组从 传统AI应用研发和部署办法 切换到Modelbox+Mindspore+昇腾芯片部署的心得。
2.1 ModelBox和Mindspore简介
ModelBox是一个适用于端边云场景的AI推理应用开发框架,提供了基于Pipeline的并行执行流程,能帮助AI应用开发者较快的开发出高效,高性能,以及支持软硬协同优化的AI应用。它具备:
a) 易于开发:AI推理业务可视化编排开发,功能模块化,丰富组件库;c++,python, Java多语言支持。
b) 易于集成:集成云上对接的组件,云上对接更容易。
c) 高性能,高可靠:pipeline并发运行,数据计算智能调度,资源管理调度精细化,业务运行更高效。
d) 软硬件异构:CPU,GPU,NPU多异构硬件支持,资源利用更便捷高效。
e) 全场景:视频,语音,文本,NLP全场景,专为服务化定制,云上集成更容易,端边云数据无缝交换。
f) 易于维护:服务运行状态可视化,应用,组件性能实时监控,优化更容易。
MindSpore Lite是一个极速、极智、极简的AI引擎,使能全场景智能应用,为用户提供端到端的解决方案,帮助用户使能AI能力。它具备:
a) 极致性能:高效的内核算法和汇编级优化,支持CPU、GPU、NPU异构调度,最大化发挥硬件算力,最小化推理时延和功耗。
b) 轻量化:提供超轻量的解决方案,支持模型量化压缩,模型更小跑得更快,使能AI模型极限环境下的部署执行。
c) 全场景支持:支持iOS、Android等手机操作系统以及LiteOS嵌入式操作系统,支持手机、大屏、平板、IoT等各种智能设备上的AI应用。
d) 高效部署:支持MindSpore/TensorFlow Lite/Caffe/Onnx模型,提供模型压缩、数据处理等能力,统一训练和推理IR,方便用户快速部署。、
2.2 昇腾和TRT7性能比对
典型推论工程 (包含3个模型)压力测试结果比对
性能测试比对 | ||||||
推论延迟 | 单节点吞吐 | CPU占用 | 内存占用 | GPU负载 | GPU显存 | |
TRT7 容器24U64G | 743毫秒 | 13.42Req/S | 285% | 3.3GB | 60% | 4003MB |
Modelbox+Mindspore+D710 | 337毫秒 | 29.36Req/S | 340% | 1.4GB | 80% | 972MB |
可以看出:
1)ModelBox可以显著提升GPU推论性能,其单个节点性能相当于原先两个节点,这样可以降低部署实例个数,节约GPU成本
2)显存占用节约75%!,意味着在功能测试场景下,一张GPU可以顶替原来四张GPU
3)推理的吞吐,时延性能有显著提高
4)由于使用了Modelbox种优化过的预处理模块,内存占用减少了50%
2.3 D710工程mindspore切换办法
1) 环境准备
一台D710+X86服务器,使用C83驱动
华为云现网镜像驱动默认为C83,如果要使用C82,需要将启动挂载到镜像内
docker run -it -d --privileged -e ASCEND_VISIBLE_DEVICES=0 -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi -p 29001:8080 ace846e43b02
docker run -it -d --privileged -e ASCEND_VISIBLE_DEVICES=0 -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi --net=host --name ocr_1121 7582f15eb18c
docker exec -it ocr_1121 bash
依赖包安装:具体依赖包按照实际业务需求安装,若在断网环境下,可以使用whl文件离线安装
4)转换模型
请务必使用onnx模型!
ini文件配置 input_shape_vector=“[32,3,32,256]“ 每个模型shape不同,若为动态batch,更改为[-1,3,32,256]
precision_mode=allow_fp32_to_fp16 为fp32精度precision_mode=force_fp16(不填默认为 fp16精度)
使用下面命令进行转换:
/usr/local/mindspore-lite-1.9.0-linux-x64/tools/converter/converter/converter_lite --modelFile=./screenshot_ocr_220919_att_ctc_batch1.onnx --outputFile=./mindspore_data/screenshot_ocr_220919_att_ctc_batch1.onnx --inputShape=input:32,3,32,256 --fmk=ONNX --exportMindIR=MINDIR --encryption=false --device=Ascend710 --configFile=/home/dl/sz_test/EI_OCR/Lite_cloud_inference_EI/example/configs/ocr.ini
--modelFile : 待转换的模型
--outputFile :转换后的模型名称 --configFile :ini配置文件存放目录
--fmk :输入模型类型 pb模型为TF,onnx为ONNX
--inputShape :动态转成静态,或者需要对shape算子进行常量折叠以消除掉复杂的网络结构(需要,其它不用该参数)
5)代码转换
在工程中添加flowunits目录,存档模型配置文件(.toml)
每个模型需要修改的配置包括:name,与初始化模型name对应;entry:模型存档目录;input name:模型输入名称;output name:模型输出名称
self.model = modelbox.Model(flowunits_path, "ocr_hhmb_infer",32,""ascend","0")
初始化模型修改:
1、新增flownits_path
2、注释原有self.load_model() 修改为 Modelbox适配代码 Ocr_phmb_infer为 flownits目录下模型配置name 32位batch,根据模型变更
- 点赞
- 收藏
- 关注作者
评论(0)