CANN开发实践:4个DVPP内存问题的典型案例解读

cann,开发,实践,dvpp,内存,问题,典型,案例,解读 · 浏览次数 : 20

小编点评

**DVPP内存问题案例** **1. 使用错误的DVPP内存申请接口导致应用程序报错并退出内存大小不符合DVPP要求** * 解决方法:调用正确的DVPP内存申请接口,例如使用`acldvppMalloc`或`hi_mpi_dvpp_malloc`接口。 **2. 内存大小不符合DVPP要求导致应用程序报错并退出现象描述从日志存放路径(默认为“$HOME/ascend/log”)下获取运行应用程序的日志** * 解决方法:确保申请的内存大小与实际使用的一致。 **3. DVPP内存被提前释放导致视频流解码输出的图像异常** * 解决方法:增加日志打印内存大小及地址,检查申请的内存大小是否与实际使用的一致。 **4. DVPP读/写内存地址无效导致应用程序异常中断现象** * 解决方法:检查申请的输入\\输出内存大小与实际使用的输入\\输出内存大小是否一致。 **5. 更多信息** * 请参阅[1]昇腾文档中心、[2]昇腾社区在线课程和[3]昇腾论坛等资源,了解更多有关DVPP内存问题的知识。

正文

摘要:由于DVPP媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分析及解决方法。

本文分享自华为云社区《FAQ_DVPP内存问题案例》,作者:昇腾CANN。

DVPP是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。

由于媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分析及解决方法:

  1. 使用错误的DVPP内存申请接口,导致应用程序报错并退出
  2. 内存大小不符合DVPP的要求,导致应用程序报错并退出
  3. DVPP内存被提前释放,导致视频流解码输出的图像异常
  4. DVPP读/写内存地址无效,导致应用程序异常中断

01 使用错误的DVPP内存申请接口,导致应用程序报错并退出

现象描述

从日志存放路径(默认为“$HOME/ascend/log”)下获取运行应用程序的日志,日志中的报错示例如下:

device:0 chn 0, input buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or acldvppMalloc.

 

device:0 chn 0, output buffer is invalid, make sure it has been allocated with hi_mpi_dvpp_malloc or acldvppMalloc.

可能原因

根据日志提示,是因为没有使用指定的接口申请内存,导致内存地址校验出错。

由于DVPP媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,如下:

  • 调用媒体数据处理V1版本的接口对图片进行抠图、缩放等操作时,调用acldvppMalloc接口申请内存。
  • 调用媒体数据处理V2版本的接口对图片进行抠图、缩放等操作时,调用hi_mpi_dvpp_malloc接口申请内存。

处理步骤

检查代码,确认在DVPP媒体数据处理的各功能中,是否使用acldvppMalloc接口/ hi_mpi_dvpp_malloc接口申请存放输入或输出数据的Device内存。

但需注意:

  • 可将DVPP媒体数据处理的输出作为模型推理的输入,从性能角度,减少拷贝,实现内存复用。
  • 由于DVPP媒体数据处理访问的专用地址空间有限,为确保媒体数据处理时内存足够,除媒体数据处理功能外,其它使用Device内存的功能,建议调用aclrtMalloc接口申请内存。

02 内存大小不符合DVPP的要求,导致应用程序报错并退出

现象描述

从日志存放路径(默认为“$HOME/ascend/log”)下获取运行应用程序的日志,日志中的报错示例如下:

buffer size(3110400) is smaller than need buffer size(4147200) when format is 3.

 

device 0, vpc end address is illegal, check allocated buffer size: configured buffer size: 3110400, current pic: format 3 width_stride 1920 height_stride 1080.

可能原因

虽然使用了正确的DVPP内存申请接口,但:

  • 代码中申请的内存大小小于该格式所需的输入或输出内存大小;
  • 或者传入接口的内存大小正常,与输入格式也匹配,但是超出了实际申请的内存大小,所以校验出来结束地址非法。

处理步骤

1. 进入昇腾文档中心(https://www.hiascend.com/zh/document),拖动到“推理”区域,通过API参考进入最新版本的文档(或者可以在左上方选择需要的版本),在媒体数据处理章节,根据DVPP各功能对内存大小的要求,检查代码中对应格式的内存大小是否正确;

2. 在代码中增加打印内存长度的日志,检查传入接口的内存大小是否与实际申请的内存大小一致。

03 DVPP内存被提前释放,导致视频流解码输出的图像异常

现象描述

原始H264/H265每一帧视频流正常,解码过程无异常(无异常日志),仅输出图片有异常。

可能原因

解码过程无异常,说明送入的视频码流不是异常码流,仅输出被破坏,可能由于:

  • 输出内存被复用、被踩或者被提前释放;
  • 解码需要的输出内存比实际申请的内存大。

处理步骤

  1. 对于DVPP内存申请接口,增加日志打印内存大小及地址,检查VDEC输出内存,检查申请的内存大小是否与实际使用的一致,比如典型的错误场景,VDEC解码输出格式预期是RGB,实际仍按照YUV420SP申请内存。
  2. 在DVPP内存释放接口处、以及hi_mpi_vdec_get_frame/aclvdecCallback/acldvppJpegDecodeAsync接口处,增加内存大小及地址的打印日志,确认内存释放时序,是否存在内存地址解码完成前被提前释放的情况。

04 DVPP读/写内存地址无效,导致应用程序异常中断

现象描述

从日志存放路径(默认为“$HOME/ascend/log”)下获取运行应用程序的日志,Device侧内核态日志报错图像处理模块异常,报错示例如下:

vpc get err int: vpc_cvdr_axi_rd_resp_err

 

vpc get err int: vpc_cvdr_axi_wr_resp_err

可能原因

  • cvdr_axi_rd_resp_err:表示读地址越界,可能申请的输入内存太小或内存地址无效,昇腾AI处理器执行读操作时访问到了无效地址。
  • cvdr_axi_wr_resp_err:表示写地址越界,可能申请的输出内存太小或内存地址无效,昇腾AI处理器执行写操作时访问到了无效地址。

处理步骤

1. 在申请DVPP内存的接口处、以及在异常任务接口处增加日志打印,检查申请的输入\输出内存大小与实际使用的输入\输出内存大小是否一致;

2. 在释放DVPP内存的接口处增加打印日志,检查任务完成之前是否存在内存被提前释放的情况。

05 更多介绍

[1]昇腾文档中心

[2]昇腾社区在线课程

[3]昇腾论坛

 

点击关注,第一时间了解华为云新鲜技术~

与CANN开发实践:4个DVPP内存问题的典型案例解读相似的内容:

CANN开发实践:4个DVPP内存问题的典型案例解读

摘要:由于DVPP媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分析及解决方法。 本文分享自华为云社区《FAQ_DVPP内存问题案例》,作者:昇腾CANN。 DVPP

理论+实践,揭秘昇腾CANN算子开发

摘要: 本文介绍了CANN自定义算子开发的几种开发方式和算子的编译运行流程。然后以开发一个DSL Add算子为例,讲解算子开发的基本流程。 本文分享自华为云社区《昇腾CANN算子开发揭秘》,作者:昇腾CANN 。 开发者在利用昇腾硬件进行神经网络模型训练或者推理的过程中,可能会遇到以下场景: 训练场

AI推理实践丨多路极致性能目标检测最佳实践设计解密

摘要:基于CANN的多路极致性能目标检测最佳实践设计解密。 本文分享自华为云社区《基于CANN的AI推理最佳实践丨多路极致性能目标检测应用设计解密》,作者: 昇腾CANN 。 当前人工智能领域,最热门的无疑是以ChatGPT为代表的各种“新贵”大模型,它们高高在上,让你无法触及。但在人们的日常生活中

昇腾实践丨ATC模型转换动态shape问题案例

本期就分享几个关于昇腾CANN中关于ATC模型转换动态shape相关问题的典型案例,并给出原因分析及解决方法。

基于昇腾计算语言AscendCL开发AI推理应用

摘要:本文介绍了昇腾计算语言AscendCL的基本概念,并以示例代码的形式介绍了如何基于AscendCL开发AI推理应用,最后配以实际的操作演示说明如何编译运行应用。 本文分享自华为云社区《基于昇腾计算语言AscendCL开发AI推理应用》,作者:昇腾CANN。 初始AscendCL AscendC

手把手教你在昇腾平台上搭建PyTorch训练环境

摘要:在昇腾平台上运行PyTorch业务时,需要搭建异构计算架构CANN软件开发环境,并安装PyTorch 框架,从而实现训练脚本的迁移、开发和调试。 本文分享自华为云社区《手把手教你在昇腾平台上搭建PyTorch训练环境》,作者:昇腾CANN。 PyTorch是业界流行的深度学习框架,用于开发深度

盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

摘要:基于昇腾AI异构计算架构CANN(Compute Architecture for Neural Networks)的简易版辅助驾驶AI应用,具备车辆检测、车距计算等基本功能,作为辅助驾驶入门级项目再合适不过。 本文分享自华为云社区《盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和

昇腾实战丨DVPP媒体数据处理视频解码问题案例

摘要:本期就分享几个关于DVPP视频解码问题的典型案例,并给出原因分析及解决方法 本文分享自华为云社区《DVPP媒体数据处理视频解码问题案例》,作者:昇腾CANN 。 DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数

昇腾实战丨DVPP媒体数据处理图片解码问题案例

摘要:本期就分享几个关于DVPP图片解码问题的典型案例,并给出原因分析及解决方法。 本文分享自华为云社区《DVPP媒体数据处理图片解码问题案例》,作者:昇腾CANN 。 DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体

CANN训练:模型推理时数据预处理方法及归一化参数计算

摘要:在做基于Ascend CL模型推理时,通常使用的有OpenCV、AIPP、DVPP这三种方式,或者是它们的混合方式,本文比较了这三种方式的特点,并以Resnet50的pytorch模型为例,结合训练营提供的sample,说明了分别是如何实现预处理的。 本文分享自华为云社区《【2023 · CA