--- title: 10 | Machine Learning’s New Math tags: IEEE, uncomplete --- # Title [**原文章**](https://spectrum.ieee.org/topic/artificial-intelligence/) 原文時間:2022.10.18 本篇撰寫日期:2022.10.24 By:蘇雋勛 # 大綱 近期 AI 有著驚人的發展,但伴隨的代價也逐漸提升,也就是大量的計算步驟 為了提高各方面的效率,研究者們從最根本的地方著手,也就是表達數字的方式 # Nvidia’s per-vector scaling scheme Nvidia 藉由 VSQ 技術(per-vector scaled quantization),在準確度不會有明顯損失下,使數字的大小可以降低,像是從 16 bits降到 8 bit >Nvidia 的 A100 就是 32 bits 混合 16 bit >而他們要新推出的 Hopper 則到達了 8 bits浮點數 >他們還有一個正在開發的原型,由 8 bits混合 4 bit ## VSQ 1 個 4 bits 可以表達 16 種數字,所以一個數字以 4 bits 表達時,會被捨去一些位數以對應到這 16 個數字中的其中一個。這種精確度損失叫做 quantization error 量化誤差 >應該是在說 4 bits int 不過,你可以讓這 16 個數字配上一個係數將他們在數線上彼此間拉得更近,或是離得更遠 使這 16 個數字可以去對應到實際在神經網路中使用的數字範圍 ![](https://drive.google.com/uc?id=1a2tDquVDvotIC1rVrsr-xjuzQ-2MhA0W&export=download) 當從 8 bits 降成以 4 bits 表示時,能源效率上升兩倍 目前這個方法只能用在 inferencing 這個過程中,而他們團隊希望可以延伸到整個訓練過程 :::info 在我回顧一下他們的研究後,這篇應該都是在講 Floating Point / FP,也就是說沒特別講 FP 的部分都是 FP 不過 VSQ 看起來應該是利用 INT 去量化 FP ::: # Posits, a new kind of number :::success 這篇我之前有寫過,可以[回顧](https://hackmd.io/U8jpUon6QR6B0YEMYbnjrw) ::: # Taking the risk out of RISC-V’s math Computer scientists in Switzerland and Italy 這是用於開源的 RISC-V 架構 他們混合了高跟低精確度的數字,解決了 overflow、underflow 和 swamping :::danger 把數字的精確度降低時,兩個低精確度數字相乘的結果可能會 - overflow:數字太大以致原先的數字長度無法準確表示 - underflow:數字太小以致原先的數字長度無法準確表示 如果一個大的低精確度數字,加上一個小的低精確度數字,可能會 - swamping:小的低精確度數字可能會不見 ::: 混合用的另一個好處是,可以低精確度作為輸入,高精確度作為輸出;並將這個輸出用作下一個運算的輸入,直到整個運算結束,以確保精確度不會喪失 受惠的有 AI 的矩陣運算 dot product,由 fused multiply-add units (FMAs)來執行 FMA 會執行這樣的一個運算 $$ d = a*b + c $$ 其中 a 跟 b 是低精確度的,例如 8 bits 而 c ,可能來自別的運算結果,和輸出 d ,是高精確度的,像是 16 bits 而且他們的團隊有個未來展望,就是 FMA 不要只做一次運算就 Round UP,應該平行兩個 FMA 的運算結果相加後再 Round UP;如此除了可以提高精確度,還可以有效的使用記憶體,因為這樣就不會使用額外的記憶體拿來儲存前一次的運算結果,只為了等下一次的運算結果出來。 # BF16 is all you need Engineers at the Barcelona Supercomputing Center and Intel 將 FP 32 的 23 個 mantissa 砍掉 16 個,使 FP 32 可以有動態的空間,並將他叫做 BF 16 而他們還可以組合多個 BF 16,叫做 BF 16-N,用這個來表達一個數字,這樣在運算時就不會喪失精確度