can接口定义

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里的实例代码是有帮助的。

知秋君
上一篇 2024-07-12 17:48
下一篇 2024-07-12 17:12

相关推荐