為了提升AI性能,AI芯片公司從多個方面進行優化,包括采用更先進的工藝制程、進行架構創新,數據類型的支持也是其中之一。如今,為了加速機器學習性能,Arm宣布將會采用Bfloat16數據類型,這種數據類型會成為主流嗎?
Arm Holdings宣布其ArmV8-A架構的下一版本將支持bfloat16,這種浮點格式越來越多地用于加速機器學習應用。如今,谷歌、英特爾和少數初創公司的芯片都選擇了支持bfloat16。
Bfloat16,又名16位腦浮點(brain floating point),由Google發明,最初在其第三代Tensor處理單元(TPU)中支持。英特爾認可以將bfloat16整合到其未來的“Cooper Lake”Xeon SP處理器,以及即將推出的“Spring Crest”神經網絡處理器中。Wave Computing、Habana Labs和Flex Logix也采用了定制的AI處理器。
bfloat16的主要思想是提供16位浮點格式,其動態范圍與標準IEEE-FP32相同,但精度較低。相當于指數區和FP32保持了相同的8位,并將FP32分數字段的小數區縮減到到了7位。
根據Arm的ISA架構師和Fellow Nigel Stephens的說法,大多數情況下,用戶在進行神經網絡計算時,bfloat16格式與FP32一樣準確,但是以一半的位數完成任務。因此,與32位相比,采用bfloat16吞吐量可以翻倍,內存需求可以減半。在大多數情況下,blfloat16可以成為這些機器學習算法中FP32的“插入式”替代品。“幸運的是,神經網絡由于其統計性質,只要數據類型具有足夠的范圍和精度,就可以很好地適應少量噪聲,” Stephens告訴我們。
在Arm,附加支持將適用于ArmV8-A下支持的所有浮點指令集,即SVE(可擴展矢量擴展),AArch64 Neon(64位SIMD)和AArch32 Neon(32位SIMD))。附加支持旨在用于基于Arm的終端和服務器的機器學習推理和訓練。雖然Arm服務器的規模仍然很小,但其終端市場規模巨大,這意味著未來的手持式和物聯網設備將很快能夠利用更緊湊的數字格式。
Stephens 8月份撰寫的一篇博客中寫到,將增加四條新指令來支持bfoat16值的乘法運算,這是用于訓練和推理神經網絡的最常用計算。據他介紹,在大多數情況下,應用程序開發人員不會在底層代碼中添加這些指令,因為這些支持很可能由Arm自己的機器學習庫提供。對于那些對細節感興趣的人來說,這四條新指令如下:
BFDOT 是BF16元素的[1×2]×[2×1]點積,累積到SIMD結果中的每個IEEE-FP32元素中。
BFMMLA, 包括兩個有效地 BFDOT 操作,執行BF16元素的[2×4]×[4×2]矩陣乘法,累積到SIMD結果內的每個[2×2]矩陣的IEEE-FP32元素中。
BFMLAL是偶數或奇數BF16元素的簡單乘積,累積到SIMD結果中的每個IEEE-FP32元素中。
BFCVT,將IEEE-FP32元素或標量值轉換為BF16格式。
在SVE中包含對bfloat16的支持特別有趣,因為這些向量指令是專門為高性能計算開發的。截至目前,唯一已知的實現SVE是富士通的A64FX芯片,這款處理器將為即將推出的Post-K超級計算機提供動力,該超級計算機現在名為Fugaku。但這還為時過早,無法獲得bfloat16的好處,但后來的那些,就像為歐洲處理器計劃(EPI)開發的Arm處理器肯定會包含它。
Stephens說,鑒于傳統HPC用戶對機器學習的興趣增加以及他們的高性能系統對訓練大型神經網絡的適應性,在SVE中包含bfloat16似乎是一種自然的補充。他還指出,有一些HPC研究人員正在調查使用新的16位格式來加速傳統科學應用的混合精度計算。
“再次強調,bfloat16的優勢在于它具有與FP32相同的動態范圍,這使得使用FP 32的代碼,在轉換的早期階段使用bfloat16更容易。”他解釋說。
并且由于SVE可以針對不同的向量長度,實現從128位到2048位,理論上bfloat16吞吐量應該相應于128位Neon實現進行擴展。但實際上,Stephens說吞吐量還取決于具體的硬件實現選擇,例如SVE執行單元的數量與給定實現的Neon執行單元的數量。
然而,當轉換為具有較小范圍的數據類型(例如INT8和FP16)時,基于blfoat16的網絡的易部署性與其最終大小和性能之間存在折衷。Stephens表示,使用blfoat16進行推理可能對那些無法承擔額外費用和重新訓練網絡的開發人員來說是有吸引力的,因為只有一種類型可用于訓練和推理,因此可以使用這些較小的類型(可能需要幾個月)。
另外,需要注意的是bfloat16類型沒有標準,因此無法保證相同計算的結果在不同的處理器上完全相同。但正如Stephens所指出的那樣,FP32關于如何對點積進行排序(IEEE保持開放排序),甚至存在可變性。無論如何,四舍五入的噪音幾乎總是可以接受的,因為正如斯蒂芬斯所說,機器學習是一種統計游戲。
Arm對bfloat16的支持,使得GPU(目前廣泛使用的機器學習引擎)包括Nvidia和AMD,成為唯一仍然不提供該格式原生支持的機器學習引擎。但作為現在使用最廣泛的處理器架構,GPU支持bfloat16幾乎是不可避免的,包括英特爾即將推出的X e GPU加速器。IEEE是否曾接受bfloat16并提供了一些標準?這還有待觀察。
-
神經網絡
+關注
關注
42文章
4774瀏覽量
100899 -
機器學習
+關注
關注
66文章
8425瀏覽量
132773 -
AI芯片
+關注
關注
17文章
1894瀏覽量
35103
發布評論請先 登錄
相關推薦
評論