模型概述
模型特點
模型能力
使用案例
🚀 ProSparse-LLaMA-2-7B
ProSparse-LLaMA-2-7B 是一種基於激活稀疏性的大語言模型優化方案,通過引入“ProSparse”方法,在保持模型性能的同時,顯著提高了模型的激活稀疏性,從而實現推理加速。
🚀 快速開始
適配 vLLM
以下是將原始 vLLM 適配到 ProSparse LLaMA 模型的步驟:
- 將原始 vLLM 中的 vllm/model_executor/models/llama.py 文件替換為這個 文件。
- 將原始 config.json 的內容替換為這個 文件。
- 設置環境變量
ACT_INFO
。要測試無激活閾值偏移的版本,執行export ACT_INFO=relu
;要測試有激活閾值偏移的版本,執行export ACT_INFO=fatrelu_0.01
。
評估問題處理
上述結果可以使用 UltraEval 進行復現。使用其他流行框架(如 LM-Eval)獲得的一些異常結果,可能是由於缺少 cls 標記 <s>
導致的,LM-Eval 默認不會添加該標記。以下代碼展示了一個快速臨時修復方法。評估結果的其他差異可能由其他原因引起,包括少樣本設置、數據預處理和額外提示。
# https://github.com/EleutherAI/lm-evaluation-harness/blob/main/lm_eval/models/huggingface.py#L945
for _, context_enc, continuation_enc in chunk:
# 完整性檢查
assert len(context_enc) > 0
# 注意:這裡有一個簡單的修復
if context_enc[0] != 1:
context_enc = [1] + context_enc
assert len(continuation_enc) > 0
assert len(continuation_enc) <= self.max_length
✨ 主要特性
- 高激活稀疏性:通過“ProSparse”方法,在 Swish 激活的 LLaMA2-7B、LLaMA2-13B 和 MiniCPM-1B 上分別獲得了 89.32%、88.80% 和 87.89% 的高激活稀疏性,遠超 ReluLLaMA-7B(66.98%)和 ReluLLaMA-13B(71.56%)。
- 性能可比:在保持高稀疏性的同時,模型性能與原始版本相當。
- 推理加速:更高的稀疏性在 PowerInfer 和兩個稀疏 GPU 算子 上都展現出了實際的加速效果。
📦 安裝指南
文檔中未提及安裝步驟,故跳過此章節。
💻 使用示例
文檔中未提供代碼示例,故跳過此章節。
📚 詳細文檔
模型信息
屬性 | 詳情 |
---|---|
模型創建者 | Meta |
原始模型 | Llama 2 7B |
微調者 | THUNLP 和 ModelBest |
論文 | 鏈接 |
模型類型 | 大語言模型 |
訓練數據 | 包括語言建模數據集(如 StarCoder、Wikipedia、Pile 等)和指令調優數據集(如 UltraChat、P3、PAQ 等) |
訓練數據集
我們在約 346 億個標記上對 7B 模型進行了 16500 步的訓練,訓練數據包括以下兩類的混合:
-
語言建模數據集:
- StarCoder
- Wikipedia
- Pile
- 其他收集的數據集
-
指令調優數據集:
- UltraChat
- P3(多項選擇問答)
- PAQ
- Unnatural Instructions
- Flan
- Super-Natural Instructions
- 其他收集的數據集
直觀地說,使用更多的標記或更廣泛覆蓋、更高質量的數據訓練模型將獲得更好的特定任務性能。
ProSparse:訓練方法
ProSparse 的訓練過程包括三個步驟(更多細節請參考 論文 的第 3.2 節):
- 激活函數替換:將前饋網絡(FFNs)的激活函數替換為 ReLU 並進行持續訓練。
- 漸進稀疏正則化:在傳統的下一個標記預測損失和 \(L_1\) 正則化損失上聯合優化模型。正則化應用於 FFNs 的稀疏中間輸出,正則化因子在多個階段逐步增加。具體來說,在預熱階段將正則化因子 \(\lambda\) 設置為一個小常數,然後在後續的每個增量階段沿平滑正弦曲線增加。每個階段都伴隨著一定步數的訓練。這樣,模型可以有更多時間適應不斷增加的正則化,而不會出現激進的激活偏移,從而減輕性能下降。
- 激活閾值偏移:最後,將 ReLU 替換為 FATReLU (Kurtz et al., 2020),這是一種具有正閾值的 ReLU 變體。這可以修剪激活輸出中的非零弱貢獻元素,進一步提高稀疏性。
7B 模型在 8 個 A100 GPU 上進行訓練。學習率(LR)由余弦調度器控制,峰值 LR 為 \(3e-5\)。每個階段的超參數(包括正則化因子 \(\lambda_i\)、累積訓練步數 \(T_i\) 和累積訓練標記數)如下所示:
步驟編號 \(i\) | \(\lambda_i\) | \(T_i\) | 累積標記數(十億) |
---|---|---|---|
0 | 0 | 5,000 | 10.49 |
1 | \(5e-3\) | 6,000 | 12.58 |
2 | \(5e-2\) | 10,000 | 20.97 |
3 | \(5e-2\) | 12,000 | 25.17 |
4 | \(2e-1\) | 16,000 | 33.55 |
5 | \(2e-1\) | 16,500 | 34.60 |
評估結果
上述基準測試的評估結果證明了 ProSparse 的優勢,它是唯一一種在實現高稀疏性的同時,性能與原始 Swish 激活的 LLaMA2 相當的方法。請注意,所有設置下的模型都在相同的混合數據集上使用相同數量的標記進行訓練。我們的評估基於 UltraEval 框架。評估細節如下:
- 代碼生成:我們計算了 HumanEval(零樣本)和 MBPP(三樣本)的平均通過率@1。
- 常識推理:我們報告了 PIQA、SIQA、HellaSwag、WinoGrande 和 COPA 的平均零樣本準確率。
- 閱讀理解:我們計算了 BoolQ、LAMBADA 和 TyDi QA 的平均零樣本準確率。
- 其他流行基準測試:我們報告了 GSM8K(八樣本)、MMLU(五樣本)、Big Bench Hard(BBH)(三樣本)和 AGI-Eval(零樣本)的平均準確率。
注意:對於 PIQA、SIQA、HellaSwag、WinoGrande、COPA、BoolQ、LAMBADA、TyDi QA 和 AGI-Eval,我們根據最大困惑度獲得預測答案。對於 GSM8K、MMLU 和 BBH,直接生成預測答案。
設置 | 平均 稀疏性 |
平均 性能 |
代碼 生成 |
常識 推理 |
閱讀 理解 |
GSM8K | MMLU | BBH | AGI 評估 |
---|---|---|---|---|---|---|---|---|---|
LLaMA2-7B | - | 37.96 | 16.37 | 69.59 | 61.87 | 12.96 | 44.45 | 32.96 | 27.53 |
ReluLLaMA-7B | 66.98 | 37.62 | 15.85 | 69.64 | 70.54 | 5.84 | 38.64 | 35.07 | 27.73 |
ProSparse-7B* | 88.11 | 38.31 | 19.47 | 66.29 | 63.33 | 12.74 | 45.21 | 33.59 | 27.55 |
ProSparse-7B | 89.32 | 38.46 | 19.42 | 66.27 | 63.50 | 12.13 | 45.48 | 34.99 | 27.46 |
LLaMA2-13B | - | 44.06 | 20.19 | 72.58 | 71.55 | 22.21 | 54.69 | 37.89 | 29.33 |
ReluLLaMA-13B | 71.56 | 42.74 | 20.19 | 70.44 | 73.29 | 18.50 | 50.58 | 37.97 | 28.22 |
ProSparse-13B* | 87.97 | 45.07 | 29.03 | 69.75 | 67.54 | 25.40 | 54.78 | 40.20 | 28.76 |
ProSparse-13B | 88.80 | 44.90 | 28.42 | 69.76 | 66.91 | 26.31 | 54.35 | 39.90 | 28.67 |
MiniCPM-1B | - | 44.44 | 36.85 | 63.67 | 60.90 | 35.48 | 50.44 | 35.03 | 28.71 |
ProSparse-1B* | 86.25 | 44.72 | 41.38 | 64.55 | 60.69 | 34.72 | 49.36 | 34.04 | 28.27 |
ProSparse-1B | 87.89 | 44.72 | 42.04 | 64.37 | 60.73 | 34.57 | 49.51 | 34.08 | 27.77 |
注意:“Original” 指的是原始 Swish 激活的 LLaMA2 版本。ReluLLaMA-7B 和 ReluLLaMA-13B 分別可在 7B 和 13B 獲得。MiniCPM-1B 可在 1B 獲得。“ProSparse-7B*”、“ProSparse-13B*” 和 “ProSparse-1B*” 表示未進行激活閾值偏移的 ProSparse 版本。
推理加速效果
首先,我們使用 PowerInfer,這是一種利用激活稀疏性的先進加速框架。由於其推理速度和準確性在很大程度上依賴於激活預測器的性能,我們報告了激活召回率和預測稀疏性(即評估激活預測器的兩個關鍵指標)以及 PowerInfer 每秒生成的標記數(使用一個 A100 GPU 和足夠的 CPU)。ProSparse-7B 的 GGUF 文件和激活預測器分別可在 ProSparse-LLaMA-2-7B-GGUF (副本) 和 ProSparse-LLaMA-2-7B-Predictor (副本) 獲得。
此外,考慮到激活預測器的錯誤預測可能導致推理不準確,我們實現了兩個稀疏 GPU 算子,用於利用激活稀疏性進行更快、更準確的推理。它們負責門控 FFN 中兩個關鍵步驟的加速:
- 步驟 (2) (
S2
):ReLU 和 \(\mathbf{s} \odot (\mathbf{x} \mathbf{W}_1^T)\) 的融合算子; - 步驟 (3) (
S3
):稀疏矩陣 - 向量乘法算子 \(\mathbf{x}_1 \mathbf{W}_2^T\)。
其中 \(\mathbf{s}\)、\(\mathbf{x}\)、\(\mathbf{x}_1\) 和 \(\odot\) 分別表示門控分數、FFN 輸入隱藏狀態、中間輸出和逐元素乘法。\(\mathbf{W}_1\) 和 \(\mathbf{W}_2\) 是 FFN 權重矩陣。
不同稀疏性的大語言模型的加速效果如下所示。ProSparse 在不降低性能的情況下達到了高稀疏性,在所有考慮的設置中受益最大。更多細節請參考 論文 的第 4.3 節。
設置 | 平均 稀疏性 |
激活 召回率 |
預測 稀疏性 |
PowerInfer 速度 |
相對於密集模型的加速比 | S2 時間 |
相對於密集模型的加速比 | S3 時間 |
相對於密集模型的加速比 |
---|---|---|---|---|---|---|---|---|---|
Dense-7B | - | - | - | 3.67 | 1.00 | 90.55 | 1.00 | 82.92 | 1.00 |
ReluLLaMA-7B | 66.98 | 90.89 | 58.95 | 11.37 | 3.10 | 67.12 | 1.35 | 63.00 | 1.32 |
ProSparse-7B* | 88.11 | 93.46 | 75.24 | 16.30 | 4.44 | 46.66 | 1.94 | 55.56 | 1.49 |
ProSparse-7B | 89.32 | 92.34 | 78.75 | - | - | 45.38 | 2.00 | 55.05 | 1.51 |
Dense-13B | - | - | - | 1.92 | 1.00 | 131.36 | 1.00 | 113.68 | 1.00 |
ReluLLaMA-13B | 71.56 | 86.41 | 71.93 | 6.59 | 3.43 | 69.92 | 1.88 | 75.47 | 1.51 |
ProSparse-13B* | 87.97 | 91.02 | 77.93 | 8.67 | 4.52 | 55.29 | 2.38 | 67.50 | 1.68 |
ProSparse-13B | 88.80 | 91.11 | 78.28 | - | - | 53.78 | 2.44 | 66.73 | 1.70 |
注意:對於“Dense” 設置,“推理速度”(標記/秒)通過 llama.cpp 獲得,步驟 (2) 和 (3) 的時間在不使用稀疏 GPU 算子的情況下測量。對於其他稀疏設置,“推理速度”通過 PowerInfer 獲得,並應用了稀疏 GPU 算子。目前,PowerInfer 不支持具有激活閾值偏移的 ProSparse 設置和 MiniCPM 架構。
🔧 技術細節
激活稀疏性的利用
激活稀疏性是指激活輸出中存在大量弱貢獻元素,利用這一特性可以實現大語言模型的推理加速。通過採用 ReLU 作為激活函數可以實現激活稀疏性,但大多數主流大語言模型採用的是無內在稀疏性的激活函數(如 GELU 和 Swish)。一些研究嘗試引入 ReLU 或其變體作為替代激活函數,但很少能同時獲得高稀疏性和可比的特定任務性能。
ProSparse 方法
ProSparse 方法通過三個步驟實現了在提高激活稀疏性的同時保持模型性能:激活函數替換、漸進稀疏正則化和激活閾值偏移。這種方法在多個模型上取得了顯著的稀疏性提升,同時在多個基準測試中表現出與原始模型相當的性能。
推理加速機制
通過使用 PowerInfer 框架和自定義的稀疏 GPU 算子,利用激活稀疏性實現了推理加速。PowerInfer 依賴於激活預測器的性能,而稀疏 GPU 算子則直接對門控 FFN 中的關鍵步驟進行加速。
📄 許可證
本模型受原始 Llama-2 模型的許可證和使用限制約束,不提供任何形式的保證或擔保。
侷限性和偏差
Llama 2 及其微調變體是一項新技術,使用時存在風險。到目前為止進行的測試都是用英語進行的,沒有涵蓋也不可能涵蓋所有場景。由於這些原因,與所有大語言模型一樣,Llama 2 及其任何微調變體的潛在輸出無法提前預測,並且在某些情況下,模型可能會對用戶提示產生不準確、有偏差或其他令人反感的響應。因此,在部署 Llama 2 變體的任何應用程序之前,開發人員應該針對其特定的模型應用進行安全測試和調整。
請參閱 負責任使用指南。
引用
請使用以下 BibTeX 進行引用:
@article{song2024prosparse,
title={{ProSparse}: Introducing and Enhancing Intrinsic Activation Sparsity within Large Language Models},
author={Song, Chenyang and Han, Xu and Zhang, Zhengyan and Hu, Shengding and Shi, Xiyu and Li, Kuai and Chen, Chen and Liu, Zhiyuan and Li, Guangli and Yang, Tao and Sun, Maosong},
year={2024},
journal={arXiv preprint arXiv:2402.13516},
url={https://arxiv.org/pdf/2402.13516.pdf}
}
致謝
本模型卡片改編自 ReluLLaMA-7B。



