CANN黑科技解密​昇腾Ascend C编程语言 — 极简易用的算子开发体验​

开发 后端
人工智能蓬勃发展,算法创新层出不穷。​昇腾Ascend编程语言通过易上手、高性能、易调测的优势,为开发者的创新算法更轻松高效地运行奠定了基石,让基于​昇腾的AI创新更加简单。​

AI应用的大脑是神经网络而构成神经网络的基石是一个个算子。为了让开发者的网络在腾硬件上高效运行,腾异构计算架构CANN(Compute Architecture for Neural Networks)提供了丰富的高性能算子库,包括神经网络库线性代数计算库等,高性能算子数量达到1400+。有了高性能算子库的支撑,主流神经网络可轻松在腾硬件上高效运行。


但随着人工智能的爆发式增长,算法更新层出不穷,固定的高性能算子库可能无法完全满足开发者的多样化创新需求,为了让开发者提出的创新算法能够在硬件上运行起来自定义算子开发的能力必不可少

但算子开发是个复杂的工程,需要考虑众多因素,包括语言学习成本、功能逻辑的实现、硬件指令的适配、以及算子运行精度与性能的达标等等。往往一个经验丰富的算法专家开发一个高性能的算子都要耗时数周甚至更长的时间。


算子开发总体流程

为提升算子开发效率降低算子开发成本,腾推出了面向算子开发场景的腾Ascend编程语言。腾Ascend编程语言原生支持C和C++标准规范,最大化匹配用户开发习惯;通过多层接口抽象屏蔽了底层硬件差异通过自动并行计算等关键技术保证性能的同时大大降低算子开发门槛另外,腾Ascend提供了孪生调试功能,大大缩短了算子调测时间


昇腾Ascend C编程语言在异构计算架构CANN中的位置


多层级高性能类库接口

工欲善其事,必先利其器。为简化开发逻辑,腾Ascend支持结构化核函数编程,提供了面向不同场景的高性能类库接口。开发者仅需通过类库接口的组装调用,即可轻松实现高性能算子。


昇腾Ascend C提供的类库接口

AI应用领域广泛,开发者的背景与需求也各不相同。为满足不同层级开发者的诉求,腾Ascend针对计算接口和数据搬移接口,进行了分层分级,让开发者可以根据自身需求选择合适的接口。

针对计算类接口,当前Ascend支持三个层级,其中级数越低,自由度越高,更易于表达复杂场景所需功能;级数越高,接口的封装度越高,更易于表达常用语义,使用起来也更简单。


计算接口分层分级与示例

针对搬移类接口Ascend C将不同类型物理内存间的数据搬移抽象为一个统一的数据搬运接口通过参数控制不同的搬运级别,从而满足不同数据搬运场景的需求


数据搬运接口分层分级与示例

另外多层级的类库接口封装,可以更好地屏蔽不同型号硬件间的差异,轻松实现算子代码对不同硬件的兼容。


自动并行计算

多层级的类库接口可以让开发者轻松实现算子的算法逻辑,达成预期功能。但一个好的算子,计算效率也是必须考虑的重要指标。众所周知,将任务并行处理是提高计算效率的关键手段,但AI处理器的内存层次结构比较复杂、数据通路多,数据之间的依赖关系复杂,这种场景下,并行计算之间的流水如何排布,各任务间的数据同步如何实现,往往是比较困难的。

为了方便开发者实现高效的并行计算Ascend采用SPMDSingle-Program Multiple-Data)并行模式,开发者仅需关注一个计算核心上的算子程序实现,程序调用时,可自动启动N个运行实例(我们称之为Block),每个实例都可部署到不同的计算核心上执行。由此,大大简化了开发者在多个计算核心上的并行编程逻辑


单程序多数据SPMD并行计算

在算子逻辑实现上,Ascend C基于流水线并行的编程范式,将算子核心逻辑划分为“搬入、计算、搬出”,开发者只需聚焦实现“搬入、计算、搬出”内容,程序运行时,系统会自动将核内数据进行分片每一片数据都专注完成单一功能,实现计算性能最大化。

核内多片数据流水线并行调度

孪生调试

Ascend提供的多层级类库接口以及自动并行计算功能,给开发者提供了轻松高效的编码体验。但在上一代算子开发的整个流程中代码编写的时间往往仅占不到30%,剩下70%多的时间都在进行功能与性能调试,好的调试能力对提升端到端开发效率的重要性不言而喻。


开发时间占比示例


那为什么算子调试如此耗时呢?究其主要原因,一方面是由于NPU环境下本身调试困难,另一方面是因为编程过程隐藏了并行细节,导致同步死锁、地址越界、数据溢出等问题难定位。

为提升算子调试效率Ascend C提供了孪生调试能力,开发者既可以在CPU域进行调试调优,又可以在NPU域进行调优验证,通过CPU域与NPU域相结合的方式,降低调试难度,提升调试效率。

在CPU域开发者可通过业界标准C++工具GCC编译器进行编译并通过GDB通用调试工具进行单步调试精准验证程序执行流程是否符合预期。另外,Ascend还提供了主动Bug分析工具方便开发者快速进行问题定位在NPU域Ascend C提供了仿真调试能力与上板调试能力开发者可以通过仿真调试的Profiling流水图指令日志以及数据日志精准进行性能调优,也可以通过上板调试进行真实行为的验证。孪生调试的能力,在提升算子调试效率的同时又可保证精度与性能的达标。


昇腾Ascend C孪生调试


人工智能蓬勃发展,算法创新层出不穷。腾Ascend编程语言通过易上手高性能易调测的优势为开发者的创新算法更轻松高效地运行奠定了基石,让基于腾的AI创新更加简单。


昇腾Ascend C算子开发快速体验

责任编辑:张诚
相关推荐

2024-07-18 19:19:14

2023-08-29 12:34:51

昇腾

2023-02-22 16:11:41

昇腾

2015-12-11 15:59:10

风行

2020-05-11 17:41:04

英特尔

2022-12-23 10:55:20

昇智

2020-08-18 10:17:48

昇腾上海技术开放日

2021-05-12 09:00:00

AI 数据人工智能

2021-07-09 22:54:38

昇腾产业升级智能化

2021-07-07 20:29:20

Socket进程迁移

2022-11-10 20:20:41

毕昇

2022-11-11 15:47:00

昇腾AI

2022-06-21 22:34:24

AI技术
点赞
收藏

51CTO技术栈公众号