0
本文作者: 包永剛 | 2019-09-19 18:38 |
雷鋒網(wǎng)按,為了提升AI性能,AI芯片公司從多個(gè)方面進(jìn)行優(yōu)化,包括采用更先進(jìn)的工藝制程、進(jìn)行架構(gòu)創(chuàng)新,數(shù)據(jù)類型的支持也是其中之一。如今,為了加速機(jī)器學(xué)習(xí)性能,Arm宣布將會(huì)采用Bfloat16數(shù)據(jù)類型,這種數(shù)據(jù)類型會(huì)成為主流嗎?
Arm Holdings宣布其ArmV8-A架構(gòu)的下一版本將支持bfloat16,這種浮點(diǎn)格式越來(lái)越多地用于加速機(jī)器學(xué)習(xí)應(yīng)用。如今,谷歌、英特爾和少數(shù)初創(chuàng)公司的芯片都選擇了支持bfloat16。
Bfloat16,又名16位腦浮點(diǎn)(brain floating point),由Google發(fā)明,最初在其第三代Tensor處理單元(TPU)中支持。英特爾認(rèn)可以將bfloat16整合到其未來(lái)的“Cooper Lake”Xeon SP處理器,以及即將推出的“Spring Crest”神經(jīng)網(wǎng)絡(luò)處理器中。Wave Computing、Habana Labs和Flex Logix也采用了定制的AI處理器。
bfloat16的主要思想是提供16位浮點(diǎn)格式,其動(dòng)態(tài)范圍與標(biāo)準(zhǔn)IEEE-FP32相同,但精度較低。相當(dāng)于指數(shù)區(qū)和FP32保持了相同的8位,并將FP32分?jǐn)?shù)字段的小數(shù)區(qū)縮減到到了7位。
根據(jù)Arm的ISA架構(gòu)師和Fellow Nigel Stephens的說(shuō)法,大多數(shù)情況下,用戶在進(jìn)行神經(jīng)網(wǎng)絡(luò)計(jì)算時(shí),bfloat16格式與FP32一樣準(zhǔn)確,但是以一半的位數(shù)完成任務(wù)。因此,與32位相比,采用bfloat16吞吐量可以翻倍,內(nèi)存需求可以減半。在大多數(shù)情況下,blfloat16可以成為這些機(jī)器學(xué)習(xí)算法中FP32的“插入式”替代品?!靶疫\(yùn)的是,神經(jīng)網(wǎng)絡(luò)由于其統(tǒng)計(jì)性質(zhì),只要數(shù)據(jù)類型具有足夠的范圍和精度,就可以很好地適應(yīng)少量噪聲,” Stephens告訴我們。
在Arm,附加支持將適用于ArmV8-A下支持的所有浮點(diǎn)指令集,即SVE(可擴(kuò)展矢量擴(kuò)展),AArch64 Neon(64位SIMD)和AArch32 Neon(32位SIMD))。附加支持旨在用于基于Arm的終端和服務(wù)器的機(jī)器學(xué)習(xí)推理和訓(xùn)練。雖然Arm服務(wù)器的規(guī)模仍然很小,但其終端市場(chǎng)規(guī)模巨大,這意味著未來(lái)的手持式和物聯(lián)網(wǎng)設(shè)備將很快能夠利用更緊湊的數(shù)字格式。
Stephens 8月份撰寫(xiě)的一篇博客中寫(xiě)到,將增加四條新指令來(lái)支持bfoat16值的乘法運(yùn)算,這是用于訓(xùn)練和推理神經(jīng)網(wǎng)絡(luò)的最常用計(jì)算。據(jù)他介紹,在大多數(shù)情況下,應(yīng)用程序開(kāi)發(fā)人員不會(huì)在底層代碼中添加這些指令,因?yàn)檫@些支持很可能由Arm自己的機(jī)器學(xué)習(xí)庫(kù)提供。對(duì)于那些對(duì)細(xì)節(jié)感興趣的人來(lái)說(shuō),這四條新指令如下:
BFDOT 是BF16元素的[1×2]×[2×1]點(diǎn)積,累積到SIMD結(jié)果中的每個(gè)IEEE-FP32元素中。
BFMMLA, 包括兩個(gè)有效地 BFDOT 操作,執(zhí)行BF16元素的[2×4]×[4×2]矩陣乘法,累積到SIMD結(jié)果內(nèi)的每個(gè)[2×2]矩陣的IEEE-FP32元素中。
BFMLAL是偶數(shù)或奇數(shù)BF16元素的簡(jiǎn)單乘積,累積到SIMD結(jié)果中的每個(gè)IEEE-FP32元素中。
BFCVT,將IEEE-FP32元素或標(biāo)量值轉(zhuǎn)換為BF16格式。
在SVE中包含對(duì)bfloat16的支持特別有趣,因?yàn)檫@些向量指令是專門(mén)為高性能計(jì)算開(kāi)發(fā)的。截至目前,唯一已知的實(shí)現(xiàn)SVE是富士通的A64FX芯片,這款處理器將為即將推出的Post-K超級(jí)計(jì)算機(jī)提供動(dòng)力,該超級(jí)計(jì)算機(jī)現(xiàn)在名為Fugaku。但這還為時(shí)過(guò)早,無(wú)法獲得bfloat16的好處,但后來(lái)的那些,就像為歐洲處理器計(jì)劃(EPI)開(kāi)發(fā)的Arm處理器肯定會(huì)包含它。
Stephens說(shuō),鑒于傳統(tǒng)HPC用戶對(duì)機(jī)器學(xué)習(xí)的興趣增加以及他們的高性能系統(tǒng)對(duì)訓(xùn)練大型神經(jīng)網(wǎng)絡(luò)的適應(yīng)性,在SVE中包含bfloat16似乎是一種自然的補(bǔ)充。他還指出,有一些HPC研究人員正在調(diào)查使用新的16位格式來(lái)加速傳統(tǒng)科學(xué)應(yīng)用的混合精度計(jì)算。
“再次強(qiáng)調(diào),bfloat16的優(yōu)勢(shì)在于它具有與FP32相同的動(dòng)態(tài)范圍,這使得使用FP 32的代碼,在轉(zhuǎn)換的早期階段使用bfloat16更容易?!彼忉屨f(shuō)。
并且由于SVE可以針對(duì)不同的向量長(zhǎng)度,實(shí)現(xiàn)從128位到2048位,理論上bfloat16吞吐量應(yīng)該相應(yīng)于128位Neon實(shí)現(xiàn)進(jìn)行擴(kuò)展。但實(shí)際上,Stephens說(shuō)吞吐量還取決于具體的硬件實(shí)現(xiàn)選擇,例如SVE執(zhí)行單元的數(shù)量與給定實(shí)現(xiàn)的Neon執(zhí)行單元的數(shù)量。
然而,當(dāng)轉(zhuǎn)換為具有較小范圍的數(shù)據(jù)類型(例如INT8和FP16)時(shí),基于blfoat16的網(wǎng)絡(luò)的易部署性與其最終大小和性能之間存在折衷。Stephens表示,使用blfoat16進(jìn)行推理可能對(duì)那些無(wú)法承擔(dān)額外費(fèi)用和重新訓(xùn)練網(wǎng)絡(luò)的開(kāi)發(fā)人員來(lái)說(shuō)是有吸引力的,因?yàn)橹挥幸环N類型可用于訓(xùn)練和推理,因此可以使用這些較小的類型(可能需要幾個(gè)月)。
另外,需要注意的是bfloat16類型沒(méi)有標(biāo)準(zhǔn),因此無(wú)法保證相同計(jì)算的結(jié)果在不同的處理器上完全相同。但正如Stephens所指出的那樣,F(xiàn)P32關(guān)于如何對(duì)點(diǎn)積進(jìn)行排序(IEEE保持開(kāi)放排序),甚至存在可變性。無(wú)論如何,四舍五入的噪音幾乎總是可以接受的,因?yàn)檎缢沟俜宜顾f(shuō),機(jī)器學(xué)習(xí)是一種統(tǒng)計(jì)游戲。
Arm對(duì)bfloat16的支持,使得GPU(目前廣泛使用的機(jī)器學(xué)習(xí)引擎)包括Nvidia和AMD,成為唯一仍然不提供該格式原生支持的機(jī)器學(xué)習(xí)引擎。但作為現(xiàn)在使用最廣泛的處理器架構(gòu),GPU支持bfloat16幾乎是不可避免的,包括英特爾即將推出的X e GPU加速器。IEEE是否曾接受bfloat16并提供了一些標(biāo)準(zhǔn)?這還有待觀察。
雷鋒網(wǎng)編譯,via nextplatform 雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。