- 產品
- 產品解決方案
- 行業解決方案
- 案例
- 數據資產入表
- 賦能中心
- 伙伴
- 關于
時間:2022-03-16來源:白衣俊郎瀏覽數:412次

分享嘉賓:譚傳奇博士 達摩院 算法專家
出品平臺:DataFunTalk
導讀:2021年3月,阿里達摩院機器智能實驗室AliceMind家族發布了最新訓練的270億參數規模的中文語言理解和生成統一模型--PLUG,但隨著預訓練模型規模越來越大,如何將大規模的預訓練模型在下游任務上微調后直接部署成為了一個亟待解決的難題。因此,達摩院和計算平臺PAI團隊合作探索了基于稀疏的大規模語言模型落地方案,基于 PLUG 在各個任務上取得了超過同等規模小模型的結果,并在 BERT / Roberta / GPT 上也驗證了其有效性。
本文主要包括以下幾方面內容:
超大規模語言模型PLUG介紹
相關工作介紹
稀疏訓練算法
實驗&小結
總結&展望
01超大規模語言模型PLUG介紹1. PLUG是什么?
PLUG(Pre-training for Language Understanding and Generation),中文領域第一個百億級別預訓練語言模型,理解和生成聯合模型,finetune & zero-shot效果俱佳,在中文CLUE分類榜單達到SOTA,業務生成任務數據集超8%的提升。PLUG的開放服務有:
自然語言處理(NLP)平臺:
https://nlp.aliyun.com/portal#/plug
AliceMind深度語言模型體系:
https://www.alice-mind.com/portal

2. 大規模語言模型落地面臨的挑戰
a. 大模型的部署主要面臨兩個方面的問題:
模型本身大小過大導致占用內存/顯存過多;
模型規模過大導致了推理速度緩慢。
b. 解決思路:
基于大規模預訓練模型在下游任務上進行推理的時候,實際上并不需要如 此大規模的參數,往往僅需其中的一小部分就可以達到和大規模模型一樣的效果;
通過模型壓縮算法,如剪枝、量化、低秩分解等,在(盡可能)保持模型效果的基礎上,盡可能的減少模型規模。
3. 超大規模模型落地
超大模型落地基于以下兩個方面:
Sparse Tuning:如何在少量訓練數據集的情況下,達到快速高效的超大模型的稀疏壓縮,并維持最終準確率盡量跟原來直接Fine-tune一個超大模型效果相當;
Sparse Serving:如何打破基于Dense矩陣運算加速庫的傳統,建立一個新的稀疏模型的高效推理框架。

1. 模型壓縮(Model Compression)
下圖中列舉了很多模型壓縮的方式,包括:
參數共享(Weight Sharing)和知識蒸餾 (Knowledge Distillation),這兩個方式壓縮后的小模型在結構上與大模型基本一致,只是參數量和規模減小了;
低秩分解(Low-Rank Factorization)、模型剪枝(Pruning)和量化(Quantization)這三種方式壓縮后的小模型結構會有所改變。

模型壓縮的效果可從多個維度來評價:
Floatingpoint operations (FLOPs) 浮點運算數量:數量越少意味著模型在推理優化中所需的操作更少;
Inferencetime:做一條數據推理所需的時間;
Speed-upRatio:加速比;
Numberof (Trainable) Parameters:(可被訓練的)參數量要確保盡可能少;
ModelSize:模型盡量小以方便操作;
CarbonFootprint:二氧化碳排放量;
Loyalty/Fidelity:大小模型在參數上的一致性;
Robustness:魯棒性,在模型壓縮的過程中模型效果的穩定性。
2. 模型量化(Model Quantization)
a.?量化方法
量化旨在通過減少模型權重中的位數(即精度),來壓縮神經網絡,常見做法是將模型從FP32量化為INT8,可將模型大小直接減少75%,推理速度提升可達3倍。

上圖公式中,定點Q表示目標范圍,浮點R表示原始數據范圍,通過R的最大值/最小值,和Q的期望達到的最大值/最小值,可以計算出最小表示刻度S以及量化定點值Z,再利用這四個數,將量化的原始值和期望值對齊。上圖右側是一個量化方案展示。
b. 模型量化存在的問題:
量化方案雖然在Transformer中已經有初步的實現,但對于模型的訓練過程以及模型整體的推理過程,需要做一些特定的操作,在操作過程中會存在一定的困難;
模型的量化一定會減少模型的精度。
3. 稀疏/剪枝(Model Pruning)
a.?稀疏/剪枝的常見方式
非結構化稀疏(unstructured pruning)
通過將相應的權重設置為0,移除神經網絡中的“不重要”連接(見下圖),如果一個點的連接線都被移除,則點也被移除;

結構化稀疏(structured pruning)
從模型中移除row、column、attention heads、layers,進而設置稀疏化算法,將參數加速比轉化為時間加速比;
迭代稀疏
逐步達到設置的稀疏率(見下圖),以免由于大規模的裁剪造成模型崩潰;

Han, Song, et al. Learning both weights and connections for efficient neural network. 2015
b. 示例:以非結構化稀疏為例
非結構化稀疏需要建模重要性得分函數,將得分“低”的部分裁剪,其中得分函數往往需要與模型同等(同級別)的參數量。

4. 彩票假設(Lottery Ticket Hypothesis)
彩票假設驗證了稀疏方式的可行性。
彩票假設是指在密集的、隨機初始化的神經網絡里面,存在著那么一些子網絡,在從頭、獨立訓練時可以在相似的迭代次數內達到與原始網絡相當的測試精度。
先訓練一個網絡,剪掉一部分,剩下的沒剪掉的連接或者權重構成winning tickets,再按照這個初始化值訓練子網絡。

5. 少參數學習(Parameter-efficient Transfer Learning)
a.?Adapters (Houlsby et al., 2019)
通過在Transformer層之間插入小模塊( Adapters )來適配各下游任務。由于插入的Adapters會改變原始Transformer的計算形式,在下游應用上也要做同等的改變,同時也會產生很大的計算量;
b. Prefix Tuning (Li & Liang, 2021)
前置可訓練的前綴向量或詞、或后置模版來適配下游任務。這種方式也是會改變模型的結構,從而造成部署上的一些難度;
c. LoRA (Hu et al., 2021)
通過將可訓練的低秩矩陣注入Transformer ,以使用少量參數近似權重更新。
這種方式不會改變原模型的結構,因此在部署上會相對簡單,是以上三種方式中最為推薦的一種。

1. 背景
a. 模型稀疏
確定要從模型中刪除的原子單元,即要執行稀疏的權重W(Attention Query Layer、Attention Output Layer、FFN Input Layer、FFN Output Layer);
重要性得分是做出修剪決策的標準,重要性函數S負責計算權重重要性,從而決定哪些權重應該被稀疏,最終得到與權重W同樣大小的二分類矩陣M。

b. 迭代稀疏 (Zhu and Gupta, 2018)

2. 重要性得分函數
結合0-order (magnitude pruning) 和 1-order(movement pruning),提出新的重要性得分函數:

其中α是平衡0/1階函數的超參數,0階由于沒有任何參數,因此是高效的。
如何讓1階也變得高效呢?
3. 低秩分解 - 重要性得分(Low Rank Impotantane Score)
使用低秩方式(Low Rank)首先要確保低秩:

在初始化時將A做高斯初始化(Gaussian initialization),B做0初始化(Zero initialization)。
上圖中藍色部分,是預訓練參數,可以不用訓練,橙色的A和B是要訓練的,訓練后可以直接將參數加到W上,新模型與原模型結構一致,可以方便進行部署。
4. 結構化稀疏
相較于非結構化稀疏,結構化稀疏更適配底層硬件優化,實現真正的模型加速。
我們發現,稀疏矩陣存在明顯的結構信息(見下圖),很多rows所有的權重均被去除,很多columns所有的權重均被去除,因此,我們認為在row/columns上存在結構化的稀疏策略。


5. 模型優化

6. 稀疏+低秩分解+結構化

在上圖的表格中可以看到,對比MaP和MvP的方式,MaP不需要訓練參數和數據,因此效果會差一些,PST所需要的訓練參數量只有MvP的1%-2%。
04實驗&小結1. 數據集、模型、基線
a. 數據集
NLU:GLUE Benchmark
NLG:E2E, DART, WebNLG
b. 模型
NLU:BERT [Devlin et al., 2019], RoBERTa [Liu et al., 2019]
NLG:GPT-2 [Radford et al., 2019]
c. 基線算法
magnitude pruning (MaP)
movement pruning (MvP)
L0 regularization
2. NLU實驗結果
a. PST在減少約99%的訓練參數的情況下,在50%和90%稀疏比上達到甚至超過了MaP、MvP、L0等基線算法的結果;

b. 隨著稀疏率的增大,PST較MaP、MvP體現出越來越明顯的優勢。

3. NLG實驗結果
a. ?90%稀疏率:在三個數據集上均優于基線方法;
b. ?在E2E、WebNLG上更是優于原始Fine-tuning方案;

4. 對比實驗(重要性得分函數)
a. 我們調整r1和r2使得所有方案有同樣的參數量;
b. 結果表明,我們的方案優于各種其他方案;
c. 結構化項( Structuredness )的作用大于低秩項(Low-rank)。

5. 對比實驗(秩)
a. 當秩較小時(如r1或r2 = 4),提升對應項的秩(r2或r1)會帶來結果提升;
b. 而當秩足夠大時,(如r1或r2 = 16),對應項的秩的提升不一定帶來結果提升,最優結果均為( r1 = 16, r2 = 8 );
c. ?在下游任務上搜索 r1 或 r2 可進一步提升結果。

6. 分析實驗(權重分布)
a. ?PST在weight和score上更平滑;
b. 同時表現出MaP和MvP的特點;
c. 結合了MaP和MvP 的優勢。

7. 分析實驗(稀疏矩陣)
a. PST的稀疏矩陣更接近MaP;
b. 隨著深度增加,PST與MaP的區別逐漸增大;
c. 隨著深度增加,PST與MvP在Input層更相似,但在Output層更不同。

8. PLUG模型結果
a. 實驗設置:CLUE Benchmark :CSL 、 OCNLI、 CMNLI ,Few-shot :2K或3K數據(每個類別1K標注數據);
實驗結果:
在90%稀疏率時,三個數據集的平均精度損失僅在0.67;
在OCNLI數據集上,90%稀疏的PLUG模型的精度/效果提升了+0.27%(66.00 vs 65.73)。

b. 實驗設置:三個業務數據集 (約1k條訓練數據);Decoder參數稀疏率99% & Encoder + Decoder參數稀疏率99%;
實驗結果:
多個數據集均達到精度無損甚至結果提升。

1. PST:Parameter-efficient Sparsity Training
針對超大規模語言模型,提出基于稀疏的解決方案;
PST算法結合結構化稀疏、非結構化稀疏、低秩分解等優勢,在基本保證下游任務結果的基礎上,實現90%甚至99%的模型稀疏,使大規模語言模型訓練和測試落地成為可能。
2. Future Work
考慮訓練速度,探索穩定的大比例稀疏算法;
不考慮訓練速度,得到同等(小)規模的最優模型;
融合稀疏和其他模型(蒸餾、量化)壓縮算法;
協同硬件加速算法,提升同等規模模型的Inference速度。
06精彩問答Q:剪枝、量化和低秩分解很難用到Fast Transformer或其它模型上,使用蒸餾會更簡單可行嗎?
A:是的。蒸餾的方式不改變原模型結構,可以快速使用無需適配。
Q:實際部署到業務的模型最大有多大?
A:模型的大小取決于任務的類型,在平臺上通過稀疏的方案進行訓練的模型最大可以部署270億模型。
Q:模型壓縮方案中哪種在工業界落地更廣泛?
A:目前Distillation(蒸餾)落地更廣泛,它是比較成熟的方案,可直接使用無需適配。在Distillation的基礎上進行Pruning是我們在探索的項目。
Q:非結構化稀疏的模型如何導出應用?
A:這也就是為什么我們要用Low-Rank的方式,它的改變量是低秩的,在部署的時候提前加到W上,這個計算不需要在部署后的模型上再去做了,所以就不需要額外的空間做存儲了。
Q:PST方案是否已經上線?
A:PST已經在AliceMind平臺上線供大家使用了。
Q:大模型稀疏99%后帶來哪些效果提升?
A:可以說稀疏后效果不會有太多下降,提升的話可能是一些初始化、誤差等等,或者小模型更少的冗余對某些特定的任務反應比較好等。
Q:模型參數的稀疏率如何設定?
A:稀疏率要看項目的目標是什么,要看能夠load起來的代碼參數量有多少,如果一個單卡的機器可能就是億級別的參數,結合原始的參數計算下稀疏的比例。比如原來的參數是10億級別,最終要部署的是億級別的,那大概的要做90%的稀疏。
Q:GPU在稀疏性計算上的性能是否比較差?
A:這需要和工程人員去配合。如果是完全非結構化的稀疏,它的加速比是無法達到參數的減少比例的,比如參數量減少10倍,其提升的速度不會有10倍,如果結構化好一些或稀疏算子實現的好一些的話,這個比例會更接近。GPU在稀疏性計算上已經有一些工作在實現了,比如A100已經支持一定程度上的稀疏了。
Q:結構化剪枝與非結構化剪枝哪個更有優勢?
A:結構化剪枝從工程實現上會更容易,而非結構化剪枝在算法上的空間更大,因此,工程和算法需要更好的配合。
上一篇:企業架構框架:四橫五縱...