一张巨帆怎么拼起来,也能帮电脑学会说话
海边小作坊里,风把半成品的帆布甩得啪啪响。一个人摊不平,师傅们干脆把帆分成几块布片,分别用沙袋压住,各自缝一段。缝到接缝处就停一下,对齐边线,拉紧线头,松紧得一样才行。
训练很大的语言程序也会卡在同样的地方。一张显卡不光要装下“本体”的一堆数字,还要装下它学习时记账用的额外数字。以前常见的退路是把它做小点,或拆到很多机器上,但机器之间要等来等去,还要接很多“管子”。
新点子像换了切布的方式。不是整块整块地分,而是把每个重复的小“模块”里面也切开。对应得很清楚:每块帆布片像模块里的一片计算;每条缝线像一大段乘法;接缝对齐就是机器把各自算出的半成品合在一起。选好切口,大活就能让很多人分担,只在少数接缝处碰头。
模块里最费劲的两块活,一块像“加厚再压扁”的通道,另一块是让它在一句话里挑重点的那部分。分法让每台机器先把自己那片从头做到尾,像先把一块布缝完整,再去对接缝。前一块里,先把一次大乘法切开,让每台机器能在自己那片上做那一步“挤一挤”的变化,再把下一次乘法排好队,最后只用加在一起一次。挑重点那块也一样,把不同的“关注小组”分到不同机器上,各自算完,再按同样的方式合回去。
为了少跑接缝,有些零碎活干脆每台机器都做一遍,就像每个缝帆的人都自己带卷尺,自己画对齐记号。程序里像随机丢掉一点点、走捷径加回去、把数值拉到合适范围,这些就不拆分了。连最后选词那一步也尽量不搬一大张“分数表”,只合并得到需要的那一个结果,像只摸一摸整张帆的拉力,不把整张帆抱到一个人腿上。
人手多了,沙滩却没乱套,帆还能越做越大。用这种分法,很多显卡能同时干活,规模从十亿级别一路长到更大,接缝等待没拖太多后腿。更大的程序读真句子时更不容易“愣住”,在一些语言测验上也更稳;还有个顺序上的小调整,能让越大的版本不发飘,像先量好再收紧,帆面就更平整。