DeepMind Matryoshka量化:嵌套表示赋能多精度LLM低比特深度学习

DeepMind发布Matryoshka量化技术,通过嵌套表示实现多精度LLM的低比特深度学习,提升效率和精度。

原文标题:DeepMind发布Matryoshka(套娃)量化:利用嵌套表示实现多精度LLM的低比特深度学习

原文作者:数据派THU

冷月清谈:

DeepMind 提出的 Matryoshka 量化 (MatQuant) 技术,通过训练一个能够满足多个精度要求的统一模型,革新了大型语言模型 (LLM) 的部署方式。MatQuant 利用整数固有的嵌套结构,从全精度 int8 格式的权重中提取最高有效位,直接导出较低精度的版本(如 int4、int2)。训练过程同时最小化跨多个精度的量化损失,并通过协同蒸馏,利用高精度 (int8) 输出指导低精度输出。实验结果表明,MatQuant 显著提高了低精度性能,尤其是在 int2 精度上,并具备跨各种任务的鲁棒性。MatQuant 简化了 LLM 的部署流程,允许模型在不同精度间动态切换,优化推理速度和能耗,适用于边缘计算、云端推理服务和动态资源分配等多种场景。

怜星夜思:

1、Matryoshka量化在哪些实际应用场景中最具潜力?除了文中提到的边缘计算和云端推理,还有哪些行业或应用可以从中受益?
2、Matryoshka量化中提到的“协同蒸馏”具体是如何实现的?高精度模型是如何指导低精度模型训练的?能否提供一些更详细的技术细节?
3、文章中提到Matryoshka量化可以提取中间精度模型(如int6、int3),这种灵活性在实际应用中有什么价值?是否可以通过调整精度来适应不同的硬件平台或任务需求?

原文内容

来源:Deephub Imba
本文约4000字,建议阅读5分钟
本文将介绍 Google DeepMind 提出的 Matryoshka 量化技术,该技术通过从单个大型语言模型 (LLM) 实现多精度模型部署,从而革新深度学习。

本文将介绍 Google DeepMind 提出的 Matryoshka 量化技术,该技术通过从单个大型语言模型 (LLM) 实现多精度模型部署,从而革新深度学习。我们将深入研究这项创新技术如何提高 LLM 的效率和准确性。

随着深度学习模型在规模和复杂度上持续增长,效率和灵活性变得至关重要。量化作为一种成熟的技术,通过降低权重和激活的比特精度来减少模型大小和推理时间。传统的量化方法通常需要为每个精度级别训练单独的模型,导致资源效率低下和维护成本增加。Matryoshka 量化 (MatQuant) 通过训练一个能够满足多个精度要求的统一模型来克服这些挑战,从而简化部署和模型管理流程。

Matryoshka 原理


术语 "Matryoshka" 源自俄罗斯套娃,其核心思想是一个对象可以嵌套在另一个对象内部。在量化上下文中,该原理体现为:

  • 嵌套表示: 较高比特的整数(例如 int8)自然包含较低比特的表示(例如 int4、int2)。这种固有的嵌套是 MatQuant 的基础。
  • 统一模型训练:MatQuant 并非为每个精度训练单独的模型,而是训练一个统一的模型,其中 int8 权重的最高有效位 (MSB) 可以直接提取以获得 int4 或 int2 模型。
  • 无缝精度转换: 这种嵌套结构允许在无需额外训练的情况下提取中间精度(如 int6 或 int3),从而根据硬件能力和资源可用性提供灵活的精度选项。


LLM 中的 Matryoshka 量化:原理与优势


什么是 Matryoshka 量化?


Matryoshka 量化 (MatQuant) 是一种多尺度量化训练方法,旨在跨不同的整数精度优化单个神经网络。与将每个精度级别视为独立的优化问题不同,MatQuant 利用了整数固有的嵌套结构。具体实现方式如下:

  • 嵌套权重切片:模型的权重以全精度 int8 格式存储。通过提取最高有效位,可以直接从同一模型导出较低精度的版本(int4、int2)。
  • 联合优化:训练过程同时最小化跨多个精度的量化损失。这通过结合复合损失函数来实现,该函数考虑了 int8、int4 和 int2 级别的误差,并通过重新加权因子进行平衡。
  • 协同蒸馏:在训练期间,高精度 (int8) 输出作为低精度输出的指导 "教师"。这种协同蒸馏通过确保低精度模型继承高精度表示的鲁棒性来增强其保真度。

在大型语言模型 (LLM) 中的应用


大型语言模型(如自然语言处理 (NLP) 中使用的模型)对计算资源的需求尤为显著。当应用于 LLM 时,MatQuant 具有以下优势:

  • 资源效率:使用 MatQuant 训练的 LLM 可以在 int8、int4 和 int2 精度之间动态切换。这种灵活性允许在高性能服务器和资源受限的设备上进行高效推理。
  • 提高的低精度性能:低精度模型(尤其是 int2)在独立训练时通常会遭受显著的精度下降。与标准方法相比,MatQuant 的联合优化和协同蒸馏过程已显示出可将 int2 精度提高高达 10% 的潜力,从而确保即使是最节省资源的模型版本也能保持高性能。
  • 插值和灵活性:除了目标精度之外,MatQuant 还可以通过简单的切片提取中间模型(例如 int6 或 int3),从而在精度和计算成本之间实现灵活的权衡。
  • 逐层精度定制:MatQuant 支持混合精度策略,其中 LLM 的不同层可以以不同的精度运行。这种逐层混合搭配方法允许关键层(例如处理注意力机制的层)以更高的精度运行,而不太关键的层可以使用较低的精度,从而优化整体性能,同时尽量减少精度损失。

MatQuant 如何改进 LLM


增强的低精度准确性:

通过联合优化多个精度并采用协同蒸馏,MatQuant 有助于减轻在低精度模型中常见的精度下降问题。这种改进对于 int2 模型尤其重要,因为它们可以从训练期间学习到的共享知识和精细的权重分布中受益。

可扩展性和灵活性:

MatQuant 简化了 LLM 的部署流程。无需为每个精度维护单独的模型,使用 MatQuant 训练的单个模型可以动态调整其精度。这种适应性对于硬件约束或计算负载随时间变化的环境至关重要。

优化的推理和能源效率:

通过减少操作的位宽,经过 MatQuant 训练的模型需要更少的计算资源,从而缩短了推理时间并降低了能耗。这种效率使其非常适合基于云的服务和边缘设备,在这些设备中,功率和内存资源受到限制。

跨各种任务的鲁棒性:

实验结果表明,经过 MatQuant 训练的模型在各种下游任务上表现出强大的性能。无论是语言理解还是生成,MatQuant 提供的多精度功能都确保 LLM 在各种应用中保持高水平的性能。

实验结果与性能分析


MatQuant 在 Gemma-2(2B 和 9B 参数) 和 Mistral 7B 等模型上进行了全面的评估,并与量化感知训练 (QAT) 和 OmniQuant 等传统量化方法进行了比较。

性能指标


  • 精度提升:与传统的量化方法相比,MatQuant 显著提高了 int2 的性能,在下游任务上的精度提高了高达 10%。
  • 模型稳定性:当应用于前馈网络 (FFN) 和注意力参数时,MatQuant 可增强模型稳定性,尤其是在低精度状态下。
  • 精度灵活性:除了提供 int8、int4 和 int2 模型之外,MatQuant 还允许创建中间精度模型(如 int6 和 int3),而无需额外的训练,从而在精度和计算成本之间实现灵活的权衡。

MatQuant 对模型量化的影响



Gemma-2 9B 上的多比特量化框架和性能

OmniQuant 多比特量化框架:

  • 该图展示了 OmniQuant 如何将多个量化级别(2 比特、4 比特和 8 比特)组合成一个统一的损失函数  LMatQuant\mathcal{L}_{\text{MatQuant}}。
  • 每个比特宽度处理模型权重的特定部分,并且它们的组合输出被聚合以优化整体量化性能。

Gemma-2 9B 上的任务平均性能:

  • 折线图显示了基于每个 FFN(前馈网络)参数的有效比特数的不同量化技术下 Gemma-2 9B 的任务性能。
  • MatQuant(蓝色三角形)优于其他方法(基线、MinMax 和切片 int8),即使在低比特宽度下也能保持性能。
  • MatQuant-Interp.(蓝色虚线)显示了插值如何进一步提高性能。

不同比特宽度(int8、int4、int2)的权重分布:

  • 右上角 (int8):显示了基线(红色)和 MatQuant(蓝色)的量化权重分布。MatQuant 提供了更平衡的分布。
  • 左下角 (int4):MatQuant(蓝色)比基线(红色)在量化桶中实现了更均匀的分布。
  • 右下角 (int2):尽管比特范围有限,但 MatQuant(蓝色)实现了对量化桶的更好利用,从而提高了效率。

该图突出显示了 OmniQuant 如何提高 Gemma-2 9B 模型在多个比特宽度上的量化效率和性能。

Gemma-2 9B 在不同量化方法下的任务性能



任务平均值与每个 FFN 参数的有效比特数的比较

该图评估了 Gemma-2 9B 在不同量化技术下的性能,并根据每个 FFN(前馈网络)参数的有效比特数绘制。

  • X 轴(每个 FFN 参数的有效比特数):表示用于量化的比特宽度。较低的比特表示更积极的压缩。
  • Y 轴(任务平均值):衡量模型在任务基准套件上的性能。较高的分数表示更好的性能。

量化方法:

  • MatQuant(蓝色三角形):即使在低比特宽度下也能表现良好,并在较高比特宽度下接近基线饱和。
  • Mix'n'Match(蓝色星形):由于混合量化策略,在中间范围比特宽度(3-5 比特)下显示出比 MatQuant 稍好的性能。
  • MatQuant-Interp.(蓝色圆形):提供与 MatQuant 相似的一致性能,但在比特范围内略微平滑,受益于插值技术。
  • 基线(红色三角形):在 2 比特时表现出最低的性能,并在 8 比特时与其他方法达到同等水平。

主要见解:

  • 低比特效率:MatQuant 在 2 比特时显著优于基线,实现了近 10 个点的改进。
  • 平台效应:所有方法在超过 4 个有效比特时都在任务平均值上收敛于 75 左右,表明使用更多比特的回报递减。
  • Mix'n'Match 优势:在中间范围比特宽度上提供比 MatQuant 略微的优势,表明其在平衡压缩和性能方面的优势。

该图突出显示了 MatQuant 的效率和 Mix'n'Match 在 Gemma-2 9B 中间范围比特量化方面的适应性。

带有 OmniQuant 结果的 MatQuant



使用基于 OmniQuant 的训练比较 Gemma-2 和 Mistral 7B 模型的准确性和对数困惑度指标。

将 MatQuant 与 Gemma-2 (2B, 9B) 和 Mistral 7B 模型上的标准 OmniQuant 进行比较。

强调 MatQuant 优于基线方法,尤其是在 int2 精度方面,具有:

  • Gemma-2 (2B) 上的准确度提高了 +4.37%
  • Gemma-2 (9B) 上的准确度提高了 +8.01%
  • Mistral 7B 上的准确度提高了 +6.35%

证明了 MatQuant 生成的插值模型(int6、int3)与显式训练的模型具有竞争力,突显了 MatQuant 在多尺度表示方面的效率。

带有 QAT 结果的 MatQuant



显示了相同模型但在 QAT 训练下的结果,表明 MatQuant 始终提高低精度性能:

  • Gemma-2 (2B) 上 +4.69% 的准确度增益 (int2)
  • Gemma-2 (9B) 上 +6.30% 的增益
  • Mistral 7B 上 +6.34% 的增益

该表强调 经过 MatQuant 训练的 int2 模型甚至优于一些使用传统 QAT 训练的 int4 模型,突显了嵌套训练方法的有效性。

实际用例与应用


MatQuant 的灵活性和效率使其适用于各种场景:

边缘计算和物联网设备

  • 挑战:计算能力和内存有限。
  • 解决方案:部署从单个 MatQuant 训练的 LLM 派生的低精度模型(int2 或 int4),从而减少内存使用量和能耗。
  • 示例:智能相机、可穿戴设备和自主传感器受益于更快的推理和更低的功耗。

基于云的推理服务

  • 挑战:大规模数据中心中的高吞吐量需求。
  • 解决方案:使用来自 MatQuant 的 int8 精度模型可确保最大程度的准确性,同时优化资源利用率。
  • 示例:由 LLM 提供支持的虚拟助手和客户服务聊天机器人可以利用这些模型来高效地提供高质量的响应。

动态资源分配

  • 挑战:实时应用程序中资源可用性的波动。
  • 解决方案:MatQuant 允许模型在精度之间动态切换 - 在资源充足时使用更高的精度,在资源不足时使用更低的精度。
  • 示例:流媒体服务和实时分析平台可以即时调整模型精度以保持最佳性能。


总结


Matryoshka 量化 是一种变革性的模型量化方法,它提供了一种统一的解决方案,可以在单个 LLM 中支持多个精度。通过利用整数表示固有的嵌套结构,MatQuant 不仅提高了低精度模型(尤其是 int2)的性能,还提供了适应各种硬件约束和动态资源条件的灵活性。

论文

https://arxiv.org/abs/2502.06786


编辑:王菁



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。



新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

协同蒸馏这块儿确实有点儿绕。简单来说,就是让高精度模型当“老师”,低精度模型当“学生”。在训练的时候,高精度模型的输出会作为低精度模型的学习目标,帮助它更好地学习。更详细的细节可能涉及到损失函数的构建,需要保证低精度模型的输出尽可能地接近高精度模型的输出,从而继承高精度模型的知识。

楼上说得很对!这种灵活性对于资源受限的场景尤其重要。比如说,在嵌入式设备上,内存和功耗都是非常宝贵的资源。如果能根据实际情况动态调整模型的精度,就能在保证性能的前提下,最大限度地节省资源。另外,在一些对实时性要求很高的应用中,也可以通过降低精度来换取更快的推理速度。

协同蒸馏,说白了就是一种“知识迁移”的手段。高精度模型就像一位经验丰富的老师,它已经掌握了很多“知识”(也就是模型参数)。低精度模型就像一位初学者,它需要从老师那里学习“知识”。通过协同蒸馏,低精度模型可以更快地学习到高精度模型的知识,从而提高自身的性能。当然,这个过程需要一些技巧,比如如何选择合适的“老师”(高精度模型),如何设计有效的“学习方法”(蒸馏算法)等等。

从技术角度来看,协同蒸馏通常通过最小化高精度模型和低精度模型输出之间的差异来实现。这可以通过使用诸如均方误差(MSE)或KL散度等损失函数来完成。具体来说,损失函数可以表示为:Loss = Loss_original + lambda * Loss_distillation,其中Loss_original是原始的训练损失,Loss_distillation是蒸馏损失,用于衡量低精度模型与高精度模型输出之间的差异,lambda是一个超参数,用于平衡两个损失项的重要性。此外,还可以使用一些高级的蒸馏技术,例如注意力传递或特征匹配,以进一步提高低精度模型的性能。

这个灵活性简直太棒了!就像我们用手机拍照,可以根据需要选择不同的分辨率。Matryoshka量化就相当于给模型也提供了这种自由度,可以根据硬件的算力或者任务的精度要求,灵活选择合适的精度。比如在性能较弱的设备上,就可以用int3或int4,保证速度;在服务器上,就可以用int6或int8,追求更高的精度。

学术一点来说,我认为Matryoshka量化在模型部署的灵活性和可扩展性方面具有显著优势。这种技术允许多精度模型的动态部署,使得模型能夠根据不同的硬件资源和性能需求进行自适应调整。例如,在移动设备上部署时,可以使用较低的精度以减少计算开销和内存占用;而在服务器端,则可以使用较高的精度以获得更好的性能。此外,Matryoshka量化还可以集成到现有的深度学习框架中,简化模型部署流程,并降低维护成本。这种灵活性和可扩展性使得Matryoshka量化成为各种实际应用场景中极具潜力的模型优化技术。

我来补充一点,我觉得在医疗影像分析领域,Matryoshka量化也有很大的应用潜力。医疗影像数据量巨大,而且对精度要求非常高。如果能用Matryoshka量化技术对模型进行压缩和加速,就能更快地进行疾病诊断,提高医疗效率。另外,在金融风控领域,也可以利用Matryoshka量化来降低欺诈检测模型的计算成本,提高实时性。

这个问题很有意思!除了文章里提到的边缘计算和云端推理,我觉得像智能家居、自动驾驶这些对算力要求高但资源又有限的场景,Matryoshka量化都能大显身手。你想啊,家里的智能音箱要是能用更低的功耗实现更自然的语音交互,那体验肯定棒极了!自动驾驶也是,车辆需要实时处理大量数据,Matryoshka量化可以帮助降低计算成本,提高反应速度,对安全很有帮助。

从理论上讲,Matryoshka量化的这种中间精度提取能力,可以实现模型在精度和效率之间的最佳平衡。不同的硬件平台和任务需求,往往对模型的精度和效率有不同的要求。通过调整精度,可以使模型更好地适应这些不同的要求。例如,对于计算资源丰富的服务器,可以使用更高的精度以获得更好的性能;而对于计算资源有限的移动设备,则可以使用较低的精度以减少计算开销。此外,这种灵活性还可以用于模型压缩,通过选择合适的精度,可以在保证模型性能的前提下,显著减少模型的大小。