openai/parameter-golf

GitHub: openai/parameter-golf

OpenAI Parameter Golf 是一个在 16MB 参数量约束下训练最优语言模型的研究挑战,旨在推动极致压缩与高效训练技术。

Stars: 4838 | Forks: 3192

1920x640-discord

**OpenAI Model Craft Challenge: Parameter Golf** 是一个挑战,旨在训练一个适合 16MB 工件并在 8 块 H100 上训练时间少于 10 分钟的最佳语言模型,评估标准是在 FineWeb 验证集上进行压缩(与分词器无关,按字节压缩)。 这个挑战深受 [NanoGPT Speedrunning](https://github.com/KellerJordan/modded-nanogpt) 挑战的启发,参与者竞相训练一个尽快达到 3.28 FineWeb 验证损失的模型。我们很兴奋看到针对参数受限设置的优化如何推动人们走向独特的架构(测试时计算、激进的参数绑定、深度递归、低秩训练……)、压缩方案(低精度、QAT、BitNet、新颖的分词器……)以及其他富有创意的提交(测试时训练、长上下文、Megakernels ……)。 如果你熟悉 [神经缩放定律](https://arxiv.org/abs/2001.08361),你可以将这个挑战视为一种 L(N) 优化,目标是在不限制数据、计算、步数或架构的情况下优化最低损失。像 [NanoGPT Speedrun](https://github.com/KellerJordan/modded-nanogpt)(优化 L(T),即在给定损失下最短时间)或 [NanoGPT Slowrun](https://github.com/qlabs-eng/slowrun)(优化 L(D),即在给定数据集大小下最低损失)这样的挑战,可以被视为该系列中等效的挑战。 理想情况下,我们允许提交使用任意计算资源。但为了让挑战不至于昂贵到无法访问,我们限制 **排行榜提交** 在 8 块 H100 上运行 10 分钟。然而,我们仍然非常乐意看到那些不符合计算限制要求的提交,地点在我们的“非记录提交”部分:我们很兴奋看到人们推动参数受限性能的无穷边界。 我们也知道计算成本高昂,因此 **OpenAI 赞助 1,000,000 美元的计算积分**,帮助人们开始训练他们的模型。要申请计算积分,请使用此表单:[申请计算积分](https://openai.com/index/parameter-golf/#credit-form)。 申请计算资源时,请确保选择适当的级别,撰写充分的理由说明,并**使用与 OpenAI / ChatGPT 账户绑定的电子邮件提交**。 ## 参与者表单 如果你喜欢解决非常困难的技术问题,请通过 [挑战参与者表单](https://jobs.ashbyhq.com/openai/form/open-ai-challenge-parameter-golf) 介绍自己。这有助于我们确认挑战提交并联系 OpenAI 的相关机会。**完成表单并非参与的必要条件。** OpenAI 的许多研究人员最初都是通过精英数学和编程竞赛脱颖而出的。Model Craft 挑战也秉承这一精神:测试用创造性和严谨性应对陌生问题的能力,我们认为这些能力是前沿 AI 研究必不可少的。 今年六月,我们计划招聘一批早期职业研究员,目标是在校本科生和应届毕业生,包括奥林匹克奖牌得主和顶尖竞争者。对于表现突出的参与者,该挑战也可能成为向 OpenAI 研究员和招聘人员脱颖而出的途径。 挑战从 3 月 18 日持续到 4 月 30 日。 训练愉快! ## 排行榜 | 运行 | 分数 | 作者 | 摘要 | 日期 | 信息 | |-----|------:|--------|---------|------|------| | SP8192 + 3-Layer Recurrence + Parallel Residuals + Legal TTT | 1.0810 | bigbag | 关于 PR #1493:3 层递归、并行残差、QK-Gain 5.25,以及 PR #1394 栈上的合法分数优先 TTT | 2026-04-09 | [info](records/track_10min_16mb/2026-04-09_SP8192_3LayerRecur_ParResid_QK525_LegalTTT/README.md) | | SP8192 + Parallel Residuals + Score-First TTT | 1.0822 | aryanbhosale | 关于 PR #1477:在 PR #1413 的 SP8192 + 合法分数优先 TTT 栈上使用并行残差 | 2026-04-08 | [info](records/track_10min_16mb/2026-04-08_SP8192_ParallelResid_ScoreFirstTTT/README.md) | | SP8192 + QK-Gain 5 + Legal Score-First TTT | 1.0828 | dexhunter | 关于 PR #1413:QK-Gain 5.0 + 合法分数优先 TTT,在 PR #1394 的 SP8192 栈上 | 2026-04-06 | [info](records/track_10min_16mb/2026-04-06_SP8192_QK5_LegalTTT_1.0828/README.md) | | SP8192 + Parallel Residuals + Hessian-Aware SDClip | 1.0835 | Robby Sneiderman | 关于 PR #1412:并行残差、Hessian-Aware SDClip 和 PR #1394 栈上的渐进式递归 | 2026-04-06 | [info](records/track_10min_16mb/2026-04-06_SP8192_HessianSDClip_ProgressiveRecurrence/README.md) | | SP8192 + GPTQ Embeddings + Depth Recurrence + SDClip | 1.0856 | Kevin Clark | 关于 PR #1394:SP8192、GPTQ 嵌入、4-5 层循环、MuonEq-R 和基于标准差的 GPTQ 裁剪 | 2026-04-05 | [info](records/track_10min_16mb/2026-04-05_SP8192_GPTQ-Embeddings_SDClip_Loop45x2/README.md) | | SP4096 + Depth Recurrence + Parallel Residuals + MuonEq-R | 1.0897 | aryanbhosale | 关于 PR #1334:SP4096 + 深度递归 + 并行残差 + MuonEq-R + QK-Gain 5.0 | 2026-04-04 | [info](records/track_10min_16mb/2026-04-04_SP4096_DepthRecurrence_ParallelResid_MuonEqR/README.md) | | MuonEq-R + Depth Recurrence + WD=0.090 + All-Int6 GPTQ | 1.0912 | dexhunter | 关于 PR #1285:MuonEq-R + 4-5 层递归 + 更高权重衰减 + 全 Int6 GPTQ | 2026-04-03 | [info](records/track_10min_16mb/2026-04-03_MuonEqR_DepthRecurrence_WD090_AllInt6/README.md) | | 4096-Vocab + Larger Model + High WD + Simplifications | 1.0979 | Kevin Clark | 关于 PR #1218:SP4096 + 4 倍 MLP + 高权重衰减,配合 TTT、Hash 嵌入、SmearGate 和移除 Value 残差 | 2026-04-01 | [info](records/track_10min_16mb/2026-04-01_Vocab4096_MLPMult4_WD085/README.md) | | Parallel Residuals + Mini Depth Recurrence | 1.1063 | Marko Sisovic | 关于 PR #1204:4-5 层迷你递归 + 并行注意力/MLP 残差通道 + AR 自生成 GPTQ 校准 | 2026-03-31 | [info](records/track_10min_16mb/2026-03-31_ParallelResiduals_MiniDepthRecurrence/README.md) | | 11L AR Self-Gen GPTQ + XSA | 1.1147 | abaybektursun | 关于 PR #1019:自生成 GPTQ 校准数据 + 所有层级的 XSA,在 PR #549 栈上 | 2026-03-25 | [info](records/track_10min_16mb/2026-03-25_ValCalib_GPTQ_XSA_BigramHash3072/README.md) | | LeakyReLU² + Legal Score-First TTT + Parallel Muon | 1.1194 | abaybektursun | 关于 PR #549:LeakyReLU(0.5)² + TTT + 并行 Muon | 2026-03-23 | [info](records/track_10min_16mb/2026-03-23_LeakyReLU_LegalTTT_ParallelMuon/README.md) | | 11L EMA + GPTQ-lite + warmdown3500 | 1.1228 | signalrush | 关于 PR #374:GPTQ-lite 裁剪搜索 + EMA,加上 warmdown3500 和 QAT@0.15 | 2026-03-22 | [info](records/track_10min_16mb/2026-03-22_11L_EMA_GPTQ-lite_warmdown3500_QAT015_1.1233/README.md) | | 11L Partial RoPE + LN Scale + EMA + XSA4 | 1.1248 | jfprincz | 关于 PR #287:Partial RoPE (16/64) + 层归一化尺度 | 2026-03-21 | [info](records/track_10min_16mb/2026-03-21_11L_XSA4_EMA_PartialRoPE_LateQAT_1.1248/README.md) | | 11L XSA4 + EMA + Int6 MLP3x | 1.1271 | jfprincz | 关于 PR #198:最后 4 层的 XSA + EMA 替代 SWA | 2026-03-20 | [info](records/track_10min_16mb/2026-03-20_11L_XSA4_EMA_Int6_MLP3x_WD04_1.1271/README.md) || 11L Efficient Partial XSA | 1.1307 | unnir | 关于 PR #198:最深 3 层的高效 Partial XSA | 2026-03-20 | [info](records/track_10min_16mb/2026-03-20_11L_EfficientPartialXSA_FA3_SWA120/README.md) | | 10L Int5-MLP + BigramHash(10240) | 1.1428 | thwu1 | 10 层,混合 int5/int6 量化,BigramHash(10240),SWA(0.4),WD=0.04 | 2026-03-20 | [info](records/track_10min_16mb/2026-03-20_10L_Int5MLP_MuonWD04_SWA50/README.md) | | Int6 MLP3x + SmearGate + BigramHash | 1.1458 | Raahil Shah | 3 倍 MLP + SmearGate + BigramHash + OrthoInit + Muon WD + SWA | 2026-03-20 | [info](records/track_10min_16mb/2026-03-20_Int6_MLP3x_SmearGate_BigramHash_MuonWD_SWA/README.md) | | 11L MLP3x + Int6 QAT | 1.1502 | aruniyer | 11 层,3 倍 MLP,int6 QAT,zstd-22,WD=0.04,滑动评估 | 2026-03-20 | [info](records/track_10min_16mb/2026-03-19_MLP3x_QAT_Int6_SlidingWindow/README.md) | | SmearGate + OrthoInit + Muon WD | 1.1556 | aquariouseworkman | SmearGate + BigramHash + 3 倍 MLP + int6 STE QAT + 滑动评估 | 2026-03-19 | [info](records/track_10min_16mb/2026-03-19_smeargate_orthoinit_muonwd/README.md) | | Ternary Quantization | 1.1570 | Ciprian-Florin Ifrim | 73.7M 参数量化为 1 0 -1 及其他架构变更 | 2026-03-24 | [info](records/track_10min_16mb/2026-03-24_74M_Ternary_UNet_FP8_10L_8192BPE_YaRN_NeoMuon/README.md) | | 10L Int6 QAT + Zstd MLP2.6x | 1.1586 | yahya010 | 10 层,int6 QAT + zstd-22,MLP 1344,Muon 0.99,滑动评估 | 2026-03-19 | [info](records/track_10min_16mb/2026-03-19_Seq2048_FP16Emb_TunedLR/README.md) | | Mixed Quant + Sliding Window Eval | 1.1630 | aquariouseworkman | Int6 块权重 + int8 嵌入 + 3 倍 MLP + 滑动评估 | 2026-03-19 | [info](records/track_10min_16mb/2026-03-19_MixedQuant_Int6Int8_SlidingWindow/README.md) | | Muon WD + 10 layer | 1.1748 | notapplica | 包含之前的获胜结果 + 谱嵌入初始化 + 残差混合 | 2026-03-19 | [info](records/track_10min_16mb/2026-03-19_SlidingWindow_FP16Emb_10L_MuonWD_OvertoneInit/README.md) | | Sliding Window Eval | 1.1925 | Matthew Li | 滑动窗口评估,步长=64,增加评估上下文 | 2026-03-19 | [info](records/track_10min_16mb/2026-03-19_SlidingWindowEval/README.md) | | Lora TTT | 1.1928 | samacqua | 测试时训练使用 LORA | 2026-03-19 | [info](records/track_10min_16mb/2026-03-17_LoRA_TTT/README.md) | | 4k seq length| 1.2014 | Spokane Way | 4k 序列长度 + 更优超参数 | 2026-03-19 | [info](records/track_10min_16mb/2026-03-19_TrainingOptSeq4096/README.md) | | 2048 seq length | 1.206 | Spokane Way | 2048 序列长度(训练 + 验证) | 2026-03-18 | [info](records/track_10min_16mb/2026-03-18_LongContextSeq2048/README.md) | | int6 mixed precision | 1.2147 | Nan Liu | 10 层,混合 int8/int6 | 2026-03-18 | [info](records/track_10min_16mb/2026-03-19_10L_MixedPrecision/README.md) | | fp16 Embed | 1.2197 | Renier Velazco | FP16 绑定嵌入 + 学习率/warmup 调整 | 2026-03-18 | [info](records/track_10min_16mb/2026-03-18_FP16Embed_WD3600/README.md) | | Naive Baseline | 1.2244 | Baseline | 9 层 512 维 1024 词表 绑定嵌入 4 个 KV 头 | 2026-03-18 | [info](records/track_10min_16mb/2026-03-17_NaiveBaseline/README.md) | #### 无限制计算排行榜与非记录提交 | 运行 | 分数 | 作者 | 摘要 | 日期 | 信息 | |-----|------:|--------|---------|------|------| | 1 Bit Quantization | 1.1239 | Ciprian-Florin Ifrim | 106M 参数量化为 1 位 + 其他架构变更 + 2 小时训练 | 2026-03-24 | [info](records/track_non_record_16mb/2026-03-24_106M_Binary_Asymmetric_UNet_FP8_15L_8192BPE_YaRN_NeoMuon_Smear/README.md) | | 4-Hour Baseline | 1.2074 | Will DePue | 测试无限制计算,8 块 H100 上运行 4 小时 | 2026-03-18 | [info](records/track_non_record_16mb/2026-03-18_Quasi10Bfrom50B_SP1024_9x512_KV4_4h_pgut3/README.md) | #### 提交请求 突破性的想法很少能立即达到最先进水平,而是需要逐步发展,先展示迹象,再迭代,最后在系统层面进行优化。如果一个新算法没有立刻超越排行榜的最佳成绩或甚至没有超过朴素基线,不要气馁。如果你相信你的想法,请考虑在早期忽略耗时步骤:一旦你证明你可以在相同的训练步数内击败基线,你就可以开始专注于如何让它更快。 我们很乐意看到挑战中各种奇思妙想和创意的想法,因为你永远不知道什么最终会起作用。这些提交很可能非常适合我们的无限制计算排行榜的非记录部分。我们希望看到人们实现的一些请求: - [x] 1-bit 量化 - [实现](records/track_non_record_16mb/2026-03-24_106M_Binary_Asymmetric_UNet_FP8_15L_8192BPE_YaRN_NeoMuon_Smear/README.md) - [x] 三值量化 - [实现](records/track_10min_16mb/2026-03-24_74M_Ternary_UNet_FP8_10L_8192BPE_YaRN_NeoMuon/README.md) - [ ] JEPA - [ ] 文本扩散 - [ ] H-net 分词 - [ ] 通用变换器 - [我们有很多深度递归提交,但我希望看到一个 4 小时的] - [ ] Megakernels - [ ] 状态空间模型、端到端 TTT、超长上下文用于评估或训练 - [ ] 在随机线性映射上学习适配器 ## 开始使用 ### 在搭载 Apple Silicon 的 Mac 上训练第一个模型 如果你有一台搭载 Apple Silicon 的笔记本电脑或台式机,我们已设置了一个简单的 MLX 训练脚本,帮助你在本地开始迭代。 如果你没有搭载 Apple Silicon 的 Mac,可以运行一个适配版本(无需 MLX 支持)。请让 [Codex](https://openai.com/codex/) 重构它;改动非常直接。它可能仍然比较慢,因此我们建议直接跳转到云 GPU 上的 Runpod。 首先,克隆仓库,创建一个全新的 Python 环境,并安装 MLX 路径所需的数据包和数据集下载依赖: ``` git clone https://github.com/openai/parameter-golf.git cd parameter-golf python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip pip install mlx numpy sentencepiece huggingface-hub datasets tqdm ``` 下载 FineWeb 的缓存版本(包含 1024 词表的词汇): ``` python3 data/cached_challenge_fineweb.py --variant sp1024 --train-shards 10 ``` 这将填充 `./data/datasets/fineweb10B_sp1024/` 和 `./data/tokenizers/` 目录。 默认情况下,这会下载完整验证集加上 80 个训练分片(8B 个标记)。如需更小的本地测试子集,请传递 `--train-shards 1`,例如:`python3 data/cached_challenge_fineweb.py --variant sp1024 --train-shards 1`。 然后运行一个小的 MLX 训练任务: ``` RUN_ID=mlx_smoke \ ITERATIONS=200 \ TRAIN_BATCH_TOKENS=8192 \ VAL_LOSS_EVERY=0 \ VAL_BATCH_SIZE=8192 \ python3 train_gpt_mlx.py ``` 验证始终在整个 `fineweb_val_*` 分割上进行,这是固定的 5 万个文档集合。上述烟雾命令会跳过周期性验证,仅在最后打印一次 `val_loss` 和 `val_bpb`。 ### 扩展到远程机器 一旦你对本地测试感到满意,或需要更多计算资源,请切换到远程 CUDA 机器。 你可以从任何地方租用 GPU,但 OpenAI 正在与 Runpod 合作,让设置尽可能简单。 #### 1 块 H100 Pod 1. 首先,[创建一个 Runpod 账户](https://console.runpod.io/deploy)。你还应在左侧设置的“SSH 密钥”标签中设置 SSH 密钥,以便连接到远程机器。如果你是新手,可以请 Codex 帮你设置。 2. 设置好账户后,创建一个新的 GPU 云 Pod。你可以选择任何你喜欢的 GPU SKU。最终排行榜提交必须在 8 块 H100(特别是 SXM 变体)上运行时间少于 10 分钟,但我们强烈建议先在更便宜的 SKU 上测试和运行实验,因为 8 块 H100 节点的成本大约为每小时 20 美元。 3. 从这里开始,使用官方 Parameter Golf 模板启动:[启动模板](https://console.runpod.io/deploy?template=y5cejece4j&ref=nl2r56th)。启用 SSH 终端访问,其他设置保持默认。部署你的 Pod,并在启动后通过 SSH 连接。你应该会进入 `/workspace/` 目录。 在远程机器上克隆仓库到本地磁盘。所有 Python 依赖项已在镜像中预先安装。 ``` cd /workspace git clone https://github.com/openai/parameter-golf.git cd parameter-golf ``` 下载 FineWeb 的缓存版本。我们目前先使用 1024 词表。 ``` python3 data/cached_challenge_fineweb.py --variant sp1024 ``` 这默认会下载完整验证集加上 80 个训练分片(8B 个标记)。如需更小的迭代子集,请传递 `--train-shards N`,例如 `--train-shards 1`。 启动你的第一个训练运行。请注意,我们传递了 `nproc_per_node=1`,因为我们在这个例子中只使用一块 H100 GPU。 ``` RUN_ID=baseline_sp1024 \ DATA_PATH=./data/datasets/fineweb10B_sp1024/ \ TOKENIZER_PATH=./data/tokenizers/fineweb_1024_bpe.model \ VOCAB_SIZE=1024 \ torchrun --standalone --nproc_per_node=1 train_gpt.py ``` 默认情况下,`train_gpt.py` 会保持大约 10 分钟的墙钟时间上限。如果需要更长的运行,请明确覆盖,例如 `MAX_WALLCLOCK_SECONDS=0`。 默认情况下,此命令在训练期间打印 `train_loss` 日志,并在最后打印 `val_loss`、`val_bpb` 和压缩后的模型大小(以 `final_int8_zlib_roundtrip` 结尾)。如果你希望在运行期间周期性记录验证日志,请设置 `VAL_LOSS_EVERY`,例如 `VAL_LOSS_EVERY=200`。对于基准配置,最终的 `val_bpb` 应接近 ~1.2,且压缩后的模型大小应小于 16MB。 有关数据集导出、词表导出和文档缓存重建的说明,请参见 [data/README.md](data/README.md)。 评估将在 RunPod 环境中进行,所有软件包均已安装。`requirements.txt` 提供了参考,如果你希望自行设置。 ## 常见问题 **什么会计入 16MB 工件大小?** 提交工件按代码字节数加上压缩后的模型字节数计算。所有计入的代码应位于 `train_gpt.py` 脚本中。 上限是十进制的 16MB,即总共 16,000,000 字节,而不是 16 MiB / 16,777,216 字节。 评估期间不允许外部下载、训练数据集访问或网络调用。工件必须完全自包含且可重现。 **分数是否由 OpenAI 独立验证?** 我们不会自动验证每个提交,但会随时间验证排行榜前列的条目。任何不可重现的结果都可能被取消资格。如果你在重现提交时遇到问题,请在 PR 中提出问题。如果发现排行榜上的记录存在问题或无法重现,请告知我们并附上详细说明的 GitHub Issue。 **什么算作“外部计算”?例如,离线调整超参数是否公平?** 这里没有绝对清晰的答案,也很难划出一条明确的界限。目前,我们保留取消不符合挑战精神提交的权利。调整 Adam 超参数进行多次运行是可以的,但如果有证据表明你通过不公平手段(如暴力搜索大量种子)获取额外计算,我们将不允许这样做。请运用最佳判断,提出问题不会有任何惩罚。 **评估有哪些限制?** 我们不会接受评估时间超过 10 分钟的提交(注意:这是在允许的 10 分钟训练时间之外的!),但其他方面你可以自由评估。与 modded-nanogpt 一样,我们允许以任何序列长度进行评估。此外,显然你不允许在评估期间访问任何训练数据,除非你为这些 bits 支付费用且不超过 16MB 的限制。我们鼓励参赛者以与训练方法一样激进的方式推动评估方法的边界。训练期间**不能**访问验证数据,例如通过将验证数据压缩进 16MB 的“付费前缀”来作弊。 如果还不够明显:你不能在测试损失上作弊。你不能在评估验证集之前先训练在验证集上。验证语言围绕测试时训练曾让人困惑:只允许测试时训练你已经评估过的验证集标记,因为这些标记已经被评分! **接受新提交的流程是什么?** 由于所有提交都是公开的,我们根据 PR 创建时间按顺序接受记录提交。排行榜更新可能需要时间,因为提交需要经过验证和审查,因此在提交时请考虑当前的 SOTA PR。如果提交要在排行榜上超越现有 SOTA,需要以足够的统计显著性(p < 0.01)提供足够的运行日志来证明 0.005 纳特(nats)的改进。对于仅通过系统优化提升速度而不改变 ML 的提交,此要求被豁免。否则,提交可以作为“非记录提交”接受,前提是它们足够独特或有趣。 我们还接受不限计算时间的非记录提交,用于那些不打算满足 10 分钟截止时间的运行。只需在 README 文件中注明即可。 #### 核心代码的 PR `train_gpt.py` 和 `train_gpt_mlx.py` 脚本旨在作为新参与者的良好起点,而非 SOTA 配置。我们会接受不显著增加复杂性的调优、改进或简化这些脚本的 PR,但最佳模型应保留在 `/records` 文件夹中。 ## 支持 加入 [OpenAI Discord 服务器](https://discord.com/invite/openai),并访问 Parameter Golf 频道(#parameter-golf-discussions、#parameter-golf-announcements)提问。 本仓库的代码改编自 `modded-nanogpt`,请参见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) 获取归属信息。
标签:10分钟训练, 16MB 模型, 8xH100, BitNet, FineWeb, Leaderboard, Megakernel, NanoGPT Speedrun, QAT, Tokenizer, 低比特量化, 低秩训练, 低精度训练, 凭据扫描, 压缩评估, 参数优化, 参数共享, 参数约束, 参数高尔夫, 小模型, 开源竞赛, 快速训练, 挑战赛, 模型压缩, 模型瘦身, 模型蒸馏, 测试时计算, 测试时训练, 深度循环, 知识蒸馏, 神经缩放定律, 语言模型, 边缘推理, 逆向工具, 长上下文, 高效推理