模型简介
模型特点
模型能力
使用案例
🚀 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。



