Skip to content

Commit

Permalink
update for CANN
Browse files Browse the repository at this point in the history
  • Loading branch information
chenzomi12 committed Jul 14, 2024
1 parent 7edf753 commit f77f00e
Show file tree
Hide file tree
Showing 39 changed files with 655 additions and 94 deletions.
2 changes: 1 addition & 1 deletion 00Others/06Instruments.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## 书写工具

- IDE编辑器:VSCode APP,主要用于写 Markdown,查看格式是否标准规范
- IDE 编辑器:VSCode APP,主要用于写 Markdown,查看格式是否标准规范
- 文字与表格:Markdown, PPT。文字稿规范按照 Markdown,胶片参考 PPT 模板
- 图像与图片:ominGraffle APP,使用 OmniGraffle7.0 for mac 绘图

Expand Down
4 changes: 2 additions & 2 deletions 01Introduction/01present.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,6 @@

- 本节围绕 AI 的历史现状和发展展开对 AI 系统研究,需要要深刻理解上层 AI 计算应用负载特点,历史和趋势,才能将找到系统设计的真实需求问题和优化机会。

- AI 在CV、NLP、Audio等领域及金融、医疗、教育等行业有广泛应用,其模型结构和部署需求不断演变,带来挑战与机遇。
- AI 在 CV、NLP、Audio 等领域及金融、医疗、教育等行业有广泛应用,其模型结构和部署需求不断演变,带来挑战与机遇。

- AI的基本理论神经网络在发展中经历了萌芽兴奋期、蓬勃发展期、突破驱动繁荣期,其发展受硬件算力和模型创新推动。而近年来,大模型出现带来新机遇,包括多种预训练模型,相关技术子领域仍在快速发展。
- AI 的基本理论神经网络在发展中经历了萌芽兴奋期、蓬勃发展期、突破驱动繁荣期,其发展受硬件算力和模型创新推动。而近年来,大模型出现带来新机遇,包括多种预训练模型,相关技术子领域仍在快速发展。
6 changes: 3 additions & 3 deletions 01Introduction/02Develop.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,12 @@ AI 起源于上世纪五十年代,经历了几次繁荣与低谷,直到 2016

## 小结与思考

- 人工智能(AI)技术自20世纪50年代以来经历了多次发展高潮,2016年AlphaGo的胜利重新点燃了公众对AI的兴趣,而AI已在互联网行业如搜索引擎、图片检索和广告推荐等领域广泛应用。
- 人工智能(AI)技术自 20 世纪 50 年代以来经历了多次发展高潮,2016 年 AlphaGo 的胜利重新点燃了公众对 AI 的兴趣,而 AI 已在互联网行业如搜索引擎、图片检索和广告推荐等领域广泛应用。

- 催生这轮 AI 热潮的三个重要因素:大数据的积累、超大规模的计算能力支撑、机器学习尤其是深度学习算法进行研究。

- 除了理解上层 AI 算法,也需要理解 AI 系统底层体系结构,并利用两者的优化空间进行抽象和权衡取舍选取最优系统解决方法。

- 机器学习是实现AI的方法,深度学习是实现机器学习的技术,神经网络是深度学习的具体实现形态,AI系统设计围绕这些技术进行
- 机器学习是实现 AI 的方法,深度学习是实现机器学习的技术,神经网络是深度学习的具体实现形态,AI 系统设计围绕这些技术进行

- AI系统的发展受到大数据积累、计算能力提升和算法进步的推动,当前AI算法和模型不断演进,算力和体系结构的进步为AI提供了强大的执行性能,同时带来了新的系统设计挑战。
- AI 系统的发展受到大数据积累、计算能力提升和算法进步的推动,当前 AI 算法和模型不断演进,算力和体系结构的进步为 AI 提供了强大的执行性能,同时带来了新的系统设计挑战。
4 changes: 2 additions & 2 deletions 01Introduction/03architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,8 @@ AI 编译与计算架构负责 AI 模型在真正运行前的编译和系统运

- AI 系统是连接硬件和上层应用的软硬件基础设施,包括编程语言、开发框架等,其设计面临诸多挑战。

- AI 系统的设计目标包括高效的编程语言与工具链、对多种AI任务的系统级支持以及解决新挑战下的系统设计与演化问题
- AI 系统的设计目标包括高效的编程语言与工具链、对多种 AI 任务的系统级支持以及解决新挑战下的系统设计与演化问题

- AI 系统大致分为AI训练与推理框架、AI编译与计算架构、AI硬件与体系结构,还包括更广泛的系统生态,涵盖核心系统软硬件、AI算法和框架以及更广泛的相关领域
- AI 系统大致分为 AI 训练与推理框架、AI 编译与计算架构、AI 硬件与体系结构,还包括更广泛的系统生态,涵盖核心系统软硬件、AI 算法和框架以及更广泛的相关领域

- 当前 AI 系统涉及很多方面,类似传统的操作系统(异构资源管理系统)、编译器(AI 编译优化)、Web 服务(推理系统)、软件云化(AI 集群调度)等问题在 AI 系统的场景中仍然会遇到,经典理论与系统设计在今天仍然对 AI 系统发挥着重要的影响。
4 changes: 2 additions & 2 deletions 01Introduction/05Ascend.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

# 昇腾 AI 全栈架构介绍

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,包括昇腾系列处理器、系列硬件、CANN(Compute Architecture for Neural Networks,异构计算架构)、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链。
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI 计算基础设施、行业应用及服务,包括昇腾系列处理器、系列硬件、CANN(Compute Architecture for Neural Networks,异构计算架构)、AI 计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链。

其生态包括围绕着昇腾计算技术和产品体系所开展的学术、技术、公益及商业活动,产生的知识和产品以及各种合作伙伴,主要包括原始设备制造商OEM、原始设计制造商ODM、 独立硬件开发商IHV、咨询与解决方案集成商C&SI、独立软件开发商ISV、云服务提供商XaaS等
其生态包括围绕着昇腾计算技术和产品体系所开展的学术、技术、公益及商业活动,产生的知识和产品以及各种合作伙伴,主要包括原始设备制造商 OEM、原始设计制造商 ODM、 独立硬件开发商 IHV、咨询与解决方案集成商 C&SI、独立软件开发商 ISV、云服务提供商 XaaS 等

同时,昇腾的合作伙伴体系当中还包含围绕昇腾相关产品对外提供服务交付的服务类伙伴,提供培训服务的人才联盟伙伴,提供投融资和运营服务的投融资运营伙伴等。昇腾高度重视高校的人才培养和昇腾开发者的发展,让高校和开发者成为整个昇腾生态的重要组成部分。

Expand Down
4 changes: 2 additions & 2 deletions 01Introduction/05Sample.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# AI 系统与程序代码关系

模型算法的开发者一般会通过使用 AI 框架提供 Python 等高级语言的 API,来编写对应的 AI 算法,而AI 算法的底层系统问题被当前层抽象隐藏。到底在代码背后 AI 系统的每一层发生和执行了什么?有哪些有意思的系统设计问题?
模型算法的开发者一般会通过使用 AI 框架提供 Python 等高级语言的 API,来编写对应的 AI 算法,而 AI 算法的底层系统问题被当前层抽象隐藏。到底在代码背后 AI 系统的每一层发生和执行了什么?有哪些有意思的系统设计问题?

本节我们将从一个具体的 PyTorch 实现一个 LeNet5 神经网络模型作为实例开始,启发读者和后面 AI 系统的每一层和各个章节构建起桥梁与联系。

Expand Down Expand Up @@ -31,7 +31,7 @@ $$\theta = \theta - \alpha \delta_{\theta}Loss(\theta)$$

其中,$\alpha$ 也称为学习率(Learning Rate)。当神经网络模型训练完成,就可以通过 $\hat{y} = f_\theta(x)$ 进行推理,使用和部署已经训练好的网络模型。

如图所示,左上角展示输入为手写数字图像,输出为分类向量,中间矩形为各层输出的特征图(Feature Map),我们将其映射为具体的实现代码,其结构通过 AI 框架提供的 API来定义和构建。神经网络模型就是通过各个层,将输入图像通过多个隐藏层的算子进行计算,得到为类别输出概率向量。
如图所示,左上角展示输入为手写数字图像,输出为分类向量,中间矩形为各层输出的特征图(Feature Map),我们将其映射为具体的实现代码,其结构通过 AI 框架提供的 API 来定义和构建。神经网络模型就是通过各个层,将输入图像通过多个隐藏层的算子进行计算,得到为类别输出概率向量。

> 算子:深度学习算法由一个个计算单元组成,称这些计算单元为算子(Operator,Op)。AI 框架中对张量计算的种类有很多,比如加法、乘法、矩阵相乘、矩阵转置等,这些计算被称为算子(Operator)。
>
Expand Down
16 changes: 8 additions & 8 deletions 02Hardware/06Domestic/07AscendBase.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,18 @@

数字视觉预处理模块主要完成图像视频的编解码,视频处理,对图像支持 JPEG 和 PNG 等格式的处理。来自主机端存储器或网络的视频和图像数据,在进入昇腾 AI 处理器的计算引擎处理之前,需要生成满足处理要求的输入格式、分辨率等,因此需要调用数字视觉预处理模块进行预处理以实现格式和精度转换等要求。数字视觉预处理模块主要实现视频解码(Video Decoder,VDEC),视频编码(Video Encoder,VENC),JPEG 编解码(JPEG Decoder/Encoder,JPEGD/E),PNG 解码(PNG Decoder,PNGD)和视觉预处理(Vision Pre-Processing Core,VPC)等功能。图像预处理可以完成对输入图像的上/下采样、裁剪、色调转换等多种功能。数字视觉预处理模块采用了专用定制电路的方式来实现高效率的图像处理功能,对应于每一种不同的功能都会设计一个相应的硬件电路模块来完成计算工作。在数字视觉预处理模块收到图像视频处理任务后,会读取需要处理的图像视频数据并分发到内部对应的处理模块进行处理,待处理完成后将数据写回到内存中等待后续步骤。

### 昇腾910
### 昇腾 910
![昇腾 AI 处理器逻辑图](images/ascendarch18.png)

昇腾910处理器的目标场景是云端的推理和训练,其架构如上图所示,包含Davinci Core、DVPP、HBM、DDR4等组件。昇腾910处理器采用了芯粒(chiplet)技术,包含六个die: 1个计算芯粒(包含32个Davinci Core、16个CPU Core和4个DVDP),1个IO芯粒,和4个HBM芯粒(总计1.2TB/s带宽)。针对云端训练和推理场景,昇腾910处理器做的优化包括:
1. 高算力: 训练场景通常使用的Batch Size较大,因此采用最高规格的Ascend-Max,每个Core每个周期可以完成16*16*16=4096次FP16乘累加
2. 高Load/Store带宽: 训练场景下计算反向SGD时,会有大量对Last Level Cache和片外缓存的访问,因此需要配备较高的Load/Store带宽,因此昇腾910除了DDR还采用了HBM技术
3. 100G NIC: 随着DNN的模型尺寸愈发庞大,单机单卡甚至单机多卡已经不能满足云端训练的需求,为了支持多卡多机组成集群,昇腾910集成了支持ROCE V2协议的100G NIC用于跨服务器传递数据,使得可以使用昇腾910组成万卡集群
4. 高吞吐率的数字视觉与处理器(DVPP): DVPP用于JPEG、PNG格式图像编解码、图像预处理(对输入图像上下采样、裁剪、色调转换等)、视频编解码,为了适配云端推理场景,DVPP最高支持128路1080P视频解码
昇腾 910 处理器的目标场景是云端的推理和训练,其架构如上图所示,包含 Davinci Core、DVPP、HBM、DDR4 等组件。昇腾 910 处理器采用了芯粒(chiplet)技术,包含六个 die: 1 个计算芯粒(包含 32 个 Davinci Core、16 个 CPU Core 和 4 个 DVDP),1 个 IO 芯粒,和 4 个 HBM 芯粒(总计 1.2TB/s 带宽)。针对云端训练和推理场景,昇腾 910 处理器做的优化包括:
1. 高算力: 训练场景通常使用的 Batch Size 较大,因此采用最高规格的 Ascend-Max,每个 Core 每个周期可以完成 16*16*16=4096 次 FP16 乘累加
2. 高 Load/Store 带宽: 训练场景下计算反向 SGD 时,会有大量对 Last Level Cache 和片外缓存的访问,因此需要配备较高的 Load/Store 带宽,因此昇腾 910 除了 DDR 还采用了 HBM 技术
3. 100G NIC: 随着 DNN 的模型尺寸愈发庞大,单机单卡甚至单机多卡已经不能满足云端训练的需求,为了支持多卡多机组成集群,昇腾 910 集成了支持 ROCE V2 协议的 100G NIC 用于跨服务器传递数据,使得可以使用昇腾 910 组成万卡集群
4. 高吞吐率的数字视觉与处理器(DVPP): DVPP 用于 JPEG、PNG 格式图像编解码、图像预处理(对输入图像上下采样、裁剪、色调转换等)、视频编解码,为了适配云端推理场景,DVPP 最高支持 128 路 1080P 视频解码

### 昇腾310
### 昇腾 310
![昇腾 AI 处理器逻辑图](images/ascendarch17.png)
昇腾310处理器的目标场景是边缘推理,比如智慧城市、智慧新零售、机器人、工业制造等,其架构如上图所示,主要包含Davinci Core、DVPP、LPDDR4等组件。相比昇腾910,昇腾310的定制化IP相对较少,但是提供了更多外设接口。由于在边缘推理场景下batch size通常只有1,因此昇腾310选择了较小的矩阵计算维度(m = 4, n = 16, k = 16)以实现$C_{mn} = A_{mk}\times B_{kn}$。由于在矩阵运算中$M = batch\_size \times output\_hight \times output\_width$, 当batch size = 1时,将m设置成4可以提升乘累加利用率
昇腾 310 处理器的目标场景是边缘推理,比如智慧城市、智慧新零售、机器人、工业制造等,其架构如上图所示,主要包含 Davinci Core、DVPP、LPDDR4 等组件。相比昇腾 910,昇腾 310 的定制化 IP 相对较少,但是提供了更多外设接口。由于在边缘推理场景下 batch size 通常只有 1,因此昇腾 310 选择了较小的矩阵计算维度(m = 4, n = 16, k = 16)以实现$C_{mn} = A_{mk}\times B_{kn}$。由于在矩阵运算中$M = batch\_size \times output\_hight \times output\_width$, 当 batch size = 1 时,将 m 设置成 4 可以提升乘累加利用率

## 卷积加速原理

Expand Down
2 changes: 1 addition & 1 deletion 03Compiler/02AICompiler/03Architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ DL 编译器(如 TVM、nGraph 和 TC)在代码生成阶段可以生成对这

- 高级 IR 用于表示计算图,支持神经网络模型的高级抽象,优化支持,硬件无关性,以及跨平台支持;低级 IR 则描述了更细粒度的神经网络计算过程,实现针对特定目标的优化。

- AI 编译器全栈产品从硬件层到 Kernel Level,再到 Graph Level,最后到达 DL Models,每一层都针对不同级别的优化和执行,形成了从底层硬件到顶层AI 框架的完整支持链。
- AI 编译器全栈产品从硬件层到 Kernel Level,再到 Graph Level,最后到达 DL Models,每一层都针对不同级别的优化和执行,形成了从底层硬件到顶层 AI 框架的完整支持链。

## 本节视频

Expand Down
8 changes: 4 additions & 4 deletions 03Compiler/03Frontend/02GraphIR.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ AI 框架的 Operator 算子一般由最基本的代数算子组成,可以根

AI 框架将会自动分析上图中表示的计算图的计算过程,通过追踪计算图中的数据流,对其中的每个参数都进行精确地微分,获取相应的梯度,以便后续计算中使用这些梯度在神经网络的训练过程中进行参数更新,上文所示的计算图的自动微分示意图如下图所示。

现代的AI 框架,如 PyTorch、MindSpore 和 PaddlePaddle,都具备自动微分的功能,极大的简化了神经网络模型的开发和训练过程。
现代的 AI 框架,如 PyTorch、MindSpore 和 PaddlePaddle,都具备自动微分的功能,极大的简化了神经网络模型的开发和训练过程。

![计算图中自动微分示意图](images/02Graph06.png)

Expand Down Expand Up @@ -141,11 +141,11 @@ class Network(nn.Cell):

## 小结与思考

- 计算图的基本构成:计算图是AI框架中表示神经网络计算逻辑的有向无环图(DAG),由张量(Tensor)和算子(Operator)构成,反映计算依赖关系。
- 计算图的基本构成:计算图是 AI 框架中表示神经网络计算逻辑的有向无环图(DAG),由张量(Tensor)和算子(Operator)构成,反映计算依赖关系。

- AI框架生成计算图:AI框架通过自动微分技术,结合静态或动态图生成方法,构建包含正向和反向传播的完整计算图,优化执行性能。
- AI 框架生成计算图:AI 框架通过自动微分技术,结合静态或动态图生成方法,构建包含正向和反向传播的完整计算图,优化执行性能。

- 计算图对AI编译器的作用:计算图为AI编译器提供了优化的基础,允许进行系统级优化,提高执行效率,并支持模型的序列化和硬件部署。
- 计算图对 AI 编译器的作用:计算图为 AI 编译器提供了优化的基础,允许进行系统级优化,提高执行效率,并支持模型的序列化和硬件部署。

## 本节视频

Expand Down
2 changes: 1 addition & 1 deletion 03Compiler/03Frontend/03OPFusion.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ if __name__ == "__main__":

![融合方式 example](images/03OPFusion06.png)

如图所示,首先我们可以利用横向融合的思想,将一个3×3×256的卷积算子和一个1×1×256的卷积算子通过Enlarge方法将后者扩成3×3×256的卷积算子,然后融合成一个3×3×512的卷积算子;接着我们可以利用纵向融合的思想,将Split,卷积,Add融合成一个卷积算子,减少Kernel调度;最后,一般激活ReLU都可以和前一个计算步骤融合,于是最后融合得到一个Cov2d_ReLU算子。于是我们从一个比较复杂的计算图,最终得到了一个比较简洁的计算图,减少了Kernel调度,实现了“少就是多”。
如图所示,首先我们可以利用横向融合的思想,将一个 3×3×256 的卷积算子和一个 1×1×256 的卷积算子通过 Enlarge 方法将后者扩成 3×3×256 的卷积算子,然后融合成一个 3×3×512 的卷积算子;接着我们可以利用纵向融合的思想,将 Split,卷积,Add 融合成一个卷积算子,减少 Kernel 调度;最后,一般激活 ReLU 都可以和前一个计算步骤融合,于是最后融合得到一个 Cov2d_ReLU 算子。于是我们从一个比较复杂的计算图,最终得到了一个比较简洁的计算图,减少了 Kernel 调度,实现了“少就是多”。

总而言之,为了提高效率,我们可以通过消除不必要的中间结果实例化、 减少不必要的输入扫描、 发现其他优化机会等方法来指导我们实现算子融合。

Expand Down
2 changes: 1 addition & 1 deletion 03Compiler/03Frontend/06Memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@

- 内存的划分:内存分配包括静态内存和动态内存,静态内存包括模型参数、值节点和输出,而动态内存包括输出张量和工作区张量,它们支持模型训练的灵活性和高效性。

- 内存优化算法:包括空间换内存、计算换内存、模型压缩和内存复用等策略,以及具体的内存优化技术如Inplace Operation和Memory Sharing,旨在减少内存占用并提高计算效率。
- 内存优化算法:包括空间换内存、计算换内存、模型压缩和内存复用等策略,以及具体的内存优化技术如 Inplace Operation 和 Memory Sharing,旨在减少内存占用并提高计算效率。

## 本节视频

Expand Down
Loading

0 comments on commit f77f00e

Please sign in to comment.