首頁  >  文章  >  科技週邊  >  基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

王林
王林轉載
2023-04-10 14:21:031714瀏覽

大型語言模型(LLMs)在各種任務上表現出色,但由於其龐大的模型規模,部署方面存在挑戰。

在這篇論文中,來自後摩智能、騰訊AI Lab、華中科技大學、北京大學、伊利諾理工學院的研究人員發現量化大型語言模型的主要挑戰來自於通道之間不同的活化範圍,而不僅僅是離群值問題。

作者提出了一種新穎的基於重排序的量化方法 RPTQ,解決了量化大型語言模型活化的問題。 RPTQ 透過重新排列活化中的通道,然後將它們分簇進行量化,從而降低通道範圍差異的影響。

此外,作者透過避免明確重新排序來減少儲存和計算開銷。該工作首次將 LLM 模型的活化量化推向 3 位元。活化值的 3 位元量化同時也能與權重的 3 位元量化共同使用,大幅降低了大型欲言模型的開銷。

基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

論文網址:https://arxiv.org/abs/2304.01089

#開源位址:https://github.com/hahnyuan/RPTQ4LLM

大規模語言模型(LLMs)在各種任務中展現出了卓越的效能,但由於它們的巨大模型大小,它們的部署面臨挑戰。例如一個 66B 模型包含 660 億個參數,需要大量記憶體儲存。另外隨著序列長度和批次大小的增加,記憶體消耗問題變得更加嚴重,因為啟動也需要消耗大量的內存,例如 Self-attention 中的鍵和值快取(Key/Value Cache)。然而,單一 GPU 或伺服器並沒有足夠的記憶體容量來儲存如此龐大的模型權重和中間啟動。因此,LLM 需要被分割成多個區塊並儲存在不同的裝置中。由於權重和激活儲存在不同的設備上,在計算過程中需要在這些設備之間傳輸數據,導致顯著的頻寬和能量消耗。

為了克服 LLMs 在模型規模上的挑戰,模型量化已成為一種有前途的方法。該技術涉及使用低位整數對 LLMs 的權重和活化進行量化,從而顯著降低儲存和運行這些模型的成本。具體而言,量化有助於減少保存張量的記憶體需求,並加速計算密集型操作,例如矩陣乘法和線性層。透過量化權重和激活,減少了儲存和通訊開銷,提高了效率和推理速度。

基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

#圖 1 不同通道的數值分佈情況。每個點都代表一個激活通道中的 (最大值,最小值)。

最近,GPTQ 使用 PTQ 成功地將 LLMs 的權重化為 4 bit 或 3 bit。然而,對 LLMs 中的活化進行量化仍然是一項具有挑戰性的任務。

從圖1 可以得到兩個觀察結果:

1)一些通道具有顯著的異常值,其最大或最小值比其他頻道大幾百倍。先前的研究也已經發現了這個問題並針對異常值提出了特殊處理。

2)不同的通道在數值範圍上有顯著差異。使用相同的量化參數來量化不同的通道可能會導致顯著的量化誤差。即使兩個通道具有相同的異常值絕對值,它們在數值範圍上也可能存在很大的變化。

将整个张量使用相同的量化参数进行量化的每张量量化技术可能不太有效。原因是将量化范围设置为覆盖大范围的数值范围可能导致数值较小的通道产生较大的量化误差,而将其设置为覆盖小范围的数值范围可能导致对异常值的显著截断,并导致显著的量化误差。例如,一个通道可能具有 - 100 到 - 50 的值范围,而另一个通道可能具有 80 到 100 的值范围。试图通过将范围从 - 100 到 100 量化来覆盖它们的范围将导致两个通道产生显著的量化误差。这是以前的研究中尚未有效解决的一个挑战。

基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

图 2 解决激活量化问题的不同方法对比。

为了解决激活中通道差异的问题,作者提出了一种新颖的基于重新排序的训练后量化方法 RPTQ。

如图 2 所示,该方法将数值范围相似的通道聚类在一起,然后对每个聚类中的值使用相同的量化参数进行量化。为了实施基于重排序的量化方法,作者首先使用校准数据集作为推理输入,从中导出每个激活通道的最大值和最小值。

接下来,他们采用 KMeans 算法将不同通道划分为 g 个簇,基于每个通道的最大值和最小值形成的点。一旦建立了簇,他们就进行通道重排序,将来自同一簇的通道放置在相近的位置。这样,具有类似最大值和最小值的通道被组合在一起,并共享一组通用的量化参数。在重排序过程之后,作者对每个簇内的激活进行量化。这种方法为每个簇单独计算量化参数(缩放因子 s 和零点 z),确保这些参数专门针对相应的通道。

最终,该方法确保了每个簇的量化都得到优化,减少了量化误差。

基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

图 3:一重排权重和激活的量化 Transformer 层的推断过程失意图。重排索引用符号 R1 到 R5 表示。

显式重排是一种运行时重新排列激活中通道的操作,需要将不同通道的数据从一个内存位置物理移动到另一个位置,因此对于具有大量通道的大型模型,重排过程可能非常耗时。此外,存储源和目标激活张量会增加内存开销。因此,作者提出了避免显式重新排序的策略,从而降低了计算开销,提高了推理效率。

如图 3 所示,作者重新排序线性层的权重,使它们能够直接按照排序顺序产生激活。此外,作者修改了 LayerNorm 的方法,使其能够直接产生重新排序的激活,从而省去了在推理过程中进行显式通道调整。

基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

作者在三种不同的位宽配置下评估了 OPT 的性能:W4A16、W4A8 和 W4A4。此外,作者还开发了一种新的量化方案,W4A4KV、W4A3KV 和 W3A3KV,只对主要内存的消耗 —— 键缓存和值缓存(Key/Value Cache)进行量化。根据表格,可以得出以下观察结果:一般而言,随着激活量化位宽的减少,模型的性能会下降。但在大多数情况下,这种退化并不显著。对于某些任务,性能下降不到 1%,甚至有所提高。

基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化

LLM 的内存开销来自三个方面:首先,设备内存中权重的存储,可以通过量化来显著减少。其次,在网络执行期间生成的临时激活需要分配设备内存。这些临时激活可以在使用后释放,因此不会对整体内存使用造成显著影响。最后,键和值缓存(Key/Value Cache)对预测后续单词是必要的。当批次大小和序列长度很大时,键和值缓存占用了大部分内存。

表中展示了不同设置下的内存使用情况,可以发现较低比特的激活可以显著减少内存使用,特别是在批次大小和序列长度较大的情况下。具体而言,当批次大小为 64,序列长度为 8192 时,OPT-66b 下的 W4A4 配置相比 W4A16 配置节省了超过 900GB 的内存。因此,采用 RPTQ 对激活量化可以极大地减少在长文本任务或大批量场景中的内存压力。

以上是基於重排序的新量化方法RPTQ:實現大型語言模型的 3 位元量化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除