vLLM笔记

Transformer

  • 编码器-自注意力机制-解码器
  • 时序神经网络一定要顺序去做,但是 Transformer 可以并行。
  • 一个 Transformer 一般有多个 encoder 和 decoder。
  • encoder 总有一个自注意力层和一个 FFN(Feed Forward Netural Network) 组成。
  • decoder 总有一个自注意力层、编解码 Attention 层和一个 FFN(Feed Forward Netural Network) 组成。
  • Multi-Head Attention:多头注意力机制,也就是多个自注意力机制。
  • 模型架构:编码器会将一个输入序列 (x1,…,xn) 转换成一个模型可以理解的序列 (z1,…zn);对于解码器来讲,会拿到编码器的一个输出,然后输出一个序列 (y1,…ym),输入和输出长度不一定相等,逐个单位输出,y2 依赖 y1,称之为自回归;编码器的输出会变成解码器的输入
  • 编码器,N 为 6 个完全相同的 layers,每个layer有两个 sub-layers,第一个子层是多头注意力机制,第二个子层是 simple-mlp(两个线性层和一个激活函数)。每个子层之间使用残差连接(要求输入和输出大小相同),最后是一个 layer norm。每一个层的输出纬度为 512。
  • layer norm:相对于 batch norm,layer norm 更关心 feature 。但是transformer是三维的 batch-feature-seq。
  • 解码器,仍然是 6 个layers,但是每个layer有三个 sub-layers,第一和第二层与编码器类似,多出来一层是第二层后面还有一个多头注意力机制。解码器在执行输出的时候,比如在预测第 N 个时刻的输出的时候,不能够看到第 N 时刻以后的输出,具体做法是通过一个带掩码的注意力机制来实现。
  • 注意力函数表示这样一个映射关系:将 query 和一些 k-v 映射成 output。output 是 value 的加权和(输出的纬度和 value 的纬度是一样的)。value 的权重,是 value 对应的 key 和 query 的相似度(compatibility function,不同的注意力机制有不同打的算法)算来的。
  • 标准注意力机制:query 写成一个矩阵 Q, query 和 key 做内积。

部署相关

  • 挑战:1.需要低延迟;2.模型太大可能会导致显存或内存不够用;3.在实际的应用场景,有复杂的资源调度与高性能计算问题,这通常与分布式相关;4.需要适应多种不同架构的设备,包括服务器以及加速计算的硬件设备,并且要关心如何发挥硬件性能;5.性能与效果的权衡。
  • 算法创新:1.解码算法;2.架构设计;3.模型压缩。
  • 解码算法:使用非自回归解码算法来提高大模型的解码效率;使用早退技术来提前结束序列的生成;使用投机解码,不仅生成一个最可能的词,而是生成一组候选词,用来提高解码的并行度,最终加快整体的解码速度;使用级联推理通过堆输入来动态选择模型,最终达到再保证质量的同时,减少计算资源消耗并且提高推理速度的目的;
  • 架构设计:通过配置缩减来减少编解码器的层数,共享模型的不同部分的权重,限制模型使用的词汇表大小,最终达到性能与效果的平衡;通过注意力简化来改变注意力机制的算法,降低计算和内存成本,常见的的简化算法有稀疏注意力,核化注意力,因子化注意力,局部注意力,哈希注意力等方法;通过激活共享在模型的不同部分之间重用中间激活,以减少重复的计算和内存占用;使用条件计算技术来使用混合专家模型来提高计算和内存使用的效率;使用循环单元来代替 transformer 模块;
  • 模型压缩:白盒蒸馏;黑盒蒸馏;通过网络剪枝移除神经网络中的的一些参数或神经元来减少模型打小和计算需求。
  • 系统优化:1.低比特量化;2.并行计算;3.内存管理;4.请求调度;5.内核优化。
  • 低比特量化使用更少的位(小于32位)来表示模型的权重和激活;利用模型并行性(TP)、序列并行性(SP)、流水线模型(PP)并行性等多种并行计算策略来优化资源利用率,提高系统性能;通过更好的内存管理方案来提高计算资源的使用率,比如 vLLM 的 Paged-Attention ,SpecInfer 的 Tree-Attention,LightLLM 的 token 级内存管理机制;请求调度通过对输入的管理来优化资源利用率;内核优化有以下技术点:Kernel fusion,Tailored attention,Sampling optimization, Variable sequence length,Automatic compilation。

Vllm

  • vllm 应该是一种优化部署的方案,传统的部署问题是显存占用太大。
  • vllm 采用内存分页类似的方法来处理显存太大的问题,让显存利用率从 20-40% 提高到 96%。

AI编译器

  • AI编译器是把一个深度学习模型转换成 executable。这里可以把一个深度学习模型,理解成一段用DSL(Domain Specific Language)描述的代码,executable 就是一段用硬件能理解的机器码描述的代码。
  • 传统编译器是把一段用高级语言编写的代码转换成 executable。这里的高级语言可能是 C/C++ 等。