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 推理

相关推荐

  1. LLM 加速

    2024-06-13 15:28:05       9 阅读
  2. LLM推理及加速知识

    2024-06-13 15:28:05       16 阅读
  3. 5、ipex-llm(原bigdl-llm)英特尔GPU加速

    2024-06-13 15:28:05       14 阅读
  4. 大模型(LLM)的推理加速

    2024-06-13 15:28:05       13 阅读
  5. 使用Autogen和本地LLM加速开发周期

    2024-06-13 15:28:05       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-13 15:28:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-13 15:28:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-13 15:28:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-13 15:28:05       18 阅读

热门阅读

  1. Oracle数据库查询常用语句

    2024-06-13 15:28:05       4 阅读
  2. c++分辨读取的文件编码格式是utf-8还是GB2312

    2024-06-13 15:28:05       6 阅读
  3. MySQL为root用户添加IP地址连接权限

    2024-06-13 15:28:05       8 阅读
  4. 使用 MySQL 子查询和 CASE 语句判断关联状态

    2024-06-13 15:28:05       8 阅读
  5. MySQL 8.3.0 主从热备

    2024-06-13 15:28:05       7 阅读
  6. PaddleDetection安装文档

    2024-06-13 15:28:05       8 阅读
  7. 力士乐伺服电机MKD025B-144-KPO-KN

    2024-06-13 15:28:05       11 阅读
  8. 剧院售票小程序毕业设计源码

    2024-06-13 15:28:05       9 阅读
  9. Golang:使用Blackfriday实现Markdown 转html

    2024-06-13 15:28:05       8 阅读