漆昊得出这个结论後,心跳加速。
为了验证他的想法,他假设一个标准的神经网络全连接层,其前向传播与反向传播的核心,本质上都是大规模的通用矩阵乘法,设输入矩阵————
经过半个小时的推导,漆昊发现整套训练流程里,超过90的算力开销全部集中在毫无技术含量的矩阵乘加这种稠密线性运算中,而剩下10左右的资源,才用於那些看似复杂的控制流操作。
「这简直是离谱他妈给离谱开门,离谱到家了。」
漆昊看着纸上的数据,忍不住低笑了起来。
cpu为什麽要设计那麽复杂的算术逻辑单元?
为什麽要用上超过70的电晶体面积去堆砌一级二级三级缓存?
为什麽要有复杂的分支预测和乱序执行机构?
因为cpu是为了应对日常电脑使用中那些复杂控制流而生的!
它追求的是低延迟。
在半导体和计算机体系结构中,有一个不可违背的物理铁律,那就是单颗晶片的矽片面积和功耗是有限的。
在有限的矽片空间里,cpu为了追求更复杂的单线程处理能力,将绝大部分电晶体面积都让渡给了庞大的多级缓存,分支预测和复杂的乱序执行控制单元。
这就直接导致了一个物理上的致命局限cpu的计算核心数量极少。
哪怕此时市面上单颗顶级的伺服器级cpu,主流物理核心最多也只有8个,用cpu去跑神经网络,就像是面对一个需要搬运上亿块砖块的大型工地,手上却只雇了8个会微积分的教授一样。
这8个教授不管有多擅长微积分,他们本质只是8个体力没那麽好的人,面对几乎望不到边的砖块,他们只能一砖一瓦慢慢挪动。
这就是最基础的物理问题,核心数量太少,并行吞吐量低得令人发指!
可神经网络的训练,真的需要这些教授吗?
不需要!
矩阵乘法不需要做任何复杂的逻辑跳转,也不需要精细的条件判断,它从头到尾只存在一种简单重复的运算规则。
既然如此,那就不应该去请8个会微积分教授,而是应该去请更多会简单运算的肌肉猛男!
教授虽好,但让他们在这里发挥作用,就太大材小用了。
「大力才能出奇蹟啊,达瓦里氏。」漆昊不由得哑然失笑。
这种以绝对数量碾压一切的逻辑,不正是卡尔采夫在《计算系统与同步算术》中推崇的苏式暴力美学吗?
用一个统一的控制器,发出一条指令,让成百上千个微型算术单元在同一时刻,同步执行一模一样的乘加操作!
为了验证自己的想法,漆昊在网络上开始找文献来验证。
遇上没什麽用文献,漆昊基本上看个重点就把它关了,然後继续看下一篇,这时一篇顶会论文进入了他的视线。
那是发表於2009年il(国际机器学习大会)上的一篇经典之作,而一作和通讯作者的署名里,赫然写着史丹福大学教授机器学习领域大牛吴恩达的名字。
漆昊眼睛一亮,迅速点开文档,开始看这篇在当下还略显冷门的学术文献。
论文里详尽的数据和严谨的实验,正如一块完美的拼图,严丝合缝地印证了他刚才的所有数学推导。
按照吴恩达团队在论文中的阐述,cpu复杂的架构注定了其电晶体的大头被分配给了缓存和分支预测,这使得它用於实际计算的物理核心极少,在面对海量矩阵运算时并行的上限极低。
而gpu则是另一条完全不同的进化路线,它内部塞满了成百上千个轻量级的计算单元,这些单元可以在统一的时钟信号下,以同步算术的模式同时执行一模一样的矩阵乘加操作,在同等功耗下,其提供的单精度浮点算力对cpu堪称是碾压级别的。
论文里给出了一个重要的实验数据:
在训练一个拥有四层结构,上亿参数规模的深度网络时,如果老老实实地使用cpu组成的计算集群,整个训练周期长达数周,耗费的电费和时间成本令人窒息,然而当他们将代码重构,移植到单张英伟达gtx280显卡上後,gpu直接将这几周的训练时间,暴力压缩到了区区1天以内!整整实现了近70倍的效率跃升!
「70倍的提速啊————」
在当下,学术界为了把算法的精确度提升个百分之一,都能敲键盘把键盘敲出火星子,而这种直接在物理效率上拉开70倍差距的物理开挂,简直让人兴奋。
漆昊高兴过後,随之而来的却是一个巨大的疑惑。

