深度網(wǎng)絡(luò)數(shù)據(jù)編碼新突破,上交大SPARK登上計算機(jī)體系結(jié)構(gòu)頂會
隨著深度神經(jīng)網(wǎng)絡(luò)(DNNs)模型在規(guī)模和復(fù)雜性上的迅速增長,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)處理方法面臨著嚴(yán)峻的挑戰(zhàn)?,F(xiàn)有的神經(jīng)網(wǎng)絡(luò)壓縮技術(shù)在處理參數(shù)規(guī)模大、精度要求高的神經(jīng)網(wǎng)絡(luò)模型時效率低下,無法滿足現(xiàn)有應(yīng)用的需求。
數(shù)值量化是神經(jīng)網(wǎng)絡(luò)模型壓縮的一種有效手段。在模型推理過程中,低位寬(比特)數(shù)據(jù)的存取和計算可以大幅度節(jié)省存儲空間、訪存帶寬與計算負(fù)載,從而降低推理延遲和能耗。當(dāng)前,大多數(shù)量化技術(shù)的位寬在 8bit。更為激進(jìn)的量化算法,必須要修改硬件的操作粒度與數(shù)據(jù)流特征,才能在真實推理時獲得接近理論的收益。比如混合精度量化,激活數(shù)據(jù)的量化等方案。一方面,這些方案會顯式增加 book-keeping 存儲開銷和硬件邏輯,使得實際收益下降 [1,2,3]。另一方面,一些方案利用分布特征對量化范圍和粒度做約束,來減小上述硬件開銷 [4,5]。但其精度損失也受到不同模型和參數(shù)分布的影響,無法滿足現(xiàn)有應(yīng)用的需求。
為此,本文的研究者提出了 SPARK 技術(shù),一種可擴(kuò)展細(xì)粒度混合精度編碼的軟硬件協(xié)同設(shè)計。
其核心優(yōu)勢如下:
- 固有比特冗余:SPARK 不對模型進(jìn)行壓縮,而是剔除數(shù)據(jù)表示中固有的比特冗余,與現(xiàn)有的壓縮方案正交,可以協(xié)同使用。
- 變長編碼方案:SPARK 創(chuàng)新了變長數(shù)據(jù)表示格式,有效壓縮模型大小,不需要增加額外的 book-keeping(如 index 等)代價(如硬件,訪問與更新延遲)。該編碼方案對模型參數(shù)與激活值同樣適用。
- 硬件兼容性:SPARK 不需要修改硬件加速器微架構(gòu)(如:脈動陣列),不會引入額外的設(shè)計復(fù)雜性,可行性較高。
- 平衡精度與效率:在大型模型中,SPARK 通過其高效的編碼機(jī)制,不僅提升了處理速度,還精確地保持了模型的準(zhǔn)確性。與其他同類型加速器相比平均獲得了 4.65 倍的加速,降低了 74.7% 的能耗。
研究動機(jī)
本工作源于對模型參數(shù)與激活值分布的觀察分析:由于權(quán)重和激活的分布成長尾型,量化后的數(shù)據(jù)仍會保持該分布,呈現(xiàn)高位稀疏的特性。具體的,按 INT8 精度量化后的模型參數(shù)中,80% 左右的數(shù)據(jù)都可以用 INT4 表示,只有一小部分較重要的值需要高位寬存儲,如圖 1 所示。
圖 1 不同網(wǎng)絡(luò)中 INT4 范圍內(nèi)數(shù)據(jù)和 INT8 范圍內(nèi)數(shù)據(jù)的比例
為了利用數(shù)據(jù)表示中固有的比特冗余,作者提出了 SPARK—— 一種可變長度的編碼方案,通過引入一位指示符和新穎的編解碼模式來支持混合精度。這種編碼方案電路設(shè)計簡單,而且維持存儲對齊。
主要方法
在 SPARK 中,本工作只簡單地用最高位作為指示符區(qū)分高 / 低精度數(shù)據(jù),而不同于其他分離尾數(shù)域和指數(shù)域的復(fù)雜編碼策略。同時,模型訓(xùn)練時就可以模擬該編碼行為,而不用進(jìn)行訓(xùn)練后微調(diào)來補(bǔ)償由量化帶來的精度損失。
編碼方案及電路設(shè)計
該工作以 INT8 量化為例,每個數(shù)據(jù)為 8bit unsigned 整型。原始數(shù)據(jù)的編碼表示為(b0 , b1 , b2 , b3 , b4 , b5 , b6 , b7),具體的編碼原則如圖 2 所示。
1. 當(dāng)原編碼中只有b4 - b7 這低 4 位包含非零有效位時,直接進(jìn)行低精度無損編碼,縮短為 4bit,其中最高位 C4 是指示符位,設(shè)為 0。
2. 當(dāng)原編碼中 b0-b3 這高 4 位也包含非零有效位時,進(jìn)行高精度編碼。其中,最高位 c0 為指示符位,設(shè)為 1。之后,視 b0 異或 b3 的結(jié)果,決定是否進(jìn)行有損近似編碼或無損編碼。
a) 當(dāng)原數(shù)值范圍在 [8, 127],即 b3-b1 位包含非零有效位時,最高位的指示符位不作為數(shù)值位計算。當(dāng) b3 位為 1 時,在編碼階段將 b3 位設(shè)為 0 并將低 4 位 C4-C7 補(bǔ)償為 1111。雖然,這一步是有損的,但由于補(bǔ)償效應(yīng)、損失精度較小。
b) 當(dāng)原數(shù)值范圍在 [128, 255],即 b7-b0 位這 8 位都包含非零有效位時,最高位的指示符位作為數(shù)值位計算。當(dāng) b3 位為 0 時,在編碼階段將 b3 位設(shè)為 1 并將低 4 位 C4-C7 補(bǔ)償為 0000。
當(dāng)然,該工作也可以更激進(jìn)地舍棄這些 fixed bit 進(jìn)一步壓縮存儲容量與帶寬,但需要在解碼階段把 fixed bit 填補(bǔ)后再將 8bit 數(shù)據(jù)送入計算單元。這會增加一些解碼器的硬件開銷。
圖 2 SPARK 編碼對于不同范圍的原數(shù)據(jù)的應(yīng)用
硬件上實現(xiàn)該編碼器只需要用到零檢測器,多路選擇器和異或門等熟知的硬件模塊,具體電路設(shè)計如圖 3 所示:輸入 8bit 的原始數(shù)據(jù),b0 ~ b4 先經(jīng)過一個 5bit 的零檢測器,判定該輸入編碼為高 / 低精度,如果編碼為低精度則直接輸出 b4 , b5 , b6 , b7,若編碼為高精度,則根據(jù)公式 1 和公式 2 分情況編碼。
圖 3 SPARK 方案的編碼器電路設(shè)計
解碼方案及電路設(shè)計
本工作設(shè)計了一個硬件友好的解碼方案,下面將闡述如何將編碼轉(zhuǎn)換為十進(jìn)制值。首先,本工作假定大端序存儲(Big Endian),解碼時輸入位寬為 4bit,使能信號 1 位。
解碼器電路需要的硬件模塊為熟知的多路選擇器,或門和非門。具體實現(xiàn)如圖 4 所示,解碼器每個周期讀入 4bit 數(shù)據(jù)和使能信號。
當(dāng)使能信號為 1,則指該輸入是高精度值得后半部分編碼;當(dāng)使能信號為 0 時,若 c0 = 0,則判定輸入是低精度值直接輸出 c0c1c2c3 為解碼值,若 c0 = 1 則根據(jù) c3 判定將指示符位作為數(shù)值位計算。公式 3 闡述了具體的判定規(guī)則,圖 4 是解碼器的電路設(shè)計圖。
圖 4 SPARK 方案的解碼器設(shè)計
整體架構(gòu)
SPARK 可以與常用的張量運(yùn)算核心(脈動陣列,乘加樹等)很好的兼容。如圖 5 所示,解碼器放置在 weight buffer 與 PE 之間,在參數(shù)灌入 PE 陣列之前解碼;同樣也放置在 Activation Buffer 與 PE 之間,在激活值灌入 PE 陣列之前解碼。編碼則分為兩部分。對于參數(shù)的編碼可以離線進(jìn)行,在 DRAM 中直接存儲已經(jīng)編碼壓縮后的參數(shù)。在線硬件編碼器則放置在 PE 計算完產(chǎn)生 Activation 之后。
若要進(jìn)一步挖掘計算效率上的提升,則可以設(shè)計一個常見的混合位寬運(yùn)算單元(SPARK PE Unit),支持兩個 8bit 操作數(shù)的 MAC 操作,或者 2 對 4 個 4bit 操作數(shù)的 MAC 操作。
圖 5 SPARK 整體架構(gòu)圖
實驗結(jié)果
文章使用 CNN-based 和 attention-based 的模型簇進(jìn)行實驗,在 ImageNet 數(shù)據(jù)集上測試了 VGG-16,ResNet-18,ResNet-50 網(wǎng)絡(luò),在 GLUE 數(shù)據(jù)集上測試 BERT-based 模型,以及 ViT 模型。與 SPARK 進(jìn)行對比的 baseline 架構(gòu)有:Eyeriss [6], BitFusion [7], OLAccel [1], ANT [8], Olive [9]。
模型準(zhǔn)確性評估
在 ImageNet 數(shù)據(jù)集上,和原始的 FP32 模型相比,SPARK 上的平均準(zhǔn)確率損失大約為 0.1%,對于 attention-based 的模型,SPARK 獲得了更好的準(zhǔn)確性(+0.6%)。表 1 和表 2 展示了準(zhǔn)確性評估的結(jié)果。
表 1 SPARK 和其他沒有微調(diào)的架構(gòu)在精度損失和平均存儲位寬上的比較
表 2 SPARK 和其他架構(gòu)在 SST-2 數(shù)據(jù)集上測試 BERT 的精度損失和位寬比較
性能和能耗評估
執(zhí)行效率上,圖 5 展示了不同加速器在六個網(wǎng)絡(luò)上的執(zhí)行效率對比。和其他架構(gòu)相比,SPARK 最多獲得了 4.65 倍的加速,在 ResNet-50 網(wǎng)絡(luò)上,SPARK 有 80.1% 的明顯性能提升。
圖 5 不同架構(gòu)設(shè)計的延遲比較
能耗上,圖 6 展示了不同架構(gòu)的 DRAM,BUFFER,CORE 的能耗貢獻(xiàn)在 5 個網(wǎng)絡(luò)上的比較結(jié)果。對于 ResNet-50,SPARK 最多下降了 74.7%。
圖 6 不同架構(gòu)設(shè)計的能耗比較
結(jié)語
SPARK 利用數(shù)據(jù)表示中的比特冗余,結(jié)合高效的編解碼方案,使得 AI 模型在保證精度需求的情況下,利用本就存在的比特稀疏,這對于計算、存儲、傳輸都帶來了巨大的開銷節(jié)省。在處理越來越大的模型時,SPARK 展現(xiàn)出了其獨(dú)特的優(yōu)勢。它不僅能夠處理大規(guī)模數(shù)據(jù),還能在精度極其敏感的場景下保持高效率。這一點(diǎn)對于現(xiàn)在 AI 應(yīng)用尤為關(guān)鍵,如自動駕駛、醫(yī)學(xué)診斷和語言處理等。
在未來,這套編碼方法還可以進(jìn)一步擴(kuò)展到交換芯片,存儲盤控芯片等關(guān)鍵位置,用于優(yōu)化 AI 數(shù)據(jù)中心的通信瓶頸。
這一工作由上海交大先進(jìn)計算機(jī)體系結(jié)構(gòu)實驗室蔣力教授課題組(IMPACT)完成,同時也獲得了上海期智研究院的支持。第一作者是劉方鑫教授與博士生楊寧。