语言:
- 英文
- 中文
标签:
- MiniCPM
- ModelBest
- THUNLP
许可证: apache-2.0
MiniCPM-S-1B-sft
对话模板
为了使模型能够精准响应查询,建议使用标准对话提示格式,例如:
<用户>{prompt}<AI>
其中 prompt
为查询文本,<用户>
和 <AI>
为提示标记。
同时,请确保在任何输入的开头添加 起始标记 <s>
,否则模型可能会出现异常行为。
简介
激活稀疏化(即激活输出中存在大量弱贡献元素)是利用大语言模型(LLMs)推理加速的一种有效方法(Liu et al., 2023; Song et al., 2023)。具体而言,基于激活稀疏化的加速方法通过更明智的资源分配和计算策略,避免在这些弱贡献参数上浪费资源,从而实现更高的推理速度。
采用ReLU作为激活函数是实现激活稀疏化的直接方法。然而,当前主流LLMs多采用无固有稀疏性的激活函数(如GELU和Swish)。部分研究(Zhang et al., 2022; Mirzadeh et al., 2023; Zhang et al., 2024)尝试引入ReLU或其变体作为替代激活函数,以帮助非ReLU LLMs实现激活稀疏化和推理加速,但鲜有方法能同时实现高稀疏性和可比的任务性能。
本工作提出了一种简单高效的稀疏化方法"ProSparse",旨在提升LLMs的激活稀疏性同时保持性能。通过将ProSparse应用于Swish激活的LLaMA2-7B、LLaMA2-13B和MiniCPM-1B,我们获得了ReLU激活模型,其稀疏性分别达到89.32%、88.80%和87.89%,且性能与原版相当。这些模型成为开源LLaMA版本中稀疏性最高的代表,显著超越ReluLLaMA-7B(66.98%)和ReluLLaMA-13B(71.56%)。进一步的推理加速实验验证了高稀疏性在PowerInfer和我们的两个稀疏GPU算子上的实际加速效果。
训练数据集
我们在约4730.2亿token上训练了1B模型,共101,000步。包括35,000步标准ProSparse预训练、60,000步衰减训练和6,000步SFT。除ProSparse外,其他训练设置与原始MiniCPM-1B高度一致。更多细节请参阅我们的论文和MiniCPM技术报告。
直观上,使用更多token或覆盖更广、质量更高的数据训练模型将获得更好的任务性能。
ProSparse:训练方法
ProSparse训练过程分为三步(详见论文第3.2节):
- 激活函数替换: 将FFNs的激活函数替换为ReLU并进行持续训练;
- 渐进稀疏正则化: 联合优化常规的下一个token预测损失和\(L_1\)正则化损失。正则化应用于FFNs的稀疏中间输出,其因子分阶段渐进增加。具体而言,预热阶段正则化因子\(\lambda\)设为小常数,后续每个增量阶段沿平滑正弦曲线增长。每个阶段伴随特定步数的训练,使模型能逐步适应增强的正则化,缓解性能下降;
- 激活阈值偏移: 最终将ReLU替换为带正阈值的FATReLU(Kurtz et al., 2020),进一步剪枝激活输出中的非零弱贡献元素以提升稀疏性。
各阶段超参数(包括正则化因子\(\lambda_i\)、累计训练步数\(T_i\)和累计训练token数)如下:
阶段编号 \(i\) |
\(\lambda_i\) |
\(T_i\) |
累计token数(十亿) |
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相当的方法。注意所有设置下的模型均在相同token数和混合数据集上训练。评估基于UltraEval框架,细节如下:
- 代码生成: 计算HumanEval(0-shot)和MBPP(3-shot)的平均pass@1分数
- 常识推理: 报告PIQA、SIQA、HellaSwag、WinoGrande和COPA的0-shot平均准确率
- 阅读理解: 计算BoolQ、LAMBADA和TyDi QA的0-shot平均准确率
- 其他流行基准: 报告GSM8K(8-shot)、MMLU(5-shot)、Big Bench Hard(BBH)(3-shot)和AGI-Eval(0-shot)的平均准确率
注: 对PIQA等9个基准,基于最大化困惑度获取预测答案;对GSM8K等3个基准,直接生成预测答案。
设置 |
平均 稀疏性 |
平均 性能 |
代码 生成 |
常识 推理 |
阅读 理解 |
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 |
注: "Original"指原始Swish激活LLaMA2版本。ReluLLaMA-7B/13B见7B和13B。带*号版本表示未应用激活阈值偏移的ProSparse模型。
LM-Eval评估问题
上述结果可通过UltraEval复现。使用LM-Eval等框架可能因默认未添加起始标记<s>
导致异常结果。临时修复代码如下。其他评估差异可能源自few-shot设置、数据预处理或额外提示等因素。
if context_enc[0] != 1:
context_enc = [1] + context_enc
推理加速效果
首先采用最先进的激活稀疏化加速框架PowerInfer。由于其推理速度和精度高度依赖激活预测器性能,我们报告了激活召回率、预测稀疏性以及PowerInfer的生成速度(tokens/sec)。同时为利用稀疏性实现精确加速,我们实现了两个稀疏GPU算子用于加速FFN关键步骤:
- 步骤(2)(
S2
): ReLU与\(\mathbf{s} \odot (\mathbf{x} \mathbf{W}_1^T)\)的融合算子
- 步骤(3)(
S3
): 稀疏矩阵-向量乘法算子\(\mathbf{x}_1 \mathbf{W}_2^T\)
不同稀疏性设置的加速效果如下表所示。ProSparse在保持性能的同时实现高稀疏性,能获得最显著的加速收益。详见论文第4.3节。
设置 |
平均 稀疏性 |
激活 召回率 |
预测 稀疏性 |
PowerInfer 速度 |
相对 加速比 |
S2 时间(μs) |
相对 加速比 |
S3 时间(μs) |
相对 加速比 |
Dense-7B |
- |
|
|
|
|
|
|
|
|