flashattention1-2-3 系列总结
给定输入向量 \mathbf{x} = [x_1, x_2, \dots, x_N],Softmax(x) 函数的输出定义为(默认对行进行 Softmax。):
BLOG / 766 ARTICLES
计算机基础、AI、后端与客户端开发笔记
给定输入向量 \mathbf{x} = [x_1, x_2, \dots, x_N],Softmax(x) 函数的输出定义为(默认对行进行 Softmax。):
前面学习了 CUDA 编程模型的基本概念,内核配置以及内核调用,我们会编写简单的 CUDA 代码了,本文将深入探讨 CUDA 编程模型是如何映射到 GPU 底层硬件架构的,并探讨影响性能的各种底层因素。
FasterTransformer(FT) 是一个库,用于实现基于 Transformer 的神经网络推理的加速引擎,对于大模型,其以分布式方式跨越许多 GPU 和节点。FasterTransformer 包含 Transformer 块的高度优化版本的实现,其中包含编码器 Encoder 和解码器 Decoder 部分。基于 FT 可以运行完整的编码器-解
深度神经网络是由大量具有相同结构的神经元堆叠而成的,它们本质上具有很高的并行性,同时,神经网络严重依赖矩阵数学运算。对于多层网络来说,其需要大量的浮点性能和带宽来提高计算效率和速度,而 GPU 拥有数千个针对矩阵数学运算优化的处理核心-CUDA 核心,可提供数十至数百 TFLOPS 的性能,因此 GPU 硬件天然适合神经网络的训练和推理计算。
Softmax 函数在机器学习中应用广泛,此前的多项研究提出了更快的替代方案。本文针对提升原始 Softmax 性能,提出了一种一次遍历输入数据来计算 Softmax 函数归一化项的方法,作用是减少内存访问次数,并称其为“在线 Softmax”,并推测这种减少内存访问的方法可以提升 Softmax 在实际硬件上的性能。基准测试也证实了这一推测:Softmax
简单来讲,大模型推理一般会经历 4 个流程:Tokenizer -> Model.forward -> Sampler -> DeTokenizer,但对于集成了各种优化技术的 vllm 框架来说,大模型推理服务流程是非常复杂的
不同于 RNN、CNN 等模型,对于 Transformer 模型来说,位置编码的加入是必不可少的,因为纯粹的 Attention 模块是无法捕捉输入顺序的,即无法区分不同位置的 Token。
将 transformer 拓展到更长的序列是一个难点,而注意力层是是扩展到更长序列的主要瓶颈,因为随着序列长度的增加,标准注意力层的计算时间和内存占用呈二次方增长。FlashAttention 通过 Tiling 和 Recomputation 技术大幅减少了 cuda kernel 对 global memory 的访问量,显著节省了内存(线性而非二次)