# GPU 内存概论

参考视频

image-20250619151517330

如上图,DRAM 用于电脑内存;HBM 用于芯片外显卡显存;SRAM 用于 GPU 芯片内,如 L1 Cache、L2 Cache;

GPU 内有大量 Core 和 thread,使用 SIMT(单一指令,多线程执行)技术,比如矩阵乘法里结果里的每个元素可以分配一个线程。32 个线程一组,叫做一个 Warp。Warp 是 GPU 里调度任务的最小单元。

GPU 由大量的块组成,每个块称作一个 SM(流式处理器),一个 SM 结构如下:

image-20250619163916030

由于显存传输相对慢,计算单元更快更空闲,因此我们希望减少 GPU 空闲 ——
因为矩阵乘法的计算时间复杂度为O(N3)O(N^3),空间复杂度为O(N2)O(N^2)

所以切分矩阵维度即可:

  • 数据传输的慢,用大矩阵
  • 数据传输快,用小矩阵

但是如果传输慢、矩阵还小,就没辙了


回到大模型加速,根据论文《A Survey on Efficient Inference for Large Language Models》,我做了如下总结。

LLM 推理的三大成本:

  • 计算成本
  • 内存访问成本
  • 内存占用成本

对大模型的推理加速流派做一个总结,分类如下图:

framework

# 数据层优化

# 输入压缩技术

提示词剪枝:即去除提示词里的废话,保留有用信息

提示词总结:对很长的提示词(整篇 word)概括一个 summary,以此作为提示词的浓缩交给模型

软提示词:在输入文本前加入一些向量,这些向量可以激活大模型某一方面的知识,然后得到更好的效果。软提示词是可训练迭代的向量,先冻结大模型的参数,推理微调,更新软提示词;不断循环直到软提示词效果不错,不改了 —— 最后推理就是最终结果;一次训练,多次推理。

检索增强生成(RAG):也就是所谓的大模型联网。通过检索和输入相关的辅助内容,并只将这些相关的内容加入到输入提示词中,来降低原本的输入长度(相比于加入所有辅助内容)

# 输出规划技术

规划输出内容,尽量并行生成某些部分的,以此优化推理延时。比如思维骨架方法(SoT),最终回复依总分结构并行生成,如下图:

sot_demo

# 模型层优化

# 高效结构设计(改变模型)

  • 改造 FFN:比如 MOE 技术,还有 deepseek 搞的更多专家激活、共享基础知识的 MOE

  • 改造 MHA:

    • 共享 KV 的 多询问注意力技术(Multi-Query)
    • 核函数算子替换 softmax,就是换一种激活方式,把碍事贼拉慢的 softmax 换掉,从O(N2d)O(N^2d) 变成O(Nd)O(Nd)
    • 低秩算子,如 Linformer(每个 token 的钥匙不变,把 KV 信息量维度压缩,比如压缩为 128 个锁 & 对应信息),于是获得线性复杂度O(Nrd)O(Nrd)
  • 寻找线性架构替代 Transformer

# 模型压缩(简化模型)

# 量化

量化就是通过 scaling 或者 bias,将模型参数与输入激活值,从 fp32、fp16 转化为 int8,加速计算与内存 IO;量化可分为 ——

  1. 训练后量化

image-20250619151020209

  1. 训练感知量化

image-20250619150940815

# 模型稀疏

  1. 权重稀疏

又称作权值剪枝,即从模型中去除不太关键的权值和结构。这种稀疏化方法分为两种主要类型:非结构化修剪和结构化修剪。非结构化剪的细、预测影响小,但是不规则,会阻碍硬件加速能力;结构化一剪剪一个 channel/layer/group;后者更有用

pruning

  1. 注意力稀疏

就是注意力信息不把整个句子全算,只算一部分。比如对每个 token,算他 <邻近的>+< 全局头部 >+< 随机 >

sparse_attention

# 结构优化

  • 神经网络架构搜索

先定义好 “候选网络” 的积木组件 —— 例如可以有哪些层(卷积、池化、激活等)、每层能选的超参数、网络层之间怎么连接;然后让机器自己探索,选出最优架构。对于大模型不太能用,因为探索时要试错,要训练,cost 太大

  • 低秩分解(如 LoRA)

把一个大的权重矩阵分解成两个小矩阵相乘,降低 LLM 的权重的存储开销和访存开销,从O(N2)O(N^2) 变为O(N)O(N)

# 知识蒸馏

用一个大模型(教师模型)来辅助训练一个小模型(学生模型),从而将大模型的知识传递给小模型,通过小模型更小的开销达到相似的精度效果。

  • 白盒:可以获得教师模型的架构和权重,利用更多信息(特征、输出概率等)训练学生模型
  • 黑盒:只能获取输出,所以需要构造数据训练学生模型

# 动态推理(条件计算)

在模型中插入 “小判断器”(Router、Gate 或者 Early Exit Module),负责评估当前数据是否 “简单” 或 “困难”,并决定 “是否跳过后面层 / 通道”,或提前输出结果。

例如,模型做完某层后,判断 “我确定预测为猫?”,如果信心够高,就可以直接输出,无需继续深层计算。

# 系统层优化

# 推理引擎

  • 图和算子优化

翻译的太怪了…… 还有算子这个翻译,明明意思就是 “一个计算步骤”,无力吐槽

  1. 所谓图优化,其实就是着眼于多个算子组合在一起的整个计算流程,进行流程重构与优化,比如

    • “把 Conv + ReLU 合并为一个高效运算,消除重复计算”

    • “把 MatMul + Transpose 换成支持转置的 MatMul ”,多步合成一步

  2. 算子优化就是优化一个计算操作(著名代表 FlashAttention ),比如

    • MatMulConvSoftmax 等算子,使用硬件平台(如 NVIDIA、Intel、ARM)的底层高效版本

    • 在一个 kernel 中串行执行多个操作,减少中间数据读写

    • 矩阵分块(tiling),减少显存 IO

  • 推测解码

使用一个便宜的小模型(被称为草稿模型)来预测未来的若干个词块,再用大模型并行地验证这些词块是否准确。

# 服务系统

就是硬件相关加速技术,看不懂了…… 很底层

总访问量:加载中...更新于

谢谢你请我喝[茶]!(๑OvO๑)♪

柳小寒寒子 微信支付

微信支付