第五章
1.p141三个设计原则
高性能
易开发
可移植
2.p143求导方式 前两个方法的结合
手动求导:用链式法则求解出梯度公式,然后根据公式编写代码,带入数值计算得到结果。
缺点:无法通用和复用,每次修改算法模型都需要重新求解梯度公式,重新编写计算代码
数值求导:利用导数定义求解【一开始就代入实际数据】
优点:可以向用户隐藏求解细节
缺点:会引入舍入误差和截断误差,无法彻底消除
符号求导:利用求导规则对表达式自动操作【先建立表达式再代入数据】
缺点:会遇到“表达式膨胀”
自动求导(当前主流深度学习框架所采用的求导方法):用户只需要描述前向计算过程,由编程框架自动推导反向计算图,完成导数计算。介于数值求导和符号求导之间
优点:首先实现了一批常用基本算子的求导表达式,灵活,完全向用户隐藏求导过程,天然契合TensorFlow采用的计算图模型(每个算子在前向计算时,也会实现并注册其反向求导方法)
3.p146控制流算子 输入输出是什么
TensorFlow使用若干基本控制流算子的不同组合来实现各种复杂的控制流场景
每个算子都在一个执行帧中执行【执行帧可以类比为函数】
5个基本的控制流算子【参照p148 图5.8和p149 图5.10理解】
Switch算子(相当于if):根据输入条件,选择将输入数据输出到真/假两个不同的端口上,当输入数据和输入条件都有效时才执行
Merge算子(相当于二选一):有两个输入,同一时刻最多只有一个输入是有效的,一旦有一个有效就会执行,将有效的输入数据输出。【正常情况下两个输入不会同时有效】
Enter算子(代表一个控制流的开始):将输入数据传入名为name的执行帧中,一旦输入有效就执行该算子,并建立执行帧【每个enter算子都是异步执行的】
Exit算子(相当于return,代表一个控制流结束):返回子帧的运算结果给父帧
Nextiteration算子(相当于是一个跳转,跳转到另一个算子继续执行,和其他的算子组合成一个完整的循环):将输入传递给执行帧的迭代器
4.p150图5.1 单设备执行,多设备执行于分布式执行的关系
单设备执行:单设备执行是指将计算任务限制在单个设备上进行,例如使用一台 CPU 或一张 GPU。在单设备执行中,计算图中的操作会按照顺序依次在该设备上执行。这种方式适用于小规模的计算任务,对于较简单的模型和数据集来说,单设备执行通常能够满足需求。
多设备执行:多设备执行是指利用多个设备(如多张 GPU)同时进行计算任务,以加快计算速度和提高性能。在多设备执行中,可以将计算任务并行地分配给多个设备,从而实现更高的计算效率。通常需要使用特定的并行计算框架或库(如 TensorFlow 的分布式策略)来管理和调度多个设备之间的数据传输和计算操作。
分布式执行:分布式执行是将计算任务分发到多台计算机或服务器上进行,并通过网络进行数据传输和通信。分布式执行通常用于处理大规模的计算任务,例如训练复杂的深度学习模型或处理大规模的数据集。在分布式执行中,不同计算机之间可以进行数据并行或模型并行,通过合作完成计算任务,并将结果汇总。分布式执行需要有适当的分布式计算框架和通信机制来管理和协调不同计算节点之间的工作。
单设备执行、多设备执行和分布式执行是在深度学习中用于处理计算任务的不同方式。单设备执行适用于小规模任务,多设备执行可加快计算速度,而分布式执行则适用于大规模任务和复杂模型。多设备执行和分布式执行都可以通过并行计算来提高计算效率,但分布式执行还涉及到计算节点之间的数据传输和通信
5.计算图本地执行的四个步骤
计算图剪枝:得到本地执行所需的最小依赖计算图
计算图分配:对计算图中的节点进行设备分配
计算图优化:TensorFlow对计算图进行系列优化操作,提高计算图运行效率
计算图切分:为每个设备创建自身的计算图
6.p169编程框架对比 三个基本模块
三个基本模块:设计 训练 验证
p170表5.2前两个的对比
第六章
1.p178计算特征【可参考第三章】
全连接算子:输入和输出一般是两组向量,输出向量组任何一个具体的输出神经元都由全部的输入神经元来决定。运算是输入向量和一组突触权重向量之间的内积,再加上偏置,然后通过激活函数输出
卷积算子:用卷积核在输入图像核子输入特征图上对局部神经元做卷积操作,即输出神经元是连接到部分输入神经元商店,不是全部的输入神经元,与全连接不同,卷积在整个卷积神经网络计算中时间占比最高。卷积层的核心计算是卷积和激活函数
池化算子:对特征进行进一步过滤抽取,输入输出特征图与卷积层类似,但没有卷积核
三种算子都是可向量化操作(向量或者矩阵的操作)
2.p181表6.1不同层的计算特点
3.p182深度学习中的两个重要特性 利用这两个特性结合循环分块方法
可解耦性:神经网络计算中的权重或者输入神经元和输出神经元的访存行为完全不一致,从而可以拆分出不同的访存数据流
可重用性:神经网络中的权重、输入神经元和输出神经元在计算过程中都可以被多次使用
循环分块:通过对循环做分块处理,可以在不增加计算量、不改变程序予以的情况下改变数据的重用距离。利用神经网络当中数据的可重用性,尽可能提高数据的重用次数,降低无效重复的访存次数
4.p185 表6.2 不同层的重用特点
5.p186数据级并行 指令级并行
数据级并行:一条指令中同时处理多个数据,例:向量指令
优点:指令数较少,因而指令流水线功耗、面积开销小
缺点:灵活性不足
指令级并行:通用cpu设计中的常用技术,每条指令只输出一个数,但是cpu可以在运行时动态调度几十条指令在cpu中同时运行
优点:灵活性高
缺点:指令流水线控制通路复杂,功耗、面积开销大
6.p187 图6.10 DLP指令集
7.p195 深度学习处理器的组成
指令集、流水线、运算部件、访存部件
8.p203影响深度学习处理器性能的因素 公式
深度学习处理器的性能:完成一个深度学习任务所需要的时间
影响因素/公式:任务所需的加减乘除等运算操作的数量*完成每个操作所需的时钟周期数/处理器的主频
=操作数量*单个操作所需时钟周期数*单个时钟周期【主频的倒数等于单个时钟周期】
每个操作所需时钟周期数——与操作功能和微结构设计有关
处理器主频——与处理器本身的结构、电路、物理工艺等有关
提高性能减少深度学习任务处理时间的方法:通过减少复杂操作来减少操作所需的时钟周期数,利用局部性原理来减少访存次数提高访存效率,多级并行(运算部件级,数据级,任务级)来提高性能
第七章
1.p207 单核深度学习处理器(DLP-S) DLP-S四个优化
深度学习处理器(DLP)
单核深度学习处理器(DLP-S):在DLP的基础上对控制部件,运算部件,存储部件做进一步优化,降低能耗提升性能
四个方面的优化;(1)在控制模块中设计了多发射队列,支持指令级并行,是没有依赖关系的指令也可以并行发射;
(2)在向量运算单元中支持更丰富的运算操作组合,提高性能和灵活性
(3)在矩阵运算单元中采用低位宽(使用较少的比特位来表示数据,从而在减少存储和计算开销的同时保持模型的性能)的运算器,并且支持稀疏数据(在给定的数据集中,只有少数非零或有效值存在的情况),减少运算能耗
(4)在存储模块中采用快速转换缓存(TLB,TLB是位于CPU内部的一个小型高速缓存,用于存储虚拟地址到物理地址的转换结果,俗称“快表”),和最后一级缓存(LLC)减少访存延迟
2.p216 DLP-M特征
多核深度学习处理器(DLP-M):(1)设计多层片上存储结构,用以逐级缓存数据,降低数据访问延迟,提高访存性能
(2)定义一套完整的多核协同通信机制和同步机制,使其能够匹配深度学习算法中的通信需求,同时减少传输数据的开销
3.p218 DLP-S发往广播总线的读写请求
单播写
单播读
多播
4.p220 DLP-C通过CDMA与其他DLP-C进行通信
5.p221 GDMA
GDMA负责DLP-C的片外访存
(1)每个DLP-C可能对应多个DRAM控制器,一次GDMA发出的请求地址需要进行路由
(2)发出的请求地址是虚拟地址,需要mmu进行虚实地址转换
(3)会利用TLB加速虚拟地址到物理地址的转换
(4)会利用LLC缩短片外访存平均延时
第八章
1.p227智能编程语言的核心要求
高开发效率
高性能
高可移植性
2.p228传统编程语言和智能计算系统存在三方面的鸿沟
语义鸿沟:传统编程语言难以高效地描述高层智能计算语义,导致智能应用程序的开发效率较低
硬件鸿沟:传统编程语言难以高效地抽象智能计算的硬件特性,导致最终生成的代码执行效率较低
平台鸿沟:智能计算硬件平台种类繁多且在不断增长,针对特定平台优化的程序难以实现跨平台可移植性,即在不同的平台上都可以支持执行并达到较高的计算效率
3.p237存储模型
在层次化抽象架构中分为:全局存储 本地存储
全局存储:典型的是处理器片外存储,如DDR,
本地存储:典型的是处理器的片上存储资源
4.p241
异构并行编程语言编译器需要为任务划分、数据分布、数据通信和同步机制等提供底层支持
5.p242运行时支持
异构运行时的主要任务计算保证任务映射和调度,即任务具体在哪个设备或计算单元上以何种顺序执行
6.p252 表8.5 常见张量计算语句
7.p255智能应用编程接口
智能应用编程接口提供了一套面向智能计算设备的高层接口,主要可以分为两大类:
(1)Kernel函数接口:重点关注任务切分及硬件映射,即如何将复杂任务切分成并发执行的多个任务并将其映射到底层硬件架构上
(2)运行时接口:重点关注设备管理、队列管理以及内存管理等。其中设备管理提供管理设备相关接口,队列管理提供队列创建、同步以及销毁等接口;内存管理主要提供内存分配和释放等接口
8.p281性能调优三个方法
使用片上存储:离运算器最近的,读写效率最高的存储单元
张量计算:将大量标量计算合并为张量计算,使用智能编程语言的张量计算语句改写代码,充分利用硬件的张量计算单元,提升程序运行速度
多核并行:将一个任务拆分到多个核上并行计算,进一步提升程序性能