LLM 加速

1、量化

常用量化方法:GPTQ、AWQ和GGUF

结论:

  1. 从BF16,int8到int4,Qwen-7B-Chat各数据集上量化损失性能不显著
  2. 量化后速度并不能明显提高
  3. 量化后显存显著减少

稍微解释一下结论:

  1. 量化对于文本生成特别有效,因为我们关心的是选择 最可能的下一个词元的分布 ,而不真正关心下一个词元的确切 logit 值。所以,只要下一个词元 logit 大小顺序保持相同, argmax 或 topk 操作的结果就会相同。【与图像检索类似】
  2. 量化基本原理是权重需要经过量化与反量化(到bf16),需要更多的计算量,所以int8推理速度甚至会变慢。

2、模型结构改进

Multi-Query Attention (MQA)

结论:

  1. 训练速度不变,推理速度变快
  2. 推理速度主要是因为decoder速度变快,而encoder速度基本不变

MQA只能降低显存的使用啊,运算量并没有减少,为啥速度能提高这么多?

答:MQA的inference提速就是因为极大的缩小了kv的存储代价,然后采用某种策略缓存了一部分kv,试想一下,之前假设32个head得存32份kv的project weight网络参数,但是现在只需要存一份!

3、Flash attention

flash attention v1

结论:

QKV运算的中间结果不用放在HBM,而是放在SRAM上,FlashAttention可以将内存开销降低到线性级别,并实现了2-4倍的加速,同时避免了对中间结果的频繁读写,从而提高了计算效率。

flash attention v2


v2相比v1,减少了非矩阵乘法运算(non-matmul)的FLOPs,将任务分配给不同的thread block进行并行计算,充分利用GPU资源,在一个thread block内部分配任务给不同的warps,以减少访问共享内存次数。这些优化方案使得FlashAttention-2的速度提升了2-3倍

tips : 由于flash attention 优化的是self-attention的运算(和input token强相关),因此当输入序列更长,效果更明显。在输入token短时,没有明显提速 ,可以参考github上相关issue。

4、Page attention

结论:PagedAttention在非连续的内存空间中存储连续的键和值。PagedAttention的工作原理是,它将每个序列的KV缓存分成若干块,每块负责固定数量的令牌的键和值。在进行注意力计算时,PagedAttention算法能够高效地识别并获取这些块,从而提高了内存使用的效率。

tips:vllm 集成了Page attention

5、Continuous Batching

Continuous Batching 是另外一种内存优化方法,不需要修改模型。如下图是通常意义上的批处理,这里称之为静态批处理(static batching)因为语言的特性,一个batch中的句子生成长度可能完全不同。所以导致长度短的句子需要等待最长的完成才能完成。所以静态批处理没有完全利用gpu。

6、sys prompt 预缓存

7、模型剪枝(Pruning)也叫模型稀疏化

8、投机采样(Speculative Sampling)

9、Medusa 推理

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值