人工智能大模型预训练分布式训练模型优化深度学习【免费下载链接】modded-nanogptNanoGPT (124M) in 90 seconds项目地址https://gitcode.com/GitHub_Trending/mo/modded-nanogpt点击查看免费下载导读本文围绕 modded-nanogpt 在 2025-09-18 提交的2025-09-18_Smear记录展开讲解其核心创新点在 token embedding 进入残差流之前将每个位置的 embedding 与前一个位置的 embedding 做一次「涂抹smear」融合用一次几乎免费的向量加法替代多个注意力头反复执行的前 token 注意力。你将掌握该模块的完整设计动机、逐行实现、超参数接线、优化器配置以及项目作者用来验证收益的统计检验方法并了解如何在后续版本源码中复现该能力。背景动机模型为什么「非要」关注前一个 token在训练完成的模型权重上作者观察到多个注意力头持续将注意力分配给前一个 tokenprior token。这并非偶然现象而是语言模型早期训练阶段常见的行为——下一个 token 的预测往往与紧邻的上文强相关例如二元语法bigram统计。但问题在于注意力是实现「关注前一个 token」的一种计算上很低效的方式。它需要走完完整的 QKV 投影、注意力分数计算、softmax 与加权求和流程只为提取一个本质上是「把前一个 token 的向量搬过来」的信息。如果模型最终学到的就是一个线性组合token λ·prior_token那么完全可以在 embedding 阶段用一个更轻量的模块直接完成。这就是 Smear涂抹模块的出发点把「关注前一个 token」从注意力机制中剥离出来前置到 embedding 层让注意力头腾出容量去处理更长程、更复杂的依赖关系。Smear 模块的设计与逐行实现核心思路作者将残差流 / embedding 的前 12 个维度用作门控信号同时控制 smear 模块与注意力。大致可以认为模型学到的更优 embedding 表示近似为token 0.07 * prior_token即每个位置保留自身 token 信息再按一个很小的系数混入前一个 token 的信息。原文档给出的实现如下节选自records/track_1_short/2025-09-18_Smear/README.mdself.smear_gate CastedLinear(12, 1) self.smear_gate.weight.detach().zero_() x self.embed(input_seq) # smear token embed forward 1 position smear_lambda self.scalars[5 * len(self.blocks)] smear_gate_out smear_lambda * torch.sigmoid(self.smear_gate(x[1:, :self.smear_gate.weight.size(-1)])) x torch.cat([x[:1], x[1:] smear_gate_out * x[:-1]]) x x0 norm(x[None])逐行拆解self.smear_gate CastedLinear(12, 1)一个将 12 维输入映射为 1 维标量的线性层。输入取自 embedding 的前 12 个维度x[1:, :12]输出经 sigmoid 归一化到(0, 1)充当逐 token 的涂抹强度。CastedLinear是该仓库自定义的线性层支持 FP8 前向训练时走torch.ops.nanogpt.mm自定义算子详见训练记录文件头部实现。self.smear_gate.weight.detach().zero_()门控权重零初始化使 sigmoid 输出恰好为0.5的基线再由可学习的smear_lambda标量决定初始涂抹强度训练开始时模型行为接近无涂抹的原始路径。smear_lambda self.scalars[5 * len(self.blocks)]从self.scalars可学习标量向量中取出 smear 的全局缩放系数。该标量初始为 0使训练从「不涂抹」起步由优化器逐步调整到合适强度。smear_gate_out smear_lambda * torch.sigmoid(...)将逐 token 门控与全局标量相乘得到每个位置最终的涂抹系数。x torch.cat([x[:1], x[1:] smear_gate_out * x[:-1]])前移一个位置的核心操作。对位置t而言x[t] x[t] gate[t] * x[t-1]即把前一个位置的 embedding 按门控强度混入当前位。序列首位的x[:1]保持不变没有前驱。x x0 norm(x[None])涂抹完成后统一做 RMSNormF.rms_norm结果同时作为残差流输入x与恒等映射基线x0。源码级证据三个版本中的 smear 接线1. 记录当天的完整训练脚本records/track_1_short/2025-09-18_Smear/18a1e5c7-947e-479d-bc3a-a57a61a98fc9.txt3089 行含完整训练代码与日志中GPT.__init__将 smear 参数接入self.scalarsself.scalars nn.Parameter( torch.cat( [ -1.5 * torch.ones(num_layers), # skip_weights - σ(-1.5) ≈ 0.18 *[torch.tensor([1.0, 0.0]) for _ in range(num_layers)], # block lambdas *[torch.tensor([0.5, 0.5]) for _ in range(num_layers)], # SA lambdas torch.zeros(num_layers), # extra zeros params for smear_lambda torch.ones(pad), ] ) ) self.smear_gate CastedLinear(12, 1) self.smear_gate.weight.detach().zero_()这里特意为 smear 预留了一整段torch.zeros(num_layers)并通过self.scalars[5 * len(self.blocks)]索引到 smear_lambda其lr_mul 5.0以更高的学习率驱动这个零初始化标量快速脱离初始值。2. 当前主线版本track_1_short/model/gpt.pysmear 模块在后续架构演化中得以保留track_1_short/model/gpt.py# 模型初始化gpt.py#L341-L343 def init_misc(self, model_dim, num_layers): self.smear_gate nn.Linear(12, 1, biasFalse) nn.init.zeros_(self.smear_gate.weight)# scalars 中预留 smear_lambdagpt.py#L361 torch.zeros(1), # smear_lambda# 前向中执行涂抹gpt.py#L612-L615 # smear token embed forward 1 position classiclarryd smear_gate_out smear_lambda * torch.sigmoid(self.smear_gate(x[1:, :self.smear_gate.weight.size(-1)])) x torch.cat([x[:1], x[1:] smear_gate_out * x[:-1]]) x x0 norm(x[None])从源码结构看即使后续引入了 n-gram 嵌入、MUDD 动态连接、FP8 等大量新特性smear 依然作为 embedding 后的第一个变换步骤存在说明它是一个稳定有效的基元操作。3. 优化器配置track_1_short/training.py在track_1_short/training.py中smear_gate被显式登记为参数组smear_gate: {optim: adam, comms: replicated, adam_betas: [0.9, 0.99], lr_mul: 0.01, wd_mul: 0.0},即门控线性层使用 Adam 优化、replicated 通信策略、lr_mul0.01、零权重衰减。而在 2025-09-18 的记录版本中smear_gate_params与隐藏层矩阵参数一并交给 Muon 优化器lr0.05, momentum0.95。两种配置说明smear_gate 这类「小而关键」的门控参数适合与标量/门控参数群一起低学习率训练避免扰动主路径。训练超参数与运行环境记录实例记录文件18a1e5c7-947e-479d-bc3a-a57a61a98fc9.txt给出了当次记录的关键超参数配置项值模型GPT-2 规模vocab 50257、12 层、6 头、head_dim 128、model_dim 768训练数据data/fineweb10B/fineweb_train_*.bin迭代步数1645train_batch_size2048 × 24 × 8train_max_seq_len128 × 16验证 token 数10485760cooldown_frac0.5后半程线性退火学习率窗口调度(3, 7, 11)最终验证窗口 13 / 末层 20优化器DistAdamembed/head/scalarlr0.008 Muon矩阵与 smear_gatelr0.05运行环境8 × NVIDIA H100 80GB HBM3PyTorch 2.9.0.dev20250721cu126Triton 3.4.0CUDA 12.6日志显示训练全程平均约92.8 ms/step最终在第 1645 步得到val_loss 3.2796、训练耗时 152.755 s峰值显存约 32074 MiB——这也是文档标题「New WR 152.7s」的来源以 8×H100 上 124M 参数规模约 2.5 分钟完成训练。收益验证统计检验与边际性讨论10 次重复运行的统计检验原文档附带了一段用 scipy 做的单样本 t 检验用于判断 smear 带来的 loss 改善是否显著import scipy.stats import torch accs [3.2781, 3.2792, 3.2765, 3.2796, 3.2803, 3.2801, 3.2787, 3.2798, 3.2787, 3.2786] times [152.771, 152.816, 152.834, 152.755, 152.789, 152.773, 152.815, 152.796, 152.798, 152.754] print(p%.4f % scipy.stats.ttest_1samp(accs, 3.28, alternativeless).pvalue) # p0.0084 print(acc:, torch.std_mean(torch.tensor(accs))) # acc: (tensor(0.0011), tensor(3.2790)) print(time:, torch.std_mean(torch.tensor(times))) # time: (tensor(0.0269), tensor(152.7901))解读ttest_1samp(accs, 3.28, alternativeless)检验 10 次运行的验证损失均值是否显著小于 3.28 的假设阈值得到p0.0084在常规显著性水平下拒绝原假设即 smear 的改进在统计上可信10 次运行 loss 均值3.2790标准差 0.0011训练时间均值152.79 s标准差 0.027 s重复性良好。客观看待收益大小原文档特别提醒这一改进的边际收益比「-15 steps」的表象要小。前一个 WR 的平均损失为 3.2781若控制训练损失大致对齐后再比较smear 的实际贡献约为5 步的等价收益。换句话说-15 steps的计时改进中一部分来自本次运行恰好更快/损失略高因此评估此类提速技术时必须以「同 loss 下耗时」而非单纯「同步数下耗时」为准绳。为什么「前移一位」有效直觉与设计启示计算成本近零torch.cat加一次逐元素乘加远低于一次完整的因果注意力前向。把高频的「前 token 依赖」从注意力中抽走注意力层可以专注于更长的上下文模式。可学习的门控零初始化的smear_gate配合smear_lambda让模型自行决定涂抹强度12 维门控与注意力门控共享前 12 维信号使两者协调而不是互斥。首位保持不变序列首 token 没有前驱直接透传保证因果性不被破坏。总结Smear token embedding 是 modded-nanogpt「从模型权重反推结构改进」路线的一个典型案例先在已训练模型中发现多个注意力头的一致行为关注前 token再判断该行为用注意力实现是低效的最后以 12 维门控 一次向量加法在 embedding 层直接实现把注意力释放给更有价值的任务。它在 2025-09-18 当天把 track 1 的 WR 推进到约 152.7 秒最终验证损失 3.2796并作为稳定基元沿用至今。若想复现或实验该技术可直接参考本记录的训练脚本records/track_1_short/2025-09-18_Smear/18a1e5c7-947e-479d-bc3a-a57a61a98fc9.txt以及当前主线实现track_1_short/model/gpt.py与优化器接线track_1_short/training.py。赞分享人工智能大模型预训练分布式训练模型优化深度学习【免费下载链接】modded-nanogptNanoGPT (124M) in 90 seconds项目地址https://gitcode.com/GitHub_Trending/mo/modded-nanogpt点击查看免费下载相关推荐【限时免费】 Sa-Token 中 Cookie 与 Token 前缀的兼容性问题解析Sa Token 中 Cookie 与 Token 前缀的兼容性问题解析 问题背景 在使用 Sa Token 1.40.0 版本时开发者在配置了 Token后端认证鉴权vLLM-Omni Qwen2.5-Omni Embedding 微基准测试量化冗余文本 Embedding 移除的前后延迟收益vLLM Omni Qwen2.5 Omni Embedding 微基准测试量化冗余文本 Embedding 移除的前后延迟收益 Qwen2.5 Omni 是人工智能大模型模型推理服务多模态语音音频媒体生成本地部署draw.io 桌面版免费离线绘图上手指南3 种安装方式与 5 分钟导出第一张流程图draw.io 桌面版免费离线绘图上手指南3 种安装方式与 5 分钟导出第一张流程图 draw.io 桌面版是 draw.io 编辑器的官方 Electron桌面应用图形学上一篇Flutter 引擎工程 VSCode Workspace 的 YAML 化维护engine.code-workspace 生成与合并管线解析下一篇向量搜索引擎性能对比awesome-vector-search中的明星产品评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?