用途
本项目是一个从随机初始化开始训练、受 GLM-5.3-Flash 启发的 25.7M 参数语言模型,并在预训练后使用可执行奖励强化学习(RL)进行改进。它面向希望理解大模型训练流程、强化学习微调以及架构设计的开发者与研究者,提供可读、可复现的教育性实现。
主要能力
- 从零预训练:在 GPU 上直接生成小型合成 Python 语料,无需下载数据集。预训练 400 步,消耗 1,381,760 个 token,耗时 63.1 秒,峰值显存 2.139 GiB。
- 可执行奖励 RL:使用 RLOO 策略梯度后训练,在 96 个提示上运行,每个提示采样 16 个补全。奖励仅基于可执行结果:通过所有隐藏测试得 1,有效但错误得 0,无效代码得 -0.1。最终 RL 运行使用 1,536 次 rollout,执行 73 次带奖励更新,耗时 155.5 秒,峰值显存 0.936 GiB(RTX 3080 Ti)。
- 多后端支持:同一代码支持 NVIDIA CUDA、Apple Silicon MPS 和 CPU 执行,训练脚本接受
--device auto自动选择可用后端。 - 架构实现:模型采用发布模型的高层 linear、linear、linear、sparse 节奏。其 ELU 特征线性注意力并非 GLM 的精确 KDA 实现;局部加跨步聚集注意力并非带索引器的 DeepSeek Sparse Attention;学习到的流混合器并非完整的流形约束 Sinkhorn 公式。这是教育性实现,不是复现。
- 字节级分词:项目刻意使用每个 UTF-8 字节一个 token,而非发布 tokenizer 的 BPE。字节分词器无需学习词表,可精确表示任意文本,并保持嵌入和输出矩阵极小,代价是序列更长。模型预测下一个字节,对 ASCII 码等同于下一个字符,但对多字节 Unicode 字符不一定。
- 可选微型视觉扩展:遵循发布 GLM-5.3-Flash 图像拓扑的教学规模实现。生产模型使用 448x448 RGB 输入、14x14 空间块、24 个视觉块(宽度 1024)、16 头、2D 旋转位置、2x2 学习下采样器和门控投影器到 4096 宽语言模型。微型版本使用固定 32x32 图像、宽度 24、四头、两个块、学习位置嵌入,无视频或可变分辨率打包。
- 完整 25.7M 语言模型集成试点:将类 GLM 视觉编码器附加到完整 12 层语言模型(从本地 step-100 编码检查点初始化)。所有 12 层语言层执行,训练限于视觉编码器、最终 LM 块、最终 norm 和绑定嵌入/输出矩阵。运行 40 次更新,400 张生成训练图像,37 秒(Apple Silicon MPS)。不保存权重。
使用方式
- 环境要求:使用 Python 3.12,因为固定的 PyTorch 2.5.1 不提供 Python 3.13 wheel。适用于 macOS Apple Silicon、Linux NVIDIA CUDA 和纯 CPU 机器。
- 快速开始:完成快速开始后,可复现 GPU 实验。
- 预训练:运行
scripts/train_pretrain.py进行随机初始化和因果语言模型预训练。 - RL 后训练:运行
scripts/train_rl.py进行带可执行奖励的批量 RLOO。 - 评估:使用
scripts/evaluate.py进行贪婪 pass@1 评估;scripts/evaluate_passk.py进行采样策略评估。 - 视觉训练:
scripts/train_vision.py进行确定性生成 RGB 训练和留出比较。 - 完整模型视觉试点:
experiments/full_25m_vision_digit_pilot.py进行有界全语言模型视觉集成测试,从不保存权重。 - 课程幻灯片:仓库包含 HTML 幻灯片、真实前后生成动画和小型图表资产。运行
slides/serve_slides.py后打开http://127.0.0.1:8765/slides.html。macOS 上slides/start-slides.command可自动启动服务器并打开幻灯片。 - 复现实验:最终原始结果、图表和报告位于
artifacts/experiments。分析代码在scripts/analyze_rl_variants.py和scripts/analyze_rl_group_confirmation.py。
适用场景
- 学习语言模型从零训练、预训练数据生成、检查点选择和 RL 微调的完整流程。
- 研究可执行奖励强化学习对窄编码行为的影响,以及 RL 设计选择(奖励密度、无效代码惩罚、采样温度、rollout 组大小)的消融实验。
- 理解 GLM-5.3-Flash 高层架构节奏的教学实现,包括混合注意力、MoE、残差流和视觉编码器集成。
- 在有限计算资源(单张 RTX 3080 Ti 或 Apple Silicon)上复现小型训练实验。
限制
- 这是教育性实现,不是 GLM-5.3-Flash 的复现。真实 GLM-5.3-Flash 有 320B 总参数、18B 活跃参数、45 个文本层、混合线性/稀疏注意力、MoE、四流 mHC、IndexPool、百万 token 上下文和原生多模态。
- 统计结果仅描述合成基准,不能确立广泛编码能力。配对贪婪比较在训练族确认任务上有 16 次增益、0 次损失(精确 McNemar/二项 p = 0.0000305),任务级 bootstrap 区间为 +25.0 到 +53.1 个百分点。
- RL 使 increment 和 double 在预训练中已出现这些操作模式后变得可靠,但未使 even 可靠,且采样性能在未训练的 square 和 list_sum 族上退化。这种干扰是结果的一部分,未被隐藏。
- 预训练研究使用 248,412 参数微型模型和 32 个留出表达式结构,每个比较在 10 个配对种子上重复。最强结果是排序比较:交错在所有 10 个配对种子上获胜,但所有条件精确表达式准确率仍为 0%,因此这些结果测量的是合成代码上的部分下一字节学习,而非可靠程序生成。
- RL 设计选择后续实验:屏幕似乎偏好组大小 4,但所有七个与标准组 8 的配对比较 Holm 校正 p 值为 1.0。在 40 任务确认分割上,组大小 4 和 8 在三个 RL 训练种子上的任务 bootstrap 95% 区间为 -6.7 到 +1.7 个百分点,跨零。开发集赢家未复现。较低采样温度 0.20 仍是最强未确认线索,应在花费更多计算前复现。
- 视觉实验:在记录的单种子运行中,忠实微型从 0/200 提升到 119/200 留出准确率,损失 5.5809 -> 1.1618;较小的直接补丁基线从 0/200 提升到 189/200,损失 5.5758 -> 0.9608。基线在这个微小短运行比较中获胜。这不表明生产拓扑更差,而是表明在非常小的模型和训练预算下增加结构没有回报。
- 完整 25.7M 视觉集成试点:前 11 个 LM 块冻结,语义数字类在训练和评估间共享,单种子且无匹配基线。它证明集成可以学习此合成渲染任务,但不确立通用视觉能力。
- 模型权重有意排除:重新运行两个训练阶段在测量 GPU 上约需四分钟。
- 许可证:MIT。本仓库是独立教育性实现,不隶属于 Z.ai。