使用Modelbox+Mindspore+昇腾芯片部署OCR推理应用,最高可节约75%资源!

举报
叶工 发表于 2023/05/22 17:25:13 2023/05/22
【摘要】 传统AI应用研发和部署通常将模型和‘支持工程(如解码、HTTP、预处理、后处理、运行环境)’分开研发,在部署时使用GPU部署PB或者TRT模型。这种场景下,尤其是对新应用,核心模型研发和支持工程研发会一样耗时。同时在未来的运维更迭中,算法性能和可靠性通常随开发人员水平变得参差不齐,影响上线效率。ModelBox+Mindspore可以有效解决上述痛点,帮助用户高效、高质量开发AI应用。

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

01.JPG


2)Mindspore基础镜像

开发镜像(develop): registry-cbu.huawei.cn/modelbox/euler/modelbox-develop-mindspore_1.9.0-cann_6.0.1-d710-euler-x86_64:v1.6.0

运行镜像(runtime): registry-cbu.huawei.cn/modelbox/euler/modelbox-runtime-mindspore_1.9.0-cann_6.0.1-d710-euler-x86_64:v1.6.0

Runtime镜像和开发镜像的主要区别是它没有编译、调试工具,如CMake

3)配置基础环境

进入镜像:
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

依赖包安装:02.JPG具体依赖包按照实际业务需求安装,若在断网环境下,可以使用whl文件离线安装

4)转换模型

请务必使用onnx模型!

03.JPG

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")

04.JPG

初始化模型修改:

1、新增flownits_path

2、注释原有self.load_model() 修改为 Modelbox适配代码 Ocr_phmb_infer为 flownits目录下模型配置name 32位batch,根据模型变更

05.JPG06.JPG

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。