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