Update train_CampGPT_X_plus.py
Browse files- train_CampGPT_X_plus.py +0 -42
train_CampGPT_X_plus.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
| 1 |
'''
|
| 2 |
-
下面是整合所有优化后的完整代码。我会将其拆分为清晰的模块,并在关键处加上注释。
|
| 3 |
|
| 4 |
改进版 GPT 架构 - 完整训练代码
|
| 5 |
==========================================
|
|
@@ -693,44 +692,3 @@ if __name__ == "__main__":
|
|
| 693 |
|
| 694 |
|
| 695 |
|
| 696 |
-
|
| 697 |
-
|
| 698 |
-
'''
|
| 699 |
-
|
| 700 |
-
# 项目 你的结果 结论
|
| 701 |
-
# GPU RTX 3090 (sm_86) ✅ 支持 Flash Attention 2
|
| 702 |
-
# Flash Attention ✅ 可用 PyTorch 2.2 内置 FA2 kernel
|
| 703 |
-
# Auto 选择 Flash (2.0ms) ✅ 正确选择
|
| 704 |
-
# MemEff 更快 T=128 时是的 正常现象,你训练用 T=1024,Flash 更快
|
| 705 |
-
# FP32 不支持 Flash ❌ 正常,Flash 只支持 bf16/fp16
|
| 706 |
-
# 你需要改代码吗 不需要 F.scaled_dot_product_attention 已经是最优方案
|
| 707 |
-
|
| 708 |
-
|
| 709 |
-
## 问题分析
|
| 710 |
-
|
| 711 |
-
### 错误本质
|
| 712 |
-
|
| 713 |
-
`RuntimeError: 'weight' must be 2-D` 发生在 `raw_model.generate()` 中调用 `self.transformer.wte(idx)` 时,说明 embedding 层的 weight 不再是 2D 张量。
|
| 714 |
-
|
| 715 |
-
### 根本原因:FSDP 对参数的分片
|
| 716 |
-
|
| 717 |
-
当使用 FSDP 时,模型参数会被**分片(sharded)**。FSDP 会将参数展平为 1D 张量并分散到各个 GPU 上。只有在 FSDP 管理的 `forward()` 调用中,参数才会被临时聚合(all-gather)恢复为原始形状。
|
| 718 |
-
|
| 719 |
-
### 问题链条
|
| 720 |
-
|
| 721 |
-
1. 在 train.py 中,`raw_model` 在 FSDP 模式下被设置为 `raw_model = model`(即 FSDP 包装后的模型本身)
|
| 722 |
-
2. 但 `generate()` 方法内部直接访问 `self.transformer.wte(idx)`——这是直接访问 FSDP 内部的**子模块**
|
| 723 |
-
3. 这种直接访问绕过了 FSDP 的参数聚合机制,此时 `wte.weight` 仍然是**分片后的 1D 扁平张量**,不是原始的 `(vocab_size, n_embd)` 2D 形状
|
| 724 |
-
4. `nn.Embedding` 要求 weight 必须是 2D,所以报错
|
| 725 |
-
|
| 726 |
-
### 为什么训练时的 `forward()` 没问题?
|
| 727 |
-
|
| 728 |
-
因为训练时调用的是 `model(x, y)`,走的是 FSDP 包装的 `__call__`,FSDP 会在进入 forward 前自动 all-gather 恢复参数,forward 结束后再释放。而 `generate()` 中手动逐层调用子模块,完全绕过了这个机制。
|
| 729 |
-
|
| 730 |
-
### 总结
|
| 731 |
-
|
| 732 |
-
**核心问题**:在 FSDP 模式下,`generate()` 方法直接访问被 FSDP 分片的子模块参数,绕过了 FSDP 的参数聚合流程,导致参数形状不正确。
|
| 733 |
-
|
| 734 |
-
需要解决的方向是:在推理/生成时,要么让参数恢复到未分片状态,要么通过 FSDP 提供的上下文管理器来临时聚合参数,要么在生成前将模型转换为非 FSDP 的完整模型。
|
| 735 |
-
|
| 736 |
-
'''
|
|
|
|
| 1 |
'''
|
|
|
|
| 2 |
|
| 3 |
改进版 GPT 架构 - 完整训练代码
|
| 4 |
==========================================
|
|
|
|
| 692 |
|
| 693 |
|
| 694 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|