vllm 优化之 cuda_graph 详解
vllm 是 pythonic 的 llm 推理框架,在 cpu 进行 cuda kernel launch(启动)的 eager mode 时,其存在可较大的 kernel launch 开销,尤其是对于 batch较小/模型较小的情况,kernel 启动开销过大!由此,作者基于 torch 使用 cuda graph 来直接减少 kernel launc
BLOG / 766 ARTICLES
计算机基础、AI、后端与客户端开发笔记
vllm 是 pythonic 的 llm 推理框架,在 cpu 进行 cuda kernel launch(启动)的 eager mode 时,其存在可较大的 kernel launch 开销,尤其是对于 batch较小/模型较小的情况,kernel 启动开销过大!由此,作者基于 torch 使用 cuda graph 来直接减少 kernel launc
Transformer 模型目前已经成为自然语言处理和图像分类等领域中使用最广泛的神经网络架构。虽然 Transformer 模型已经变得越来越大和深,但是处理更长的上下文依然还是有困难,最主要的原因是其核心模块-自注意力机制的时间和内存复杂度是序列长度的二次方。一个重要的问题是,让注意力更快、内存效率更高是否可以帮助 Transformer 模型解决长序列
SmoothQuant 是 PTQ(训练后量化)方案,量化位宽为 W8A8,即权重和激活都是用 8bit 量化,SmoothQuant 的核心贡献是,基于权重易量化而激活难量化的观察提出了一个解决办法:引入平滑因子 s 来平滑激活中的异常值,并通过数学上的等效转换将量化的难度从激活迁移至权重上。这个方法可以使 INT8 量化能够应用于 LLMs 中所有的矩阵
在 多轮对话、DocQA 和 RAG 客服系统场景下中,提示词会包含重复的文本段落,如系统消息、提示模板和用于上下文的文档,也就是说常见文本段的注意力状态(也就是 kv 缓冲向量)\{(k_1,v_1), (k_2,v_2),..,(k_n,v_n)\} 是可以重复利用的。Prompt Cache 论文基于这一关键观察,设计了一个提示词模块提出来明确定义这些
flashattention-2 虽然减少了非矩阵乘法的计算量,提高了运行速度,但是其并未充分利用最新硬件的功能,导致在 H100 GPU 上的利用率仅为 35%,由此作者提出了 flashattention-3,提出了3 项优化策略来提升 Hopper GPU 上的注意力计算性能:
背景:生成式模型的推理过程很有特点,推理生成 tokens 的过程是迭代式的。简单来说就是,用户给一个输入文本,模型会输出一个回答(长度为 N),但该过程中实际执行了 N 次模型前向传播过程。即 GPT 类模型一次推理只输出一个 token,当前轮输出的 token 与之前输入 tokens 拼接,并作为下一轮的输入 tokens,反复多次直到遇到终止符 E
PagedAttention 算法的原理可以参考我前面写的文章vllm优化技术速览。从源码的角度来看 PagedAttention,其实可以分为两部分:
给定输入向量 \mathbf{x} = [x_1, x_2, \dots, x_N],Softmax(x) 函数的输出定义为(默认对行进行 Softmax。):
Softmax 函数在机器学习中应用广泛,此前的多项研究提出了更快的替代方案。本文针对提升原始 Softmax 性能,提出了一种一次遍历输入数据来计算 Softmax 函数归一化项的方法,作用是减少内存访问次数,并称其为“在线 Softmax”,并推测这种减少内存访问的方法可以提升 Softmax 在实际硬件上的性能。基准测试也证实了这一推测:Softmax
将 transformer 拓展到更长的序列是一个难点,而注意力层是是扩展到更长序列的主要瓶颈,因为随着序列长度的增加,标准注意力层的计算时间和内存占用呈二次方增长。FlashAttention 通过 Tiling 和 Recomputation 技术大幅减少了 cuda kernel 对 global memory 的访问量,显著节省了内存(线性而非二次)