update chinese images for ch06 (#426)

Co-authored-by: Corleone <liuchao195@huawei.com>
Co-authored-by: Jiarong Han <jiaronghan@outlook.com>
This commit is contained in:
Corleone
2023-03-24 18:18:21 +08:00
committed by GitHub
parent fcdd97397b
commit 66d2496e53
10 changed files with 13 additions and 12 deletions

View File

@@ -6,7 +6,7 @@
现代GPU在十分有限的面积上实现了极强的计算能力和极高的储存器以及IO带宽。在一块高端的GPU中晶体管数量已经达到主流CPU的两倍而且显存已经达到了16GB以上工作频率也达到了1GHz。GPU的体系架构由两部分组成分别是流处理阵列和存储器系统两部分通过一个片上互联网络连接。流处理器阵列和存储器系统都可以单独扩展规格可以根据产品的市场定位单独裁剪。如GV100的组成 :cite:`2017NVIDIA`如 :numref:`gv100`所示:
![Volta GV100](../img/ch06/V100.svg)
![Volta GV100](../img/ch06/V100_cn.png)
:width:`800px`
:label:`gv100`
@@ -51,13 +51,13 @@
- **三维向量计算单元**:一次完成一个矩阵的乘法,专为神经网络应用设计的计算单元,更充分利用数据重复特性,隐藏数据通信带宽与数据计算的差距。
![多种计算单元](../img/ch06/compute_unit.svg)
![多种计算单元](../img/ch06/compute_unit_cn.png)
:width:`800px`
:label:`compute-unit`
GPU计算单元主要由标量计算单元和三维向量计算单元组成。如 :numref:`SM`所示,对于每个SM其中64个32位浮点运算单元、64个32位整数运算单元、32个64位浮点运算单元均为标量计算单元。而8个张量计算核心则是专为神经网络应用设计的三维向量计算单元。
![Volta GV100 流多处理器SM](../img/ch06/SM.svg)
![Volta GV100 流多处理器SM](../img/ch06/SM_cn.png)
:width:`800px`
:label:`SM`
@@ -77,9 +77,10 @@ GPU计算单元主要由标量计算单元和三维向量计算单元组成。
为了满足飞速发展的深度神经网络对芯片算力的需求业界也纷纷推出了特定领域架构DSA芯片设计。以华为公司昇腾系列AI处理器为例本质上是一个片上系统System on ChipSoC主要应用在图像、视频、语音、文字处理相关的场景。主要的架构组成部件包括特制的计算单元、大容量的存储单元和相应的控制单元。该芯片由以下几个部分构成芯片系统控制CPUControl CPU、AI计算引擎包括AI Core和AI CPU、多层级的片上系统缓存Cache或缓冲区Buffer、数字视觉预处理模块Digital Vision Pre-ProcessingDVPP等。
昇腾AI芯片的计算核心主要由AI Core构成负责执行标量、向量和张量相关的计算密集型算子。AI Core采用了达芬奇架构 :cite:`2021Ascend`,基本结构如 :numref:`davinci_architecture`所示从控制上可以看成是一个相对简化的现代微处理器基本架构。它包括了三种基础计算单元矩阵计算单元Cube Unit、向量计算单元Vector Unit和标量计算单元Scalar Unit。这三种计算单元分别对应了张量、向量和标量三种常见的计算模式在实际的计算过程中各司其职形成了三条独立的执行流水线在系统软件的统一调度下互相配合达到优化计算效率的目的。
同GPU类似在矩阵乘加速设计上在AICore中也提供了矩阵计算单元作为昇腾AI芯片的核心计算模块意图高效解决矩阵计算的瓶颈问题。矩阵计算单元提供强大的并行乘加计算能力可以用一条指令完成两个$16\times16$矩阵的相乘运算,等同于在极短时间内进行了$16\times16\times16=4096$个乘加运算并且可以实现FP16的运算精度。
![达芬奇架构设计](../img/ch06/davinci_architecture.svg)
:width:`800px`
:label:`davinci_architecture`
昇腾AI芯片的计算核心主要由AI Core构成负责执行标量、向量和张量相关的计算密集型算子。AI Core采用了达芬奇架构 :cite:`2021Ascend`,基本结构如 :numref:`davinci_architecture`所示从控制上可以看成是一个相对简化的现代微处理器基本架构。它包括了三种基础计算单元矩阵计算单元Cube Unit、向量计算单元Vector Unit和标量计算单元Scalar Unit。这三种计算单元分别对应了张量、向量和标量三种常见的计算模式在实际的计算过程中各司其职形成了三条独立的执行流水线在系统软件的统一调度下互相配合达到优化计算效率的目的。
同GPU类似在矩阵乘加速设计上在AICore中也提供了矩阵计算单元作为昇腾AI芯片的核心计算模块意图高效解决矩阵计算的瓶颈问题。矩阵计算单元提供强大的并行乘加计算能力可以用一条指令完成两个$16\times16$矩阵的相乘运算,等同于在极短时间内进行了$16\times16\times16=4096$个乘加运算并且可以实现FP16的运算精度。

View File

@@ -20,7 +20,7 @@
:label:`sec-accelerator-naive`
依照算法:label:`algo-accelerator-gemm`编写CPU代码如代码如下。
依照算法:label:`algo-accelerator-gemm`编写CPU代码如下所示:
```c++
float A[M][K];
float B[K][N];

View File

@@ -28,9 +28,9 @@ DSA架构的多维度AI加速器通常提供了更多的指令选择三维向
- **TVM/Ansor**
TVM是陈天奇博士等人开发的开源深度学习编译框架提供了端到端的编译优化图优化/算子优化能力在工业界应用较广。在架构上主要包括Relay和TIR两层。通过Relay导入推理模型进行算子融合等图层优化通过TIR生成融合算子。在算子编译方面TVM采用了计算和调度分离的技术为不同的算子提供了不同的模板同时支持自定义模板优化特定算子类型调度。为了更进一步优化算子性能TVM支持对算子进行自动调优来生成较优的切分参数。此外为了简化用户开发模板的工作TVM在0.8版本后提供了自动调度能力Ansor通过搜索的方式为目标算子生成调度及切分参数。
TVM是陈天奇博士等人开发的开源深度学习编译框架提供了端到端的编译优化图优化/算子优化能力在工业界应用较广。在架构上主要包括Relay和TIR两层。通过Relay导入推理模型进行算子融合等图层优化通过TIR生成融合算子。在算子编译方面TVM采用了计算和调度分离的技术为不同的算子提供了不同的模板同时支持自定义模板优化特定算子类型调度。为了更进一步优化算子性能TVM支持对算子进行自动调优来生成较优的切分参数。此外为了简化用户开发模板的工作TVM在0.8版本后提供了自动调度能力Ansor通过搜索的方式为目标算子生成调度及切分参数。如 :numref:`tvm`所示:
![TVM](../img/ch06/TVM.svg)
![TVM](../img/ch06/TVM_cn.png)
:width:`800px`
:label:`tvm`
@@ -39,7 +39,7 @@ TVM是陈天奇博士等人开发的开源深度学习编译框架提供了
前面的章节介绍过Google开发的MLIR并不是一个单一的算子编译器而是一套编译器基础设施提供了工具链的组合与复用能力。基于MLIRDSA加速器厂商可以快速的搭建其定制化算子编译器。如Google论文 :cite:`vasilache2022composable`中所述当前的算子编译器大多提供了一整套自顶向下的编译优化pass包括调度优化、切分优化、窥孔优化、后端优化、指令生成等彼此之间大多无法复用导致新的场景中通常又得从头开发。而在MLIR中将功能相近的IR优化pass封装为方言Dialect并且提供了多个代码生成相关的基础方言如vector、memref、tensor、scf、affine、linalg等。硬件厂商可以基于这些方言快速构建一整套lower优化及codegen流程。如 :numref:`MLIR_Lowing`所示利用scf、affine、linalg等方言对结构化的计算IR完成循环并行优化、切分、向量化等最后基于LLVM完成指令映射。
![MLIR_Lowing](../img/ch06/MLIR-Lowing.svg)
![MLIR_Lowing](../img/ch06/MLIR-Lowing_cn.png)
:width:`800px`
:label:`MLIR_Lowing`
@@ -47,16 +47,16 @@ TVM是陈天奇博士等人开发的开源深度学习编译框架提供了
- **华为TBE/AKG**
张量加速引擎Tensor Boost EngineTBE是华为的Ascend芯片及其CANN软件栈基于TVM 开发的一套算子编译优化工具用于对Ascend芯片进行调度优化、指令映射、及后端pass优化等。不仅提供了一个优化过的神经网络标准算子库同时还提供了算子开发能力及融合能力。通过TBE提供的API和自定义算子编程开发界面可以完成相应神经网络算子的开发帮助用户较容易的去使能硬件加速器上的AI Core指令以实现高性能的神经网络计算。为了简化算子开发流程TBE还实现了一个Auto
张量加速引擎Tensor Boost EngineTBE是华为的Ascend芯片及其CANN软件栈基于TVM 开发的一套算子编译优化工具用于对Ascend芯片进行调度优化、指令映射、及后端pass优化等。如 :numref:`tbe`所示。不仅提供了一个优化过的神经网络标准算子库同时还提供了算子开发能力及融合能力。通过TBE提供的API和自定义算子编程开发界面可以完成相应神经网络算子的开发帮助用户较容易的去使能硬件加速器上的AI Core指令以实现高性能的神经网络计算。为了简化算子开发流程TBE还实现了一个Auto
Schedule工具开放了自定义算子编程DSL用于自动完成复杂算子的调度生成。此外TBE还实现了端到端的动态形状算子编译能力。
![TBE](../img/ch06/TBE.svg)
![张量加速引擎](../img/ch06/TBE_cn.png)
:width:`800px`
:label:`tbe`
AKG则是MindSpore社区的开源算子编译工具。与上述介绍的算子编译器不同AKG基于Polyhedral多面体编译技术 :cite:`bastoul2004code`支持在CPU、GPU和Ascend多种硬件上自动生成满足并行性与数据局部性的调度。Polyhedral编译技术的核心思想是将程序中循环的迭代空间映射为高维空间多面体通过分析语句读写依赖关系将循环调度优化问题转换为整数规划求解问题。 AKG的编译流程如 :numref:`akg`所示主要包含规范化、自动调度优化、指令映射、后端优化几个模块。AKG同样基于TVM实现支持TVM compute/Hybrid DSL编写的算子表示以及MindSpore图算融合模块优化后的融合子图。通过IR规范化将DSL/子图IR转换为Polyhedral编译的调度树。在Poly模块中利用其提供的调度算法实现循环的自动融合、自动重排等变换为融合算子自动生成满足并行性、数据局部性的初始调度。为了能够快速适配不同的硬件后端在Poly模块内将优化pass识别为硬件无关的通用优化与硬件相关的特定优化编译时按照硬件特征拼接组合实现异构硬件后端的快速适配。
![AKG](../img/ch06/akg.png)
![AKG](../img/ch06/akg_cn.png)
:width:`800px`
:label:`akg`

BIN
img/ch06/MLIR-Lowing_cn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
img/ch06/SM_cn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
img/ch06/TBE_cn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
img/ch06/TVM_cn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
img/ch06/V100_cn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 KiB

BIN
img/ch06/akg_cn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB