CPU 上的稀疏 LLM 推理

微调大型语言模型以获得小型但精确的模型极其困难。这是因为你必须在模型大小和准确性之间取得平衡。IST 奥地利和 Neural Magic 的研究人员似乎找到了一个最佳平衡点。在他们最新的论文中,他们成功地对 MPT 应用了稀疏微调,并取得了卓越的性能。MPT 模型被剪枝了 75%,但准确性没有下降,性能与量化方法持平。
特别是,生成的稀疏模型可以利用稀疏性在 CPU 上快速执行。研究人员没有进行可能无法恢复准确性的标准基于损失的微调,而是尝试使用蒸馏型损失。这些损失在高度稀疏时能更好地恢复准确性。
令人印象深刻的是,经过稀疏微调的模型在廉价的消费级 AMD Ryzen CPU 的单个核心上实现了每秒 7.7 个令牌,在 4 个核心上实现了每秒 26.7 个令牌。
本文将深入探讨这篇论文的更多细节。
研究人员旨在解决运行大型语言模型的高成本问题。最流行的技术之一是量化,即将权重的精度降低到 4 位。然而,当每个权重的位数约为 3 位时,恢复准确性变得困难。
引入权重稀疏性是量化的替代方案,其中网络中的某些连接被设置为零。在微调过程中引入的稀疏性使得模型显著加快。在本文中,作者研究了大型语言模型的稀疏微调,用于以下应用:
- 使用 Whisper 进行语音转录
- 使用 T5 进行机器翻译
- 使用开放的 GPT 类型 MPT 模型进行更高级别的推理
大型语言模型的挑战
在微调大型语言模型时,研究人员面临并解决了若干挑战。这些挑战源于以下事实:
- 微调数据可能不如训练数据大
- 需要实现高稀疏度水平
主要挑战是高稀疏度下的损失尖峰、无法恢复原始准确性以及在有限的微调数据上过拟合。研究人员通过结合多种方法解决了这些挑战,包括一种逐令牌ℓ2知识蒸馏和SparseGPT。他们将该方法称为 SquareHead 蒸馏,表明它甚至可以在更高的稀疏度下恢复准确性。然后,他们使用DeepSparse推理运行时运行生成的模型,以证明它们可以从 CPU 上的加速推理中受益。
生成模型的压缩
作者研究了开源 Mosaic 预训练模型 MPT-7B 用于生成任务的压缩。该模型在GSM8K上进行了稀疏微调,GSM8K 是一个包含高质量多样小学数学问题的数据集。
对于此任务,零样本评估达到 0%,而 8 样本评估达到 6.8%。因此,该模型通过监督微调 (SFT) 进行微调。
第一步涉及通过 SFT 微调 MPT-7B 以获得密集且准确的基线,用作蒸馏过程中的教师。接下来,研究人员使用 SparseGPT 对 40%、50%、60%、70% 和 80% 的稀疏度目标进行一次非结构化剪枝,均匀地分布在所有层中。然后,模型权重和激活使用SparseML量化为 8 位。使用语言模型评估工具包在 GSM8K 任务上评估所得模型。
加速压缩语言模型
稀疏加速是使大型语言模型变小后的下一步。在模型中引入稀疏性意味着在推理时可以跳过零计算。由于语言模型是内存受限的,因此稀疏权重可以以压缩形式存储,并在执行层计算时按需解压缩。利用像DeepSparse这样的运行时是一个理想的解决方案,它在内存和计算受限的情况下都实现了稀疏感知推理。
最终思考
这篇论文的结果表明,稀疏性可以有效加速普通 CPU 上的 LLM 推理。这对于使 LLM 易于访问至关重要,尤其是在内存、存储和计算能力有限的设备(如手机和边缘设备)上。它还将使语言模型的部署更便宜,因为它们可以部署在现成的普通 CPU 上。
在 Hugging Face Spaces 上查看 MPT 模型在 CPU 上运行的演示。有兴趣在 CPU 上部署大型语言模型吗?请在 GitHub 上查看 DeepSparse 或加入其他 LLM 开发者社区。