大模型显存占用完全指南:从训练到推理的计算公式与实战案例(建议收藏)
文章详细解析了大模型训练和推理过程中的显存占用量计算方法,包括模型权重、优化器状态、中间激活和梯度等组成部分。对比分析了LLaMA、Qwen3和DeepSeek V3等不同架构模型的显存占用特点,提供了显存计算公式和并发估算方法,帮助开发者优化大模型部署并提高资源利用率。
一、训练过程中显存占用量计算
中间激活:前向传播计算过程中,前一层的输出就是后一层的输入,相邻两层的中间结果也是需要 GPU 显存来保存的,中间结果变量也叫激活内存,值相对很小。
在模型训练过程中,设备内存中除了需要模型权重之外,还需要存储中间变量(激活)、梯度和优化器状态动量,后者显存占用量与 batch size 成正比
训练总内存 = 模型内存 + 优化器内存 + 中间激活内存 + 梯度内存
在模型训练过程中,存储前向传播的所有中间变量(激活)结果,称为 memory_activations,用以在反向传播过程中计算梯度时使用。而模型中梯度的数量通常等于中间变量的数量,所以
。
假设 是指存储模型所有参数所需的内存、 是优化器状态变量所需内存。综上,模型训练过程中,显存占用量的理论计算公式为:
值得注意的是,对于 LLM 训练而言,现代 GPU 通常受限于内存瓶颈,而不是算力。因此,激活重计算 (activation recomputation,或称为激活检查点 (activation checkpointing)) 就成为一种非常流行的 以计算换内存 的方法。
激活重计算主要的做法是重新计算某些层的激活而不是把它们存在 GPU 内存中,从而减少内存的使用量,内存的减少量取决于我们选择清除哪些层的激活。
二、推理过程中显存占用量计算
深度学习模型推理任务中,占用 GPU 显存的主要包括三个部分:模型权重、输入输出以及中间激活结果。(该结论来源论文[1])因此,LLM 显存占用可分为 3 部分:
2.1 模型权重显存占用
存储模型权重参数所需的显存计算公式(params 是模型参数量,参数类型为 fp16/bf16):
传统模型:
Qwen3模型:
计算示例:
对于Qwen3 0.6B(层,,使用bf16格式):
2.2 中间激活显存占用(额外开销)
和模型训练需要存储前向传播过程中的中间变量结果不同,模型推理过程中并不需要存储中间变量,因此推理过程中涉及到的中间结果内存会很小(中间结果用完就会释放掉),一般指相邻两层的中间结果或者算子内部的中间结果。
2.2.1 注意力层中间激活
Self-attention的完整计算流程包含多个步骤,每步都有中间激活:
步骤1:计算 + 输入输出形状: + 显存占用:
步骤2:Softmax + Attention×V计算 + Attention分数矩阵:,占用显存 + V矩阵:,占用显存 + 输出:,占用显存
峰值显存分析:
在标准实现中,需要同时存储attention分数矩阵和V矩阵进行相乘,因此峰值显存为:
峰值显存
其中。当s较大时,项占主导;当时,项更重要。
注意:现代GPU实现通常采用融合注意力(Fused Attention)操作,将、softmax和与V相乘合并执行,可以显著减少实际的峰值显存占用。
2.2.2 MLP层中间激活
传统MLP块:
- • 第一个线性层的输出结果形状为
- • 占用显存大小:
Qwen3的SwiGLU MLP块:
包含三个线性层,需要同时存储Gate和Up线性层的输出结果:
- • Gate Linear层输出:,占用显存
- • Up Linear层输出:,占用显存
- • 两者需要同时存在内存中进行SiLU激活和元素级乘法,所以峰值显存为
2.2.3 中间激活显存计算公式
# 伪代码memory_intermediate of attention = 2 * batch_size * n_head * square_of(sequence_length) + 4 * batch_size * s * hmemory_intermediate of mlp: + Traditional: fc1 layer output = 2 * batch_size * s * 4h + Qwen3 SwiGLU: gate + up outputs = 2 * batch_size * s * 3h * 2
注意力与MLP中间激活对比:
- • Attention峰值显存:
- • MLP峰值显存:传统模型 ,Qwen3模型
当 时,MLP的中间激活通常仍然大于注意力层,但差距会缩小。当序列长度很大时,注意力层的 项可能成为主导。
中间激活显存总结:
考虑到注意力层和MLP层的峰值显存,每层的总中间激活为:
传统模型:
(当 时)
Qwen3模型:
(当 时)
计算示例:
对于Qwen3 0.6B,当 时:
- • 注意力峰值:
- • MLP峰值:
- • 总峰值:
注意:根据经验,在模型实际前向传播过程中产生的这些额外开销(中间激活)通常控制在总模型参数内存的 20% 以内(只有 80% 的有效利用率)。
2.3 KV Cache显存占用
LLM 推理优化中 kv cache 是常见的方法,本质是用空间换时间。假设输入序列的长度为 ,输出序列的长度为 ,decoder layers 数目为 ,以 float16 来保存 KV cache。
2.3.1 传统MHA模型的KV Cache
2.3.2 Qwen3的GQA模型的KV Cache
对于使用GQA的Qwen3模型,由于键值头数量少于查询头数量:
上式,第一个 2 表示 K/V cache,第二个 2表示 float16 占 2 个 bytes
2.3.3 DeepSeek V3的MLA模型的KV Cache
DeepSeek V3采用Multi-Head Latent Attention (MLA)架构,通过压缩KV表示来减少KV Cache。根据MLA的设计原理:
MLA的KV Cache只需要存储两个向量:
1.压缩的KV表示:
- • 向量大小:维
- • 多头共享,每个position存储一个512维向量
- • 存储大小:
-
- RoPE相关的:
- • 向量大小:维
- • 多头共享,每个position存储一个64维向量
- • 存储大小:
MLA每层KV Cache:
DeepSeek V3总KV Cache:
存储量对比:
根据论文原文,对比MQA(每层有一个 维度的 和一个 维度的 ,共 个元素),MLA的存储量是MQA的2.25倍。 对比MHA的 ,由于 通常远大于2.25(比如说Qwen就是8 > 2.25),所以 MLA 相比 MHA 能显著减少缓存。
- • MQA:每层 个元素
- • MLA:每层 个元素
- • MLA是MQA的倍,但相比的个元素,节省了大量存储
2.3.4 每个Token的KV缓冲大小对比
传统模型:
Qwen3模型:
DeepSeek V3的MLA模型:
具体计算示例:
对于Qwen3 0.6B:每个token的kv缓冲大小 = 4,096 bytes × 28层 = 114,688 bytes ≈ 112KB
对于DeepSeek V3:每个token的kv缓冲大小 = 1152 bytes × 61层 = 70,272 bytes ≈ 69KB
其实从这里我们就可以看到MLA有多夸张,deepseek这么大的模型每个token的kv cache比Qwen0.6B还要小
当时:
- • Qwen3:
- • DeepSeek V3:
2.4 总显存消耗公式
综上分析可知,llm 推理时,GPU 显存占用主要是:模型权重 + KV Cache,总显存消耗计算如下:
传统模型:
Qwen3模型:
DeepSeek V3模型:
中间激活
注意:模型推理时,中间激活最大不会超过模型权重参数内存的 20%,当 h 较大时可忽略
2.5 显存占用示例分析
2.5.1 Qwen3 0.6B推理显存示例
配置:
- • 模型权重: 1.192GB
- • 中间激活: ≈6.3MB(可忽略)
- • KV Cache:
- • 总计: ≈1.31GB
2.5.2 DeepSeek V3推理显存示例
配置: (由于模型更大,使用更长序列)
- • 模型权重: ≈1342GB(fp16格式)
- • 中间激活: 可忽略相对于模型权重
- • KV Cache:
总计:
注意:DeepSeek V3由于参数量巨大(671B),通常需要使用模型并行、量化等技术来部署(比如我们大部分就是用的w8a8来测试的),实际显存占用会根据优化策略而变化。
2.5.3 批量大小对显存的影响
LLaMA-13B示例: 当 时
- • KV Cache显存占用
- • 是模型参数显存(26GB)的1.6倍
Qwen3 0.6B示例: 当 时
- • KV Cache显存占用
- • 已经大大超过了模型参数显存(1.2GB)
DeepSeek V3示例: 当 时
- • KV Cache显存占用
- • 相对于模型参数显存(1342GB)可忽略,但对于实际部署仍然需要考虑
结论: batch_size
的增加能带来近乎线性的 throughput
增加,LLM服务模块的调度策略就是动态调整批次大小,并尽可能让它最大。在 batch_size
> 某个阈值时,占推理显存大头的是 KV cache。
三、显存占用计算的定性分析和定量结论
1.模型推理阶段,当输入输出上下文长度之和比较小的时候,占用显存的大头主要是模型参数,但是当输入输出上下文长度之和很大的时候,占用显存的大头主要是 kv cache
。
2.每个 GPUkv cache
显存所消耗的量和 输入 + 输出序列长度 成正比,和 batch_size
也成正比。
3.不同规模模型的显存消耗对比:
- • 有文档[2]指出,13B 的 LLM 推理时,每个 token 大约消耗 1MB 的显存
- • 对于 Qwen3 0.6B,每个 token 大约消耗 112KB 的显存
- • 对于 DeepSeek V3,每个 token 大约消耗 69KB 的显存(得益于MLA架构)
以 A100-40G GPU 为例,LLaMA-13B 模型参数占用了 26GB,那么剩下的 14GB 显存中大约可以容纳 14,000 个 token。在部署项目中,如果将输入序列长度限制为 512,那么该硬件下最多只能同时处理大约 28 个序列。
以 RTX 4090-24G GPU 为例,Qwen3 0.6B 模型参数占用了 1.2GB,那么剩下的 22.8GB 显存中大约可以容纳 203,500 个 token(按 112KB/token 计算)。在部署项目中,如果将输入序列长度限制为 1024,那么该硬件下最多只能同时处理大约 199 个序列。
四、LLM 并发支持估算
4.1 估算场景设定
以集群上的单节点 8 卡 V100 机器运行 llama-13b 模型为例,估算极端情况下聊天系统同时服务 10000 人并发所需要的节点数量。这里的极端情况是指每个请求的输入长度为 512、输出长度为 1536(即上下文长度为 2048)且没有 latency 要求。
LLaMA 系列模型配置文件中 “max_sequence_length”: 2048, 即代表预训练的 LLaMA 模型的最大 Context Window 只有 2048。另外,V100 卡的显存为 32GB。
结合前面的显存分析章节可知,K、V Cache 优化中对于每个 token 需要存储的字节数为 。
4.2 LLaMA-13B并发支持分析
对 llama-13b 模型推理而言,使用 fp16 推理时,其模型参数实际占用显存量为 24.6GB(略小于理论参数显存 26),每个 token 大约消耗 1MB 的显存(其实是 kv cache 占用的缓冲),对于输入输出上下文长度(512+1536)和为 2048 的请求,其每个请求需要的显存是 2GB。这里对每个请求所需要显存的估算是没有计算推理中间结果所消耗显存(其比较小,可忽略),另外不同框架支持张量并行所需要的额外显存也各不相同,这里暂时也忽略不计。
- • 在模型权重为 float16 的情况下,支持的理论 batch 上限为 ()。
- • 在模型权重为 int8 的情况下,支持的理论 batch 上限为 ()。
以上是理论值即上限值,float16 权重的实际 batch 数量会小于 115.7,目前的 deepspeed 框架运行模型推理时实测 batch 数量只可以达到 50 左右。
10000/50 = 200 (台 8 卡 V100 服务器)。
实际场景中的并发请求具有稀疏性,不可能每个请求都是 2048 这么长的上下文长度,因此实际上 200 台 8 卡 V100 服务器能服务的并发请求数目应该远多于 10000,可能是几倍。
4.3 Qwen3 0.6B并发支持对比
对比Qwen3 0.6B模型,以单卡 RTX 4090-24G
运行为例:
对 Qwen3 0.6B 模型推理而言,使用 bf16 推理时,其模型参数实际占用显存量为 1.2GB,每个 token 大约消耗 112KB 的显存,对于输入输出上下文长度为 2048 的请求,其每个请求需要的显存是 229MB。
- • 在模型权重为 bf16 的情况下,支持的理论 batch 上限为 ()。
单卡RTX 4090理论上就能支持约100个并发请求,相比13B模型需要200台8卡V100服务器,Qwen3 0.6B大大降低了部署成本。
4.4 DeepSeek V3并发支持分析
对于 DeepSeek V3 模型而言,其推理时,每个 token 大约消耗 69KB(MLA架构优化后的KV Cache占用)的显存,因此,极限情况下每个请求(序列长度2048)需要的显存是 141MB。
考虑到DeepSeek V3的671B参数量,使用fp16格式需要约1342GB显存,通常需要多卡部署:
- • 8卡A100-80G部署:总显存640GB,无法完整加载模型参数,需要使用量化技术
- • 16卡A100-80G部署:总显存1280GB,仍需要量化(如W8A8)才能加载
- • 使用W8A8量化:模型参数占用约671GB,在16卡A100上可部署
以16卡A100-80G + W8A8量化为例:
- • 模型参数显存占用:671GB + 剩余可用显存:1280GB - 671GB = 609GB
- • 支持的理论batch上限为:609GB / 0.141GB = 4,319
DeepSeek V3得益于MLA架构,在超大参数量下仍能支持较高的并发请求数。
4.5 并发估算通用公式
这里的并发估算的请求长度是按照模型支持的最大上下文长度来估算的,且没有 latency ,模型显存占用也没有用1.2倍来要求,所以实际会比这小。
最大并发数
单卡显存卡数模型参数显存占用量化前后单个请求最大显存占用
单个请求最大显存占用 = 每个 token 的 kv cache 占用显存 × max_sequence_length
- • Llama-13B:每个token消耗1MB显存,单个2048长度请求需要2GB,需要200台8卡V100服务器支持10000并发
- • Qwen3 0.6B:每个token消耗112KB显存,单个2048长度请求需要229MB,单卡RTX 4090支持100个并发
- • DeepSeek V3:每个token消耗69KB显存,单个2048长度请求需要141MB,16卡A100+量化支持4319个并发
五、结论
对于典型自回归 llm,假设 decoder layers 层数为 n,隐藏层大小(Embedding 向量维度)为,输入数据形状为 。当隐藏维度比较大,且远大于序列长度 时,则参数量和计算量的估算都可以忽略一次项,则有以下关于参数量、计算量和显存占用计算分析结论。
这三篇文章的一些定性结论:
1.参数量和输入序列长度无关。传统模型:;模型:。
2.每个 token 对应的计算量:传统模型 ,Qwen3模型 ,计算量随序列长度呈线性增长。其中 (传统)();每轮 decode 的计算量
(传统)()。
3.每个 token 的 kv cache 占用显存大小:传统模型是 4nh,Qwen3模型是 114,688字节(由于GQA优化),kv cache 显存占用量随(输入 + 输出序列长度)以及批量大小 batch_size 呈线性增长。kv cache 显存占用量 (传统)(Qwen3),单位为字节 byte。
4.self-attention 的内存和计算复杂度随序列长度 s 呈二次方增长。注意力输出矩阵要求 的 FLOPs,并且除了输入和输出内存之外,需要额外的 内存。
定量结论(近似估算):
1.一次迭代训练中,对于每个 token 和每个模型参数:传统模型需要进行 6 次浮点数运算,Qwen3模型也需要进行 6 次浮点数运算。
2.随着模型变大,MLP 和 Attention 层参数量占比越来越大:传统模型分别接近 66% 和 33%,Qwen3模型分别为 60% 和 40%。
3.不同规模模型的显存消耗对比:
- • 13B 的 LLM 推理时,每个 token 大约消耗 1MB 的显存
- • Qwen3 0.6B 推理时,每个 token 大约消耗 112KB 的显存
- • DeepSeek V3 推理时,每个 token 大约消耗 69KB 的显存(MLA架构优势)
- • 小模型在部署成本和并发能力上具有显著优势
普通人如何抓住AI大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。
希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01 教学内容
-
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
-
大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
vx扫描下方二维码即可
本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03 入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:
04 视频和书籍PDF合集
从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)
新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
05 行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!
06 90+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)
07 deepseek部署包+技巧大全
由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
更多推荐
所有评论(0)