searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

文字识别场景下昇腾910 NPU推理测试

2024-05-29 09:08:38
438
0

      文字识别是cv领域中一个常见的任务,在应用上常使用文字检测结合文字识别两个端到端的模型来应用,目前较为成熟的模型分别为dbnet和crnn。业界在实现时,一般使用的是pytorch框架来进行训练,推理时使用nvidia生态库。然而随着机器的采购限制,国产化芯片替代方案显得越来越重要。国内不少厂商提供了相应的替代方案,华为昇腾机器使用了npu替代英伟达gpu来进行模型的推理。

       以下测试crnn模型在华为910B机器上的推理效果。

一、昇腾910机器相关配置信息

        【1】系统信息:使用 uname -m && cat /etc/release进行查询

                                   OS版本为CentOS 22.06.2,基于aarch64(arm)架构

                                   

         【2】显卡信息:  使用 npu-smi info 查询

               910 上的显 卡信息如下,包含了8张910B3显卡,显存大小65536MB,即64GB

               

 

二、模型转换与推理

               使用ppocr工程训练的crnn模型进行迁移适配,整个流程大致包含以下几个步骤:

                 【1】  转换onnx模型:   将pytorch框架下训练的crnn模型转换为onnx格式,为了测试不同的batch size的推理速度,在测试时

                                                 转换了batch size 为1和8的模型,以及动态batch size的模型,共三个onnx文件

               【2】 将onnx 参数 由32位转化为16位浮点型,默认转换的onnx初始值为32位浮点型

               【3】 将onnx文件转换为om文件,转换命令如下:

                          atc --model=ppocr_crnn_best12_8x3x32x480_acc70_20240528_16.onnx --framework=5 --output=ppocr_crnn_best12_8x3x32x480_acc70_20240528_16 --soc_version=Ascend910B3

             atc --model=ppocr_crnn_best12_bx3x32x480_acc70_20240528_16.onnx --framework=5 --output=ppocr_crnn_best12_bx3x32x480_acc70_20240528_16 --input_format=NCHW --input_shape="x:-1,3,32,480" --soc_version=Ascend910B3 --dynamic_batch_size="1,2,4,8,16,64"

                        其中动态尺寸需指定 输入尺寸和可选的batch size 

                 【4】使用ais_bentch推理工具,加载om模型进行推理。

                   其中动态和静态 batchsize推理代码如下所示:

                       

               【5】速度对比 

    batch size time (s)
cpu static 1 4.1
npu static 1 0.425
npu static 8 0.36
npu dynamic 64 0.71

                         可见使用npu对比cpu 可以加速10倍。

                   【6】结果可视化

                  测试数据:

                 

                 测试结果:

                     

                   

 

三、踩过的一些坑

          1.昇腾框架不一定支持所有的pytorch框架下的模型,成功转换出om文件不一定能够进行推理,先采用官方推荐已适配的模型进行转换;

          2.转换后的onnx文件需要转成16位浮点型后方可再转换om文件,否则会造成模型的输入参数尺寸不一致;

          3.转换om文件时,对应的参数需要正确匹配,如机器的型号,输入输出参数,需要与onnx对应保持一致;

          4.对om进行推理时,参考了仓库Ascend/tools的代码,但该代码并无相应的使用说明,直接用于本次实验crnn模型推理时会报错,需要根据具体的

             输入输出进行相应的代码适配。

          5. acl推理库存在两个版本,旧版本需要手动将推理输出数据从Device传输到Host,包含了较多从内存读取数据的操作,较为繁杂,而新版本做了封

               装,较为简洁。

 

0条评论
作者已关闭评论
lemon
4文章数
0粉丝数
lemon
4 文章 | 0 粉丝
lemon
4文章数
0粉丝数
lemon
4 文章 | 0 粉丝
原创

文字识别场景下昇腾910 NPU推理测试

2024-05-29 09:08:38
438
0

      文字识别是cv领域中一个常见的任务,在应用上常使用文字检测结合文字识别两个端到端的模型来应用,目前较为成熟的模型分别为dbnet和crnn。业界在实现时,一般使用的是pytorch框架来进行训练,推理时使用nvidia生态库。然而随着机器的采购限制,国产化芯片替代方案显得越来越重要。国内不少厂商提供了相应的替代方案,华为昇腾机器使用了npu替代英伟达gpu来进行模型的推理。

       以下测试crnn模型在华为910B机器上的推理效果。

一、昇腾910机器相关配置信息

        【1】系统信息:使用 uname -m && cat /etc/release进行查询

                                   OS版本为CentOS 22.06.2,基于aarch64(arm)架构

                                   

         【2】显卡信息:  使用 npu-smi info 查询

               910 上的显 卡信息如下,包含了8张910B3显卡,显存大小65536MB,即64GB

               

 

二、模型转换与推理

               使用ppocr工程训练的crnn模型进行迁移适配,整个流程大致包含以下几个步骤:

                 【1】  转换onnx模型:   将pytorch框架下训练的crnn模型转换为onnx格式,为了测试不同的batch size的推理速度,在测试时

                                                 转换了batch size 为1和8的模型,以及动态batch size的模型,共三个onnx文件

               【2】 将onnx 参数 由32位转化为16位浮点型,默认转换的onnx初始值为32位浮点型

               【3】 将onnx文件转换为om文件,转换命令如下:

                          atc --model=ppocr_crnn_best12_8x3x32x480_acc70_20240528_16.onnx --framework=5 --output=ppocr_crnn_best12_8x3x32x480_acc70_20240528_16 --soc_version=Ascend910B3

             atc --model=ppocr_crnn_best12_bx3x32x480_acc70_20240528_16.onnx --framework=5 --output=ppocr_crnn_best12_bx3x32x480_acc70_20240528_16 --input_format=NCHW --input_shape="x:-1,3,32,480" --soc_version=Ascend910B3 --dynamic_batch_size="1,2,4,8,16,64"

                        其中动态尺寸需指定 输入尺寸和可选的batch size 

                 【4】使用ais_bentch推理工具,加载om模型进行推理。

                   其中动态和静态 batchsize推理代码如下所示:

                       

               【5】速度对比 

    batch size time (s)
cpu static 1 4.1
npu static 1 0.425
npu static 8 0.36
npu dynamic 64 0.71

                         可见使用npu对比cpu 可以加速10倍。

                   【6】结果可视化

                  测试数据:

                 

                 测试结果:

                     

                   

 

三、踩过的一些坑

          1.昇腾框架不一定支持所有的pytorch框架下的模型,成功转换出om文件不一定能够进行推理,先采用官方推荐已适配的模型进行转换;

          2.转换后的onnx文件需要转成16位浮点型后方可再转换om文件,否则会造成模型的输入参数尺寸不一致;

          3.转换om文件时,对应的参数需要正确匹配,如机器的型号,输入输出参数,需要与onnx对应保持一致;

          4.对om进行推理时,参考了仓库Ascend/tools的代码,但该代码并无相应的使用说明,直接用于本次实验crnn模型推理时会报错,需要根据具体的

             输入输出进行相应的代码适配。

          5. acl推理库存在两个版本,旧版本需要手动将推理输出数据从Device传输到Host,包含了较多从内存读取数据的操作,较为繁杂,而新版本做了封

               装,较为简洁。

 

文章来自个人专栏
文本识别
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0