当前位置: 首页 > news >正文

上海昇腾AI训练营笔记

文章目录

  • Ascend C简介
  • CANN架构
  • 昇腾AI加速卡
  • AI Core内部计算架构抽象
  • AI Core内核计算
  • SPMD
  • 核函数
  • 编程API
  • 编程范式
  • 矩阵编程
    • 矩阵乘法
    • 数据分块

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大小的分块

相关文章:

  • mysql8和mysql5版本在使用mybatis框架时的注意事项
  • 主流大数据调度工具DolphinScheduler之数据采集
  • 移动硬盘在苹果电脑上使用后在windows中无法读取 Win和Mac的硬盘怎么通用
  • 如何通过成熟的外发平台,实现文档安全外发管理?
  • 快速认识EA(Enterprise Architecture)
  • JVM--HostSpot算法细节实现
  • 华为eNSP模拟器安装
  • 算法刷题笔记 八数码(C++实现)
  • 函数式编程面试题1:什么是合格的函数和有形的函数
  • [计算机网络] VPN技术
  • 实战案例:如何用ChatGPT生成适合不同领域的高质量文章
  • R绘制Venn图及其变换
  • 如何理解String的不可变性
  • React中的无状态组件:简约之美
  • React的usestate设置了值后马上打印获取不到最新值
  • [译] React v16.8: 含有Hooks的版本
  • “大数据应用场景”之隔壁老王(连载四)
  • 【翻译】babel对TC39装饰器草案的实现
  • axios 和 cookie 的那些事
  • create-react-app做的留言板
  • docker-consul
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java 23种设计模式 之单例模式 7种实现方式
  • java小心机(3)| 浅析finalize()
  • js数组之filter
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • rabbitmq延迟消息示例
  • react-native 安卓真机环境搭建
  • spring + angular 实现导出excel
  • tab.js分享及浏览器兼容性问题汇总
  • 读懂package.json -- 依赖管理
  • 力扣(LeetCode)22
  • 目录与文件属性:编写ls
  • 少走弯路,给Java 1~5 年程序员的建议
  • 算法---两个栈实现一个队列
  • 网络应用优化——时延与带宽
  • scrapy中间件源码分析及常用中间件大全
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​字​节​一​面​
  • #DBA杂记1
  • #php的pecl工具#
  • $refs 、$nextTic、动态组件、name的使用
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (3)STL算法之搜索
  • (7) cmake 编译C++程序(二)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (多级缓存)缓存同步
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (南京观海微电子)——COF介绍
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...