模型概述
模型特點
模型能力
使用案例
🚀 MiniCPM-S-1B-sft
MiniCPM-S-1B-sft是一個基於特定技術優化的模型,通過採用創新的稀疏化方法提升激活稀疏性,在保持性能的同時實現推理加速,可應用於代碼生成、常識推理等多個領域。
🚀 快速開始
聊天模板
為了讓模型更好地響應查詢,建議使用標準的聊天提示,例如:
<用戶>{prompt}<AI>
其中,prompt
是查詢文本,<用戶>
和 <AI>
是提示標記。同時,請確保在任何輸入的開頭添加 起始標記 <s>
,否則模型有時可能表現異常。
✨ 主要特性
- 激活稀疏性利用:採用名為 "ProSparse" 的簡單有效稀疏化方法,推動大語言模型實現更高的激活稀疏性,同時保持可比的性能。
- 推理加速:通過利用激活稀疏性,在 PowerInfer 等框架以及自定義的稀疏 GPU 算子上實現推理加速。
- 多場景適用:在代碼生成、常識推理、閱讀理解等多個基準測試中表現出色。
📚 詳細文檔
模型信息
- 原始模型:MiniCPM-1B-sft-bf16
- 模型創建及微調方:ModelBest、OpenBMB 和 THUNLP
- 論文:鏈接(注:論文中
MiniCPM-S-1B
表示為ProSparse-1B
) - 適配的 LLaMA 版本:MiniCPM-S-1B-sft-llama-format
- 適配的 PowerInfer 版本:MiniCPM-S-1B-sft-gguf
訓練數據集
我們在約 4730.2 億個標記上對 1B 模型進行了 101,000 步的訓練,其中包括 35,000 步的標準 ProSparse 預訓練、60,000 步的衰減階段和 6,000 步的 SFT 階段。除 ProSparse 外,其他訓練設置與原始的 MiniCPM-1B 高度一致。更多詳細信息請參考我們的 論文 和 MiniCPM 技術報告。
直觀地說,使用更多的標記或更廣泛覆蓋、更高質量的數據訓練模型,將獲得更好的特定任務性能。
ProSparse:訓練方法
ProSparse 的訓練過程包括三個步驟(更多詳細信息請參考 論文 的第 3.2 節):
- 激活函數替換:將 FFNs 的激活函數替換為 ReLU 並進行持續訓練。
- 漸進式稀疏正則化:在傳統的下一個標記預測損失和 \(L_1\) 正則化損失上聯合優化模型。正則化應用於 FFNs 的稀疏中間輸出,正則化因子在多個階段逐步增加。具體來說,在預熱階段將正則化因子 \(\lambda\) 設置為一個小常數,然後在後續的每個增量階段沿著平滑的正弦曲線增加。每個階段都伴隨著一定步數的訓練。這樣,模型可以有更多時間適應不斷增加的正則化,而不會出現激進的激活偏移,從而減輕性能下降。
- 激活閾值偏移:最後,將 ReLU 替換為 FATReLU (Kurtz et al., 2020),這是一種具有正閾值的 ReLU 變體。這可以修剪激活輸出中的那些非零弱貢獻元素,進一步提高稀疏性。
每個階段的超參數(包括正則化因子 \(\lambda_i\)、累積訓練步數 \(T_i\) 和累積訓練標記數)如下所示:
步驟編號 \(i\) | \(\lambda_i\) | \(T_i\) | 累積標記數(B) |
---|---|---|---|
0 | 0 | 10,000 | 49.15 |
1 | \(1e-3\) | 15,000 | 73.73 |
2 | \(5e-3\) | 20,000 | 98.30 |
3 | \(5e-3\) | 25,000 | 122.88 |
4 | \(5e-2\) | 35,000 | 172.03 |
衰減階段 | \(5e-2\)(固定) | 95,000 | 466.94 |
SFT 階段 | \(1e-2\)(固定) | 101,000 | 473.02 |
評估結果
上述基準測試的評估結果證明了 ProSparse 的優勢,它是唯一一種在實現高稀疏性的同時,性能與原始 Swish 激活的 LLaMA2 相當的方法。請注意,所有設置下的模型都在相同的混合數據集上使用相同數量的標記進行訓練。我們的評估基於 UltraEval 框架。評估細節如下:
- 代碼生成:我們計算了 HumanEval(0 樣本)和 MBPP(3 樣本)上的平均 pass@1 分數。
- 常識推理:我們報告了 PIQA、SIQA、HellaSwag、WinoGrande 和 COPA 上的平均 0 樣本準確率。
- 閱讀理解:我們計算了 BoolQ、LAMBADA 和 TyDi QA 上的平均 0 樣本準確率。
- 其他流行基準測試:我們報告了 GSM8K(8 樣本)、MMLU(5 樣本)、Big Bench Hard(BBH)(3 樣本)和 AGI-Eval(0 樣本)上的平均準確率。
注意:對於 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 |
MiniCPM-S-1B* | 86.25 | 44.72 | 41.38 | 64.55 | 60.69 | 34.72 | 49.36 | 34.04 | 28.27 |
MiniCPM-S-1B | 87.89 | 44.72 | 42.04 | 64.37 | 60.73 | 34.57 | 49.51 | 34.08 | 27.77 |
注意:“原始” 指的是原始 Swish 激活的 LLaMA2 版本。ReluLLaMA-7B 和 ReluLLaMA-13B 分別可在 7B 和 13B 找到。MiniCPM-1B 可在 1B 找到。“ProSparse-7B*”、“ProSparse-13B*” 和 “MiniCPM-S-1B*” 表示未進行激活閾值偏移的 ProSparse 版本。
LM-Eval 評估問題
上述結果可以使用 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
適配 vLLM 到 ProSparse LLaMA 模型的步驟
- 將原始 vLLM 中的 vllm/model_executor/models/llama.py 文件替換為這個 文件。
- 將原始 config.json 的內容替換為這個 文件。
- 設置環境變量
ACT_INFO
。要測試未進行激活閾值偏移的版本,執行export ACT_INFO=relu
。要測試進行了激活閾值偏移的版本,執行export ACT_INFO=fatrelu_0.01
。
推理加速效果
首先,我們使用 PowerInfer,這是一個利用激活稀疏性的先進加速框架。由於其推理速度和準確性在很大程度上依賴於激活預測器的性能,我們報告了激活召回率和預測稀疏性(即評估激活預測器的兩個關鍵指標),以及 PowerInfer 每秒生成的標記數(使用一個 A100 GPU 和足夠的 CPU)。ProSparse LLaMA 模型的 GGUF 文件和激活預測器也可用。
此外,考慮到激活預測器的錯誤預測可能導致的推理不準確,我們實現了兩個稀疏 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 時間 |
相對於密集模型的 加速比 |
---|---|---|---|---|---|---|---|---|---|
密集 - 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 |
密集 - 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 |
注意:對於 “密集” 設置,“推理速度”(標記/秒)通過 llama.cpp 獲得,步驟 (2) 和 (3) 的時間(微秒)在不使用稀疏 GPU 算子的情況下測量。對於其他稀疏設置,“推理速度” 通過 PowerInfer 獲得,並應用了稀疏 GPU 算子。目前,PowerInfer 不支持進行了激活閾值偏移的 ProSparse 設置和 MiniCPM 架構。
引用
請使用以下 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}
}
許可證
本倉庫根據 Apache - 2.0 許可證發佈。
MiniCPM 模型權重的使用必須嚴格遵循 通用模型許可證 (GML)。
MiniCPM 的模型和權重完全免費用於學術研究。
如果您打算將模型用於商業目的,請聯繫 cpm@modelbest.cn 獲取授權證書。
聲明
作為一個語言模型,MiniCPM 通過學習大量文本生成內容。
然而,它不具備理解或表達個人觀點或價值判斷的能力。
MiniCPM 生成的任何內容均不代表模型開發者的觀點或立場。
因此,在使用 MiniCPM 生成的內容時,用戶應自行承擔評估和驗證的全部責任。
致謝
本模型卡片參考了 ReluLLaMA - 7B 和 MiniCPM - 1B 進行修改。
本倉庫的副本:鏈接。



