让我详细解释参数量到模型大小的计算方法:
1. 基本计算公式
模型大小 = 参数量 × 数据类型大小
2. 不同数据类型的存储大小
| 数据类型 | 字节数 | 位数 |
|---|---|---|
| float32 | 4 bytes | 32 bits |
| float16 | 2 bytes | 16 bits |
| bfloat16 | 2 bytes | 16 bits |
| int8 | 1 byte | 8 bits |
3. 具体计算示例
学生模型 (31.7M参数)
# float32存储
模型大小 = 31,700,000 × 4 bytes = 126,800,000 bytes = 126.8 MB
# float16存储
模型大小 = 31,700,000 × 2 bytes = 63,400,000 bytes = 63.4 MB
# int8存储
模型大小 = 31,700,000 × 1 byte = 31,700,000 bytes = 31.7 MB
教师模型 (123.1M参数)
# float32存储
模型大小 = 123,100,000 × 4 bytes = 492,400,000 bytes = 492.4 MB
# float16存储
模型大小 = 123,100,000 × 2 bytes = 246,200,000 bytes = 246.2 MB
# int8存储
模型大小 = 123,100,000 × 1 byte = 123,100,000 bytes = 123.1 MB
4. 单位换算
# 字节单位换算
1 KB = 1,024 bytes
1 MB = 1,024 KB = 1,048,576 bytes
1 GB = 1,024 MB = 1,073,741,824 bytes
# 简化计算(使用1000进制)
1 KB ≈ 1,000 bytes
1 MB ≈ 1,000,000 bytes
1 GB ≈ 1,000,000,000 bytes
5. 实际代码中的计算
让我查看MiniMind中是如何计算的:
[1 tool called]
6. MiniMind中的实际存储
训练时:
- 使用
bfloat16或float16(2 bytes per parameter) - 学生模型:31.7M × 2 = 63.4 MB
- 教师模型:123.1M × 2 = 246.2 MB
保存时:
# 半精度保存
state_dict = {k: v.half() for k, v in state_dict.items()}
7. 详细计算过程
学生模型参数量分解:
# 词嵌入层
embedding_params = 6400 × 512 = 3,276,800
# Transformer层 (8层)
per_layer_params = (
4 × 512 × 512 + # 注意力层
2 × 512 × 2048 # MLP层
) = 3,145,728
total_transformer = 8 × 3,145,728 = 25,165,824
# 输出层
output_params = 512 × 6400 = 3,276,800
# 总参数量
total_params = 3,276,800 + 25,165,824 + 3,276,800 = 31,719,424
模型大小计算:
# float32 (训练时可能使用)
size_float32 = 31,719,424 × 4 = 126,877,696 bytes = 126.9 MB
# float16/bfloat16 (实际使用)
size_float16 = 31,719,424 × 2 = 63,438,848 bytes = 63.4 MB
# 保存时 (half precision)
size_saved = 63.4 MB
8. 实际验证
让我创建一个简单的计算脚本:
=== 参数量到模型大小计算 ===
=== 1. 基本公式 ===
模型大小 = 参数量 × 数据类型大小
=== 2. 数据类型大小 ===
float32: 4 bytes
float16: 2 bytes
bfloat16: 2 bytes
int8: 1 byte
=== 3. 学生模型计算 ===
参数量: 31,700,000
不同精度的大小:
float32: 120.9 MB
float16: 60.5 MB
int8: 30.2 MB
=== 4. 教师模型计算 ===
参数量: 123,100,000
不同精度的大小:
float32: 469.6 MB
float16: 234.8 MB
int8: 117.4 MB
=== 5. MiniMind实际使用 ===
训练时: bfloat16 (2 bytes)
学生模型: 60.5 MB
教师模型: 234.8 MB
保存时: half() 半精度
与训练时相同: 2 bytes per parameter
=== 6. 压缩效果 ===
参数量压缩: 3.9:1
模型大小压缩: 3.9:1
压缩比例: 74.2%
9. 总结
参数量到模型大小的计算方法:
基本公式:
模型大小 = 参数量 × 数据类型大小
MiniMind中的实际计算:
- 学生模型:31.7M参数 × 2 bytes = 60.5 MB
- 教师模型:123.1M参数 × 2 bytes = 234.8 MB
关键因素:
- 参数量:模型架构决定
- 数据类型:存储精度决定
- 压缩比:参数量压缩 = 模型大小压缩
实际应用:
- 训练时使用
bfloat16(2 bytes) - 保存时使用
half()半精度 - 压缩效果:74.2% 的模型大小减少
这就是从参数量计算模型大小的完整过程!
2万+

被折叠的 条评论
为什么被折叠?



