论文

通过动态KV缓存支持循环语言模型的按需计算

Enabling Dynamic Computation in Looped LMs

模型推理模型架构递归架构推理加速KV Cache

摘要

循环语言模型具有较高的参数效率,并有望根据Token难度动态分配计算,从而在简单Token上节省内存和浮点运算。然而,已为动态计算而训练的先进开放循环模型Ouro在实际运行中并未实现这一点,因为每次循环迭代都需要独立层级的KV缓存,迫使系统完成所有循环计算。此外,Ouro对每个Token施加相同的提前退出先验,使不同难度的Token都以近似静态、较浅层的方式处理。我们提出一种简单的“使用当前最佳可用结果”KV缓存策略,无需额外调整即可应用,改善性能与计算深度之间的权衡。该方法在保留完整深度模型性能的同时,最多减少30%的浮点运算和KV缓存内存,体现循环语言模型的计算灵活性。让模型在训练时了解这种缓存策略,还能进一步改善性能和效率。最后,我们对提前退出先验的训练目标作出一个小而有效的修正,使Token根据所需计算量在不同深度退出。研究结果在Ouro模型及从头预训练的较小循环语言模型上得到验证。

通过动态KV缓存支持循环语言模型的按需计算:论文原图
图 1:Ouro 即使在Token退出后也会强制进行全深度计算,因为未来的Token可能需要它。这使得提早退出实际上毫无用处。 Ragged KV 通过将更深的块别名到最可用的缓存来实现真正的提前退出。它避免了强制计算并在推理过程中节省了内存+FLOPs。令人惊讶的是,它对于 Ouro 型号来说开箱即用!在右侧,我们在 BigBenchHard 上的不同退出阈值下将固定深度(1-4 个循环)与 Ragged KV 进行比较(详细信息参见§E.1)。 Ragged KV 可在较低的平均解码深度下显着提高性能。