GPU显存计算、加载
GPU显存计算、加载
1. 模型参数精度与量化
1.1 精度-字节对照表
精度通常指的是参数的数据类型,它决定了模型在内存中存储和计算参数时所使用的位数。以下是一些常见的模型参数精度及其含义,以及它们在内存中所占用的字节数。
|
精度 |
含义 |
字节数 |
|
双精度浮点数 float64 |
双精度浮点数提供更高的精度,适用于需要更高数值精度的应用,但会占用更多的内存。 |
8 字节(64 位) |
|
单精度浮点数 float32 |
单精度浮点数用于表示实数,具有较高的精度,适用于大多数深度学习应用。 |
4 字节(32 位) |
|
半精度浮点数 FP16/BF16 |
半精度浮点数用于表示实数,但相对于单精度浮点数,它的位数较少,因此精度稍低。然而,它可以在某些情况下显著减少内存占用并加速计算。 |
2 字节(16 位) |
|
8 位整数 int8 |
int8 使用 8 位二进制来表示整数。在量化过程中,浮点数参数将被映射到一个有限的范围内的整数,然后使用 8 位来存储这些整数。 |
1 字节(8 位) |
各种参数在存储时的表现形式如下:

1.2 量化原理与权衡
参数量化指的是通过将浮点数参数映射到较低位数的整数,从而在一定程度上降低了模型的计算和存储成本。

在量化过程中,模型参数的值被量化为最接近的可表示整数,这可能会导致一些信息损失。因此,在使用量化技术时,需要平衡压缩效果和模型性能之间的权衡,并根据具体任务的需求来选择合适的量化精度。
映射方式:浮点值→线性/对数量化→8位整数。
收益:显存-75 %,吞吐+2×~3×。
风险:精度下降1–2 %,需校准数据集重调。
2. 模型大小计算
2.1 核心公式
神经网络模型由多个层组成,每一层都包含权重(weight)和偏置(bias),这些统称为模型参数。而模型的参数量一般直接影响它的学习和表示能力。
模型大小计算公式:
模型大小(字节)= 参数数量 × 每个参数的字节数
2.2 示例
对于一个拥有 10 亿(1B / 1,000,000,000) 参数的模型,使用 32 位浮点数(float32, 简称 FP32) 表示,每个参数占用 32÷8=4 字节,即:
模型大小=1,000,000,000×4字节=4GB
由此可得,1B (十亿) FP32 参数约等于 4 GB 显存。
以meta-llama/Meta-Llama-3.1-70B-Instruct 这个拥有 700 亿(70B) 参数的大模型为例,仅考虑模型参数,它的显存需求就已经超过了大多数消费级 GPU(如 RTX 4090 最高 48G):
70×109×4字节=280GB
3. 训练时显存占用分析
3.1 显存构成
训练时的显存占用主要由以下部分组成:
模型参数:模型的权重和偏置。
优化器状态:如动量和二阶矩估计等,取决于优化器的类型,单纯的 SGD 不占显存。
梯度:每个参数对应一个梯度,数据类型与模型参数相同。
中间激活值:前向传播过程中产生的激活值,需要在反向传播中使用,其显存占用与 Batch Size、序列长度以及模型架构相关。
临时缓冲区 :用于存储计算过程中的中间结果,这些通常是短时占用,但峰值可能很高。
框架开销:CUDA 上下文、显存碎片等。

3.2 估算公式
以 1B 参数的模型为例,假设训练时使用 Adam优化器,精度使用 FP32,仅考虑与模型参数挂钩的显存计算:
- 模型参数:4 GB
- 梯度:4 GB
- 优化器状态(Adam:一阶和二阶动量):8 GB(2 × 4 GB)
- 激活峰值:batch=8, seq=2048 → ≈4 GB
总计:≈20 GB
4. 推理时显存占用分析
4.1 显存构成
推理时的显存占用主要包括:
- 模型参数:同训练阶段一致。
- 中间激活值:仅保留当前步的激活值,相较于训练阶段,小非常多。
- Batch Size:一次处理的数据样本数量。
4.2 估算公式
以 1B 参数的模型为例,假设训练时使用 Adam优化器,精度使用 FP32,仅考虑与模型参数挂钩的显存计算:
- 模型参数:4 GB
- 激活:batch=1, seq=2048 → ≈2 GB
总计:≈6 GB(仅为训练阶段1/3)
5. 模型加载过程与优化技术
5.1 传统加载路径
主流框架(如 PyTorch、TensorFlow)的模型加载接口(如 torch.load()、tf.keras.models.load_model())默认将模型数据先读入内存,再通过 CUDA API 复制到显存。这是由底层数据流的设计决定的:
磁盘 → 内存(CPU)→ 显存(GPU)。
GPU 无法直接访问磁盘数据,必须通过内存作为中介。

缺点:双倍内存峰值,大模型易OOM。
5.2 优化加载路径对比
部分框架支持跳过内存,直接从磁盘加载到显存:数据从磁盘读取到内存缓冲区后,立即转移到显存,完成后释放内存缓冲区。仅在加载过程中短暂占用内存,完成后自动释放。

内存映射(Memory-Mapped)技术对超大模型使用分片加载,仅将当前需要的部分读入内存/显存:

专用推理格式将模型转换为 TensorRT 优化后的 .engine 文件,支持直接从磁盘加载到显存。引擎文件已针对 GPU 显存布局优化,加载时通过 CUDA 直接初始化显存数据。

参考文献
[1] https://github.com/Hoper-J/AI-Guide-and-Demos-zh_CN/blob/master/Guide/07.%20%E6%8E%A2%E7%A9%B6%E6%A8%A1%E5%9E%8B%E5%8F%82%E6%95%B0%E4%B8%8E%E6%98%BE%E5%AD%98%E7%9A%84%E5%85%B3%E7%B3%BB%E4%BB%A5%E5%8F%8A%E4%B8%8D%E5%90%8C%E7%B2%BE%E5%BA%A6%E9%80%A0%E6%88%90%E7%9A%84%E5%BD%B1%E5%93%8D.md
[2] https://cloud.tencent.com/developer/article/2403424
[3] https://blog.csdn.net/qq_15821487/article/details/146039457
[4] NVIDIA TensorRT Documentation, 2025-12. TensorRT Best Practices. https://docs.nvidia.com/tensorrt/
[5] Hugging Face Accelerate, 2025-11. Large Model Loading Guide. https://huggingface.co/docs/accelerate
浙公网安备 33010602011771号