parameter-golf 16MB 赛道实践:MLP GPTQ 离群值裁剪重调(MLPClip12)如何在 int6 量化下再降 0.00096 BPB 【免费下载链接】parameter-golfTrain the smallest LM you can that fits in 16MB. Best model wins!项目地址https://gitcode.com/gh_mirrors/pa/parameter-golf点击查看免费下载本指南以 parameter-golf 仓库records/track_10min_16mb/2026-04-22_SP8192_CaseOps_GatedAttn_QuantGate_Loop45_PhasedTTT_MLPClip12这一提交为蓝本完整讲解其核心创新——MLP 权重的 GPTQ 逐行 σ 裁剪参数mlp_clip_sigmas从 10.0 重调至 12.0——如何在不改动架构、不触碰任何其他超参的前提下把 5-seed 平均 val_bpb 从基线的 1.06549 压到 1.06453。读完本文你将掌握int6 GPTQ 校准中裁剪宽度与量化网格之间的偏差/方差权衡、phased TTT 的 score-first 评估协议、Gated Attention 与 Quant Gate 的实现细节以及该提交完整的 5-seed 复现命令与数据准备流程。提交概览一个一行改动的量化再调优该提交的元信息位于 submission.json基线成绩为val_bpb 1.064535-seed 均值std 0.00068val_loss 2.32958 nats/tokenstd 0.00148Artifact 约 15.98 MB5 个种子全部低于 16,000,000 字节上限运行环境8×H100 80GB SXMPyTorch 2.9.1cu128训练 600s / 评估 600s 双预算Phased TTT与基线 PR #1736records/track_10min_16mb/2026-04-19_SP8192_CaseOps_GatedAttn_QuantGate_Loop45_PhasedTTT相比唯一的代码改动只有一行——train_gpt.py中mlp_clip_sigmas的默认值由 10.0 改为 12.0# Base submission: mlp_clip_sigmas10.0 (aggressive — clips MLP rows with large outlier columns) # This submission: mlp_clip_sigmas12.0 (preserves tail mass of MLP weight distribution) mlp_clip_sigmas float(os.environ.get(MLP_CLIP_SIGMAS, 12.0))对应源码位于 train_gpt.py。注意该行同时保留了MLP_CLIP_SIGMAS环境变量覆盖通道意味着无需改代码即可实验其他裁剪宽度。核心创新MLP GPTQ 离群值裁剪的偏差/方差权衡int6 量化网格的构造原理在gptq_mixed_quantizetrain_gpt.py中量化路径按张量名分派裁剪参数if tok_emb in name: cs h.embed_clip_sigmas elif .mlp. in name: cs h.mlp_clip_sigmas # ← 本次改动的落点 elif .attn. in name: cs h.attn_clip_sigmas else: cs h.matrix_clip_sigmas随后调用gptq_quantize_weighttrain_gpt.py完成逐行量化。其网格构建的关键一行是row_std W_orig.std(dim1) s (clip_sigmas * row_std / clip_range).clamp_min(1e-10).to(torch.float16)即每个权重行的量化步长s clip_sigmas × row_std / clip_range。clip_range 2^(bits-1) - 1在 int6 下为 31。因此clip_sigmas直接决定了均匀量化网格的覆盖范围——σ 裁剪越宽数值越大步长越大、网格越粗但能保留权重分布尾部的离群列。为什么 12.0 优于 10.0README 给出的机制解释是在MLP 4× 宽度、int6的设定下逐行 σ 裁剪是对权重分布尾部的偏差/方差权衡10σ激进裁剪网格更细、低幅度权重量化误差更小但会把训练后 MLP 权重中携带不成比例有效信号的离群列裁掉12σ宽松裁剪网格略粗但保留了尾部离群列——这些列在 4× 宽度 MLP 里恰恰承载了大部分有效信号。README 特别指出10σ 是在早期更窄 MLP、更浅模型的栈上标定的在 PR #1530 → PR #1626 → PR #1736 系列把模型迁移到11 层 / MLP 4× / Loop4-5几何结构后从未重新调过——这正是本次重调的动机。实验结果7-seed 与 5-seed 双重验证核心成绩表phased TTTSeedStepsPre-TTT BPBPost-TTT BPBTTT gainTTT timeArtifact (bytes)31448721.075911.06357-0.01234400.7s15,979,114202548691.076491.06413-0.01236394.7s15,977,20377748661.077011.06467-0.01234394.6s15,971,178148691.077501.06510-0.01240391.2s15,979,182133748641.077521.06517-0.01235390.2s15,971,129Mean48681.076881.06453-0.01236394.3s15,975,561Std0.000700.000684.2s4,101补充诊断表SeedPost-EMA BPB (pre-quant)Quantized BPB (no TTT)Post-TTT BPBval_loss (nats)Train timeEval time3141.066371.075911.063572.32748596.09s400.7s20251.067011.076491.064132.32871596.14s394.7s7771.067621.077011.064672.32989596.07s394.6s11.068071.077501.065102.33083596.06s391.2s13371.068021.077521.065172.33098596.06s390.2s解读诊断表把误差来源拆成了三段——Post-EMA未量化、Quantized量化后、无 TTT、Post-TTT量化 TTT 后。可以看到 pre-TTT 的量化后 BPB 1.07591–1.07752而 TTT 阶段贡献了约 -0.0124 BPB 的提升最终全部 5 个种子同时满足 600s 训练预算、600s 评估预算与 16,000,000 字节十进制 artifact 上限且 5-seed std 0.00068 BPB 远低于 0.005-nat 的显著性门槛。7-seed 完整披露README 还披露了额外的 9999、7 两个种子同train_gpt.py、MLP_CLIP_SIGMAS12.0Seedval_bpbval_loss3141.063572.3274820251.064132.328717771.064672.3298911.065102.3308313371.065172.3309899991.065342.3313671.065412.331507-seed 均值为 1.06477std 0.000695 个最低种子的均值为 1.06453。两种口径下都显著优于基线 PR #17363-seed 均值 1.06549差距 0.00096 BPB ≈ 0.00249 nats/token约为 sp8192 赛道 0.005-nat 记录门槛≈0.00194 BPB的 1.2 倍。相对基线的完整变更清单ComponentPR #1736 baseThis submissionTokenizerSP8192 CaseOpssameBPB accountingper-token byte sidecarsameAttention out-gatelearned scalar per head, init_std0.005sameAttention quant-gateenabledsameDepth recurrenceLoop4-5sameTTT3-phase SGD score-first on 2000-doc prefixsameMATRIX_CLIP_SIGMAS12.8512.85ATTN_CLIP_SIGMAS13.013.0EMBED_BITS77MLP_CLIP_SIGMAS10.012.0净效果5-seed 均值-0.00096 BPB / -0.00210 val_lossnats/token对比 PR #1736 的 1.06549 / 2.33168。架构基线与 PR #1736 完全一致ItemValuenum_layers11model_dim512num_heads / num_kv_heads8 / 4mlp_mult4.0rope_base / rope_dims10000 / 16logit_softcap30.0loop_start / loop_end3 / 5 (NUM_LOOPS2)parallel_start_layer8eval_seq_len / eval_stride2048 / 64matrix_bits / embed_bits6 / 7compressorbrotli关键组件源码走读Gated AttentionQwenNeurIPS 2025 Best PaperarXiv:2505.06708在CausalSelfAttention.forwardtrain_gpt.py中对 SDPA 输出、out_proj之前施加逐头 sigmoid 门if self.gated_attn: x_c x.contiguous() g torch.sigmoid(F.linear(x_c, self.attn_gate_w.to(x.dtype))) y y * g[..., None]门权重attn_gate_w形状为(num_heads, dim) (8, 512)以gated_attn_init_std0.005近零初始化源码默认 0.01本提交通过环境变量收紧初始 g≈0.5 会减半注意力输出由逐块的attn_scale初始 1.0在训练中补偿。参数名含attn_gate子串因此被CONTROL_TENSOR_NAME_PATTERNStrain_gpt.py路由到标量 AdamW 优化组。Quant Gateint8-per-row门张量只有 4096 个参数按numel65536原本会走 fp16 passthrough本提交通过GATED_ATTN_QUANT_GATE1将其导向专门的_quantize_gate_int8_rowtrain_gpt.py对称 int8 逐行量化row_max W.abs().amax(dim1).clamp_min(1e-10) s (row_max / 127.0).to(torch.float16) q torch.clamp(torch.round(W / sf), -127, 127).to(torch.int8)每头一个 fp16 scale共 8 个存储减半、BPB 影响可忽略且无需 Hessian门权重不在collect_hessians()中。分派逻辑在 train_gpt.py。Phased TTT 评估路径eval_val_ttt_phasedtrain_gpt.py首先用_find_docstrain_gpt.py按BOS_ID1切分文档然后取前PHASED_TTT_PREFIX_DOCS2000个文档、按PHASED_TTT_NUM_PHASES3划分阶段边界。每个 chunk 先以当前 LoRA 前向打分forward_ttt_train在torch.no_grad()下累加 loss/byte/token 计数然后才对 chunk 内 token 做 LoRA SGD 更新needs_train分支train_gpt.py。每到达一个阶段边界就暂停并调用train_val_ttt_global_sgd_distributedtrain_gpt.py对已打分文档做全局 SGD 微调cosine 退火学习率、跨 rank all-reduce 梯度平均随后重置可复用 LoRAreusable_lora.reset()防止跨文档泄漏。BPB 字节预算启用CASEOPS_ENABLED1时评估用fineweb_val_bytes_*.bin逐 token 字节 sidecar 作为权威原始字节预算train_gpt.py最终由_loss_bpb_from_sumstrain_gpt.py按val_bpb val_loss / ln(2) × (token_count / byte_sum)计算。规则合规性检查该提交逐条通过了竞赛规则验证Artifact ≤ 16,000,000 字节十进制5 个种子全部 ≤ 15,979,182 字节约 21 KB 余量train_time ≤ 600s全部 596.06–596.14sstopping_early: wallclock_cap触发见 train_gpt.pytotal_eval_time ≤ 600s全部 390.2–400.7sIssue #1017 因果依赖phased TTT 在每个 chunk 打分之后才更新逐文档 LoRA任何位置 t 的预测都不依赖 y_t 或 t 的位置Issue #1017 完整归一化分布每个位置都在完整 8192-token softmax 上计算 CE无 x_t 相关的 Σ 截断Issue #1017 score-before-updateTTT 路径快照更新前的逐 chunk logits 并在 adapter SGD 之前打分reusable_lora.reset()防止跨文档泄漏Issue #1017 单次从左到右扫描评估以滑动 stride 64 做单遍左到右推理无 rescore/selectionSection V 字节级 BPB基于变换前原始 UTF-8 字节打分无硬编码 bytes/token训练不接触验证数据训练仅用fineweb_train_*.binTTT prefix前 2000 个 val 文档与基线 PR #1736 使用同一切片并遵循 score-first 协议CaseOps 双射性decode_lossless_caps_v2(encode_lossless_caps_v2(x)) x对所有测试串成立可在 lossless_caps.py 中验证评估期间无外部网络tokenizer 变换 CaseOps SentencePiece 模型随文件夹自带可复现性相对 PR #1736 的唯一代码改动即那行默认值除 MLP_CLIP_SIGMAS 变为隐式默认外Run Command 的环境变量覆盖与基线完全一致。环境依赖与一次性数据准备安装要求# Python 3.12 required (minified f-strings use PEP 701 nested same-type quotes). pip install torch --index-url https://download.pytorch.org/whl/cu128 pip install flash-attn-interface sentencepiece triton numpy注意 Python ≥ 3.12 的硬性要求来自 PEP 701 嵌套同类型引号在压缩 f-string 中的使用。数据构建只需运行一次提交自带训练好的 CaseOps SentencePiece 模型tokenizers/fineweb_8192_bpe_lossless_caps_caseops_v1_reserved.model与双射变换模块lossless_caps.py。训练/验证 shard 与字节 sidecar 从规范 FineWeb-10B 文档流重建# 1. 确保 docs_selected.jsonl 存在仓库标准设置步骤。 python3 ../../data/download_hf_docs_and_tokenize.py # 或指向已有文件 # 2. 构建 CaseOps 变换后的 shard val 字节 sidecar。 python3 prepare_caseops_data.py \ --docs ./fineweb10B_raw/docs_selected.jsonl \ --out ./data/datasets/fineweb10B_sp8192_caseops/datasets \ --sp ./tokenizers/fineweb_8192_bpe_lossless_caps_caseops_v1_reserved.model输出布局CASEOPS_ENABLED1时train_gpt.py期望的目录结构data/datasets/fineweb10B_sp8192_caseops/datasets/ tokenizers/fineweb_8192_bpe_lossless_caps_caseops_v1_reserved.model datasets/fineweb10B_sp8192_lossless_caps_caseops_v1_reserved/ fineweb_train_000000.bin ... fineweb_val_000000.bin fineweb_val_bytes_000000.bin复现健全性检查步骤 2 之后每个 shard 的每个文档开头必须包含BOS_ID1——train_gpt.py的 phased TTT 评估路径_find_docs依赖它。快速检查第一个 val shardpython3 -c import numpy as np d np.fromfile(data/datasets/fineweb10B_sp8192_caseops/datasets/datasets/fineweb10B_sp8192_lossless_caps_caseops_v1_reserved/fineweb_val_000000.bin, dtypenp.uint16) # First 256 uint16 slots are the shard header; tokens start after. tokens d[512:] bos_count int((tokens 1).sum()) print(fBOS markers in val shard: {bos_count} (must be 0)) assert bos_count 0, prepare_caseops_data.py is broken — re-run with BOS prepend 如果bos_count 0说明 prep 脚本过期——需要从本文件夹拉取最新 prepare_caseops_data.pySP tokenizer 为特殊 token CaseOps 算子保留 ID 0–7prep 脚本必须显式给每个文档前插BOS_ID1评估路径_find_docs对缺失 BOS 标记没有回退。5-seed 复现运行命令for SEED in 314 2025 777 1 1337; do NCCL_NETSocket \ DATA_DIR./data \ CASEOPS_ENABLED1 \ PHASED_TTT_PREFIX_DOCS2000 PHASED_TTT_NUM_PHASES3 \ MATRIX_CLIP_SIGMAS12.85 ATTN_CLIP_SIGMAS13.0 \ EMBED_BITS7 EMBED_CLIP_SIGMAS15.0 \ MATRIX_LR0.026 \ GPTQ_RESERVE_SECONDS4 GPTQ_CALIBRATION_BATCHES16 \ GATED_ATTN_ENABLED1 GATED_ATTN_INIT_STD0.005 GATED_ATTN_QUANT_GATE1 \ SEED$SEED \ torchrun --standalone --nproc_per_node8 train_gpt.py \ train_seed${SEED}.log 21 done注意MLP_CLIP_SIGMAS不在环境中设置——它取train_gpt.py里的新默认值 12.0。GPTQ_RESERVE_SECONDS4意味着训练主循环会预留 4 秒给 GPTQ 校准见 train_gpt.pyGATED_ATTN_INIT_STD0.005覆盖源码默认 0.01。日志会打印全部超参与mlp_clip_sigmas: 12.0可在train_seed*.log第 57 行确认。技术谱系与演进脉络该提交是 modded-nanogpt 系实验栈的连续迭代产物PR #549— 原始 modded-nanogpt 栈Keller JordanPR #1019merged— 字节级 BPB SentencePiece 记账piece.encodePR #1394merged— SP8192 多阶段 score-first TTT 基线PR #1530— Loop4-5 深度循环 parallel residual 起始层 8samacquaPR #1626已提交— GPTQ 修剪 多阶段 SGD 自适应裁剪PR #1736已提交— CaseOps gated attention quant-gate phased TTT本提交的基线本次提交— MLP GPTQ 离群值裁剪的一行重调10.0 → 12.0。包含文件清单train_gpt.py— 训练脚本131,887 字节相对 PR #1736 仅一行默认值差异submission.json— 元数据5-seed 结果 7-seed 披露README.md— 本说明文档train_seed314.log/train_seed2025.log/train_seed777.log/train_seed1.log/train_seed1337.log— 5-seed 运行日志tokenizers/fineweb_8192_bpe_lossless_caps_caseops_v1_reserved.model— CaseOps SentencePiece 模型366.5 KBlossless_caps.py— 双射 CaseOps 变换prepare_caseops_data.py使用prepare_caseops_data.py— 一次性数据准备通过 CaseOps 对 FineWeb 分词并输出逐 token 字节 sidecar。实践要点总结在 int6 均匀量化网格中clip_sigmas不是越大越好也不是越小越好——它是量化精度与离群值保留之间的连续权衡且最优值会随模型几何层数、MLP 宽度、深度循环结构漂移。当架构栈发生重大变化后重新标定每个权重组embed / MLP / attn / matrix的裁剪宽度可能是比堆叠新模块更划算的免费收益。赞分享【免费下载链接】parameter-golfTrain the smallest LM you can that fits in 16MB. Best model wins!项目地址https://gitcode.com/gh_mirrors/pa/parameter-golf点击查看免费下载相关推荐parameter-golf 记录拆解Int6 量化 ×3 倍 MLP × SmearGate 的 16MB 极限压缩语言模型val_bpb 1.1458parameter golf 记录拆解Int6 量化 ×3 倍 MLP × SmearGate 的 16MB 极限压缩语言模型val_bpb 1.1458Parameter Golf 实战10L Int5-MLP BigramHash(10240) SWA(0.4) 如何在 16MB 内逼近 1.14 val_bpbParameter Golf 实战10L Int5 MLP BigramHash 10240 SWA 0.4 如何在 16MB 内逼近 1.14 vaparameter-golf 16MB 赛道记录解析Parallel Residuals 与 Mini Depth Recurrence 以 1.1063 BPB 刷新 SOTAparameter golf 16MB 赛道记录解析Parallel Residuals 与 Mini Depth Recurrence 以 1.1063 B上一篇如何利用KLayout实现高效版图自动化验证面向芯片设计新手的完整指南下一篇Agency Agents 接入 ZCode从 Markdown Agent 文件生成到 ~/.zcode/agents 安装全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考