一种面向深度神经网络的芯片布图规划方法
文献发布时间:2023-06-19 09:27:35
技术领域
本发明属于人工智能领域,具体涉及一种面向深度神经网络的芯片布图规划方法。
背景技术
深度神经网络的实现依赖于大量的计算资源和存储资源,这对神经网络实现带来了诸多挑战。CPU有限的计算单元和串行的执行方式不能提供足够的计算能力,GPU具有并行处理的优点,虽可保证算力,但其功耗大,只能应用于服务器端。随着人工智能逐渐向深度学习领域发展,神经网络的深度不断加深,数据量也呈现几何级增长速度,海量的数据对芯片的计算能力也随之提出了更高的要求,通过改进硬件性能和芯片架构研发人工智能专用芯片成为行业重要的努力方向。
晶圆级引擎CerebrasWSE是目前史上最大的人工智能芯片,与其他芯片相比,它包含了更多的个核心(约400000个,排列成633×633的正方形),提供18Gigabytes的片上内存,内存带宽高达9Petabytes/s。它可以在较低的延迟和较少的功耗下实现快速、灵活的计算。WSE的计算资源和存储资源有限,在有限的资源下,实现高性能、低功耗的神经网络加速是当下需解决的技术问题。
Cerebras软件平台专门为加速人工智能计算而设计,它主要包括机器学习框架、Cerebras图编译器(CGC)、高性能内核库和内核API以及支持调试和分析的开发工具。对于一个指定的深度神经网络,CGC利用XLA将TensorFlow图编译成一系列专门为给定神经网络模型生成的计算内核,并将其转化为中间表示形式。CGC将中间表示与Cerebras核库中的核进行适配,适配结果是一个描述神经网络拓扑结构的核图。核图由两部分组成,一是罗列指定神经网络中所有核的类型和输入参数,每个核执行神经网络中对应节点的特定计算任务。二是刻画核之间的连通关系,即核图是一个无环有向图。然后,CGC将计算资源分配给核图中的每个核,并将每个核映射到芯片WSE的一个矩形物理区域。最后,将每个网络的通信路径配置到fabric上。
上述编译流程中,最关键的部分是将多少计算资源分配给核图中的每个核,即要确定将描述神经网络拓扑结构核图中的每个核映射到WSE上的二维矩形计算模块的形状和位置。
核图由两部分组成,一是罗列指定神经网络中所有的核的类型和输入参数,二是刻画核之间的连通关系的连接信息。
Cerebras软件平台的核库中主要包括三种类型的核:conv、dblock和cblock,并指定其性能函数。比如核库中卷积核conv的性能函数conv.perf有11个参数,其中(H,W,R,S,C,K,T)是形式参数,它们分别指的是输入图像的高和宽(H,W)、感受野大小(R,S)、输入和输出数据(C,K)和步幅大小T,这些参数作为神经网络的输入,在编译过程中不发生改变。另外四个参数(h’,w’,c’,k’)是执行参数,它们决定核最终布局到WSE上的形状、执行时间和内存,需要通过编译求得。因此要在WSE芯片上进行布局的是形状大小可塑的矩形模块。
图库中核dblock的高、宽、时间和内存依赖于卷积核conv1、conv2、conv3的高、宽、时间和内存,核cblock依赖于conv1、conv2、conv3、conv4的。简单地,可以理解为核dblock由3个核conv组成,核cblock由4个核conv组成。
本发明中要解决的面向神经网络的布图规划问题与传统的芯片布图规划问题不同。在芯片规划中,传统的布图规划决定子电路或模块的外形和布置,以及外部端口、IP或宏模块的位置。传统的布图规划中,给定n个模块B={b1,b2,...,bn}及n个模块的网表,其中模块可以是有固定尺寸和面积的硬模块,也可以是面积固定而长宽比在一定范围内改变的软模块。在布图优化阶段,要求在满足某些物理设计的前提下,为每个模块选择合适的形状和位置,以使得全局边界框面积和总线长的加权和最小化。布图规划中较长的互连线可能会增加信号传播延迟,因此高性能的电路布局应尽可能地缩短互连线的长度。为简化布局总线长的计算,我们将核图中所有相互连接的核的中心之间的曼哈顿距离近似作为总线长。在传统的布图规划问题中,每个模块可布局到的位置坐标是连续的,而本发明由于WSE芯片的设计,每个模块可布局到的位置坐标必须是离散的整数点坐标。此外,面向深度神经网络的芯片布图规划问题额外考虑时间、内存和适配器损失等约束。注意到,矩形模块越大,即处理该计算任务的资源越多,从而速度越快。故本发明的布图要求在不超过芯片的计算资源和存储资源的前提下,尽可能多的使用计算资源,即最大化布图面积,这与传统的布图规划中最小化全局边界框面积约束不同。从物理设计角度而言,除了面积最大化外,在布图规划过程中,任意矩形模块之间不能有重叠,所有模块须均被放置在芯片内部。
发明内容
发明目的:为了解决上述问题,本发明提供一种面向深度神经网络的芯片布图规划方法,在有限的资源下,提高神经网络算力。
技术方案:本发明提供一种面向深度神经网络的芯片布图方法,具体包括以下步骤:
(1)估计神经网络对应的核图中所有核的面积;
(2)根据实际数据和核库,计算在输入图像高度、宽度、特征数和输出四个维度上的资源分配数量h’、w’、c’和k’;
(3)针对神经网络中的核全是conv的情况和神经网络中的核部分是dblock部分是cblock的情况,对参数c’,k’进行优化,得到神经网络中每一层核对应的符合预设条件的较好的矩形模块形状;
(4)采用核贪婪排序算法确定摆放核图中所有核的摆放顺序;
(5)基于步骤(4)中的线性顺序,对步骤(3)获得的矩形模块进行布局:采用核适配增长算法,迭代地增加核对应的矩形模块,使得下一个将被布局的模块被放置到使布图规划目标函数最优的地方,直到所有核被分配完。
进一步地,所述步骤(1)的实现过程如下:
由核库中核conv的性能函数:
Area
得:
每个核理想执行时间为myT,则:
对于核dblock:
对于核cblock:
其中,H,W,R,S,C,K,T分别代表输入图像的高和宽、感受野大小、输入和输出数据和步幅大小。
进一步地,所述步骤(2)的实现过程如下:
计算time的式中有上取整函数ceil,因此有
R=S∈{1,2,3},粗略地,令
可以确定参数:
又因为memory
取:
进一步地,所述步骤(3)的实现过程如下: (31)神经网络中的核全是conv的情况:指定神经网络中的核全是conv时,其中间层的层数主要有52层和100层两种结构;若中间层层数是52层时,令 (32)神经网络中的核部分是dblock部分是cblock的情况:当指定神经网络中的核部分是dblock部分是cblock时,其中间层的层数主要有16层和32层两种结构;计算得到dblock的参数c1’,c2’,c3’,k1’,k2’,k3’以及cblock的参数c1’,c2’,c3’,c4’,k1’,k2’,k3’,k4’; 对每个核dblock的四个执行参数h’,w’,c’,k’计算出该核的height和width,并记karea=height*width; 对karea,Area 对karea,Area 进一步地,所述步骤(4)的实现过程如下: 给定神经网络模型被适配成一个无环有向图,其中的有向边指定了输入信号要传输的方向;一个核conv被放置的顺序直接依赖于与该conv核有连接的有向边;定义新边为连接两个均未被放置的核的有向边;定义终边为由一个已被放置的核指向一个未被放置的核的有向边;要使核图中有连接的核之间的曼哈顿距离尽可能的小,在每次增加核的过程中,终边和新边数量之差Gap最大的核应被选择作为下一个被摆放的核;若Gap最大的核有多个,选取具有最多终边的核;如果终边最多的核仍不止一个,则选取边最少的核;如果仍然有多个选择,则任意选取一个核作为下一个核进行摆放,从而得到给定神经网络中所有核的摆放次序order。 进一步地,所述步骤(5)的实现过程如下: 确定核的摆放次序order后,将第一个核的第一种形状摆放在芯片的左上角,再摆放剩余的核,使得后一个被摆放的核与核图中有连接的且已经被摆放的核之间的曼哈顿距离及当前cost值的加权和最小;全局遍历order中第一个核的所有形状,局部遍历剩余核的形状。 有益效果:与现有技术相比,本发明的有益效果:本发明通过对计算资源的合理分配和布局,从硬件层面上有效提升深度学习算力,对任一指定神经网络的计算起到显著的加速效果,从而达到良好的计算性能;在计算分配方案时具有良好的时间复杂度,平均测试一个神经网络的时间只要0.2秒,优于当前主流方法的平均时间51.6秒;此外,在考虑适配器cost的情况下(即cost的权重非零),本发明最终得到的平均加权值和为22683.75,远远低于当前主流办法的30012.875,所计算解的质量大都优于现存的已知布局方案。 附图说明 图1为本发明的流程图。 具体实施方式 下面结合附图对本发明作进一步详细说明。 本实施方式中涉及大量参数,现将各参数作如下说明,如表1所示: 表1参数说明表
核图描述了一组核以及它们之间的有向连接,则其映射到的矩形模块之间也存在有向关系。在芯片的布图规划过程中,长的互连线可能会增加信号传播延迟,因此高性能的电路布局应尽可能地缩短互连线的长度。为简化布局总线长的计算,将所有相互连接的矩形模块的中心之间的曼哈顿距离近似作为总线长,因此核布局问题的一个优化目标是最小化总线长l。其中,在平面上,坐标(x d(i,j)=|x 对于核conv,它的性能函数conv.perf的执行参数(h’,w’,c’,k’)越大,该内核的运行时间就越小。同理,对于另外两种类型的核dblock和cblock的性能函数亦是如此。由性能函数,可以计算得到每个核的运行时间。然而在并行计算中运行时间最长的核决定了引擎的总体性能,因此核布局问题的另一个目标是最小化核的最长执行时间DeltaT。 最后一个影响芯片加速性能的因素是适配器损失值(adaptercost),它表示相邻两核之间数据传输的匹配代价,可以通过判断某些指定执行参数是否相等来近似估计。之所以考虑适配器损失值,是因为执行参数决定核的高度,当相邻核被分配的计算资源是有相同的高度的矩形模块时,可以实现信息传输更加高效。最终我们要得到一个指定神经网络消耗的适配器总个数,adaptercost越小,加速器性能越好。在这里分两种情况: 1)若核图中全是卷积核conv,则比较相邻核之间的执行参数h’,w’,c’是否相同。 2)若核图中是核dblock和cblock的混合,则比较前一个核的h’,w’,c 为方便衡量布局的加速器的性能,根据实际分别为上述三个主要优化目标指定不同的权重,即对于不同的神经网络,最长核执行时间DeltaT、总线长l和适配器损失cost会被指定不同的权重值。此外也指定每个核的内存上限为memlimit=24576,最终三个优化目标的加权和值越小,则布局的结果对神经网络算力的加速效果越好。 本发明提供一种面向深度神经网络的芯片布图规划方法,具体包括以下步骤: 步骤1:估计神经网络对应的核图中所有核的面积。 由核库中核conv的性能函数: Area
为方便面积估计,这里将“≈”视为“=”,则:
从而:
为每个核人为指定一个理想执行时间myT,则:
对于核dblock,conv1、conv2、conv3的h’和w’相同,由height=h′w′c′ 可知,若使得该dblock核是矩形形状,则必须有c′
故:
同理,对于核cblock,若使得该cblock核是矩形形状,则必须有c′
故:
实际上任一指定的神经网络中核的类型只有两种情况,一种全都是conv核,另一种部分是dblock核部分是cblock核。不论是哪种情况,对任意一个神经网络,利用上述推导的Area 至此,得到指定神经网络中每个核的预估面积。 步骤2:根据实际数据和核库,计算在输入图像高度、宽度、特征数和输出四个维度上的资源分配数量h’、w’、c’和k’。 参数h’和w’的确定基于以下几个观察: 观察1:H=W∈{7,14,28,56,112},C,K∈{64,128,256,512,1024,2048},C,K的值比H,W大很多。因此C,K对于time和memory的贡献更大一些,而H,W相对较小。相应地,c’和k’也应该大一些,否则time和memory会很大。又由于上面预估面积是固定的,因此总体上说,c’和k’的值比h’和w’的值要大。 观察2:计算time的式中有上取整函数ceil,因此有 表2为参数h’,w’效果较好的可能取值
根据memory确定参数c’和k’,由:
实际上,R=S∈{1,2,3}。粗略地令:
可以确定参数:
又因为memory
取:
至此粗略地得到参数h’,w’,c’,k’的值。 步骤3:针对神经网络中的核全是conv的情况和神经网络中的核部分是dblock部分是cblock的情况,对参数c’,k’进行优化,得到神经网络中每一层核对应的符合预设条件的较好的矩形模块形状。 首先讨论神经网络中的核全是conv的情况。 当指定神经网络中的核全是conv时,其中间层的层数主要有52层和100层两种结构。若中间层层数是52层时,令 对每个核conv的四个执行参数h’,w’, 表3为karea,Area
对于指定神经网络中的核全是conv的情况,通过上面比较,每个核只保留两组参数,即每个conv核有两种符合条件的不同形状。因为实际中conv核算出的karea实际面积以及Area 接着讨论神经网络中的核部分是dblock部分是cblock的情况,讨论过程类似于conv核。当指定神经网络中的核部分是dblock部分是cblock时,其中间层的层数主要有16层和32层两种结构。根据上面得到的参数h’,w’和c’,k’的计算公式:
可以计算得到dblock的参数c1’,c2’,c3’,k1’,k2’,k3’以及cblock的参数c1’,c2’,c3’,c4’,k1’,k2’,k3’,k4’;如表4所示: 表4核dblock和cbblock的参数优化
对每个核dblock的四个执行参数h’,w’,c’,k’计算出该核的height和width,并记karea=height*width。接着对karea,Area 表5 karea,Area
Area (1)如果height>H (2)如果karea>Area (3)如果karea<Area 如果Area 同理,对每个核cblock的四个执行参数h’,w’,c’,k’计算出该核的height和width,并记karea=height*width。接着对karea,Area 表6 karea,Area
对于指定神经网络中的核部分是dblock部分是cblock的情况,通过上面比较,每个核只保留三组参数,即每个dblock核和cblock核有三种符合条件的不同形状。 步骤4:采用核贪婪排序算法确定摆放核图中所有核的摆放顺序。 给定神经网络模型被适配成一个无环有向图,其中的有向边指定了输入信号要传输的方向。一个核conv被放置的顺序直接依赖于与该conv核有连接的有向边。对于这样的有向边定义如下: ·新边:连接两个均未被放置的核的有向边。 ·终边:由一个已被放置的核指向一个未被放置的核的有向边。 因为给定的神经网络中,一个核可能指向多个其他的核,也有可能被多个其他核指向,因此,考虑到要使核图中有连接的核之间的曼哈顿距离尽可能的小,在每次增加核的过程中,那些终边和新边数量之差最大的核应被选择作为下一个被摆放的核。称终边和新边数量之差为Gap。若Gap最大的核有多个,选取具有最多终边的核;如果终边最多的核仍不止一个,则选取边最少的核;如果仍然有多个选择,则任意选取一个核作为下一个核进行摆放。这样就得到给定神经网络中所有核的摆放次序order。 步骤5:基于步骤4中的线性顺序,对步骤3获得的矩形模块进行布局:采用核适配增长算法,迭代地增加核对应的矩形模块,使得下一个将被布局的模块被放置到使布图规划目标函数最优的地方,直到所有核被分配完。 确定核的摆放次序order后,将第一个核的第一种形状摆放在芯片的左上角,然后再摆放剩余的核,使得后一个被摆放的核与核图中有连接的且已经被摆放的核之间的曼哈顿距离及当前cost值的加权和最小。由于前面步骤中每个核得到两种或者三种可能的形状(核conv有两种,核dblock、cblock有三种),考虑到程序运行时间,在这里全局遍历order中第一个核的所有形状,局部遍历剩余核的形状。即,假设神经网络中的核全是conv的情况,每个核有两种形状良好的矩形模块。假设该神经网络所有核的摆放次序为order=