2.3 KiB
2.3 KiB
第8节:MiniMindForCausalLM 模型结构
模型类核心机制笔记
📚 本节目录
1. _tied_weights_keys 和 weight = weight 是否重复?
结论:不是重复,而是"真实共享 + 框架声明"两层机制
(1) 真正起作用的是这一句(PyTorch 层)
self.model.embed_tokens.weight = self.lm_head.weight
作用:
- 两个参数指向同一块内存
- 真正实现"权重共享"
- forward + backward 都共享梯度
本质:计算图层面的绑定(真实共享)
(2) _tied_weights_keys(HF 框架层)
_tied_weights_keys = {"lm_head.weight": "model.embed_tokens.weight"}
作用:告诉 HuggingFace 这两个权重是 tied 的
用于:
save_pretrained(避免重复存储)from_pretrained(恢复绑定关系)state_dict管理
总结
| 层级 | 代码 | 作用 |
|---|---|---|
| PyTorch 层 | weight = weight |
真的共享参数 |
| HF 框架层 | _tied_weights_keys |
框架识别共享关系(存储/加载) |
2. self.post_init() 是干什么的?
一句话版本:模型构建完成后的"框架统一初始化 + 校验 + 补全步骤"
它主要做 4 件事:
| 序号 | 作用 | 说明 |
|---|---|---|
| (1) | 权重初始化收尾 | Linear / Embedding 初始化补全,_init_weights() 可能在这里被调用 |
| (2) | 检查/补齐 weight tying | 确认 embedding 和 lm_head 是否真的 tied,没绑定可能自动修复 |
| (3) | dtype / device 统一 | float32 / float16 对齐,meta tensor 修正,device consistency |
| (4) | config 驱动初始化逻辑 | initializer_range、tie_word_embeddings 等配置 |
一句话总结
post_init() = HF 在模型构建结束后做的"最后一次统一初始化 + 校验 + 修正"
超短记忆版(考试/面试级)
tied weights
weight = weight→ 真正共享参数(计算图层)_tied_weights_keys→ 框架识别共享关系(存储/加载层)
post_init
- 模型构建完成后的统一收尾步骤:初始化 + 校验 + 修正 + tie 检查