上海昇腾AI训练营笔记

Ascend C简介

  • Ascend C系列AI处理器适用于计算力需求较低的场景,如智能监控、边缘计算等。
  • 提供多种精简模式和高性能模式,满足不同应用场景下的性能要求。
  • 支持全场景覆盖,既可以部署在云端也可以部署在端侧。

CANN架构

在这里插入图片描述

  • 上层应用层。包括深度学习框架、AI框架适配、创新算子及领域加速库和人工智能应用,负责开发和运行AI模型及应用。
  • 中间计算架构层。由AscendCL异构计算语言、GE图引擎、Ascend C算子开发语言、AOL算子加速库、HCCL集合通信库和Runtime运行时组成,负责计算任务的分解、优化和执行。
  • 底层硬件层。包括Driver驱动和Ascend AI处理器,负责硬件通信和高性能计算任务的实际执行。

昇腾AI加速卡

在这里插入图片描述

  • 华为AI加速卡(NPU)通过PCIe接口连接到服务器上。服务器作为主机(Host),与AI加速卡(Device)进行数据传输和控制。
  • AI加速卡内部包含多个AICORE计算核心,这些核心负责执行AI计算任务。每个AICORE相当于多核CPU中的一个核心,并共享全局内存(DDR内存)用于数据存储和处理。

AI Core内部计算架构抽象

在这里插入图片描述

  • AI Core可以抽象成三个流,分别是:
    • 异步指令流:不同计算单元(Scalar、Vector、Cube、DMA)并行接收并执行指令。
    • 同步信号流:确保指令间依赖关系,按逻辑顺序执行,Scalar单元发同步信号。
    • 计算数据流:DMA搬运数据至Local Memory,各计算单元处理后再搬运回Global Memory。

AI Core内核计算

在这里插入图片描述

  • AI core 支持标量、向量和矩阵运算
    • 标量计算是简单的逐个操作,如int z = x + y
    • 向量计算能同时处理多个数据,例如NPU一个核可以在一个周期内处理128FP16 加法。
    • 矩阵计算如C = A * B,NPU一个核能在一个周期内完成16x16x16的矩阵乘法。

SPMD

在这里插入图片描述

  • Ascend C算子编程采用SPMD模式,将数据拆分并行处理。
  • 多个AI Core共享相同指令代码,通过不同的block_idx 区分。
  • 使用GetBlockIdx() 函数获取block_idx ,标识进程唯一性。

核函数

在这里插入图片描述

  • 核函数(Kernel Function)是直接在设备侧执行的代码,负责实现算子的所有功能。Ascend C和CUDA的核函数定义类似,使用__global__关键字,并通过参数列表和函数名进行调用。
    在这里插入图片描述
  • 使用变量类型限定符__gm__ uint8_t*来统一指针参数类型,方便管理设备侧的内存访问。规则建议包括核函数必须有void 返回类型,仅支持指针类型或内置数据类型作为参数。

编程API

在这里插入图片描述

  • 3级API:支持运算符重载,实现简单计算表达,如dst = src1 + src2。
  • 2级API:用于一维连续计算,指定操作数和计数,如Add(dst, src1, src2, count)。
  • 1级API:处理多维数据的切片计算,选择特定部分进行运算。
  • 0级API:功能丰富,充分利用硬件优势,支持复杂操作参数,如Add(dst, src1, src2, repeatTimes, repeatParams)。

编程范式

在这里插入图片描述

  • 流水任务指单核处理程序中并行调度的任务,提升数据处理性能。
  • 流水任务分为Stage1、Stage2、Stage3,每个任务专注于完成特定功能。
  • 数据被切分成片,使用Progress1~n表示,每个任务依次处理数据片。
  • Stage间有依赖关系,例如Stage1处理完Progress1后,Stage2才开始处理。

矩阵编程

矩阵乘法

在这里插入图片描述

  • 矩阵A(M×K)与矩阵B(K×N)相乘,得到一个中间结果矩阵(M×N)。然后,将一个偏置向量(bias,1×N)加到中间结果矩阵的每一行上,形成最终的输出矩阵C(M×N)

数据分块

在这里插入图片描述

  • 多核数据按照以下方式进行切分:
    • 对于A矩阵,沿着M轴进行切分,切分成多份的singleCoreM,单核上处理K大小的数据。
    • 对于B矩阵,沿着N轴进行切分,切分成多份的singleCoreN,单核上处理M大小的数据。
    • 于C矩阵,由A的部分和B的部分相乘得到,单核上输出C矩阵大小为singleCoreM * singleCoreN。
      在这里插入图片描述
  • 核内切分按照下面方式进行:
    • 对于A矩阵,沿M轴进行切分,切分成多份的baseM;沿K轴进行切分,切分成多份的baseK。
    • 对于B矩阵,沿N轴进行切分,切分成多份的baseN;沿K轴进行切分,切分成多份的baseK。
    • 对于C矩阵,由A和B的分块相乘并累加,得到C矩阵中对应位置的baseM * baseN大小的分块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elec Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值