30%參數達到92%的表現,大模型稀疏化方法顯神通

科技有夕小瑤 2024-05-12 10:08:32

當我還是一位懵懂少年的時候,總認爲“任務難度”,“參數規模”和“准確率”是一個不可兼顧的三角,比如當我想要挑戰更難的任務,追求獲得更高的准確率,那必然就要在更大的模型參數量上進行妥協。然而,真的是這樣嗎?

而在千帆閱盡以後,我才終于開始感悟到,

“小孩子才做選擇,成年人全部都要”

論文標題Enabling High-Sparsity Foundational Llama Models With Efficient Pretraining and Deployment

論文鏈接https://arxiv.org/pdf/2405.03594.pdf

GPT-3.5研究測試:https://hujiaoai.cn

GPT-4研究測試:https://higpt4.cn

Claude-3研究測試(全面吊打GPT-4):https://hiclaude3.com

到底怎樣才能把你變小

過去我們在做工程優化時,常常會出現這樣的一段對話:

由于在量化(quantization)過程中,只保留每個參數的4位或8位數值參與運算,因此不可避免地會帶來准確度損失。除了量化以外,權重剪枝(weight pruning)也是一個常見的模型壓縮辦法,它通過讓部分參數爲0來提高推理速度。然而,權重剪枝同樣面臨降准確率的問題,尤其是在面臨複雜任務的時候。

今天我們介紹的這篇文章,就致力于在壓縮模型的同時,做到保證准確率不會明顯下降,真正實現“既要,又要”

方法稀疏預訓練

在此之前,SparseGPT已經實現了在Llama-2 7B上50%的稀疏化,而本文則希望更進一步,實現70%的稀疏化。具體來說,作者采用了叠代方法。首先,他們訓練一個50%稀疏的模型直到收斂,然後在此基礎上進一步剪枝以獲得70%的稀疏性。剪枝後的權重被固定,並且在訓練過程中強制執行稀疏掩碼以保持稀疏性。

稀疏預訓練選擇了SlimPajama數據集和The Stack數據集中的Python子集的混合,因爲這些數據集經過過濾,能夠確保高比例的優質token。

稀疏微調

稀疏微調是在稀疏預訓練模型的基礎上進行的,旨在進一步提高模型在特定任務上的准確性,同時保持稀疏度。本文在預訓練稀疏模型的基礎上,采用了SquareHead蒸餾方法,旨在實現每一層上的稀疏微調。

本文評估了以下四種稀疏微調方法:

密集微調後一次性剪枝(Dense Fine-Tuning with One-Shot Pruning):先對一個密集模型進行微調,然後在微調數據集上進行一次性剪枝。微調期間剪枝(Pruning During Fine-Tuning):在第一種方法的基礎上,對模型進行額外的稀疏微調。從一次性剪枝的模型開始稀疏微調(Sparse Fine-Tuning from One-Shot Pruned Models):先對預訓練模型進行剪枝,然後對目標數據集進行稀疏微調。從稀疏預訓練模型開始稀疏微調(Sparse Fine-Tuning from Sparse Pretrained Models):從稀疏預訓練模型開始,在微調數據集上進行稀疏微調。

此外,文章還發現不同任務類別的准確率恢複模式不同,表明任務複雜性與有效的微調策略之間存在相關性。

有限上下文任務:對于有限上下文任務(如算術推理、摘要),微調期間的剪枝通常可以完全恢複,這表明微調數據集已經包含了模型適應所需的大部分信息。大上下文任務:對于大上下文任務(如聊天、代碼生成、指令跟隨),使用標准微調期間的剪枝進行恢複要困難得多,這表明這些任務更多地依賴于預訓練數據集的更廣泛知識。

文章證實了,與在微調期間的標准“剪枝”方法相比,稀疏預訓練及其後續的稀疏微調方法具有以下優勢:

高稀疏度下的高恢複率:特別是對于具有大上下文窗口的複雜任務,稀疏預訓練方法在高達70%的稀疏度下一致地顯示出更高的准確性恢複。簡化的超參數搜索:稀疏預訓練創建了一個更穩健的基礎,有效避免了在微調期間進行剪枝的大範圍超參數調節減少計算:通過稀疏預訓練,模型通常只需要單次微調即可實現收斂。基于Cerebras CS-3的稀疏預訓練加速

Cerebras CS-3 是專爲加速稀疏訓練而設計的,它對未結構化稀疏性提供了原生支持。CS-3 的基礎是一個完全可編程的處理器,支持通用和專門的張量指令,爲不同的工作負載提供了靈活性。同時,與PyTorch的集成也確保了其易用性,允許開發者利用硬件的能力而無需進行大量的代碼修改。

由于稀疏矩陣乘法是大模型(LLM)訓練的核心操作,CS-3獨特的片內存儲器(on-chip memory)架構正是爲稀疏操作提供了高內存帶寬,克服了傳統GPU依賴于片外DRAM的限制。CS-3的細粒度數據流執行進一步增強了其稀疏加速能力。在這種範式中,數據本身觸發計算。通過過濾掉零值,只有非零數據被處理,帶來了功耗節省和性能提升。

因此理論上基于CS-3的稀疏預訓練,會在浮點運算數(FLOPs)顯著減少的同時,實現LLM訓練性能的顯著提升。而實際的性能提升與預期的理論提升非常接近,下圖展示了Llama-2在一個示例矩陣乘法上的性能比較。

實驗稀疏預訓練實驗

本文在Llama-2 7B上,采用前述稀疏預訓練方法進行實驗,並度量了模型在“代碼生成”,“常識推理”和“世界知識”等通用能力上的效果。與僅進行訓練後剪枝(Post-Training Pruning)的方法相比,稀疏預訓練方法在50%和70%的稀疏度下都能實現顯著更高的准確度恢複,並基本接近基線水平。

有限上下文稀疏微調實驗

本文選用了GSM8K(計算推理數據集)和CNN Daily Mail(摘要數據集)用于有限上下文場景下稀疏微調效果的測評。在50%和70%的稀疏度下,基于稀疏預訓練的稀疏微調方法都實現了接近100%的准確率恢複能力,與當前最先進技術相當甚至更優。

大上下文稀疏微調實驗

本文選用了UltraChat200k(聊天數據集),Dolphin和Open Platypus (指令跟隨數據集),和Eval Code Alpaca(代碼生成數據集)用于大上下文場景下稀疏微調效果的測評。證實了本文方法在高稀疏水平下的效果顯著優于其他技術,尤其在70%的稀疏度下超過了所有比較方案。

稀疏量化推理性能

在稀疏微調之後,作者應用了量化技術,並通過SmoothQuant算法、GPTQ算法,和針對頂部5層的層跳過技術,以最小化准確度影響。實驗發現,量化方法導致在各項任務中的准確度下降可以忽略不計,INT8數據格式的權重和激活對于實現與DeepSparse引擎的最大兼容性和推理性能增益至關重要。

下圖直觀地展示通過稀疏化和量化相結合所帶來的顯著性能提升。與采用FP32格式的基線相比,在CPU機器上觀察到以下改進:

預填充性能(Prefill Performance):對于標准512長度的生成任務,首token生成時間最高提速3.86倍 解碼性能(Decode Performance):每秒解碼token數量最高提升8.6倍

結論與展望

本文提出了一種新的稀疏預訓練方法,該方法能夠在高達70%的稀疏度下幾乎實現微調任務的完全准確度恢複,超越了傳統的微調期間剪枝方法。同時利用Cerebras CS-3系統加速了稀疏預訓練過程,並通過Neural Magic的軟件棧在CPU和GPU上實現了高效的稀疏推理。

在未來,作者將探索使用更大模型的擴展性研究,以驗證該方法在更大規模的數據集和模型上依然有效。除了Llama,作者也考慮將稀疏化方法適配到更多新興的LLM架構中。由于本文驗證了稀疏化方法與量化技術結合的有效性,因此作者還將研究更精細的量化技術,如INT4量化,以進一步壓縮模型並減少計算需求。此外,如何優化預訓練數據集的最佳配比和大小,以提高稀疏模型的性能,也同樣是一個值得研究的問題。

結語

嘿嘿,還沒有結束,

不知道大家在讀這篇文章引言的時候有沒有想到一張圖,

沒錯!我當然沒有忘掉它!

好了,上圖!

最後,祝所有能看到這裏的小夥伴,都能在AI探索的道路上,所願所想即所得。少一些不得已的取舍,多一些經典的那句

“我全都要!!!”

0 阅读:0

科技有夕小瑤

簡介:感謝大家的關注