本文目录导读:

这是一个非常实用的问题,计算深度学习/大语言模型的“重量”(即模型文件占用的存储空间,或加载到显存/内存中所需的容量),通常有以下几种工具和方法。
核心公式是:模型参数量(参数个数) × 每个参数的字节数 = 模型大小。
以下是具体的计算工具和方法,按场景分类:
最精确的方法:直接查看模型文件
如果你已经下载了模型(.bin, .pt, .safetensors, pth.tar 文件),这是最快的方式。
-
Linux / Mac (命令行):使用
ls或du命令。# 查看单个模型文件大小(以GB显示) ls -lh ./models/llama-2-7b-qlora-adapter.bin du -sh ./models/Llama-2-7b-chat-hf/
-
Windows:直接在文件夹中右键点击模型文件,选择“属性”,查看“大小”。
-
Python (编程方式):如果你在代码环境中。
import os import torch # 方式1:查看磁盘占用 file_path = "your_model.pt" size_bytes = os.path.getsize(file_path) print(f"磁盘占用: {size_bytes / 1024**3:.2f} GB") # 方式2:查看加载后的显存/内存占用(前提是模型已加载到GPU/CPU) model = torch.load("your_model.pt") # 或者 model = YourModelClass().to('cuda') param_size = sum(p.numel() * p.element_size() for p in model.parameters()) print(f"参数量: {sum(p.numel() for p in model.parameters()) / 1e9:.2f}B") print(f"理论占用: {param_size / 1024**3:.2f} GB")
最常用的方法:基于参数量的估算工具
你通常不需要真的下载模型,只需要知道模型的参数量(7B、13B、70B),就能估算出来。
关键参数:
- 精度(dtype):每个数字占用的字节数。
- FP32 (float32):4 字节
- FP16 / BF16 (float16 / bfloat16):2 字节 (当前主流训练和推理精度)
- INT8 (8-bit):1 字节
- INT4 (4-bit):0.5 字节 (量化后常用于本地部署)
快速估算公式(适用于Transformer架构):
- 原始大小 (FP16) = 参数量(10亿为单位) × 2
- 例:7B 模型在 FP16 下 ≈ 7 × 2 = 14 GB
- 例:70B 模型在 FP16 下 ≈ 70 × 2 = 140 GB
- INT8 量化 = 参数量 × 1
7B 模型 ≈ 7 GB
- INT4 量化 = 参数量 × 0.5
7B 模型 ≈ 3.5 GB
在线计算器/网站
这些网站直接输入参数量,选择精度,自动给出结果:
- Transformer Math Calculator (Hugging Face Space):搜索并打开,输入参数量和精度,自动计算推理所需显存和模型大小。
- vLLM 官方文档中的公式:很多AI框架(如vLLM, llama.cpp)的文档会附上显存/磁盘占用计算公式。
- AnyScale LLM Perf Calculator:常用于估算推理时的总显存需求(包括模型权重 + KV Cache + 激活值)。
针对特定工具的专用计算方式
使用 llama.cpp (本地CPU/GPU推理,量化文件)
llama.cpp 的模型文件(.gguf 格式)文件名通常直接标注了大小和量化级别。
- 指令:
./main -m models/7B/ggml-model-q4_0.gguf,文件名中的q4_0表示 INT4 量化。 - 快速估算:
- Q4_K_M (推荐的4位量化) 文件大小 ≈ 参数量 × 0.5 GB
- Q5_K_M (5位) ≈ 参数量 × 0.6 GB
- Q8_0 (8位) ≈ 参数量 × 1 GB
- 更多细节:
llama.cpp在构建时,构建日志会显示模型文件占用的磁盘和加载后的内存大小。
使用 Hugging Face Transformers
当你从 Hugging Face Hub 下载模型时,模型卡片页面通常直接显示:
- "Model size":直接显示参数量(如 7.24B params)。
- "File size":显示单个安全张量文件的大小(如 13.5 GB)。
你可以在 Hugging Face 代码环境中动态计算:
from transformers import AutoConfig
model_id = "meta-llama/Llama-2-7b-chat-hf"
config = AutoConfig.from_pretrained(model_id)
# 参数量(单位:十亿)
num_params = sum(config.num_hidden_layers * config.hidden_size * config.intermediate_size * 4) # 简化估算
print(f"参数量: {num_params / 1e9:.2f}B")
# 更直接的方法:查看 config 中的参数
# 对于 llama, 直接打印 config (num_parameters 字段有时不精准)
终极精确方法:代码运行时计算
如果你手头有模型的 PyTorch 代码或已经加载的模型对象,可以用以下代码精确计算磁盘占用和显存占用(包括优化器状态):
import torch
def print_model_size(model):
param_size = 0
for param in model.parameters():
param_size += param.nelement() * param.element_size()
buffer_size = 0
for buffer in model.buffers():
buffer_size += buffer.nelement() * buffer.element_size()
size_all_mb = (param_size + buffer_size) / 1024**2
size_all_gb = size_all_mb / 1024
print(f"模型参数 + 缓存大小: {size_all_mb:.2f} MB == {size_all_gb:.2f} GB")
print(f"参数量: {sum(p.numel() for p in model.parameters()) / 1e6:.2f}M")
return size_all_gb
# 使用示例
# model = YourModel()
# print_model_size(model)
总结建议
| 你的需要 | 最佳工具/方法 |
|---|---|
| 我想知道我的RTX 4090 24G能不能跑7B模型? | 使用估算公式:FP16需要14GB,INT4需要3.5GB,24G显卡可以轻松跑INT4量化版,勉强跑FP16。 |
| 我下载了一个模型文件夹,想知道它多大。 | 直接鼠标右键 > 属性 或 du -sh。 |
| 我要写代码加载模型前预测显存。 | 使用 print_model_size 函数或在线 Transformer Math 计算器。 |
| 我要下载一个7B模型,哪个量化版本体感好? | 看文件名:q4_k_m (4位) 约4GB;q5_k_m (5位) 约5GB。 |
| 我需要精确到字节的计算。 | 使用 Python 的 torch.numel() 和 element_size() 逐层计算。 |
最常用结论(记住这条就够了):
对于大语言模型(LLM):
- 7B 模型(FP16):约 14 GB
- 7B 模型(INT4 量化):约 5 GB
- 13B 模型(INT4 量化):约 5 GB
- 70B 模型(INT4 量化):约 35 GB
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。