CANN的接口调用流程概述

举报
黄生 发表于 2022/06/10 13:02:27 2022/06/10
【摘要】 CANN库里面目前在看的是c++的代码,在WEB时代流行的是JAVA,而不是c或者c++,原因之一就是JAVA不需要关注内存的分配和释放,而这些却正是在c或c++编程中重要格外关注的,因此而产生不少的代码片段,在看代码的时候,稍稍会影响对于正常流程的代码的关注。再则,在接口调用后,为了程序的健壮和容错,往往都要对于调用返回结果进行检查和错误处理,这样看代码时也会觉得稍稍繁琐。所以先暂时抛开这...

CANN库里面目前在看的是c++的代码,在WEB时代流行的是JAVA,而不是c或者c++,原因之一就是JAVA不需要关注内存的分配和释放,而这些却正是在c或c++编程中重要格外关注的,因此而产生不少的代码片段,在看代码的时候,稍稍会影响对于正常流程的代码的关注。
再则,在接口调用后,为了程序的健壮和容错,往往都要对于调用返回结果进行检查和错误处理,这样看代码时也会觉得稍稍繁琐。
所以先暂时抛开这些,来主要的关注一下接口调用主流程,这样看代码时能够提纲挈领,而不容易被淹没在代码细节中。
先要介绍一下CANN的概念,它是一个技术架构,官方定义是:

  • CANN(Compute Architecture for Neural Networks)是华为公司针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。

然后代码中我们经常会看看名字以acl开头的接口,那么ACL是计算语言,概念定义如下:

  • AscendCL(Ascend Computing Language)是一套用于在昇腾平台上开发深度神经网络推理应用的C语言API库,提供运行资源管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等API,能够实现利用昇腾硬件计算资源在昇腾CANN平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等能力。简单来说,就是统一的API框架,实现对所有资源的调用。

image.png
上图中的 计算资源层 是昇腾AI处理器的硬件算力基础,主要完成神经网络的矩阵相关计算、完成控制算子/标量/向量等通用计算和执行控制功能、完成图像和视频数据的预处理,为深度神经网络计算提供了执行上的保障。
从图中还可以看出,ACL包含与CANN之中,并且处于CANN的结构分层中的最上层。

所以,应用层的开发,直接使用的接口就是ACL接口。当然,可以有第三方框架/lib库来调用ACL形成更高级的接口服务提供给应用。

ACL的优势这里必须要列一下:

  1. 高度抽象:算子编译、加载、执行的API归一,相比每个算子一个API,AscendCL大幅减少API数量,降低复杂度。
  2. 向后兼容:AscendCL具备向后兼容,确保软件升级后,基于旧版本编译的程序依然可以在新版本上运行。
  3. 零感知芯片:一套AscendCL接口可以实现应用代码统一,多款昇腾AI处理器无差异。

来看一下ACL的总体调用流程

image.png

实际上这个流程就涵盖了昇腾CANN体验官第四期里的内容,一个是模型推理,一个是数据预处理(视频、图片的缩放、转换等动作)。
好了,掌握整体调用流程,对我们去学习了解CANN samples里的实例代码是有帮助的。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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