昇腾AI处理器架构与编程
全新正版 极速发货
¥
32.2
4.7折
¥
69
全新
仅1件
作者梁晓峣
出版社清华大学
ISBN9787302534525
出版时间2019-09
装帧其他
开本其他
定价69元
货号30711334
上书时间2024-11-18
商品详情
- 品相描述:全新
- 商品描述
-
导语摘要
\"本书是华为公司官方出品!华为轮值董事长徐直军、中国工程院院士高文、中国科学院院士毛军发作序!揭开达芬奇架构AI处理器的神秘面纱、掌握强大算力的使用方法!昇腾AscendAI处理器是业界领先的人工智能运算芯片,可以应用于未来的各类人工智能场景。本书由上海交大梁晓峣教授执笔,华为公司一线技术支持,并提供了大量可以运行的算例。本书可以作为广大AI工程师的参考用书,也可以作为高等学校人工智能、计算机等专业“微处理器/微控制器/人工智能芯片”等相关课程教材。
视频公开课:爱课程或中国大学MOOC(慕课)“现代科学运算——MATLAB语言与应用”“控制系统仿真与CAD”(非严格配套本书视频,仅供读者参考)。
配书源代码:配书源代码可以到清华大学出版社网站本书页面下载。
薛定宇大讲堂系列图书将陆续出版:薛定宇教授大讲堂(卷Ⅰ):MATLAB程序设计薛定宇教授大讲堂(卷Ⅱ):MATLAB微积分运算薛定宇教授大讲堂(卷Ⅲ):MATLAB线性代数运算薛定宇教授大讲堂(卷Ⅳ):MATLAB最优化计算薛定宇教授大讲堂(卷Ⅴ):MATLAB微分方程求解薛定宇教授大讲堂(卷Ⅵ):MATLAB/Simulink仿真
\"
目录
CONTENTS
目录
第1章基础理论00
1.1人工智能简史00
1.2深度学习概论00
1.3神经网络理论0
1.3.1神经元模型0
1.3.2感知机0
1.3.3多层感知机0
1.3.4卷积神经网络0
1.3.5应用示例0
第2章行业背景0
2.1神经网络芯片现状0
2.1.1CPU0
2.1.2GPU0
2.1.3TPU0
2.1.4FPGA0
2.1.5昇腾AI处理器0
2.2神经网络芯片加速理论0
2.2.1GPU加速理论0
2.2.2TPU加速理论0
2.3深度学习框架0
2.3.1MindSpore0
2.3.2Caffe0
2.3.3TensorFlow0
2.3.4PyTorch0
2.4深度学习编译框架——TVM0
第3章硬件架构0
3.1昇腾AI处理器总览0
3.2达芬奇架构0
3.2.1计算单元0
3.2.2存储系统0
3.2.3控制单元0
3.2.4指令集设计0
3.3卷积加速原理0
3.3.1卷积加速0
3.3.2架构对比0
第4章软件架构0
4.1昇腾AI软件栈总览0
4.2神经网络软件流
4.2.1流程编排器
4.2.2数字视觉预处理模块
4.2.3张量加速引擎(TBE)
4.2.4运行管理器
4.2.5任务调度器
4.2.6框架管理器
4.2.7神经网络软件流应用
4.3开发工具链
4.3.1功能简介
4.3.2功能框架
4.3.3工具功能
第5章编程方法
5.1深度学习开发基础
5.1.1深度学习编程理论
5.1.2深度学习推理优化原理
5.1.3深度学习推理引擎
5.2昇腾AI软件栈中的技术
5.2.1模型生成阶段
5.2.2应用编译与部署阶段
5.3自定义算子开发
5.3.1开发步骤
5.3.2AI CPU算子开发
5.3.3AI Core算子开发
5.4自定义应用开发
第6章实战案例
6.1评价标准
6.1.1精度
6.1.2交并比
6.1.3均值平均精度
6.1.4吞吐量和时延
6.1.5能效比
6.2图像识别
6.2.1数据集:ImageNet
6.2.2算法:ResNet
6.2.3模型迁移实践
6.3目标检测
6.3.1数据集:COCO
6.3.2算法:YoloV3
6.3.3自定义算子实践
附录A缩略词列表
附录BAscend开发者社区及资料下载
附录C智能开发平台ModelArts简介
内容摘要
本书系统论述了基本达芬奇架构的昇腾(Asccnd)AI处理器的原理、架构与开发技术。全书共分6章,内容涵盖了神经网络理论基础、计算芯片与开源框架、昇腾AI处理器软硬件架构、编程理论与方法,以及典型案例等。为便于读者学习,书中还给出了基本昇腾AI处理器的丰富的技术文档、开发实例等线上资源。
本书可以作为普通高等学校人工智能、智能科学与技术、计算机科学与技术、电子信息工程、自动化等专业的本科生及研究生教材,也适合作为从事人工智能系统设计的科研和工程技术人员的参考用书。
精彩内容
第3章硬件架构为了满足当今飞速发展的深度神经网络对芯片算力的需求,华为公司于2018年推出了昇腾系列AI处理器,可以对整型数或浮点数提供强大高效的乘加计算力。由于昇腾AI处理器具有强大的算力并且在硬件体系结构上对于深度神经网络进行了特殊的优化,从而使之能以极高的效率完成目前主流深度神经网络的前向计算,因此在智能终端等领域拥有广阔的应用前景。
3.1昇腾AI处理器总览昇腾AI处理器本质上是一个片上系统,如图31所示,主要可以应用在与图像、视频、语音、文字处理相关的场景。其主要的架构组成部件包括特制的计算单元、大容量的存储单元和相应的控制单元。该处理器大致可以划分为:控制CPU(ControlCPU)、AI计算引擎(包括AICore和AICPU)、多层级的片上系统缓存(Cache)或缓冲区(Buffer)、数字视觉预处理模块(DigitalVisionPreProcessing,DVPP)等。处理器可以采用LPDDR4高速主存控制器接口,价格较低。目前主流片上系统处理器的主存一般由DDR(DoubleDataRate,双倍速率内存)或HBM(HighBandwidthMemory,高带宽存储器)构成,用来存放大量的数据。HBM相对于DDR存储带宽较高,是行业的发展方向。其他通用的外设接口模块包括USB、磁盘、网卡、GPIO、I2C和电源管理接口等。
图31昇腾AI处理器逻辑图当该处理器作为计算服务器的加速卡使用时,会通过PCIe总线接口和服务器其他单元实现数据互换。以上所有这些模块通过基于CHI协议的片上环形总线相连,实现模块间的数据连接通路并保证数据的共享和一致性。
昇腾AI处理器集成了多个CPU核心,每个核心都有独立的L1和L2缓存,所有核心共享一个片上L3缓存。集成的CPU核心按照功能可以划分为专用于控制处理器整体运行的控制CPU和专用于承担非矩阵类复杂计算的AICPU。两类任务占用的CPU核数可由软件根据系统实际运行情况动态分配。
除了CPU之外,该处理器真正的算力担当是采用了达芬奇架构的AICore。这些AICore通过特别设计的架构和电路实现了高通量、大算力和低功耗,特别适合处理深度学习中神经网络必需的常用计算,如矩阵相乘等。目前该处理器能对整型数(INT8、INT4)或对浮点数(FP16)提供强大的乘加计算力。由于采用了模块化的设计,可以很方便地通过叠加模块的方法提高后续芯片的计算力。
昇腾AI处理器架构与编程——深入理解CANN技术原理及应用第3章硬件架构00针对深度神经网络参数量大、中间值多的特点,该处理器还特意为AI计算引擎配备了容量为8MB的片上缓冲区(L2缓冲区),提供高带宽、低延迟、高效率的数据交换和访问。能够快速访问到所需的数据对于提高神经网络算法的整体性能至关重要,同时将大量需要复用的中间数据缓存在片上对于降低系统整体功耗意义重大。为了能够实现计算任务在AICore上的高效分配和调度,该处理器还特意配备了一个专用CPU作为任务调度器(TaskScheduler,TS)。该CPU专门服务于AICore和AICPU,而不承担任何其他的事务和工作。
数字视觉预处理模块主要完成图像视频的编解码,支持4K4K指分辨率为4096×2160像素,表示超高清分辨率视频。分辨率的视频处理,对图像支持JPEG和PNG等格式的处理。来自主机端存储器或网络的视频和图像数据,在进入昇腾AI处理器的计算引擎处理之前,需要生成满足处理要求的输入格式、分辨率等,因此需要调用数字视觉预处理模块进行预处理以实现格式和精度转换等要求。数字视觉预处理模块主要实现视频解码(VideoDecoder,VDEC)、视频编码(VideoEncoder,VENC)、JPEG编解码(JPEGDecoder/Encoder,JPEGD/E)、PNG解码(PNGDecoder,PNGD)和视觉预处理(VisionPreProcessingCore,VPC)等功能。图像预处理可以完成对输入图像的上/下采样、裁剪、色调转换等多种功能。数字视觉预处理模块采用了专用定制电路的方式来实现高效率的图像处理功能,对应于每一种不同的功能都会设计一个相应的硬件电路模块来完成计算工作。在数字视觉预处理模块收到图像视频处理任务后,会读取需要处理的图像视频数据并分发到内部对应的处理模块进行处理,待处理完成后将数据写回到内存中等待后续步骤。
3.2达芬奇架构不同于传统的支持通用计算的CPU和GPU,也不同于专用于某种特定算法的专用芯片ASIC,达芬奇架构本质上是为了适应某个特定领域中的常见应用和算法,通常称为“特定域架构(DomainSpecificArchitecture,DSA)”芯片。
昇腾AI处理器的计算核心主要由AICore构成,负责执行标量、向量和张量相关的计算密集型算子。AICore采用了达芬奇架构,其基本结构如图32所示,从控制上可以看成是一个相对简化的现代微处理器的基本架构。它包括了三种基础计算资源:矩阵计算单元(CubeUnit)、向量计算单元(VectorUnit)和标量计算单元(ScalarUnit)。这三种计算单元分别对应了张量、向量和标量三种常见的计算模式,在实际的计算过程中各司其职,形成了三条独立的执行流水线,在系统软件的统一调度下互相配合达到优化的计算效率。此外在矩阵计算单元和向量计算单元内部还提供了不同精度、不同类型的计算模式。AICore中的矩阵计算单元目前可以支持INT8和FP16的计算;向量计算单元目前可以支持FP16和FP32以及多种整型数的计算。
图32AICore架构图为了配合AICore中数据的传输和搬运,围绕着三种计算资源还分布式地设置了一系列的片上缓冲区,比如用来放置整体图像特征数据、网络参数以及中间结果的输入缓冲区(InputBuffer,IB)和输出缓冲区(OutputBuffer,OB),以及提供一些临时变量的高速寄存器单元,这些寄存器单元位于各个计算单元中。这些存储资源的设计架构和组织方式不尽相同,但目的都是为了更好地适应不同计算模式下格式、精度和数据排布的需求。这些存储资源和相关联的计算资源相连,或者和总线接口单元(BusInterfaceUnit,BIU)相连,从而可以获得外部总线上的数据。
在AICore中,输入缓冲区之后设置了一个存储转换单元(MemoryTransferUnit,MTE)。这是达芬奇架构的特色之一,主要的目的是为了以极高的效率实现数据格式的转换。比如前面提到GPU要通过矩阵计算来实现卷积,首先要通过Img2Col的方法把输入的网络和特征数据重新以一定的格式排列起来。这一步在GPU中是通过软件来实现的,效率比较低下。达芬奇架构采用了一个专用的存储转换单元来完成这一过程,将这一步完全固化在硬件电路中,可以在很短的时间之内完成整个转置过程。由于类似转置的计算在深度神经网络中出现得极为频繁,这种定制化电路模块的设计可以提升AICore的执行效率,从而能够实现不间断的卷积计算。
AICore中的控制单元主要包括系统控制模块、标量指令处理队列、指令发射模块、矩阵运算队列、向量运算队列、存储转换队列和事件同步模块。系统控制模块负责指挥和协调AICore的整体运行模式、配置参数和实现功耗控制等。标量指令处理队列主要实现控制指令的译码。当指令被译码并通过指令发射模块顺次发射出去后,根据指令的不同类型,指令将会分别发送到矩阵运算队列、向量运算队列和存储转换队列。三个队列中的指令依据先进先出的方式分别输出到矩阵计算单元、向量计算单元和存储转换单元进行相应的计算。不同的指令阵列和计算资源构成了独立的流水线,可以并行执行以提高指令执行效率。如果指令执行过程中出现依赖关系或者有强制的时间先后顺序要求,则可以通过事件同步模块来调整和维护指令的执行顺序。事件同步模块完全由软件控制,在软件编写的过程中可以通过插入同步符的方式来指定每一条流水线的执行时序从而达到调整指令执行顺序的目的。
在AICore中,存储单元为各个计算单元提供被转置过并符合要求的数据,计算单元返回运算的结果给存储单元,控制单元为计算单元和存储单元提供指令控制,三者相互协调合作完成计算任务。
3.2.1计算单元计算单元是AICore中提供强大算力的核心单元,相当于AICore的主力军。AICore计算单元主要包含矩阵计算单元、向量计算单元、标量计算单元和累加器,如图33中的加粗部分所示。矩阵计算单元和累加器主要完成与矩阵相关的运算,向量计算单元负责执行向量运算,标量计算单元主要负责各类型的标量数据运算和程序的流程控制。
图33计算单元1.矩阵计算单元1)矩阵乘法由于常见的深度神经网络算法中大量的使用了矩阵计算,达芬奇架构中特意对矩阵计算进行了深度的优化并定制了相应的矩阵计算单元来支持高吞吐量的矩阵处理。图34表示一个矩阵A和另一个矩阵B之间的乘法运算C=A×B,其中M表示矩阵A的行数,K表示矩阵A的列数以及矩阵B的行数,N表示矩阵B的列数。
图34矩阵乘法示意图在传统CPU中计算矩阵乘法的典型代码如代码31所示。
for(intm=0;mM,m++)for(intn=0;nN,n++)for(intk=0;kK,k++)C[m][n]+=A[m][k]*B[k][n];代码31CPU计算矩阵乘法该程序需要用到3个循环进行一次完整的矩阵相乘计算,如果在一个单发射的CPU上执行至少需要M×K×N个时钟周期才能完成,当矩阵非常庞大时执行过程极为耗时。
在CPU计算过程中,矩阵A是按照行的方式进行扫描,矩阵B以列的方式进行扫描。考虑到典型的矩阵存储方式,无论矩阵A还是矩阵B都会按照行的方式进行存放,也就是所谓的RowMajor的方式。而内存读取的方式是具有极强的数据局部性特征的,也就是说,当读取内存中某个数时会打开内存中相应的一整行并且把同一行中所有的数都读取出来。这种内存的读取方式对矩阵A是非常高效的,但是对于矩阵B的读取却显得非常不友好,因为代码中矩阵B是需要一列一列读取的。为此需要将矩阵B的存储方式转成按列存储,也就是所谓的ColumnMajor,如图35所示,这样才能够符合内存读取的高效率模式。因此,在矩阵计算中往往通过改变某个矩阵的存储方式来提升矩阵计算的效率。
一般在矩阵较大时,由于芯片上计算和存储资源有限,往往需要对矩阵进行分块平铺处理(Tiling),如图36所示。受限于片上缓存的容量,当一次难以装下整个矩阵B时,可以将矩阵B划分成为B0、B1、B2和B3等多个子矩阵。而每一个子矩阵的大小都可以适合一次性存储到芯片上的缓存中并与矩阵A进行计算从而得到结果子矩阵。这样做的目的是充分利用数据的局部性原理,尽可能地把缓存中的子矩阵数据重复使用完毕并得到所有相关的子矩阵结果后,再读入新的子矩阵,开始新的周期。如此往复,可以依次将所有的子矩阵都一一搬运到缓存中,完成整个矩阵计算的全过程,最终得到结果矩阵C。矩阵分块的优点是充分利用了缓存的容量,并最大程度利用了数据计算过程中的局部性特征,可以高效地实现大规模的矩阵乘法计算,分块是一种常见的优化手段。
图35矩阵B存储方式图36矩阵分块计算2)矩阵计算单元的计算方式在深度神经网络中实现计算卷积过程,关键的步骤是将卷积运算转化为矩阵运算。在CPU中大规模的矩阵计算往往成为性能瓶颈,而矩阵计算在深度学习算法中又极为重要。为了解决这个矛盾,GPU采用通用矩阵乘法(GEMM)的方法来实现矩阵乘法。例如要实现一个16×16矩阵与另一个16×16矩阵的乘法,需要安排256个并行的线程,并且每一个线程都可以独立计算完成结果矩阵中的一个输出点。假设每一个线程在一个时钟周期内可以完成一次乘加运算,则GPU完成整个矩阵计算需要16个时钟周期,这个延时是传统GPU无法避免的瓶颈。而昇腾AI处理器针对这个问题做了深度的优化。因此AICore对矩阵乘法运算的高效性为昇腾AI处理器作为深度神经网络的加速器提供了强大的性能保障。
达芬奇架构在AICore中特意设计了矩阵计算单元作为昇腾AI处理器的核心计算模块,意图高效解决矩阵计算的瓶颈问题。矩阵计算单元提供强大的并行乘加计算能力,使得AICore能够高速处理矩阵计算问题。通过精巧设计的定制电路和极致的后端优化手段,矩阵计算单元可以用一条指令完成两个16×16矩阵的相乘运算(标记为16^3,也是Cube这一名称的来历),等同于在极短时间内进行了16^3=4096个乘加运算,并且可以实现FP16的运算精度。如图37所示,矩阵计算单元在完成C=A×B的矩阵运算时,会事先将矩阵A按行存放在输入缓冲区中,同时将矩阵B按列存放在输入缓冲区中,通过矩阵计算单元计算后得到的结果矩阵C按行存放在输出缓冲区中。在矩阵相乘运算中,矩阵C的第一元素由矩阵A的第一行的16个元素和矩阵B的第一列的16个元素由矩阵计算单元子电路进行16次乘法和15次加法运算得出。矩阵计算单元中共有256个矩阵计算子电路,可以由一条指令并行完成矩阵C的256个元素计算。
图37矩阵计算单元计算示意图在有关矩阵的处理上,通常在进行完一次矩阵乘法后还需要和上一次的结果进行累加,以实现类似C=A×B+C的运算。矩阵计算单元的设计也考虑到了这种情况,为此专门在矩阵计算单元后面增加了一组累加器单元,可以实现将上一次的中间结果与当前的结果相累加,总共累加的次数可以由软件控制,并在累加完成之后将最终结果写入输出缓冲区。在卷积计算过程中,累加器可以完成加偏置的累加计算。
矩阵计算单元可以快速完成16×16的矩阵相乘。但当超过16×16大小的矩阵利用该单元进行计算时,则需要事先按照特定的数据格式进行矩阵的存储,并在计算的过程中以特定的分块方式进行数据的读取。如图38所示,矩阵A展示的切割和排序方式称作“大Z小Z”,直观地看就是矩阵A的各个分块之间按照行的顺序排序,称为“大Z”方式;而每个块的内部数据也是按照行的方式排列,称为“小Z”方式。与之形成对比的是矩阵B的各个分块之间按照行排序,而每个块的内部按照列排序,称为“大Z小N”的排序方矩阵计算的一般法则,昇腾AI处理器内部专用电路可以实现将如此排列的A、B矩阵相乘之后得到结果矩阵C,而矩阵C将会呈现出各个分块之间按照列排序,而每个块内部按照行排序的格式,称为“大N小Z”的排列方式。
图38存储格式要求
在利用矩阵计算单元进行大规模的矩阵运算时,由于矩阵计算单元的容量有限,往往不能一次存放下整个矩阵,所以也需要对矩阵进行分块并采用分步计算的方式。如图39所示,将矩阵A和矩阵B都等分成同样大小的块,每一块都可以是一个16×16的子矩阵,排不满的地方可以通过补零实现。首先求C1结果子矩阵,需要分两步计算:第一步将A1和B1搬移到矩阵计算单元中,并算出A1×B1的中间结果;第二步将A2和B2搬移到矩阵计算单元中,再次计算A2×B2,并把计算结果累加到上一次A1×B1的中间结果,这样才完成结果子矩阵C1的计算,之后将C1写入输出缓冲区。由于输出缓冲区容量也有限,所以需要尽快将C1子矩阵写入内存中,便于留出空间接收下一个结果子矩阵C2。同理,以此类推可以完成整个大规模矩阵乘法的运算。上述计算方式是最基本的分块矩阵计算方式,没有复用数据。在昇腾AI处理器的实际计算过程中,会在一定程度上复用矩阵A和矩阵B的分块矩阵。
图39矩阵分块计算除了支持FP16类型的运算,矩阵计算单元也可以支持诸如INT8等更低精度类型的输入数据。对于INT8,矩阵计算单元可以一次完成一个16×32矩阵与一个32×16的矩阵相乘运算。程序员可以根据深度神经网络对于精度的要求来适当调整矩阵计算单元的运算精度,从而可以获得更加出色的性能。
矩阵计算单元除了支持FP16和INT8的运算之外,还同时支持UINT8和U2数据类型计算。在U2数据类型下,只支持对两比特U2类型权重的计算。由于现代轻量级神经网络权重为两比特的情况比较普遍,所以在计算中先将U2权重数据转换成FP16或者INT8后再进行计算。
2.向量计算单元AICore中的向量计算单元主要负责完成和向量相关的运算,能够实现向量和标量,或双向量之间的计算,功能覆盖各种基本和多种定制的计算类型,主要包括FP32、FP16、INT32和INT8等数据类型的计算。
如图310所示,向量计算单元可以快速完成两个FP16类型的向量运算。如图32所示,向量计算单元的源操作数和目的操作数通常都保存在输出缓冲区中。对向量计算单元而言,输入的数据可以不连续,这取决于输入数据的寻址模式。向量计算单元支持的寻址模式包括了向量连续寻址和固定间隔寻址;在特殊情形下,对于地址不规律的向量,向量计算单元也提供了向量地址寄存器寻址来实现向量的不规则寻址。
图310向量运算示例如图32所示,向量计算单元可以作为矩阵计算单元和输出缓冲区之间的数据通路和桥梁。矩阵运算完成后的结果在向输出缓冲区传递的过程中,向量计算单元可以顺便完成在深度神经网络尤其是卷积神经网络计算中常用的ReLU激活函数、池化等功能并实现数据格式的转换。经过向量计算单元处理后的数据可以被写回到输出缓冲区或者矩阵计算单元中,以等待下一次运算。所有这些操作都可以通过软件配合相应的向量单元指令来实现。向量计算单元提供了丰富的计算功能,也可以实现很多特殊的计算函数,从而和矩阵计算单元形成功能互补,全面完善了AICore对非矩阵类型数据计算的能力。
3.标量计算单元标量计算单元负责完成AICore中与标量相关的运算。它相当于一个微型CPU,控制整个AICore的运行。标量计算单元可以对程序中的循环进行控制,可以实现分支判断,其结果可以通过在事件同步模块中插入同步符的方式来控制AI
— 没有更多了 —
以下为对购买帮助不大的评价