InternLM: LMDeploy 量化部署进阶实践

LMDeploy 部署模型

模型部署是将训练好的深度学习模型在特定环境中运行。欢迎使用 LMDeploy,支持市面上主流的格式和算法。

大模型缓存推理

本章的前半部分主要讲量化,包括 KV-Cache 量化、权重量化、激活值量化。量化主要是为了节省存储空间,用 int4, int8 来重新表示 fp16,将模型的显存占用控制在 200 G 可接受的范围下。值得注意的是,在 transformer 架构下,计算的瓶颈主要在显存带宽上,而不是运算速度上,因此,量化也能有效改善模型的推理效率。

在讲解 KV-Cache 量化之前,先讲一下什么是 kv-cache。

kv-cache 是对多头注意力计算时 Query, Key, Value 中,Key 和 Value 的缓存。当一个新的 token 序列 x_1, \ldots ,x_t, x_{t+1} 传入时,k_1, \ldots, k_t, k_{t+1}; v_1, \ldots, v_t, v_{t+1} 中只需要计算 k_{t+1} 和 v_{t+1} 即可,前 t 个值可以读取缓存值然后 merge。

When you’re doing auto-regressive text generation, you predict one token at a time. When predicting a given token, in the attention layer, you need to compute the attention between the most recent token and all tokens generated so far – you use the query from the last token, but the key and the value from all tokens generated so far. This means you have no benefit in caching the query, but you save a few computations if you cache the key and the value

小 tips:LMDeploy 实现 KV-Cache 时,采用了预先分配固定大小显存的策略。将权重加载进来后,会固定分配剩余显存的一定比例进入 kv-cache 管理器。

大模型量化技术

用 int4, int8 表示 fp16,从而减少存储占用,以便支持更长的推理长度和并发吞吐。在实现上,把 fp16 的表示范围均分,取零点 ZP = 1/2 (max + min),区间 s = (max - min)/256. 实验表明,int8 的量化对模型最终效果的影响几乎没有。

AWQ 算法

LMDeploy 采用 AWQ 算法的 W4A16 量化,对 weight 进行 4bit 量化,计算时使用 FP16。

  • 性能是 FP16 的 2.4 倍以上
  • 权重大小、显存降为 FP16 的 1/4

AWQ 算法的底层原理

核心观点1:权重不同等重要,仅 0.1%~1% 的权重对推理结果影响较大

尝试将重要权重用 FP16,对其他权重做量化。那么哪些权重重要呢?- 按激活值分布

大模型外推技术

Function Calling

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值