近日,,F(xiàn)acebook 發(fā)布文章,介紹了一項(xiàng)新研究,,該研究提出了一種使人工智能模型高效運(yùn)行的方法,,從根本上優(yōu)化了浮點(diǎn)運(yùn)算。
近年來(lái),,計(jì)算密集型的人工智能任務(wù)推動(dòng)了各種用于高效運(yùn)行這些強(qiáng)大的新型系統(tǒng)的定制化硬件的出現(xiàn),。我們采用浮點(diǎn)運(yùn)算來(lái)訓(xùn)練深度學(xué)習(xí)模型,如 ResNet-50 卷積神經(jīng)網(wǎng)絡(luò),。但是,,由于浮點(diǎn)數(shù)十分消耗資源,真正部署的人工智能系統(tǒng)通常依賴(lài)于使用 int8/32 數(shù)學(xué)運(yùn)算的少數(shù)幾個(gè)流行的整型量化技術(shù),。
Facebook 開(kāi)發(fā)了一種使人工智能模型高效運(yùn)行的方法,。基于 70 多年前計(jì)算機(jī)科學(xué)發(fā)展初期的思想,,該方法從根本上優(yōu)化了浮點(diǎn)運(yùn)算,。
Facebook 對(duì)浮點(diǎn)數(shù)進(jìn)行了徹底的改造,,使它比 int8/32 數(shù)學(xué)運(yùn)算的效率高出 16%。該方法用于卷積神經(jīng)網(wǎng)絡(luò)時(shí),,網(wǎng)絡(luò)仍能達(dá)到很高的準(zhǔn)確率,,此外它還具備以下優(yōu)勢(shì):
該技術(shù)可以提高人工智能研發(fā)的速度。當(dāng)該方法被應(yīng)用于人工智能模型訓(xùn)練中使用的更高精度的浮點(diǎn)數(shù)時(shí),,模型訓(xùn)練的效率能夠提高 69%,。
如今,模型通常使用浮點(diǎn)數(shù)進(jìn)行訓(xùn)練,,但是之后它們必須轉(zhuǎn)換成更高效的,、可以部署到生產(chǎn)環(huán)境中的量化格式。如果使用該方法,,在部署模型時(shí)就不需要重新訓(xùn)練或重新學(xué)習(xí),。這樣一來(lái),人工智能開(kāi)發(fā)者就可以更容易地部署高效的新模型,。
現(xiàn)在的整型量化方法正變得越來(lái)越復(fù)雜,。在某些情況下,這些方法可能對(duì)某些特定任務(wù)「過(guò)擬合」(因此不能維持通用性),。高效的通用浮點(diǎn)運(yùn)算可以在保持準(zhǔn)確率的情況下避免過(guò)擬合問(wèn)題,。
論文「Rethinking float point for deep learning」詳細(xì)介紹了 Facebook 的這項(xiàng)技術(shù)。開(kāi)發(fā)使用這些新技術(shù)執(zhí)行浮點(diǎn)運(yùn)算的新芯片需要耗費(fèi)一定的時(shí)間,。但這樣做可能得到的好處包括使數(shù)據(jù)中心的人工智能計(jì)算速度更快,,在移動(dòng)設(shè)備上獲得更好的人工智能運(yùn)算性能的低功耗設(shè)計(jì),以及在進(jìn)行較少的軟件更改的情況下以更簡(jiǎn)單,、迅速的方法達(dá)到性能目標(biāo),。摩爾定律正在逐漸減速,而「暗硅」(dark silicon)時(shí)代即將到來(lái),。持續(xù)的性能提升需要重新考慮幾十年前的底層硬件設(shè)計(jì)決策(比如 IEEE 754 浮點(diǎn)標(biāo)準(zhǔn)),,以及在合適的情況下使用數(shù)學(xué)近似(mathematical approximation)。尤其是神經(jīng)網(wǎng)絡(luò)的出現(xiàn)成為對(duì)它們進(jìn)行重新評(píng)估的絕佳契機(jī),,因?yàn)樯窠?jīng)網(wǎng)絡(luò)對(duì)數(shù)值運(yùn)算的變化和實(shí)驗(yàn)具有相當(dāng)大的容忍度,。
Facebook 為 ASIC/FPGA 做出的硬件設(shè)計(jì)和為評(píng)估編寫(xiě)的 C++/PyTorch 代碼已經(jīng)向人工智能社區(qū)開(kāi)放。
地址:http://github.com/facebookresearch/deepfloat
傳統(tǒng)的浮點(diǎn)運(yùn)算
眾所周知,,浮點(diǎn)數(shù)可以在合理的計(jì)算機(jī)存儲(chǔ)空間中表示大小實(shí)數(shù),,其使用的系統(tǒng)與科學(xué)計(jì)數(shù)法大體相似。這種格式可用于以固定寬度的編碼和基數(shù)(通常是二進(jìn)制)表示 1,000,000 和 0.0625 這樣的值,。需要注意的是,,浮點(diǎn)數(shù)只能精確地表示有限的實(shí)數(shù),因?yàn)槲覀儞碛械谋忍匚粩?shù)是有限的,。所有其他值都可以用一種四舍五入的形式表示為最接近的可以表示出來(lái)的浮點(diǎn)值,。
傳統(tǒng)的二進(jìn)制浮點(diǎn)格式包含符號(hào)(sign),、尾數(shù)(significand)和指數(shù)(exponent)。符號(hào)位表示數(shù)字是正的還是負(fù)的,。尾數(shù)(其小數(shù)部分通常稱(chēng)為尾數(shù))是形如 0.bbb... 或 1.bbb... 的二進(jìn)制定點(diǎn)數(shù),,其中小數(shù)部分 bbb… 由若干二進(jìn)制位在基數(shù)點(diǎn)之后表示的。(在十進(jìn)制運(yùn)算中,,基數(shù)點(diǎn)也稱(chēng)為小數(shù)點(diǎn),,將整數(shù)與小數(shù)部分分開(kāi)。)指數(shù)是一個(gè)有符號(hào)整數(shù),,它表示尾數(shù)需要乘以 2 的多少次冪。尾數(shù)有前導(dǎo)二進(jìn)制 1(1.bbb…)的情況是規(guī)格化的,,而尾數(shù)有前導(dǎo)二進(jìn)制 0(0.bbb…)的情況是非規(guī)格化的(二者可以相互轉(zhuǎn)化)?,F(xiàn)代計(jì)算機(jī)中常用的 IEEE 754 浮點(diǎn)標(biāo)準(zhǔn)有規(guī)格化和非規(guī)格化兩種尾數(shù)表示方法。尾數(shù)的前導(dǎo)位不需要被顯式存儲(chǔ),;在 IEEE 754 中,,指數(shù)域決定前導(dǎo)位是 1 還是 0。
下圖顯示了以 16 位 IEEE 754 的 binary16 半精度浮點(diǎn)數(shù)對(duì) -1.625 進(jìn)行的編碼,,它具有固定大小的 5 位指數(shù)和 10 位的尾數(shù)部分,。IEEE 指數(shù)的偏置值為 -15,因此下面編碼的指數(shù) 15 實(shí)際上表示(15-15)即 0,。
人工智能運(yùn)算的現(xiàn)狀和未來(lái)
為許多人工智能系統(tǒng)賦能的神經(jīng)網(wǎng)絡(luò)通常使用 32 位 IEEE 754 binary32 單精度浮點(diǎn)數(shù)進(jìn)行訓(xùn)練,。將位數(shù)降低到 16 位(半精度浮點(diǎn)數(shù)或類(lèi)似 bfloat16 的格式)會(huì)獲得一定的性能提升,但與同樣位寬整數(shù)運(yùn)算的效率相比,,它仍然相形見(jiàn)絀,。這些浮點(diǎn)變量可以很容易地使用原來(lái)的 32 位浮點(diǎn)神經(jīng)網(wǎng)絡(luò)數(shù)據(jù),但要將整數(shù)量化到 8 位(或更少)常常需要學(xué)習(xí)量化參數(shù)并對(duì)模型進(jìn)行再訓(xùn)練,。許多 int8/32 量化方案可以像原始的浮點(diǎn)模型達(dá)到同樣的準(zhǔn)確率,,但是它們也可能在處理任務(wù)時(shí)發(fā)生過(guò)擬合現(xiàn)象,從而無(wú)法在 ImageNet 驗(yàn)證集以外的任務(wù)上保證其準(zhǔn)確率,。
但是對(duì)于今天的計(jì)算機(jī)運(yùn)算來(lái)說(shuō),,除了整數(shù)、定點(diǎn)或浮點(diǎn)運(yùn)算外,,還有許多其他的選擇,。其中一些方法可以追溯到 20 世紀(jì) 50 年代:
非線(xiàn)性尾數(shù)映射
二進(jìn)制隨機(jī)數(shù)
熵編碼
Facebook 使用這一思路創(chuàng)造出了一種浮點(diǎn)運(yùn)算,其性能超過(guò) int8/32,。該方法的實(shí)現(xiàn)與目前硬件中的浮點(diǎn)運(yùn)算及其變體(如非規(guī)格化的清零行為或字大小/字段位寬度變化,,如 bfloat16 或 minifloat)有很大的區(qū)別。與 int8/32 量化不同的是,,該實(shí)現(xiàn)仍然是一種通用的浮點(diǎn)運(yùn)算,,可以直接對(duì)其運(yùn)算結(jié)果進(jìn)行解釋,。
實(shí)現(xiàn)更高效浮點(diǎn)運(yùn)算的關(guān)鍵
為了開(kāi)發(fā)一種高效浮點(diǎn)運(yùn)算的新方法,F(xiàn)acebook 研究人員認(rèn)真分析了硬件浮點(diǎn)數(shù)低效的各種原因:
字(word)大小過(guò)大:有很大一部分算力被用于移動(dòng)數(shù)據(jù):從外部的 DRAM 到內(nèi)部的 SRAM,,從 SRAM 到寄存器,,或從寄存器到寄存器(觸發(fā)器)。浮點(diǎn)的字大小越大,,消耗的算力就越多,。
通用的定點(diǎn)數(shù)機(jī)制:尾數(shù)是定點(diǎn)數(shù),定點(diǎn)數(shù)的加法器,、乘法器和除法器是算術(shù)運(yùn)算所必需的,。浮點(diǎn)類(lèi)型的精度(尾數(shù)長(zhǎng)度)越高,這些組件就越大,。硬件乘法器和除法器通常比硬件加法器更消耗資源(芯片面積,、功耗和延遲)。
通用的浮點(diǎn)數(shù)機(jī)制:該機(jī)制處理基數(shù)點(diǎn)的「浮點(diǎn)」,,因此是浮點(diǎn)表示法的一部分,。例如,用于重新規(guī)格化的前導(dǎo)零(LZ)計(jì)數(shù)器,、用于尾數(shù)對(duì)齊的移位器和舍入邏輯,。浮點(diǎn)精度也對(duì)該機(jī)制所使用的硬件資源有很大的影響。
IEEE 754 的專(zhuān)有機(jī)制:這為 IEEE 754 標(biāo)準(zhǔn)中實(shí)現(xiàn)的逐漸下溢提供了非規(guī)格化的支持,,并提供了額外的移位器,、LZ 計(jì)數(shù)器和尾數(shù)重新規(guī)格化所需要的其他修改。非規(guī)格化的處理增加了大多數(shù)浮點(diǎn)操作的復(fù)雜性和計(jì)算開(kāi)銷(xiāo),。
減小字大小
縮小字(word)的大小可以顯著地提升算力的利用率,。我們可以嘗試將 32 位數(shù)據(jù)壓縮為 8 位或 16 位。典型的浮點(diǎn)數(shù)固定大小字段編碼迫使我們做出困難的選擇,,是減少動(dòng)態(tài)范圍(指數(shù))還是減小精度(尾數(shù)),,而我們需要的是二者的折中。
我們可以用不同的方式來(lái)處理這種權(quán)衡,。浮點(diǎn)數(shù)本身就是(無(wú)限精度)實(shí)數(shù)的量化形式,。適用于見(jiàn)過(guò)的數(shù)據(jù)分布的量化器在數(shù)據(jù)復(fù)制的過(guò)程中誤差會(huì)較小。對(duì)于在通用計(jì)算機(jī)上遇到的數(shù)據(jù)分布,,我們通常沒(méi)有太多的先驗(yàn)知識(shí),。然而,神經(jīng)網(wǎng)絡(luò)的分布在實(shí)際中是接近高斯分布的,,有時(shí)還會(huì)受到批歸一化等過(guò)程的控制,。標(biāo)準(zhǔn)浮點(diǎn)數(shù)盡可能保證尾數(shù)在 10^-5 的精度與在 10^5 的精度相當(dāng),但大多數(shù)神經(jīng)網(wǎng)絡(luò)在一個(gè)相對(duì)較小的范圍內(nèi)(如 -10.0 到 10.00)執(zhí)行計(jì)算。這個(gè)范圍內(nèi)的小數(shù)字(例如 0.0001)會(huì)被頻繁使用,,而大數(shù)字的使用頻率較低,。理想情況下,我們可以改變量化器,,在需要的地方提供更高的精度,,并保持一定的小數(shù)字動(dòng)態(tài)范圍。
縮減(tapered)浮點(diǎn)數(shù)可以幫助實(shí)現(xiàn)這些目標(biāo)并減小字的大小,。Gustafson 提出的 Posit 方法是一種效果很好的縮減形式,。Posit 使用無(wú)前綴編碼將指數(shù)編碼為可變位數(shù),其余部分為尾數(shù),。它在+/-1.0 左右將精度最大化,,而在 0 或+/-∞ 處的精度則較低。它的壓縮和擴(kuò)展都是有損的,,以損失某些地方的精度為代價(jià)來(lái)保證在其他地方的動(dòng)態(tài)范圍,。因此,與 IEEE 風(fēng)格的浮點(diǎn)數(shù)相比,,它可以提供更高的精度(在某些地方)和更大的動(dòng)態(tài)范圍。當(dāng)我們不知道待處理數(shù)據(jù)的數(shù)據(jù)分布時(shí),,posit 可以擴(kuò)展到其他無(wú)前綴編碼中(比如霍夫曼編碼),。
定點(diǎn)數(shù)機(jī)制
我們可以設(shè)法避免在尾數(shù)上進(jìn)行的乘法和除法運(yùn)算。尾數(shù)可以被看作是小數(shù)部分的映射 f(x),,它將取值范圍在 [0, 1) 間的定點(diǎn)數(shù) x 映射到 [1, 2) 中,。(這種方法在 Lindstrom 等人 2018 年的論文《Universal Coding of the Reals: Alternatives to IEEE Floating Point》中有詳細(xì)的介紹。)在典型的規(guī)格化浮點(diǎn)運(yùn)算中,,f(x) 是仿射函數(shù) 1+x(我們稱(chēng)之為線(xiàn)性域數(shù)),。
當(dāng) f(x) = 2^x 時(shí),我們可以使用對(duì)數(shù)數(shù)字系統(tǒng)(LNS)將乘法和除法變成加法和減法,。不過(guò),,添加 LNS 需要大量的硬件查找表來(lái)計(jì)算兩個(gè)對(duì)數(shù)域數(shù)的和或差。這是采用 LNS 的一個(gè)主要問(wèn)題,,因?yàn)檫@些表可能比硬件乘法器更難以處理,。注意,典型的浮點(diǎn)數(shù)已經(jīng)是對(duì)數(shù)(指數(shù))和線(xiàn)性(尾數(shù))表示的組合,,但是 LNS 表示完全是基于對(duì)數(shù)的,。
浮點(diǎn)數(shù)機(jī)制
在計(jì)算機(jī)線(xiàn)性代數(shù)中,有效的操作是「乘加」:計(jì)算值「c」和 a 與 b 乘積「a x b」的和,,得到「c + a x b」,。通常情況下,對(duì)于 ResNet-50 等模型,單個(gè)累加器中可能會(huì)對(duì)數(shù)千個(gè)這樣的乘積求和,;在部署過(guò)程中運(yùn)行一個(gè)模型時(shí)涉及數(shù)百萬(wàn)獨(dú)立累加操作,,而訓(xùn)練模型時(shí)則需要進(jìn)行數(shù)以?xún)|計(jì)的累加操作。
浮點(diǎn)融合乘加(FMA)是一種常見(jiàn)的乘加方法,,它能夠減小誤差,,但它比標(biāo)準(zhǔn)的浮點(diǎn)加法器或乘法器復(fù)雜得多。一種稱(chēng)為 Kulisch 累加的技術(shù)可以避免 FMA 的復(fù)雜操作,。類(lèi)似的操作在第一臺(tái)可編程數(shù)字計(jì)算機(jī) Konrad Zuse Z3 上被采用過(guò),。Gustafson 也在他最近的浮點(diǎn)研究中提出了 Kulisch 累加的標(biāo)準(zhǔn)用法(https://www.crcpress.com/The-End-of-Error-Unum-Computing/Gustafson/p/book/9781482239867)。其思想不是在浮點(diǎn)運(yùn)算中進(jìn)行累加,,而是在定點(diǎn)運(yùn)算中維護(hù)一個(gè)運(yùn)行時(shí)的和(running sum),,這個(gè)和需要足夠大以避免下溢或溢出。與浮點(diǎn)加法不同的是,,Kulisch 累加可以精確地表示任意數(shù)量的浮點(diǎn)值的和,。不論順序如何,求和方法都是滿(mǎn)足結(jié)合率并可復(fù)現(xiàn)的,。在完成所有求和工作之后,,我們通過(guò)尾數(shù)對(duì)齊和舍入將其轉(zhuǎn)換回浮點(diǎn)數(shù)。
下圖顯示了一個(gè)累加步驟的示例,。Kulisch 累加器當(dāng)前包含值 35.5,,我們將其與 0.84375 相加,表示為線(xiàn)性域浮點(diǎn)值,。這個(gè)被求和的浮點(diǎn)值可能以前來(lái)自于標(biāo)量值的乘積,,或者只是我們希望累加的單個(gè)值。在浮點(diǎn)指數(shù)的基礎(chǔ)上,,通過(guò)對(duì)齊尾數(shù)的基數(shù)點(diǎn),,將浮點(diǎn)數(shù)轉(zhuǎn)換為定點(diǎn)數(shù)。該轉(zhuǎn)換使用了一個(gè)調(diào)整因子,,它是累加器最多尾數(shù)位(在下面的例子中是 6)的有效指數(shù),。然后將對(duì)齊后的尾數(shù)和累加器與進(jìn)位相加。(為簡(jiǎn)單起見(jiàn),,此處省略了 Kulisch 累加器可能支持下溢和溢出所需的額外精度位),。在高于 32 位的浮點(diǎn)數(shù)中,Kulisch 累加的代價(jià)很高,,因?yàn)槔奂悠?、移位器和加法器的大小可能大?500 位,但是對(duì)于較小的浮點(diǎn)類(lèi)型來(lái)說(shuō),,它是非常實(shí)用的,。
Kulisch 累加不能直接用于對(duì)數(shù)域求和,。但是,正如 Kulisch 累加以不同于參數(shù)(浮點(diǎn)數(shù))的形式(定點(diǎn)數(shù))執(zhí)行求和運(yùn)算一樣,,這里也可以采用類(lèi)似的方法,,因此我們不需要一個(gè)巨大的 LNS 和/差查找表。我們可以在線(xiàn)性域中對(duì) log 值取近似,,在線(xiàn)性域中做 Kulisch 累加,,然后在所有求和工作都完成時(shí)將其轉(zhuǎn)換回 log 域。這種方法對(duì)于通用線(xiàn)性代數(shù)非常有效,,因?yàn)橄蛄績(jī)?nèi)積需要在累加器中多次重復(fù)求和,。
IEEE 754 的專(zhuān)有機(jī)制
有助于減小字大小的 posit 編碼也避免了這個(gè)問(wèn)題,因?yàn)?posit 的尾數(shù)總是規(guī)格化的,。緩慢的下溢立刻防止了精度下降,,而不是逐漸緩解精度下降,這在 IEEE 754 非規(guī)格化表示中是通過(guò)尾數(shù)部分中前導(dǎo)一的位置解決的,。Posit 逐漸減小到更小的數(shù)字上,,導(dǎo)致在指數(shù)上使用尾數(shù)部分的位,從而擴(kuò)展了動(dòng)態(tài)范圍并降低了精度,。Posit 的縮減(taper)技術(shù)在功能上類(lèi)似于非規(guī)格化的逐漸下溢,,但是沒(méi)有重新規(guī)格化尾數(shù)的開(kāi)銷(xiāo)。Posit 緩慢溢出也以類(lèi)似的方式支持縮減,。
融合這些方法
為了獲得性能的提升,,研究人員考慮將這四種技術(shù)結(jié)合起來(lái)。對(duì)數(shù)域表示避免了硬件乘法器,,我們將 posit 用于對(duì)數(shù)。為了與 int8/32 抗衡,,研究人員考慮使用一種稱(chēng)為 (8, 1, alpha, beta, gamma) 對(duì)數(shù)的 8-bit 格式,,其中 (8,1) 是 posit 參數(shù)。這種編碼在最大和最小正值之間提供了超過(guò) 1600 萬(wàn):1 的比率,,同時(shí)在 1.0 左右保留了 4 位(對(duì)數(shù)域)精度,,所有這些都是用 8 位表示的(只有 256 個(gè)可能的值)。alpha,、beta 和 gamma 值可以控制對(duì)數(shù)到線(xiàn)性以及線(xiàn)性到對(duì)數(shù)的轉(zhuǎn)換準(zhǔn)確率,。
如上所述,我們?cè)诰€(xiàn)性域中執(zhí)行對(duì)數(shù)域的求和,。這個(gè)結(jié)果是非常近似的,,但與 FMA 不同的是,對(duì)于序列和,,這里沒(méi)有 Kulisch 累加的線(xiàn)性域誤差,。我們稱(chēng)這種技術(shù)為 ELMA,或精確的對(duì)數(shù)線(xiàn)性乘加。對(duì)數(shù)域乘法是精確的,,所有的線(xiàn)性域求和過(guò)程也都是精確的,,但是對(duì)數(shù)到線(xiàn)性的轉(zhuǎn)換是近似的,返回的線(xiàn)性到對(duì)數(shù)的轉(zhuǎn)換也是近似的,。這種折中在實(shí)踐中是可以接受的,。
硬件查找表用于轉(zhuǎn)換,但它們要比 LNS 加法所需表小得多,。使用更大的 alpha,、beta 和 gamma 參數(shù)會(huì)得到更精確的結(jié)果,但也會(huì)消耗更多的芯片面積和功耗,。與浮點(diǎn)型 FMA 相比,,ELMA 乘加電路及其核心更加簡(jiǎn)單。它使用三個(gè)加法器,、一個(gè)查找表和一個(gè)移位器就完成了大部分工作:
直接替代方法
與 int8/32 不同,,F(xiàn)acebook 研究人員針對(duì)神經(jīng)網(wǎng)絡(luò)的 8 位對(duì)數(shù)格式不需要學(xué)習(xí)量化參數(shù)、激活采樣或?qū)υ季W(wǎng)絡(luò)進(jìn)行再訓(xùn)練,。只需要獲取網(wǎng)絡(luò)(如 ResNet-50)的 32 位浮點(diǎn)參數(shù),,然后使用「取與該參數(shù)最近的偶數(shù)」的規(guī)則對(duì)其進(jìn)行轉(zhuǎn)換。使用 posit 編碼可以在如此小的類(lèi)型中保證所需的動(dòng)態(tài)范圍和精度,。
使用 ELMA 的 (8, 1, 5, 5, 7) 對(duì)數(shù)與原始的 ResNet-50 的運(yùn)算方法相同,,在 ImageNet 驗(yàn)證集上獲得了 75.23% 的 top-1 準(zhǔn)確率和 92.66% 的 top-5 準(zhǔn)確率,分別比原始網(wǎng)絡(luò)的準(zhǔn)確率降低了 0.9% 和 0.2%,。這些結(jié)果與許多現(xiàn)有的 int8/32 量化方法類(lèi)似,。在 int8/32 量化中使用的調(diào)優(yōu)訓(xùn)練和模型調(diào)整可以進(jìn)一步提高該方法的性能,但是這里基線(xiàn)的結(jié)果是在對(duì)軟件進(jìn)行最少修改的情況下實(shí)現(xiàn)的,。所有的數(shù)學(xué)仍然在通用浮點(diǎn)運(yùn)算中執(zhí)行,,使用壓縮編碼作為量化器。ELMA 設(shè)計(jì)也可以被用于非線(xiàn)性代數(shù)任務(wù)(如多項(xiàng)式計(jì)算),。
硬件效率
研究人員使用一種商用 28 納米 ASIC 工藝技術(shù)將 (8, 1, 5, 5, 7) 對(duì)數(shù)的 ELMA 以 int8/32 乘加 0.96 倍的功耗作用于獨(dú)立的處理單元(PE),。在一個(gè)完整的 32×32 矩陣乘法的脈動(dòng)陣列中,使用對(duì)數(shù) ELMA 處理單元方案的功耗是使用 int8/32 處理單元版本的 0.865 倍,。該方案之所以能夠省電主要是因?yàn)槿∠擞布朔ㄆ鳌?/p>
擴(kuò)展到 16 位后,,即使沒(méi)有非規(guī)格化的支持(這在很大程度上降低了 IEEE 754 的效率),這種方法使用的功耗是 IEEE 754 半精度 FMA 的 0.59 倍,,而使用的芯片面積是后者的 0.68 倍,,同時(shí)還降低了延遲。得益于這些 16 位浮點(diǎn)數(shù)上的性能提升,,我們可以在相同的時(shí)間內(nèi)支持更復(fù)雜的人工智能模型的訓(xùn)練,。然而,,與 32 位的 IEEE 754 單精度 FMA 相比,ELMA 并沒(méi)有更加有效,,這是由于 Kulisch 累加器過(guò)于龐大(增加了加法器/移位器尺寸和觸發(fā)器功率),,而且禁止使用從對(duì)數(shù)到線(xiàn)性的查找表。
未來(lái)的工作
實(shí)現(xiàn)人工智能技術(shù)的極大發(fā)展需要計(jì)算效率的顯著提高,,而這只有通過(guò)新方法才能實(shí)現(xiàn),,而不僅僅是建立在舊方法的基礎(chǔ)上。例如,,軟件仿真工作常常很慢,,無(wú)法有效地在前沿的人工智能模型上測(cè)試新的運(yùn)算方法。不幸的是,,在 FPGA/ASIC 硬件上進(jìn)行實(shí)驗(yàn)比在軟件上還要困難得多,,這使得這些潛在的提升空間在很大程度上沒(méi)有得到充分的開(kāi)發(fā)。然而,,如果開(kāi)發(fā)出利用這些技術(shù)的新硬件,,它將有利于廣泛的人工智能研究和應(yīng)用。
Facebook 計(jì)劃研究硬件上的 16 位 ELMA 的設(shè)計(jì),,并將其在人工智能模型訓(xùn)練和其他任務(wù)上的性能表現(xiàn)與 IEEE 754 半精度浮點(diǎn)數(shù)和 bfloat16 進(jìn)行對(duì)比,。這些新想法和數(shù)值近似方法并不總是適用的,但是人工智能提供了一個(gè)獨(dú)特的機(jī)會(huì)來(lái)探索它們的邊界,,并幫助推翻人們關(guān)于硬件可能完成的任務(wù)的舊有看法,。