Fenrier Lab

LLM 推理加速技术原理 —— GPTQ 量化技术演进

GPTQ 是目前(2023-2024)在大模型量化领域应用得比较成熟的技术之一,本文将详细分析这种算法的演化过程,以便能够更好地理解其原理。 最优脑损伤(OBD) OBD 的基本思想是以模型训练损失为目标函数,迭代地选择剪枝参数使目标函数最小化。具体来说,设模型的权重为 \(W\),损失函数为 \(f\),则在当前权重下,模型的训练损失为 \(L = L(W)\)。 模型剪枝实际上就是将 \(W\) 的某个值调整为 0,对损失函数进行泰勒展开可以估计权重调整造成的影响,对 \(L(W)\) 进行泰勒展开,得到 \[\begin{aligned} &L(W + \delta W) = L(W) + \left(\frac{\partial L}{\partial...
点我阅读更多...

LLM 推理加速技术 -- Flash Attention 的算子融合方法

本文来自于对 FlashAttention 论文的理解,对原论文省略的一部分数学过程做了展开讲解。 简单来说,Flash Attention 的核心思想是利用分块方法融合 softmax 和 matmul 来降低 HBM 访存次数从而提高效率。 标准 Attention 的访存复杂度分析 Attention 的计算公式如下: \[O = softmax \left(\frac{QK^\top}{\sqrt{d}}\right)V\] 其中 \(Q, K, V\in \mathbb{R}^{N\times d}\) 分别是 query, key, value, N 是输入序列的长度,d 是 head dimension,O 是 attention 的输出。 如果严格按...
点我阅读更多...

LLM 的困惑度指标定义及其计算

困惑度是评价语言模型生成质量的重要参考指标之一,本文将从概念到公式到代码全方位展示如何计算一个语言模型的困惑度,这将有助于我们在特定任务上定量地评估某个 LLM 的生成质量,以及模型量化后的质量损失。 离散型随机变量的概率质量函数以及累计分布函数 设一个离散型随机变量 \(X\) 的概率质量函数为 \(p(x)\),也就是说对于任意的 \(x_i \in \mathcal{X}\),\(P(X = x_i) = p(x_i)\),其中 \(\mathcal{X}\) 是 \(X\) 的样本空间。那么 \(X\) 的累计分布函数 \(F_X(x)\) 定义为 \[F_X(x) = P(X \leq x) = \sum_{x_i \leq x} p(x_i)\] 或者反过来,如果已...
点我阅读更多...

TensorRT 使用指南(4):SadTalker 模型加速方案

介绍 SadTalker 是一个 face reenactment 项目,来自论文 SadTalker: Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation。本文不研究具体的算法原理,而是专注于使用 TensorRT 对原模型推理进行加速。 正确部署后,直接运行示例程序 python inference.py,出现下图所示的任务日志 可以看到,在这几个推理阶段中,最后的 Face Renderer 耗时最严重,因此我们这里主要来对这个模型进行优化。 当前测试的系统环境为: System: Centos 7 GPU: V1...
点我阅读更多...

CUDA 编程入门(7):并行 Reduction 及其 kernel 优化技术

本文受 Mark Harris 的 Reduction PPT[0] 启发编写 CUDA 编程涉及到许多概念,包括 GPU 硬件相关的,CUDA 编程模型相关的,以及并行计算理论相关的,如果能够对这些概念有充分的理解并加以应用,那么就有可能写出更高性能的 CUDA 程序。本文以经典的 Reduction 算子——数组求和——为例,逐步介绍一些常见的 kernel 优化技术,并展示这些技术是如何提升 CUDA 程序的性能的。 Roofline 模型分析 在正式编写代码实现某个算法之前,我们可以先分析该算法在指定硬件上的 Roofline 模型,从而对该算法的极限性能有个大致的预期。对于单精度数组求和这个任务来说,假设其元素数量等于 n,则运算量为 n-1 次加法,内存读取比...
点我阅读更多...