模型简介
模型特点
模型能力
使用案例
🚀 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 进行修改。
本仓库的副本:链接。



