00:00
叭哈,大家好,人生得意须尽欢,不知啥时候能下班,Z米今天呢,我们来到了谷歌TPU系列,特别是第一代的详细解读,我们知道了,在整个课程里面,特别是AI系列里面呢,我们现在已经来到了国外AI芯片里面的谷歌TPU系列,在谷歌TPU系列里面的最核心的是谷歌的芯片的架构,而说到芯片架构了,就离不开谷歌最重要的一个,不管是TPU1234啊,它里面的最核心的计算就是脉动阵列,所以我们呢,在谷歌TPU第一代里面的详细的去展开脉动阵列的具体的细节,跟其他视频一样啊,我们一开始呢,看看谷歌TPU第一代的整体的电路板,那这个呢,就是它的整体的产品形态中间最核心的这一块灰色的呢,就是它的TPU的地带,用来做推理。
01:00
应用的中米觉得谷歌TP里面呢,最著名的一个应用呢,就是2015年到2017年,从阿尔法的第一代跟韩国的李事石和中国的柯洁去对战,把两个世界围棋的高手呢都打败了,这是谷歌t Bo里面非常非常重要的一个应用,在这些应用背后呢,都离不开谷歌TPU第一代芯片的架构提供澎湃的散例,特别是里面特别重要遇到的脉动阵列,那我们现在呢,来到了TPU第一代的芯片的架构呢,有点花花绿绿,我们后面呢会详细的对这个芯片的架构图呢进行打开,首先呢,第一个内容就是wait fio,就这里面这一个内容,这里面的waito呢,主要是负责把8GB的of的DDRDDR是我们的内存,这里面呢,把内存的内容呢,从DM上面呢,读取到我们的芯片上面进行一个计算。
02:00
对,那具体计算呢,就会给这个mxu的阵列进行一个核心的计算,那提到了刚才的mxu这个阵列呢,虽然你叫他MMUMSU也行啊,在谷歌后面官网宣称呢,都会叫它MSU里面呢,就以脉动阵列的方式呢,提供256乘256乘八的增加的计算,每个时钟周期呢,可以计算256个乘法,计算的结果呢,是一个半径度FP16,那这个点呢,大家需要注意的是FP16,整个MSU矩阵单元里面呢,还包含64KB的wait,还有一个双缓存的单元,那至于wait呢和双缓存的单元呢,我们后面会展开的,它更多的是用来做一个缓存回调的一个作用,接下来呢,我们看下一个内容就是accumulator,这个accumulator呢,主要是用来收集刚才MU计算之后乘法产生的16比。
03:00
测的结果,把结果存下来,实际呢,这里面的计算呢,还是很有意思的,就是每个时钟周期呢,整个MSU呢会取256个元素,而整个Mac里面去执行256乘256乘以八比特的成加,计算产生16比特的结果,存放在我们的umul,最后呢,再执行32比特的累加,也就是给我们下面的这个模块aation进行累加的整体的运算呢,就变成4096乘256乘32B就等于4MV,所以啊,Cuumul的大小呢刚好是4MV,对于控制指令来说啊,我们的坑抽了啊,因为每块芯片呢,都会有控制的模块,控制的单元,整个控制单元呢,在我们的区里面呢,分开四级的流水,控制单元呢,需要获取具体的指令,那这些指令呢,是通过PC的总线,通过host主机,也就是CPU呢,去通过四级的流水传到我们。
04:00
芯片里面,特别是TPU里面去进行控制的,而指令的来源呢,是CPU向TPU去发射指令,让他去执行的,整个的芯片的指令的架构呢,采用的是CIS卡指令,也就是我们的复杂指令集里面呢,一共有12条,诶小芯就疑问呢,为什么TP提供十几条指令,但是却用SS卡指令呢,而不用S卡,为S卡不是更简单呢?小新提出这个疑问非常有意思,因为谷歌定义的每一条指令呢,平均的时钟周期呢,需要十到20个时钟周期才能够执行完一条指令,所以这条指令呢就变得非常的复杂,于是呢,就使用了CIS卡指令,而不是用vis卡的指令,而为了去控制里面的各种各样的单元,特别是MSU啊,U啊,还有AU等模块呢,里面呢,就定义了十几个专门为神经网络推理而设计的高级指令,都比较长,所以呢,它只能用。
05:00
卡拉,那这里面呢,有五个比较核心的指令,一个是host memory weight,还有ma Mo计算,卷积计算,Activation和white host memory,那从这几个顺序可以看出来,主要是读数据,写数据,计算算激活,然后写回数据,完成我们神经网络对每一层的具体的计算。所以周米觉得这五条指令呢,是最核心的,也单独的拿出来,当然它还有其他指令啊,如果开发者和你们呢,非常关心谷歌TPU里面的指令的,可以去这条链接里面去了解谷歌TPU里面的instruction s architecture具体是怎么定义的,了解完谷歌TPU的架构图呢,我们看一下它的整体的芯片的布局啊,那我们从这个图里面呢,可以看到整个TPU呢,属于一个专用的电路里面,最大的面积呢,就是local unified buffer,还有mxu,那一个是我们的缓存,一个是我们的具体的。
06:00
计算的阵列,对于刚才讲到的指令,我们的controlt呢呢,其实只有2%的芯片电路面积,给整个片上的存储和计算的单元呢留下了更多的空间,那这个呢,就是TPU的芯片的布局了。哎,讲到口水都干了,现在已经到凌晨一点钟了,我还在录课,现在我们才来到了脉动阵列最重要的内容了,那脉动阵列的英文叫做stoic,呃,We,整体的脉动呢,就像我们的心跳一样啊,在正式进入到脉动阵列之前呢,中米想跟大家一起去回顾一下image to c的这种方式,实际上呢,我们知道啊,关于推理的场景,或者在2015年2017年的时候呢,神经网络用到的最多的是卷积神经网络,那整个卷积神经网络里面呢,实际上我们不会去真正的对我们的图片呢,或者对我们的feature map进行卷积,而是通过image的方式把我们的卷积呢,换成。
07:00
矩阵层的方式,那中米呢,在之前推理系统里面呢,给大家讲过,上面的这个呢,就是真正的原始的卷积,最终把原始的卷积转换成为image c的方式呢,变成一个具体的矩阵层的操作,去得到我们跟卷积数据上原理一致的矩阵乘法,最后再把结果c to image反过回来,变成我们的feature map,整体流程呢是这样的,而在这里面呢,我们刚才提到一个很核心的功能,就是变成了一个矩阵层的计算的,那矩阵层呢,就是一行乘以一列得到一个元素,那大家看到这个内容没有,这个图我觉得是非常非常核心的,我们把矩阵里面的每一行跟矩阵里面的每一列的方式拿出来进行计算,每一字相乘相加,相乘相加,相乘相加,最后得到我们层次的这一个拈的计算,有没有有点类似于我们的脉动阵地或者我们的脉冲呢?那面向这种计算的结构呢?谷歌的天才工程师就想到了。
08:00
诶,可不可以用1987年发明的脉冲阵念的方式呢,去提供具体的矩阵的运算呢?那于是呢,这里面呢,就引入了脉动阵念去对我们的矩阵,对我们的数据呢进行计算,控制模块呢,把我们的数据呢,一波一波根据fio队列,也就是左边蓝色这个模块留到mxu里面进行计算,最终呢,流出到下面的这个寄存器里面进行累加,然后输出整体的计算方式呢,就像心脏的脉动血液一样啊,每一次时钟周期执行一次非常庞大的计算,数据一波一波的流入,又一波一波的流出,因为整个脉动战略呢是256乘256,所以在一个时钟周期内呢,可以处理665536次矩阵的运算,每次运算的结果呢,都像脉动一样,把上一次计算的结果呢缓存起来,再进行下一次的累积,这个呢就是脉动阵列最原始的来源,也是谷歌引入的概念了,接下来我们正式的来到了脉动阵列的。
09:00
你C然PPT呢有点旧,不过呢并不影响我们的理解,首先我们看到啊,左边的这个图呢,就是M跟PM就是我们的存器memory p呢就是我们的process或者process excution里面的具体的计算的执行单元,传统的冯诺一曼呢,就是我算一次存一次,算一次,从我们的寄存器里面储一次数据在计算,不断的挽回迭代,这种呢就是我们传统的计算方式,那脉动阵列的发明的时候呢,就觉得诶我们数据可不可以不断不断的累加,然后进行计算,于是呢,就变成一个串行的方式,把我的PE计算结果呢,给下次PE1把,下次PE的计算结果呢,再给下次PE,最终计算完之后呢,再存到我们的memory里面,通过这种方式呢,提供一个脉动的阵列,那当时呢,只是一个串行的方式,而整个脉动的阵列其实非常符合我们刚才讲到的矩阵的计算,那现在呢,以一个三乘以三的矩阵去讲讲我们的脉动的阵列,那脉动的阵列呢?这里面的数据的排布比较。
10:00
有意思,我们虽然是一个三乘三的数据,也就是意味着我们假设A矩阵,哦,这是A矩阵,右边的这个是B矩阵,数据的排布呢,并不是完全相同的,我们输进去脉动阵列的时候呢,数据进行要错开,例如这里面呢,A00 a01 a02到A01 a1a12呢是错开一位进去输进去去计算的,第一次计算的时候呢,是把我们队列里面的A00呢跟B00进行相乘,相乘之后呢,就变成我们现在所示的样子,算完这个之后呢,我们下次呢,会把A01跟B10进行相乘,累加到我们第一个寄存器里面,接着在第二个寄存器里面,我们会把A02跟B20进行相乘,累加到这里面,然后呢就得到我们现在的结果,接着呢,我们还会不断的循环累加,直到呢,把所有的数据呢都加载到我们的整个脉动阵列里。
11:00
最后呢,就完成我们刚才的三个矩阵的运算,完成三个矩阵的运算之后呢,我们就会把整个矩阵的运算的结果呢,同时间的去取出来,最终经过八步阵呢,就把整个三乘三的A矩阵呢,乘以三乘三的B矩阵呢,完全的计算出了那个结果,然后输出出来,不过呢,大家有没有留意到呢,刚才的计算其实是把数据呢,一波一波的输进器一次一次的累加起来,最后再获取的,那这个时候呢,计算的延迟呢,对我们的程序或者对我们的性能来说,对我们的吞吐来说呢,就变得非常非常的重要,在实际的程序过程当中呢,其实是并不感知mxu的脉动的实现,所以呢,我们性能去计算的时候,就需要考虑到对应的延迟,因为刚才讲到数据一级一级的去传导,这意味着我们的延迟呢,会一步一步的去累加,直到计算完之后,我们才能够把所有的数据取出来。那这种。
12:00
情况呢,就会导致我们有计算的延迟,于是呢,TPU的CIS卡指令呢,就使用了四级的流水,用其他指令的执行呢,与刚才MU的指令重新堆叠,从隐藏计算的延迟,也就是我们在下一次取子的时候,准备数据的时候呢,它已经在计算呢,通过指令流水的重叠呢,从而延藏我们的时延,这也是simd里面一个非常重要的功能,从数学和数值上面来看呢,TP整个脉动阵列呢,就提供了256个乘积的计算,以对讲波的形式呢,通过阵列,那其实呢,刚才讲到的是一个比较简单的脉动阵列的原理,但实际上呢,我们在卷积神经网络里面呢,权重的数据呢,会预先的放在我们的脉动阵列里面,就先放进去,接着呢,会把数据或者中间产生的计算结果呢,以以对角波的形式呢,通过阵列进行输出,所以看到了我们会先是一个零,然后呢,以。
13:00
角波的方式输到我们的脉动阵里面,不断不断的去移动累加进行计算,诶现在我们来到了接近最后一个小内容里面,就是竞品的对比,那讲到竞品呢,肯定离不开GPU,那这里面呢,谷歌地带的TPU呢,就用CPUGPU跟TPU进行对比,在硬件并行形态里面呢,谷歌TPU1呢采用的是SIM的模式,而GPU呢采用的是SIM的模式,虽然TP采用的是D,但是经过我们刚才讲到的通过多级流水呢去掩盖我们的实,使得TPU确定性执行的方式呢,会比CPU或者GPU呢更符合神经网络的计算,有助于提高TPU的吞吐,而不是降低它的延。那这里面这个概念呢,中敏觉得非常有意思,TP的目的呢,是提高我们神经网络我们AI的计算的吞吐,而我们在之前的GPU的核心内容或者GPU的技术分享里面呢?
14:00
去讲到聚呢,是通过多级的缓存,多级的计算核心呢,去降低数据和计算的延迟,所以他们两个的目的是不一样的,那通过这个目的不一样呢,我们可以看到谷歌的TPU呢,提供一个非常庞到非常澎湃的算力,具体呢能达到92TLOS,比英伟达的K80的推理芯片呢要高出非常多倍。GPU呢主要是解决延迟,那就离不开我们看到的GPU,主要是线层分层的去执行,通过网格到分开的网格的线层块到最终的线层去执行,而这里面呢,英伟达就提出了多级的缓存,从HBN的缓存呢,到LX的缓存呢,到L的缓存,再到里面SM的just file寄存器,通过多级的缓存呢,去提升整体数据的吞吐,减少数据搬运的延迟,这个是GPU主要的核心的机制,跟谷歌TP推出出来,目的主要是提升计算的核心,计算的吞吐不是一个概念,那这里面呢,谷歌的TPU呢,它的计。
15:00
但性能却非常的夸张,每秒能达到92万亿次计算,也就是92T pro,那具体的计算方式呢,就在这里面,大家可以慢慢的去看,总米就不一一的去给大家练起来了。另外一方面呢,谷歌TPU还把片上缓存呢做的非常非常的大,从而去节省片外存的消耗,因为在2015年刚发出来的时候,或者谷歌在做项目预的时候,其实在2013年当时还没有用到HBM,而是使用DDR,所以他把片上的缓存做大,实节上我们P3传输慢的一个效率的问题。另外呢,不得不提谷歌里面的技术潜瞻性呢,是非常非常的outstanding的,里面就提出了一个量化的概念,谷歌TPU呢,主要是针对推理场景的首个芯片,使用巴比特进行一个推理,谷歌非常具有前瞻性,也是对应的就是英伟的,当时候的推尼卡K80呢,还是使用FP30的。
16:00
度,所以说谷歌呢属于引领的阶段,那通过下面这个图我们可以看到啊,Bach size呢,谷歌TPU呢是能够放的非常非常的大,所以可以放到非常大的Bach size,那这个时候呢,它的吞吐也就是对应的当时候图片呢,它的单位呢是以IPS来说,IPS是非常的高,比GPU最好的一款推理卡呢高了将近十倍,所以说当时的TPU的提出,当时TPU的DS这款加构呢是非常有意义的,讲到这其实我们接近尾声了,最后引起一些思考,那谷歌呢,在2015年的时候呢,就已经部署了TBOD1代asic的量处理器,那这意味着从芯片到立往前推,其实谷歌在2013年的时候已经去立了,所以谷歌AI系统的思想还是非常超前的,当时英伟达呢,还没有出现ten号,而当时候黄金虚呢,也是来到中国跟小米去合作,打上港手机里面的GPU。
17:00
的扣方的和CEO杰森皇也到了现场为小米手机三发布助威,有请健身房,大家好,我也是你粉,当时我的英伟他想都没想过居然能够在AI领域发光发热,因此中米呢就提出了两个简单的小问题,谷歌TP做对了什么?有哪些超越时代的事迹?那刚才这个呢,综米已经给大家去汇报过了,大家可以简单的去思考一下,过了回顾一下今天所给大家汇报的内容,第二个呢,就是针对目前的AI的发展,特别是大模型啊,这些谷歌有哪些在2015年的时候没有做到的,那今天的内容呢,就到这里为止了,谢谢各位,拜了个拜,卷的不行了,卷的不行了,AI系统的全站知识都会分享在这里,欢迎打开和吐槽给我,一键三连给我。
18:00
上年谢谢各位,拜了个拜。
我来说两句