一文讲明白大模型显存占用(只考虑单卡)

转载自 | 知乎  作者 | 然荻

1.告诉你一个模型的参数量,你要怎么估算出训练和推理时的显存占用?

2.Lora相比于全参训练节省的显存是哪一部分?Qlora相比Lora呢?

3.混合精度训练的具体流程是怎么样的?

这是我曾在面试中被问到的问题,为了巩固相关的知识,打算系统的写一篇文章,帮助自己复习备战秋招的同时,希望也能帮到各位小伙伴。这篇文章将围绕大模型在单卡训练或推理时的显存占用进行系统学习分析,其中有的知识点可能不会涉及太过深入点到为止(因为我也不会),但尽量保证整个读下来逻辑通畅,通俗易懂(只有小白最懂小白!)。

1.数据精度

想要计算显存,从“原子”层面来看,就需要知道我们的使用数据的精度,因为精度代表了数据存储的方式,决定了一个数据占多少bit。我们都知道:

1 byte = 8 bits

1 KB = 1,024 bytes

1 MB = 1,024 KB

1 GB = 1,024 MB

由此可以明白,一个含有1G参数的模型,如果每一个参数都是32bit(4byte),那么直接加载模型就会占用4x1G的显存。

1.1常见的几种精度类型

个人认为只需掌握下图几个常见的数据类型就好,对于更多的精度类型都是可以做到触类旁通发,图源英伟达安培架构白皮书:

图片

各种精度的数据结构

可以非常直观地看到,浮点数主要是由符号位(sign)、指数位(exponent)和小数位(mantissa)三部分组成。符号位都是1位(0表示正,1表示负),指数位影响浮点数范围,小数位影响精度。其中TF32并不是有32bit,只有19bit不要记错了。BF16指的是Brain Float 16,由Google Brain团队提出。

1.2 具体计算例子

我硕士话,讲太多不如一个形象的图片或者例子来得直接,下面我们将通过一个例子来深入理解如何通过这三个部分来得到我们最终的数据:我以BF16,如今业界用的最广泛的精度类型来举个栗子,下面的数完全是我用克劳德大哥随机画的:

  • 题目:

图片

随机生成的BF16精度数据

- 先给出具体计算公式:

图片

- 然后step by step地分析(不是,怎么还对自己使用上Cot了)

符号位Sign = 1,代表是负数

指数位Exponent = 17,中间一坨是

图片

 

小数位Mantissa = 3,后面那一坨是 

图片

  • 最终结果

三个部分乘起来就是最终结果 -8.004646331359449e-34

  • 注意事项

中间唯一需要注意的地方就是指数位是的全0和全1状态是特殊情况,不能用公式,如果想要深入了解可以看这个博客: 彻底搞懂float16与float32的计算方式-CSDN博客 如果感兴趣想更加深入了解如何从FP32转换为BF16

### 关于8GB显存在微调DeepSeek R1蒸馏模型时的最大规模限制 在选择GPU进行深度学习任务时,显存大小是一个至关重要的因素。对于像DeepSeek R1这样的大型语言模型及其蒸馏版本,在微调阶段需要足够的显存来存储模型参数、梯度以及中间计算结果。 #### 1. 显存需求分析 一般来说,显存的需求取决于以下几个方面: - **模型参数数量**:更大的参数量意味着更多的内存占用。 - **批量大小 (Batch Size)**:较大的批量会增加每次迭代所需的显存量。 - **优化器状态**:许多现代优化算法(如Adam)会在每轮更新中维护额外的状态变量,进一步增加了显存消耗[^1]。 针对具有8GB显存的GPU设备而言,其能够支持的模型最大规模受到上述几个方面的严格约束。具体来说: #### 2. 参数量估算 假设我们正在处理的是经过蒸馏后的较小版本模型——即DeepSeek-R1-Distilled系列中的某个变体,则可以尝试估计该条件下可容纳的最大参数范围。一般情况下,如果采用FP16半精度模式运行程序,那么单个浮点数值仅需两个字节空间;而全精度(FP32)则对应四个字节的空间开销。基于此逻辑推算得出结论如下表所示: | 数据类型 | 单位参数所需显存(MB) | |----------|-----------------------| | FP16 | ~0.008 | | FP32 | ~0.016 | 通过简单的乘法操作即可粗略评估不同配置下的理论极限值。例如,当目标设定为不超过8GB总容量的前提下,允许加载的最大参数数目大约位于区间 `[5亿至10亿之间]` (视具体情况调整实际阈值)。然而值得注意的是,这只是理想状况下的一种简化近似方法,并未充分考虑到其他潜在影响要素的存在可能性。 另外需要注意一点就是,尽管某些轻量化框架或者技术手段可能有助于缓解部分压力,比如混合精度训练策略的应用等措施能够在一定程度上降低整体资源利用率水平,但无论如何也无法完全摆脱硬件条件本身所固有的局限性束缚。 #### 3. 实际部署建议 为了更好地适应有限制性的环境设置并尽可能发挥现有装备效能优势所在之处,这里给出几点实用型指导方针供参考采纳: - 尽量选用已经完成压缩处理过的预训练成果作为初始起点; - 合理规划批次尺寸大小以平衡收敛速率同稳定性之间的关系权衡取舍; - 积极探索各类先进的加速工具包功能特性以便获取更优性能表现效果。 最后附带提供一段Python脚本样例代码片段展示如何创建相应目录结构并执行远程下载指令流程自动化过程实现方式: ```python import os # 定义本地路径名 directory_name = "./DeepSeek-R1-Distill-Qwen-7B" if not os.path.exists(directory_name): os.makedirs(directory_name) command_to_execute = f"modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local_dir {directory_name}" os.system(command_to_execute) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值