漆昊得出这个结论后,心跳加速。
为了验证他的想法,他假设一个標准的神经网络全连接层,其前向传播与反向传播的核心,本质上都是大规模的通用矩阵乘法,设输入矩阵————
经过半个小时的推导,漆昊发现整套训练流程里,超过90%的算力开销全部集中在毫无技术含量的矩阵乘加这种稠密线性运算中,而剩下10%左右的资源,才用於那些看似复杂的控制流操作。
“这简直是离谱他妈给离谱开门,离谱到家了。”
漆昊看著纸上的数据,忍不住低笑了起来。
cpu为什么要设计那么复杂的算术逻辑单元?
为什么要用上超过70%的电晶体面积去堆砌一级二级三级缓存?
为什么要有复杂的分支预测和乱序执行机构?
因为cpu是为了应对日常电脑使用中那些复杂控制流而生的!
它追求的是低延迟。
在半导体和计算机体系结构中,有一个不可违背的物理铁律,那就是单颗晶片的硅片面积和功耗是有限的。
在有限的硅片空间里,cpu为了追求更复杂的单线程处理能力,將绝大部分电晶体面积都让渡给了庞大的多级缓存,分支预测和复杂的乱序执行控制单元。
这就直接导致了一个物理上的致命局限cpu的计算核心数量极少。
哪怕此时市面上单颗顶级的伺服器级cpu,主流物理核心最多也只有8个,用cpu去跑神经网络,就像是面对一个需要搬运上亿块砖块的大型工地,手上却只雇了8个会微积分的教授一样。
这8个教授不管有多擅长微积分,他们本质只是8个体力没那么好的人,面对几乎望不到边的砖块,他们只能一砖一瓦慢慢挪动。
这就是最基础的物理问题,核心数量太少,並行吞吐量低得令人髮指!
可神经网络的训练,真的需要这些教授吗?
不需要!
矩阵乘法不需要做任何复杂的逻辑跳转,也不需要精细的条件判断,它从头到尾只存在一种简单重复的运算规则。
既然如此,那就不应该去请8个会微积分教授,而是应该去请更多会简单运算的肌肉猛男!
教授虽好,但让他们在这里发挥作用,就太大材小用了。
“大力才能出奇蹟啊,达瓦里氏。”漆昊不由得哑然失笑。
这种以绝对数量碾压一切的逻辑,不正是卡尔采夫在《计算系统与同步算术》中推崇的苏式暴力美学吗?
用一个统一的控制器,发出一条指令,让成百上千个微型算术单元在同一时刻,同步执行一模一样的乘加操作!
为了验证自己的想法,漆昊在网络上开始找文献来验证。
遇上没什么用文献,漆昊基本上看个重点就把它关了,然后继续看下一篇,这时一篇顶会论文进入了他的视线。
那是发表於2009年icml(国际机器学习大会)上的一篇经典之作,而一作和通讯作者的署名里,赫然写著史丹福大学教授机器学习领域大牛吴恩达的名字。
漆昊眼睛一亮,迅速点开文档,开始看这篇在当下还略显冷门的学术文献。
论文里详尽的数据和严谨的实验,正如一块完美的拼图,严丝合缝地印证了他刚才的所有数学推导。
按照吴恩达团队在论文中的阐述,cpu复杂的架构註定了其电晶体的大头被分配给了缓存和分支预测,这使得它用於实际计算的物理核心极少,在面对海量矩阵运算时並行的上限极低。
而gpu则是另一条完全不同的进化路线,它內部塞满了成百上千个轻量级的计算单元,这些单元可以在统一的时钟信號下,以同步算术的模式同时执行一模一样的矩阵乘加操作,在同等功耗下,其提供的单精度浮点算力对cpu堪称是碾压级別的。
论文里给出了一个重要的实验数据:
在训练一个拥有四层结构,上亿参数规模的深度网络时,如果老老实实地使用cpu组成的计算集群,整个训练周期长达数周,耗费的电费和时间成本令人窒息,然而当他们將代码重构,移植到单张英伟达gtx280显卡上后,gpu直接將这几周的训练时间,暴力压缩到了区区1天以內!整整实现了近70倍的效率跃升!
“70倍的提速啊————”
在当下,学术界为了把算法的精確度提升个百分之一,都能敲键盘把键盘敲出火星子,而这种直接在物理效率上拉开70倍差距的物理开掛,简直让人兴奋。
漆昊高兴过后,隨之而来的却是一个巨大的疑惑。
既然吴恩达教授早在2009年就用这篇顶会论文向全世界展示了gpu的威力,那为什么时至今日,陈工他们这些一线的工程技术人员,依然把用cpu训练神经网络当成约定俗成的標准答案?
为什么这项能让效率起飞的技术,如今依然只是停留在少数顶尖高校的实验室里,並没有在工业界和学术界得到大规模的认同与落地?
如果真的有用,不是应该早就商业化了吗?
总不能说资本眼瞎吧?
这样不合常理,不对,有坑!
漆昊脑子冷静了下来。
他现在得知道坑在哪儿。
有了方向的漆昊,搜索信息变得有目的了,很快他就梳理一些关键点。
如今的计算机视觉圈子,大家普遍崇拜的是手工特徵算子,像是sift、hog、lbp,然后再搭配一个数学上的支持向量机svm或者隨机森林。
在主流学者眼里,神经网络本身就是容易过擬合还需要人肉调参的黑箱子,没有海量的標註数据支撑,大家觉得神马深层模型都是浮云,自然也就没人愿意为了这个非主流方向去专门花时间折腾显卡了。
毕竟,gpu它目前只认识游戏画面,要它去训练神经网络,你必须教它,光是这一步,都要人老命了。
更重要的是,现在最好的gtx580显存才1.5gb。
所以,想要在1.5gb的显存限制下,既避开重新写原生cuda训练代码的坑,又要实现一定的机载视觉的实时计算,所有人都在这里卡住了。
如果全连接网络会导致参数爆炸,那就必须从数学上限制参数的连接方式。
空间局部性和权重共享,漆昊想了下,这不就是卷积神经网络嘛!
通过局部感受野和卷积核復用,可以將需要存储的参数量大量压缩到只有数万的级別,几个g的大小也同时被压缩,1.5g的显存好像也能装下!
可是,卷积计算在gpu里怎么高效率跑起来?
二维卷积需要在一个滑动窗口里不断做局部的乘加,如果用传统的c循环思路去gpu里写多重嵌套循环,gpu的线程束会发生严重的访存衝突,最后跑出来的速度可能连cpu都不如。
漆昊想到这里有些卡住了,他又只能在网上找神经网络和图像卷积相关的文献来看。
实验室里面的其他人此时其实因为课题快要结束的事,都鬆了一口气,坐在漆昊斜对面的李杰正悄悄把手移向滑鼠,准备点开刚刚更新的游戏,而隔壁工位的同门则在用手机刷著天涯论坛,嘴角掛著摸鱼人特有的安详微笑。
然而,他们很快就注意到了漆昊这边写草稿的动静。
李杰一慌,游戏图標硬是没敢点下去。
他偏过头,和旁边的同门师弟交换了一个惊恐的眼神。
“哎,漆神这是怎么了,不是已经解决问题了吗?”师弟努力小声问道。
“不知道啊?”李杰心里咯噔一下,他突然不敢继续心安理得地摸鱼了。
在科研狗的世界里,最让人胆寒的现象莫过於,大家都在玩,只有学神在疯狂看文献。
这种恐慌感一旦蔓延,杀伤力堪比一觉醒来,错过高考时间。
为了打探敌情,李杰悄悄站起身,假装拿著水杯去饮水机接水,在路过漆昊身后时,他偷感十足地飞快瞅了一眼。
只见那张草稿纸上,写满了各种推导公式,嗯,那些公式重重叠叠的,他看不出写的是什么,也怀疑漆昊是否也看得清楚。
回到座位上,李杰感觉杯里的白开水都变苦了。
他默默关掉了游戏窗口,从电脑里翻出一个马了很久英文文献pdf,开始尝试著看。
“怎么样?”旁边的师弟凑过来。
李杰一脸凝重:“不知道漆神在干嘛,不过大神在前,你还有心情玩天涯论坛吗?”
师弟犹豫了下,关掉了手机,默默打开了matlab。
其他人看见后,也不好再摸鱼了。
整个实验室的气氛,在漆昊毫无自觉的学神气场压迫下,硬生生卷了起来。
大家原本高高兴兴准备开启咸鱼模式,结果旁边坐著一个大佬正在疯狂学习求进步,他们想躺平也躺不下去啊!
此时的漆昊,根本不知道周围人內心世界如此丰富,他只一门心思看著草稿纸上那张模擬滑动窗口卷积的矩阵示意图。
卷积核在图像上一格一格地滑过去,乘以局部像素。
等等!
每一块滑动窗口里的图像,展开后都是一个列向量,如果把所有的窗口拼一起,那就是一个巨型列向量!
也就是说可以將输入图像里每一个被卷积核覆盖到的局部小方块,横向拉平展开成一个长长的列向量。
隨著滑动窗口的推移,整张图像就被重新拼装成了一个由无数个列向量並排组成的巨大矩阵,这个过程在数学上可以被称为im2col也就是图像转列!
然后那个卷积核,也平铺展开,作为另一个矩阵的行向量。
这样一来,原本复杂的二维卷积运算,在经过im2col的数学转换之后,竟然变成了一个通用稠密矩阵乘法!
“用这一步数学变换,算是解决了一个门槛问题。”
漆昊刚才查资料的时候,了解到英伟达打包全套优化数学库,比如cublas。
这个英伟达打包的官方数学库,对於此时的漆昊来说,简直就是瞌睡送来了枕头,给力到了极点。
作为英伟达官方打造的数学库,cublas內部的cublassgemm函数早就被架构师针对fermi硬体架构进行了优化,这可以帮漆昊省下一定的时间。
英伟达的那位皮夹克老板,在商业策略上是真有远见!
英伟达之所以费尽心思去打包cublas,本质上就是为了降低开发门槛,把全球的高校,科研院所里那些数学和物理学界的人,牢牢吸引绑定在cuda的生態圈里。
一旦习惯了这种高效便利的开发生態,谁还会愿意去折腾隔壁amd家那个?
“行了,万事俱备,只欠东风,现在最关键的问题是我的东风在哪儿?”
漆昊现在需要两块gtx580显卡来搭建一个双卡並行的测试节点,他转过头,点开自己电脑的硬体属性。
【集成显卡:inteihdgraphics】。
居然是集成显卡,不过这也正常,漆昊有些无奈地接受了这个现实。
为了寻找能够借用的算力神器,漆昊站起身,將目光投向了李杰。
李杰察觉到有人靠近,整个人一激灵,睡意瞬间被嚇到了九霄云外,他战战兢兢地抬起头,发现是漆昊。
“漆神?有什么需要我协助吗?”李杰有些慌张,心想难道是自己刚才摸鱼被大佬给看穿了?
“没事,別紧张。”漆昊温和地笑了笑,“我就是想问问,你电脑上装的显卡是什么型號?”
“啊?显卡?”
李杰愣住了,他甚至怀疑自己的耳朵是不是出了问题。
他忙不迭地在桌面上点了点,扯出设备管理器瞅了一眼,弱弱地答道:“是集显,intei的,漆神,这显卡有什么问题吗?”
“没事,你继续看文献吧。”漆昊隨后又在实验室里转了一圈,挨个询问了一遍。
然而,询问的结果让他颇感无奈。
这里因为是数院和企业联合实验室,整个实验室的电脑清一色內置的都是集成显卡,根本贪不到任何可以用来跑高强度计算的消费级旗舰游戏卡。
漆昊略微思索了一下,突然想起了自己第一天来到这个课题组时,陈工跟他说过,想要什么设备儘管提,他可以负责採购。
漆昊想到这里,理了个清单,转身朝著陈工那边走去。
此时,陈工正守在服打器前,为那比蜗牛爬还慢的神经网络叠代仫度发愁。
“陈工,我需要申请採购设备。”
“没问题啊!想要什么?”
陈工豪气干云地一挥手:“只要你需要的,预算不是问题!”
“我需要两块英伟达的gtx580显卡,还有一些其他配套的东西,我列了个清单。”
陈工接过清单,有些愣住。
gtx580?
身为半个仇件发烧友,陈工对这款显卡可太熟悉了。
这玩意儿是英伟达去年底刚发布的旗舰级游戏卡,单张价格高达3999元,不仅贵,而且因为產能有亥,市面上货源极少,大多数时候只有那些狂热的游戏发烧友,为了流畅运行游戏大作才会去抢购,陈工一时间风中凌乱,整个人陷入了疑惑。
他实在无法將漆昊和游戏发烧友联繫在一起。
看著清单上的东西,感觉像是要组装工作站。
这事情怎么看怎么都不对劲。
漆昊一个纯数学霸需要这个吗?
陈工张了张嘴,想要问问漆昊拿这玩意儿到底要干嘛。
但转念一想,自己作为一个带队的工程负责人,在学术层面上已经被漆昊连续上课好几次了,这要是再多问两句,万一漆昊隨口吐出一堆数学名词,他岂不是又要当场出丑?
在学霸面前,多说多错,少说少错,保持深沉才是唯一的出路!
想到这里,陈工摆出一副高深莫测的表情,点井道:“gtx580是吧,没问题,我这就上系统给你走採购申请!”
由於两块gtx580总金额超过了5000元,无法在部门靠部直接消化,必须走学校和科研伍的固定资產审批流程。
果不其然,第二天上午,科研伍专门负责设备採购的老孙,就一脸狐疑地把电话直接打到了陈工的手里。
“我说陈工啊,你老实交代,你是不是想犯原则性错误?”
电话那井,老孙一妥口就直接说了:“你瞅瞅你提交的这个採购申请,gtx580旗舰独立显卡,两块,共计7998元,陈工下个月《孤岛危机2》就要发布了,你是不是元算用公款攒一台顶內游戏机,在实验室里带井搞测试啊?”
陈工一听,急道:“哎哟,老孙,你这可真是冤枉我了,我老陈什么时候动过公款的一分一毫?这显卡真不是给我买的!”
“不是你?那是谁?你们组里那些研究生,他们有那个胆子吗?”
“是漆昊!数学学院过来的漆昊指名道姓要的,应该是要组装工作站!”陈工分辩道。
老孙笑了一声:“老陈,你贪藉口也贪个头谱点的行不行?漆昊是谁?那是数院的大神,是一个连吃饭都在推导数学的人,你跟我说,一个满脑子都只有各种方程的数学学霸,跑来跟我们要两块市面上最顶级的游戏显卡组装工作站?”
“我看就是你贪藉口!”
陈工有些哭笑不得。
为什么学霸要高端显卡,受伤的人却是我?
最后陈工只能无奈说:“老孙,这真不是妥玩笑,漆昊同学昨天下兆亲自贪的我,他肯定有用,你赶紧给批了!
>