From eff0e4c942d1c540925a17e95678a6cf0a799b6d Mon Sep 17 00:00:00 2001 From: wuyang <5700876+banisherwy@user.noreply.gitee.com> Date: Wed, 29 Jul 2026 02:17:31 +0800 Subject: [PATCH] feat: publish scaling laws chapter --- PROGRESS.md | 23 +- README.md | 4 +- package.json | 3 +- scripts/check-moe-browser.mjs | 2 +- scripts/check-reasoning-browser.mjs | 2 +- scripts/check-scaling-browser.mjs | 286 +++ scripts/check-training-systems-browser.mjs | 2 +- src/components/ScalingLawsLab.astro | 1551 ++++++++++++++ src/components/SiteHeader.astro | 1 + src/data/chapters.ts | 10 +- src/data/papers.ts | 128 ++ src/pages/index.astro | 29 +- src/pages/moe/index.astro | 2 +- src/pages/progress/index.astro | 22 +- src/pages/reasoning/index.astro | 2 +- src/pages/scaling/index.astro | 2192 ++++++++++++++++++++ src/styles/global.css | 2 +- 17 files changed, 4228 insertions(+), 33 deletions(-) create mode 100644 scripts/check-scaling-browser.mjs create mode 100644 src/components/ScalingLawsLab.astro create mode 100644 src/pages/scaling/index.astro diff --git a/PROGRESS.md b/PROGRESS.md index 5fd7b51..cfa99f2 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -6,17 +6,17 @@ | 工作流 | 状态 | 完成度 | 下一检查点 | |---|---:|---:|---| -| 研究框架与规范 | 进行中 | 83% | 完成 Scaling Laws 逐篇图表/实验精读 | +| 研究框架与规范 | 进行中 | 83% | Scaling Laws 二轮拟合复现与逐图精读 | | 网站设计系统 | 进行中 | 89% | 打印样式与更多通用可视化组件 | -| Kimi K3 深读 | 进行中 | 64% | 扩写 scaling / pre-training / infra 逐图笔记 | +| Kimi K3 深读 | 进行中 | 66% | 扩写 pre-training / infra 逐图笔记 | | Transformer 基础 | 进行中 | 52% | 矩阵形状动画与手算练习 | -| Scaling Laws | 研究中 | 31% | 逐篇图表精读、拟合复现与四页签实验 | +| Scaling Laws | 完成首版 | 74% | 真实拟合复现、置信区间与更多模型族对照 | | DeepSeek 专题 | 进行中 | 71% | 补 R1 / DAPO 的逐图训练轨迹与复现对照 | | 推理与测试时扩展 | 完成首版 | 76% | 真实模型采样曲线、PRM 案例与逐篇图表精读 | | 稀疏计算与 MoE | 完成首版 | 74% | 真实负载 traces 与专家特化案例 | | 长上下文专题 | 完成首版 | 72% | 真实模型配置、内核细节与失败案例 | | 大规模训练系统 | 完成首版 | 71% | 真实集群 traces、故障案例与精确 topology 配置 | -| 引用与事实检查 | 进行中 | 55% | Scaling Laws 数字、版本与外推边界复核 | +| 引用与事实检查 | 进行中 | 57% | 自动化外链复查与来源等级扩展 | | 开源仓库 | 已完成首版 | 100% | 持续提交研究与网站迭代 | | k1412 部署 | 已完成首版 | 100% | 每轮发布保留不可变镜像与回滚点 | @@ -29,10 +29,10 @@ - [x] 提炼参考网站的编辑设计语言。 - [x] 确认 `git.k1412.top` 为 Gitea/Forgejo 兼容服务且本机 HTTPS 凭据可用于既有仓库。 - [x] 使用 Grok CLI 检索并形成约 95 篇一手论文的补充路线,主代理已回查关键来源。 -- [x] 完成 166 篇关键论文索引,覆盖 12 个专题与 Kimi/DeepSeek 聚光主线。 +- [x] 完成 182 篇关键论文索引,覆盖 12 个专题与 Kimi/DeepSeek 聚光主线。 - [x] 完成可检索、可按专题筛选的论文库页面。 -- [x] 完成 K3、Transformer 基础、DeepSeek 谱系、长上下文、MoE、推理与训练系统七篇首版长文。 -- [x] 完成 K3 三轴架构、Self-Attention、DeepSeek 谱系、长上下文、MoE 路由、推理三页签与训练系统四页签等十二个原创交互视图。 +- [x] 完成 K3、Transformer 基础、DeepSeek 谱系、Scaling Laws、长上下文、MoE、推理与训练系统八篇首版长文。 +- [x] 完成 K3 三轴架构、Self-Attention、DeepSeek 谱系、长上下文、MoE 路由、推理三页签,以及训练系统与 Scaling 各四页签等十六个原创交互视图。 - [x] 完成长上下文首版:五张成本账、26 篇一手论文、10+ 机制图与 8 策略交互实验室。 - [x] 核验 FlashAttention、DeepSeek-V2/V3.2/V4、Kimi Linear/K3 等六份论文原文,并建立长上下文研究账本。 - [x] 核验 Switch、ST-MoE、DeepSeekMoE、Loss-Free、V3、LatentMoE 与 K3 原文,并建立 MoE 研究账本。 @@ -47,17 +47,20 @@ - [x] 将 Grok 产物降级为明确标注的未核验 leads;正式账本只采用回查一手论文后的结论。 - [x] 完成训练系统首版:15 节长文、37 个一手节点、12 类机制图与显存—网格—气泡—通信四页签实验室。 - [x] 训练系统真实 Chrome 断言通过:OOM、无效 mesh、DualPipe 参数副本、overlap 与 MoonEP buffer 均正确响应。 -- [x] Astro 类型检查、生产构建、11 个内部路由和桌面/移动端视觉检查通过。 +- [x] Astro 类型检查、生产构建、12 个内部路由、464 个站内引用和桌面/移动端视觉检查通过。 - [x] 训练系统首版以提交 `c6306fe`、不可变镜像 `20260728T172750Z-c6306fe` 发布;NAS、VPS/Tailscale、NPM、DNS、HTTPS、证书与生产 Chrome 全链路通过。 - [x] 创建 `wuyang/llm-atlas` 公开仓库,匿名 API 确认 `private: false`。 - [x] 当前生产镜像通过健康检查、11 个页面路由与关键资源烟雾测试。 - [x] 通过 Unraid Compose Manager、Nginx Proxy Manager 与 HTTPS 发布首版。 - [x] 启动 Scaling Laws 专题:缓存 22 篇新的一手论文,建立九张账、DeepSeek / Kimi 双谱系与四实验首轮证据框架。 - [x] 使用 Grok Headless 扩展 Scaling 候选路线,并纠正其对 K3 正式报告存在性的错误;线索与正式账本分离。 +- [x] 完成 Scaling Laws 首版:16 节长文、29 个一手节点、九张账与曲面—部署—复用—涌现四联实验。 +- [x] Scaling 真实 Chrome 断言通过:IsoFLOP 谷底、生命周期最优点、重复数据衰减和指标阶跃均正确响应。 +- [x] 对 Scaling、训练系统、推理与 MoE 执行全量浏览器回归;12 项桌面导航、移动菜单和首页新章入口无回归。 ## 正在进行 -- [ ] Scaling Laws 二轮精读:逐篇图表、拟合公式、置信区间、外推失败与 DeepSeek / K3 对照。 +- [ ] Scaling Laws 二轮精读:真实拟合复现、逐篇图表、置信区间、外推失败与更多模型族对照。 - [ ] 大规模训练系统二轮:真实集群 traces、故障恢复案例与精确 topology / kernel 配置。 - [ ] 推理专题二轮:真实 pass@k 曲线、PRM 失败案例与逐篇图表精读。 - [ ] 长上下文专题的真实模型配置对比、内核细节与失败案例二轮深化。 @@ -91,6 +94,8 @@ | 2026-07-29 | 训练系统首版用不可变镜像 `20260728T172750Z-c6306fe` 发布 | 保留 `12010→8080`、NPM host 31 / cert 41 与公开 Forgejo;11 路由、关键资源和四页签生产交互全部复核 | | 2026-07-29 | Scaling Laws 拆成观测量、模型、数据、算术、配比、配方、外推、经济目标与能力阶段九张账 | 防止把 `20 TPP`、`6ND`、MoE 总参、部署成本和“涌现”混成一条万能曲线 | | 2026-07-29 | Grok 对 K3 报告存在性的错误保留在未核验 leads | 正式账本回到 arXiv `2607.24653` 与本地 47 页报告,展示来源分级为何必要 | +| 2026-07-29 | Scaling 首版用 29 个一手节点和四个独立实验闭环 | IsoFLOP、训练—部署、数据复用与指标涌现分开建模,不合成伪“规模总分” | +| 2026-07-29 | 论文库随 Scaling 一手链扩充到 182 篇 | 新增早期跨任务幂律、Gopher、数据受限、过训练、部署经济、复现和 task ladder 节点 | ## 未决问题 diff --git a/README.md b/README.md index b814877..2e72421 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ - 持续进度:[PROGRESS.md](./PROGRESS.md) - 证据与写作规范:[research/METHODOLOGY.md](./research/METHODOLOGY.md) -当前里程碑包含 16 专题学习地图、166 篇关键论文索引、Kimi K3 完整导读、 -Transformer 基础、DeepSeek 技术谱系、长上下文、MoE、推理与训练系统深度专题, +当前里程碑包含 16 专题学习地图、182 篇关键论文索引、Kimi K3 完整导读、 +Transformer 基础、DeepSeek 技术谱系、Scaling Laws、长上下文、MoE、推理与训练系统深度专题, 以及覆盖核心机制的原创交互实验室。 其余专题按进度账本持续扩建。 diff --git a/package.json b/package.json index 82fd26b..307eb02 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "check:site": "node scripts/check-site.mjs", "check:moe-browser": "node scripts/check-moe-browser.mjs", "check:reasoning-browser": "node scripts/check-reasoning-browser.mjs", - "check:training-systems-browser": "node scripts/check-training-systems-browser.mjs" + "check:training-systems-browser": "node scripts/check-training-systems-browser.mjs", + "check:scaling-browser": "node scripts/check-scaling-browser.mjs" }, "dependencies": { "@astrojs/sitemap": "3.7.3", diff --git a/scripts/check-moe-browser.mjs b/scripts/check-moe-browser.mjs index 44bfbfb..5c0ce79 100644 --- a/scripts/check-moe-browser.mjs +++ b/scripts/check-moe-browser.mjs @@ -177,7 +177,7 @@ if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentO } if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible) failures.push("移动端菜单按钮未显示"); -if (home.releaseCards !== 3) failures.push(`首页新章卡数量异常:${home.releaseCards}`); +if (home.releaseCards !== 5) failures.push(`首页新章卡数量异常:${home.releaseCards}`); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-reasoning-browser.mjs b/scripts/check-reasoning-browser.mjs index c5ea442..7f14d8e 100644 --- a/scripts/check-reasoning-browser.mjs +++ b/scripts/check-reasoning-browser.mjs @@ -289,7 +289,7 @@ if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentO } if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); -if (home.releaseCards !== 3 || !home.firstRelease.includes("多想一会儿")) failures.push("首页推理新章入口异常"); +if (home.releaseCards !== 5 || !home.firstRelease.includes("大一点")) failures.push("首页新章入口异常"); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-scaling-browser.mjs b/scripts/check-scaling-browser.mjs new file mode 100644 index 0000000..dd2cc0b --- /dev/null +++ b/scripts/check-scaling-browser.mjs @@ -0,0 +1,286 @@ +import { writeFileSync } from "node:fs"; + +const cdpPort = process.env.CDP_PORT ?? "9225"; +const baseUrl = process.env.SITE_URL ?? "http://127.0.0.1:4324"; +const pages = await fetch(`http://127.0.0.1:${cdpPort}/json/list`).then((response) => response.json()); +const page = pages.find((entry) => entry.type === "page"); +if (!page) throw new Error(`CDP ${cdpPort} 没有可用页面`); + +const socket = new WebSocket(page.webSocketDebuggerUrl); +await new Promise((resolve, reject) => { + socket.addEventListener("open", resolve, { once: true }); + socket.addEventListener("error", reject, { once: true }); +}); + +let nextId = 0; +const pending = new Map(); +const exceptions = []; +socket.addEventListener("message", (event) => { + const message = JSON.parse(event.data); + if (message.id && pending.has(message.id)) { + const { resolve, reject } = pending.get(message.id); + pending.delete(message.id); + if (message.error) reject(new Error(message.error.message)); + else resolve(message.result); + } + if (message.method === "Runtime.exceptionThrown") { + exceptions.push(message.params.exceptionDetails.exception?.description ?? message.params.exceptionDetails.text); + } +}); + +const command = (method, params = {}) => new Promise((resolve, reject) => { + const id = ++nextId; + pending.set(id, { resolve, reject }); + socket.send(JSON.stringify({ id, method, params })); +}); +const pause = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)); +const evaluate = async (expression) => { + const result = await command("Runtime.evaluate", { expression, returnByValue: true, awaitPromise: true }); + if (result.exceptionDetails) throw new Error(result.exceptionDetails.exception?.description ?? result.exceptionDetails.text); + return result.result.value; +}; +const navigate = async (path) => { + await command("Page.navigate", { url: `${baseUrl}${path}` }); + for (let attempt = 0; attempt < 50; attempt += 1) { + await pause(100); + if (await evaluate("document.readyState === 'complete'")) return; + } + throw new Error(`${path} 加载超时`); +}; +const screenshot = async (path, full = false) => { + const params = { format: "png", captureBeyondViewport: full }; + if (full) { + const metrics = await command("Page.getLayoutMetrics"); + params.clip = { + x: 0, + y: 0, + width: metrics.cssContentSize.width, + height: metrics.cssContentSize.height, + scale: 1, + }; + } + const result = await command("Page.captureScreenshot", params); + writeFileSync(path, Buffer.from(result.data, "base64")); +}; + +await command("Page.enable"); +await command("Runtime.enable"); +await command("Emulation.setDeviceMetricsOverride", { + width: 1440, + height: 1100, + deviceScaleFactor: 1, + mobile: false, +}); +await navigate("/scaling/"); +await screenshot("/tmp/llm-atlas-scaling-desktop.png"); + +const surface = await evaluate(`(() => { + const root = document.querySelector("[data-scaling-lab]"); + const initial = { + model: root.querySelector('[data-surface-metric="model"]').textContent, + data: root.querySelector('[data-surface-metric="data"]').textContent, + gap: root.querySelector('[data-surface-metric="gap"]').textContent, + path: root.querySelector("[data-surface-path]").getAttribute("d").length, + }; + const tpp = root.querySelector('[data-surface-input="tpp"]'); + tpp.value = "500"; + tpp.dispatchEvent(new Event("input", { bubbles: true })); + return { + initial, + extreme: { + gap: root.querySelector('[data-surface-metric="gap"]').textContent, + reading: root.querySelector("[data-surface-reading]").textContent, + label: root.querySelector("[data-surface-current] text").textContent, + }, + }; +})()`); + +const serve = await evaluate(`(() => { + const root = document.querySelector("[data-scaling-lab]"); + root.querySelector('[data-scaling-tab="serve"]').click(); + root.querySelector('[data-serve-preset="lab"]').click(); + const lab = { + train: root.querySelector('[data-serve-metric="train"]').textContent, + total: root.querySelector('[data-serve-metric="total"]').textContent, + share: root.querySelector('[data-serve-metric="share"]').textContent, + }; + root.querySelector('[data-serve-preset="mass"]').click(); + return { + lab, + mass: { + train: root.querySelector('[data-serve-metric="train"]').textContent, + total: root.querySelector('[data-serve-metric="total"]').textContent, + share: root.querySelector('[data-serve-metric="share"]').textContent, + reading: root.querySelector("[data-serve-reading]").textContent, + candidates: root.querySelectorAll(".candidate-row").length, + }, + }; +})()`); + +const data = await evaluate(`(() => { + const root = document.querySelector("[data-scaling-lab]"); + root.querySelector('[data-scaling-tab="data"]').click(); + root.querySelector('[data-data-preset="unique"]').click(); + const unique = { + seen: root.querySelector('[data-data-metric="seen"]').textContent, + effective: root.querySelector('[data-data-metric="effective"]').textContent, + next: root.querySelector('[data-data-metric="next"]').textContent, + }; + root.querySelector('[data-data-preset="twenty"]').click(); + return { + unique, + twenty: { + seen: root.querySelector('[data-data-metric="seen"]').textContent, + effective: root.querySelector('[data-data-metric="effective"]').textContent, + next: root.querySelector('[data-data-metric="next"]').textContent, + reading: root.querySelector("[data-data-reading]").textContent, + bars: root.querySelectorAll(".epoch-bars > i").length, + more: root.querySelector(".epoch-more")?.textContent ?? "", + }, + }; +})()`); + +const emergence = await evaluate(`(() => { + const root = document.querySelector("[data-scaling-lab]"); + root.querySelector('[data-scaling-tab="emergence"]').click(); + const scale = root.querySelector('[data-emergence-input="scale"]'); + const measure = () => ({ + token: root.querySelector('[data-emergence-metric="token"]').textContent, + threshold: root.querySelector('[data-emergence-metric="threshold"]').textContent, + exact: root.querySelector('[data-emergence-metric="exact"]').textContent, + }); + scale.value = "59"; + scale.dispatchEvent(new Event("input", { bubbles: true })); + const below = measure(); + scale.value = "60"; + scale.dispatchEvent(new Event("input", { bubbles: true })); + const above = measure(); + const firstTab = root.querySelector('[data-scaling-tab="surface"]'); + firstTab.focus(); + firstTab.dispatchEvent(new KeyboardEvent("keydown", { key: "End", bubbles: true })); + return { + below, + above, + keyboard: { + selected: root.querySelector('[data-scaling-tab][aria-selected="true"]').dataset.scalingTab, + visible: root.querySelector("[data-scaling-view]:not([hidden])").dataset.scalingView, + }, + paths: [...root.querySelectorAll("[data-emergence-line]")].map((path) => path.getAttribute("d").length), + }; +})()`); + +const layout = await evaluate(`(() => { + const nav = document.querySelector(".top-nav"); + const meta = document.querySelector(".header-meta"); + return { + documentOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, + navGap: Number((meta.getBoundingClientRect().left - nav.getBoundingClientRect().right).toFixed(1)), + navLinks: document.querySelectorAll(".top-nav a").length, + articleSections: document.querySelectorAll(".article-section").length, + paperLinks: document.querySelectorAll(".paper-chain a").length, + labTabs: document.querySelectorAll("[data-scaling-tab]").length, + views: document.querySelectorAll("[data-scaling-view]").length, + }; +})()`); + +await evaluate(`(() => { + document.documentElement.style.scrollBehavior = "auto"; + document.querySelector("[data-scaling-lab]").scrollIntoView({ block: "start", behavior: "instant" }); +})()`); +await pause(150); +await screenshot("/tmp/llm-atlas-scaling-lab-desktop.png"); + +await command("Emulation.setDeviceMetricsOverride", { + width: 390, + height: 844, + deviceScaleFactor: 1, + mobile: true, +}); +await navigate("/scaling/"); +await evaluate(`document.querySelector("[data-scaling-lab]").scrollIntoView({ block: "start", behavior: "instant" })`); +await pause(100); +await screenshot("/tmp/llm-atlas-scaling-lab-mobile.png"); +const mobile = await evaluate(`(() => { + const toggle = document.querySelector("#menu-toggle"); + toggle.click(); + return { + documentOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, + menuVisible: getComputedStyle(toggle).display !== "none", + menuOpen: toggle.getAttribute("aria-expanded"), + mobileLinks: document.querySelectorAll("#mobile-nav a").length, + selectedTab: document.querySelector('[data-scaling-tab][aria-selected="true"]').dataset.scalingTab, + }; +})()`); + +await command("Emulation.setDeviceMetricsOverride", { + width: 1440, + height: 1100, + deviceScaleFactor: 1, + mobile: false, +}); +await navigate("/"); +const home = await evaluate(`({ + documentOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, + releaseCards: document.querySelectorAll(".release-card").length, + firstRelease: document.querySelector(".release-card h2").textContent, + firstHref: document.querySelector(".release-card").getAttribute("href"), + paperCount: document.querySelector(".hero-stats div:nth-child(3) b").textContent, + navLinks: document.querySelectorAll(".top-nav a").length, +})`); +await evaluate(`document.querySelector("#new-chapters").scrollIntoView({ block: "start", behavior: "instant" })`); +await pause(100); +await screenshot("/tmp/llm-atlas-home-scaling-release.png"); + +const report = { surface, serve, data, emergence, layout, mobile, home, exceptions }; +console.log(JSON.stringify(report, null, 2)); + +const numeric = (value) => Number.parseFloat(value); +const modelSize = (value) => Number.parseFloat(value); +const scaledCount = (value) => { + const number = Number.parseFloat(value); + if (value.includes("T")) return number * 1000; + if (value.includes("M")) return number / 1000; + return number; +}; +const failures = []; +if (!surface.initial.model || !surface.initial.data || surface.initial.path < 1000) failures.push("IsoFLOP 曲线或最优点未渲染"); +if (numeric(surface.extreme.gap) <= numeric(surface.initial.gap) || !surface.extreme.reading.includes("模型偏小")) { + failures.push("极端 TPP 没有产生预期的 compute-allocation loss gap"); +} +if (serve.mass.candidates !== 8) failures.push("训练—部署候选模型数量异常"); +if (modelSize(serve.mass.total) >= modelSize(serve.mass.train) || !serve.mass.reading.includes("更小模型")) { + failures.push("海量调用没有把生命周期最优点推向更小模型"); +} +if (data.unique.seen !== data.unique.effective) failures.push("单遍数据的 seen 与 effective 不相等"); +if (scaledCount(data.twenty.effective) >= scaledCount(data.twenty.seen) || numeric(data.twenty.next) >= 20) { + failures.push("数据枯竭预设没有体现复用边际衰减"); +} +if (data.twenty.bars !== 16 || !data.twenty.more.includes("+4")) failures.push("20 epoch 可视化截断异常"); +if (!emergence.below.threshold.includes("FAIL") || !emergence.above.threshold.includes("PASS")) { + failures.push("连续能力跨过二值评分线时没有出现离散阶跃"); +} +if (Math.abs(numeric(emergence.above.token) - numeric(emergence.below.token)) > 2) { + failures.push("相邻规模的底层连续能力变化异常过大"); +} +if (emergence.keyboard.selected !== "emergence" || emergence.keyboard.visible !== "emergence") { + failures.push("实验页签键盘导航异常"); +} +if (emergence.paths.some((length) => length < 500)) failures.push("涌现多指标曲线未完整渲染"); +if (layout.articleSections !== 16 || layout.paperLinks !== 29 || layout.labTabs !== 4 || layout.views !== 4) { + failures.push("章节、论文或实验数量异常"); +} +if (layout.navLinks !== 12 || mobile.mobileLinks !== 12 || home.navLinks !== 12) failures.push("全站导航未同步 Scaling"); +if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentOverflow > 0) failures.push("页面存在横向溢出"); +if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); +if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); +if (home.releaseCards !== 5 || !home.firstRelease.includes("大一点") || home.firstHref !== "/scaling/") { + failures.push("首页 Scaling 新章入口异常"); +} +if (home.paperCount !== "182") failures.push(`首页论文总数异常:${home.paperCount}`); +if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); + +socket.close(); +if (failures.length) { + failures.forEach((failure) => console.error(`- ${failure}`)); + process.exit(1); +} diff --git a/scripts/check-training-systems-browser.mjs b/scripts/check-training-systems-browser.mjs index 00af556..599b671 100644 --- a/scripts/check-training-systems-browser.mjs +++ b/scripts/check-training-systems-browser.mjs @@ -233,7 +233,7 @@ if (layout.articleSections !== 16 || layout.paperLinks !== 37 || layout.labTabs if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentOverflow > 0) failures.push("页面存在横向溢出"); if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); -if (home.releaseCards !== 4 || !home.firstRelease.includes("一万张 GPU")) failures.push("首页训练系统新章入口异常"); +if (home.releaseCards !== 5 || !home.firstRelease.includes("大一点")) failures.push("首页新章入口异常"); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/src/components/ScalingLawsLab.astro b/src/components/ScalingLawsLab.astro new file mode 100644 index 0000000..6abd7b0 --- /dev/null +++ b/src/components/ScalingLawsLab.astro @@ -0,0 +1,1551 @@ +--- +const surfacePresets = [ + { id: "balanced", label: "Chinchilla-style", compute: 22.8, alpha: 0.34, beta: 0.28, tpp: 20 }, + { id: "model", label: "模型项更难消", compute: 22.8, alpha: 0.22, beta: 0.38, tpp: 20 }, + { id: "data", label: "数据项更难消", compute: 22.8, alpha: 0.42, beta: 0.2, tpp: 80 }, + { id: "frontier", label: "前沿预算", compute: 25, alpha: 0.34, beta: 0.28, tpp: 200 }, +]; + +const servePresets = [ + { id: "lab", label: "研究原型", requests: 4, tokens: 1024, target: 3.05 }, + { id: "team", label: "团队内部", requests: 7, tokens: 2048, target: 2.9 }, + { id: "api", label: "公开 API", requests: 9, tokens: 3072, target: 2.8 }, + { id: "mass", label: "海量调用", requests: 11, tokens: 4096, target: 2.7 }, +]; + +const dataPresets = [ + { id: "unique", label: "单遍唯一数据", unique: 1000, epochs: 1, retention: 72, rewrite: 0 }, + { id: "four", label: "重复 4 epoch", unique: 1000, epochs: 4, retention: 72, rewrite: 0 }, + { id: "rewrite", label: "改写后复用", unique: 1000, epochs: 4, retention: 72, rewrite: 55 }, + { id: "twenty", label: "数据枯竭", unique: 100, epochs: 20, retention: 58, rewrite: 10 }, +]; +--- + +
+
+
+

INTERACTIVE / SCALING LAWS LAB

+

“最优”取决于你究竟在优化哪一本账

+
+

+ 四个实验都是确定性教学模型,不是任何实验室的训练预测器。参数只用来展示方向、约束和反直觉结果; + 论文中的真实指数、拟合范围与置信区间必须回到正文和原始来源。 +

+
+ +
+ + + + +
+ +
+
+
+

SCALING SURFACE

+

同一笔训练 FLOPs,模型太大和数据太少都可能吃亏

+
+

+ 这里使用 Chinchilla 型教学损失面 L = E + A/N^α + B/D^β。每个点都满足 + Dense 一阶近似 C = 6ND;谷底只是当前假设下的 compute-optimal point。 +

+
+ +
+ {surfacePresets.map((preset) => ( + + ))} +
+ +
+
+ + + + +
+ +
+
+
OPTIMAL MODEL34.0B

当前损失面的谷底

+
OPTIMAL DATA309B

约 9.1 TPP

+
YOUR LOSS GAP+0.8%

相对同预算谷底

+
+ +
+
+ CURRENT FRONTIER + N ∝ C⁰·⁴⁵ · D ∝ C⁰·⁵⁵ +
+

+ 双轴损失面的解析指数:N 的 compute exponent 为 β/(α+β), + Dα/(α+β)。系数与最优 TPP 仍由实验族决定。 +

+
+ +
+ + 固定训练算力下,验证损失随模型规模变化的 IsoFLOP 曲线 + 曲线谷底是当前教学损失面的最优模型和数据配比;铜色点表示读者选择。 + + + + + +
更小模型 · 更多 TokenMODEL PARAMETERS · LOG SCALE更大模型 · 更少 Token
+
+ +
+ 怎样读这条曲线 + 你的配比接近谷底;附近是一条宽而不是尖锐的近优区域。 +

“约 20 TPP”只是一段历史实验范围的经验点;改变数据、配方或部署目标,谷底会移动。

+
+
+
+
+ + + + + + +
+ + + + diff --git a/src/components/SiteHeader.astro b/src/components/SiteHeader.astro index 5da6ea0..4345526 100644 --- a/src/components/SiteHeader.astro +++ b/src/components/SiteHeader.astro @@ -10,6 +10,7 @@ const items = [ { id: "k3", href: "/k3/", label: "K3 解剖" }, { id: "deepseek", href: "/deepseek/", label: "DeepSeek" }, { id: "foundations", href: "/foundations/", label: "基础原理" }, + { id: "scaling", href: "/scaling/", label: "Scaling" }, { id: "moe", href: "/moe/", label: "MoE" }, { id: "long-context", href: "/long-context/", label: "长上下文" }, { id: "reasoning", href: "/reasoning/", label: "推理" }, diff --git a/src/data/chapters.ts b/src/data/chapters.ts index 99ac928..1075868 100644 --- a/src/data/chapters.ts +++ b/src/data/chapters.ts @@ -73,12 +73,12 @@ export const chapters: Chapter[] = [ title: "Scaling Laws:规模为什么有效", kicker: "SCALING", question: "多大模型、多少数据、多少计算才是划算的?", - summary: "区分参数量、激活参数、训练计算和推理预算;理解 Kaplan、Chinchilla 与 K3 的双轴扩展。", - status: "researching", - progress: 22, - papers: 11, + summary: "用九张账区分参数、数据、计算、配方、外推与部署经济;理解 Kaplan、Chinchilla、DeepSeek 与 K3。", + status: "published", + progress: 74, + papers: 29, prerequisites: ["01", "02"], - highlights: ["幂律", "计算最优", "测试时扩展"], + highlights: ["幂律曲面", "计算最优", "四联实验"], }, { number: "05", diff --git a/src/data/papers.ts b/src/data/papers.ts index 209770e..ae6eaf3 100644 --- a/src/data/papers.ts +++ b/src/data/papers.ts @@ -574,6 +574,134 @@ export const papers: Paper[] = [ contribution: "开放 3T Token 语料与完整数据处理工具。", verified: true, }, + { + year: 2017, + title: "Deep Learning Scaling is Predictable, Empirically", + url: "https://arxiv.org/abs/1712.00409", + topics: ["Scaling"], + contribution: "跨语言、视觉、语音与翻译任务观察数据规模和误差之间的可预测幂律。", + verified: true, + }, + { + year: 2018, + title: "An Empirical Model of Large-Batch Training", + url: "https://arxiv.org/abs/1812.06162", + topics: ["Scaling", "训练系统"], + contribution: "以 gradient noise scale 连接关键 batch size、优化步数和训练计算效率。", + verified: true, + }, + { + year: 2020, + title: "Scaling Laws for Autoregressive Generative Modeling", + url: "https://arxiv.org/abs/2010.14701", + topics: ["Scaling", "多模态"], + contribution: "把自回归幂律扩展到图像、视频、数学和语言,显示指数依赖数据模态。", + verified: true, + }, + { + year: 2021, + title: "Scaling Language Models: Methods, Analysis & Insights from Training Gopher", + url: "https://arxiv.org/abs/2112.11446", + topics: ["Scaling", "评测"], + contribution: "以 280B Gopher 系列研究规模、任务表现、训练实践与能力风险的分化。", + verified: true, + }, + { + year: 2022, + title: "Broken Neural Scaling Laws", + url: "https://arxiv.org/abs/2210.14891", + topics: ["Scaling"], + contribution: "用平滑折断幂律刻画平台、拐点、double descent 与斜率改变。", + verified: true, + }, + { + year: 2023, + title: "Are Emergent Abilities of Large Language Models a Mirage?", + url: "https://arxiv.org/abs/2304.15004", + topics: ["Scaling", "评测"], + contribution: "展示不连续指标可把平滑的底层改进显示成突然涌现,要求同时检查评分函数。", + verified: true, + }, + { + year: 2023, + title: "Scaling Data-Constrained Language Models", + url: "https://arxiv.org/abs/2305.16264", + topics: ["Scaling"], + contribution: "区分唯一数据量与重复看到的 Token,系统研究数据受限时的多轮训练。", + verified: true, + }, + { + year: 2024, + title: "Beyond Chinchilla-Optimal: Accounting for Inference in Language Model Scaling Laws", + url: "https://arxiv.org/abs/2401.00448", + topics: ["Scaling", "训练系统"], + contribution: "把推理需求加入训练目标,说明生命周期最优模型可能小于纯训练计算最优模型。", + verified: true, + }, + { + year: 2024, + title: "Language Models Scale Reliably With Over-Training and on Downstream Tasks", + url: "https://arxiv.org/abs/2403.08540", + topics: ["Scaling", "评测"], + contribution: "检验超过 Chinchilla 配比后的 loss 与下游趋势,并给出多项可预测缩放结果。", + verified: true, + }, + { + year: 2024, + title: "Chinchilla Scaling: A Replication Attempt", + url: "https://arxiv.org/abs/2404.10102", + topics: ["Scaling"], + contribution: "复查原论文三种估计方法,质疑部分精确参数与置信区间但未推翻近似等比分配结论。", + verified: true, + }, + { + year: 2024, + title: "More Compute Is What You Need", + url: "https://arxiv.org/abs/2404.19484", + topics: ["Scaling"], + contribution: "提出训练计算分配会改变可迁移性的争议性假说;在课程中仅作为待检验观点。", + verified: true, + }, + { + year: 2024, + title: "Resolving Discrepancies in Compute-Optimal Scaling of Language Models", + url: "https://arxiv.org/abs/2406.19146", + topics: ["Scaling"], + contribution: "从 FLOPs 口径、warmup 与随规模调参解释 Kaplan—Chinchilla 配比差异。", + verified: true, + }, + { + year: 2024, + title: "Optimization Hyper-parameter Laws for Large Language Models", + url: "https://arxiv.org/abs/2409.04777", + topics: ["Scaling", "训练系统"], + contribution: "研究最优学习率等优化超参数怎样随模型规模和训练长度变化。", + verified: true, + }, + { + year: 2024, + title: "Establishing Task Scaling Laws via Compute-Efficient Model Ladders", + url: "https://arxiv.org/abs/2412.04403", + topics: ["Scaling", "评测"], + contribution: "先由模型/数据预测任务 loss,再由任务 loss 预测能力,以小模型梯队降低外推成本。", + verified: true, + }, + { + year: 2025, + title: "Overtrained Language Models Are Harder to Fine-Tune", + url: "https://arxiv.org/abs/2503.19206", + topics: ["Scaling", "后训练"], + contribution: "显示更长预训练可能降低后续微调可塑性,分开 base loss 与最终产品目标。", + verified: true, + }, + { + year: 2026, + title: "Data-Constrained Language Model Pretraining: Improved Regularization and Scaling Laws", + url: "https://arxiv.org/abs/2606.06888", + topics: ["Scaling"], + contribution: "以 SoftQ 和 masked-input regularization 更新有限唯一数据下的重复训练研究。", + verified: true, + }, { year: 2014, title: "Adam: A Method for Stochastic Optimization", diff --git a/src/pages/index.astro b/src/pages/index.astro index eff4b35..30d3778 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -7,6 +7,7 @@ import { chapters, statusLabel } from "@/data/chapters"; const routes: Record = { roadmap: "/roadmap/", foundations: "/foundations/", + scaling: "/scaling/", moe: "/moe/", "long-context": "/long-context/", reasoning: "/reasoning/", @@ -78,6 +79,7 @@ const paths = [ 选择学习路径 直接解剖 K3 DeepSeek 专题 + Scaling Laws 专题 MoE 专题 长上下文专题 推理专题 @@ -91,7 +93,7 @@ const paths = [
16核心专题
151K3 报告来源
-
166关键论文索引
+
182关键论文索引
47pK3 技术报告
@@ -105,6 +107,22 @@ const paths = [
+ +
+

NEW / CHAPTER 04 SCALING LAWS

+

“大一点就会更强”,远远不够指导一次训练

+

+ 用观测量、模型、数据、算术、配比、配方、外推、经济目标与能力阶段九张账, + 从早期经验幂律、Kaplan、Chinchilla 与复现争议,一路走到 DeepSeek scaling study 和 Kimi K3。 +

+
+
+
LINEAGE
2017 → 2026
+
PAPERS
29 个一手节点
+
LAB
曲面 · 部署 · 重复 · 涌现
+
+ +

NEW / CHAPTER 08 LARGE-SCALE TRAINING SYSTEMS

@@ -402,12 +420,20 @@ const paths = [ transition: transform 180ms ease, border-color 180ms ease; } + .scaling-release, .training-release, .reasoning-release { grid-column: 1 / -1; min-height: 510px; } + .scaling-release { + background: + radial-gradient(circle at 82% 18%, rgba(159, 91, 52, 0.18), transparent 30%), + repeating-linear-gradient(135deg, transparent 0 84px, rgba(159, 91, 52, 0.045) 84px 85px), + var(--paper-raised); + } + .training-release { background: radial-gradient(circle at 82% 18%, rgba(66, 111, 101, 0.19), transparent 30%), @@ -484,6 +510,7 @@ const paths = [ padding-bottom: 76px; } + .scaling-release, .training-release, .reasoning-release { grid-column: auto; diff --git a/src/pages/moe/index.astro b/src/pages/moe/index.astro index 5168ab4..a2d7398 100644 --- a/src/pages/moe/index.astro +++ b/src/pages/moe/index.astro @@ -683,7 +683,7 @@ const paperChain = [
diff --git a/src/pages/progress/index.astro b/src/pages/progress/index.astro index 5e107ed..d2f4105 100644 --- a/src/pages/progress/index.astro +++ b/src/pages/progress/index.astro @@ -7,16 +7,17 @@ const published = chapters.filter((chapter) => chapter.status === "published").l const researching = chapters.filter((chapter) => ["researching", "drafting"].includes(chapter.status)).length; const workstreams = [ - { label: "研究框架与规范", value: 82, next: "给推理专题补逐篇图表/实验精读层级" }, + { label: "研究框架与规范", value: 83, next: "给 Scaling 与推理专题补逐篇图表/实验精读层级" }, { label: "网站设计系统", value: 89, next: "打印样式与更多通用可视化组件" }, - { label: "Kimi K3 深读", value: 64, next: "扩写 scaling / pre-training / infra 逐图笔记" }, + { label: "Kimi K3 深读", value: 66, next: "扩写 pre-training / infra 逐图笔记" }, { label: "Transformer 基础", value: 52, next: "加入矩阵形状动画与手算练习" }, + { label: "Scaling Laws", value: 74, next: "加入真实拟合复现、置信区间与更多模型族对照" }, { label: "DeepSeek 专题", value: 71, next: "补 R1 / DAPO 的逐图训练轨迹与复现对照" }, { label: "推理与测试时扩展", value: 76, next: "真实模型采样曲线、PRM 案例与逐篇图表精读" }, { label: "稀疏计算与 MoE", value: 74, next: "补充真实集群 traces 与专家特化案例" }, { label: "长上下文专题", value: 72, next: "加入更多论文逐图笔记与真实模型配置对比" }, { label: "大规模训练系统", value: 71, next: "补真实集群 traces、故障案例与精确 topology 配置" }, - { label: "引用与事实检查", value: 54, next: "自动化外链复查与来源等级扩展" }, + { label: "引用与事实检查", value: 57, next: "自动化外链复查与来源等级扩展" }, { label: "开源与部署", value: 100, next: "每轮保留不可变镜像、提交与回滚点" }, ]; --- @@ -40,7 +41,7 @@ const workstreams = [
OVERALL
专题平均 {average}%
READABLE
{published} 个首版可读专题
ACTIVE
{researching} 个研究/写作中
-
UPDATED
2026-07-29 01:19 CST
+
UPDATED
2026-07-29 02:08 CST
MODE
持续迭代,不锁死版本
@@ -50,7 +51,7 @@ const workstreams = [

01 WORKSTREAMS

-

十一条工作流同时推进,但不混淆“有页面”和“已核验”

+

十二条工作流同时推进,但不混淆“有页面”和“已核验”

内容首版优先打通全局脉络;随后每轮迭代选择一个专题推进到论文/工程层,并做独立事实复核。 @@ -87,13 +88,14 @@ const workstreams = [

K3 报告已结构化拆解

47 页报告目录、151 条参考来源和架构/后训练/系统主线已经提取。

16 专题知识图

从语言模型基础到评测安全,包含先修依赖和三条贯穿案例。

编辑式网站系统

响应式导航、章节模板、侧栏、进度、论文链和证据提示组件。

-

十二个原创交互视图

K3、注意力、DeepSeek、长上下文、MoE、推理三页签,以及训练系统四页签实验。

-

七篇首版长文

K3 导读、Transformer 基础、DeepSeek 谱系、长上下文、MoE、推理与训练系统专题。

+

十六个原创交互视图

K3、注意力、DeepSeek、长上下文、MoE、推理三页签,以及训练系统与 Scaling 各四页签实验。

+

八篇首版长文

K3 导读、Transformer 基础、DeepSeek 谱系、Scaling、长上下文、MoE、推理与训练系统专题。

+

Scaling Laws 深度专题

九张账、29 个一手节点、DeepSeek/Kimi 双谱系与曲面—部署—复用—涌现四联实验。

长上下文深度专题

五张成本账、26 篇一手论文、10+ 机制图与 8 策略交互实验室。

MoE 深度专题

六张账、19 篇一手论文、DeepSeek/K3 主线与路由—容量—通信交互实验室。

推理深度专题

八张账、30 篇一手论文链、DeepSeek/Kimi 双主线与三页签互动实验室。

训练系统深度专题

九张账、37 个一手节点、DeepSeek/Kimi 双谱系与显存—网格—气泡—通信实验室。

-

166 篇关键论文索引

覆盖 12 个专题,支持全文搜索、标签筛选与 Kimi/DeepSeek 聚光主线。

+

182 篇关键论文索引

覆盖 12 个专题,支持全文搜索、标签筛选与 Kimi/DeepSeek 聚光主线。

公开仓库与自托管发布

源码公开到 git.k1412.top,网站由不可变镜像、Compose Manager 与 HTTPS 交付。

@@ -108,7 +110,8 @@ const workstreams = [
优先级专题本轮交付完成闸门
-
P0大规模训练系统二轮

真实集群 traces → 故障恢复 → 精确 topology / kernel 配置

案例库 + 实测边界
+
P0Scaling Laws 二轮

真实拟合复现 → 置信区间 → 更多模型族与下游任务外推

可复现实验 + 逐图笔记
+
P1大规模训练系统二轮

真实集群 traces → 故障恢复 → 精确 topology / kernel 配置

案例库 + 实测边界
P1长上下文二轮深化

真实模型配置 → 内核细节 → 长上下文评测与失败案例

配置比较器 + 逐图论文笔记
P1MoE 二轮深化

真实负载 traces → 专家特化可解释性 → 共享专家语义

案例库 + 集群证据
P1推理二轮深化

真实 pass@k 曲线 → PRM 失败案例 → 逐篇图表精读

案例库 + 真实 traces
@@ -153,6 +156,7 @@ const workstreams = [
自托管交付

源码公开到 git.k1412.top,网站部署到 k1412 私有基础设施。

推理按八张账组织

把答案、覆盖、选择、过程、预算、优化、分布与系统证据分开核算。

训练系统按九张账组织

把模型状态、激活、并行、气泡、通信、专家、上下文、数值与可靠性分开核算。

+
Scaling Laws 按九张账组织

把观测量、模型、数据、算术、配比、配方、外推、经济目标与能力阶段分开核算。

diff --git a/src/pages/reasoning/index.astro b/src/pages/reasoning/index.astro index bf9d070..93db1cd 100644 --- a/src/pages/reasoning/index.astro +++ b/src/pages/reasoning/index.astro @@ -699,7 +699,7 @@ const paperChain = [

不要按模型榜单读,按“旧方法留下了哪堵墙”读

下面 30 篇构成本专题首版主干。课程中的机制、公式与数字优先回到这些一手来源; - 更完整的 166 篇跨专题索引位于论文库。 + 更完整的 182 篇跨专题索引位于论文库。

{paperChain.map(([year, title, href, note], index) => ( diff --git a/src/pages/scaling/index.astro b/src/pages/scaling/index.astro new file mode 100644 index 0000000..8af8427 --- /dev/null +++ b/src/pages/scaling/index.astro @@ -0,0 +1,2192 @@ +--- +import BaseLayout from "@/layouts/BaseLayout.astro"; +import ScalingLawsLab from "@/components/ScalingLawsLab.astro"; + +const toc = [ + ["00", "map", "九张账与坐标"], + ["01", "power-law", "为什么是幂律"], + ["02", "roots", "早期经验"], + ["03", "kaplan", "Kaplan 范式"], + ["04", "chinchilla", "Chinchilla 修正"], + ["05", "isoflop", "IsoFLOP 怎样做"], + ["06", "replication", "复现与和解"], + ["07", "data", "数据受限"], + ["08", "overtraining", "过训练与部署"], + ["09", "emergence", "涌现之争"], + ["10", "new-axes", "MoE 与新坐标"], + ["11", "deepseek", "DeepSeek 主线"], + ["12", "kimi", "Kimi K2 → K3"], + ["13", "lab", "四个互动实验"], + ["14", "reading", "怎样读一张曲线"], + ["15", "papers", "关键论文链"], +]; + +const ledgers = [ + ["L1 / OBSERVABLE", "观测量", "CE、NLL、PPL、BPB 或任务错误率?"], + ["L2 / MODEL", "模型规模", "total、non-embedding 还是 active parameters?"], + ["L3 / DATA", "数据规模", "seen、unique、repeated 还是 effective Token?"], + ["L4 / COMPUTE", "理论算术", "训练 FLOPs 怎样定义,是否遗漏 attention / routing?"], + ["L5 / ALLOCATION", "预算配比", "固定 C 时,N 与 D 各分多少?"], + ["L6 / RECIPE", "训练配方", "batch、LR、warmup、schedule 是否随规模公平调优?"], + ["L7 / EXTRAPOLATION", "外推证据", "目标点是否真正留出,误差与置信区间多大?"], + ["L8 / ECONOMICS", "经济目标", "只算训练,还是加上未来全部推理?"], + ["L9 / CAPABILITY", "能力阶段", "平滑 loss、离散 benchmark、RL 与 test-time compute 能否同图?"], +]; + +const history = [ + ["2017", "Hestness", "跨语言、视觉、语音等任务观察数据—误差幂律。"], + ["2018", "Noise Scale", "critical batch 把并行速度与样本效率放进同一张账。"], + ["2020", "Kaplan", "建立 L(N)、L(D)、L(C) 与偏大模型的 compute-optimal 结论。"], + ["2020", "Cross-modal", "Henighan 把自回归幂律扩到图像、视频与数学。"], + ["2022", "Chinchilla", "三种方法把最优分配改写为参数与数据近似同比例增长。"], + ["2022", "Emergence", "若干 benchmark 在规模上呈现突然跃升。"], + ["2022", "Broken Laws", "用平滑折断幂律表达 plateau、拐点和新斜率。"], + ["2023", "Data-constrained", "把 unique Token 和重复 epoch 分开,研究数据墙。"], + ["2023", "Mirage", "非线性与不连续指标可能制造“突然会了”。"], + ["2024", "Reproduction", "重新检查 Chinchilla 拟合与 Kaplan–Chinchilla 分歧。"], + ["2024", "Over-training", "把小模型长训和下游平均错误率纳入预测。"], + ["2024–26", "New axes", "MoE、部署成本、RL、长上下文和多模态要求新的坐标。"], +]; + +const approaches = [ + ["01", "训练曲线最小值", "0.50", "0.50", "不同模型沿训练曲线找每个预算的最低 loss"], + ["02", "IsoFLOP profiles", "0.49", "0.51", "固定 FLOPs,扫多组 N×D,再连接谷底"], + ["03", "Parametric loss", "0.46", "0.54", "拟合 E + A/Nᵅ + B/Dᵝ 后解析求解"], + ["K", "Kaplan 对照", "0.73", "0.27", "其 2020 配方更偏向增加模型规模"], +]; + +const deepseekSteps = [ + { + year: "2024", + title: "DeepSeek LLM", + formula: "Mopt ∝ C⁰·⁵²⁴³ · Dopt ∝ C⁰·⁴⁷⁵⁷", + body: "先搜索 batch 与学习率,再用 non-embedding FLOPs/token M 替代参数代理;attention 计算进入坐标。", + }, + { + year: "2024", + title: "DeepSeekMoE / V2", + formula: "TOTAL ≠ ACTIVE ≠ FLOPs", + body: "细粒度专家和 MLA 改写容量、每 Token 计算与服务 KV 成本,Dense 的单一 N 已不够。", + }, + { + year: "2024", + title: "DeepSeek-V3", + formula: "671B total · 37B active · 14.8T Token", + body: "模型、数据、FP8、DualPipe 与通信内核共同决定实际可扩展性;GPU hours 不能由 6ND 单独推出。", + }, + { + year: "2026", + title: "DeepSeek-V4", + formula: "1M context · hybrid attention · Muon", + body: "压缩/稀疏 attention、recurrent components、mHC 与优化器把“规模”扩展到上下文和深度稳定性。", + }, +]; + +const kimiSteps = [ + { + title: "Kimi K2", + tag: "TOKEN EFFICIENCY", + body: "15.5T curated Token、MuonClip、知识/数学改写与 sparsity scaling;重点从“更多 Token”转向“每个 Token 的学习价值”。", + }, + { + title: "Kimi K3 Scaling Study", + tag: "FAMILY SEARCH", + body: "为 KDA、AttnRes、Stable LatentMoE 和新数据/训练配方重新搜索 batch、LR、TPP 与 model shape。", + }, + { + title: "Cosine vs WSD", + tag: "FAIR TUNING", + body: "两种 schedule 的最优 peak LR 与 batch 不同;各自独立调参后,报告选择 cosine,不能用共享超参草率赛跑。", + }, + { + title: "2.5× Overall", + tag: "AUTHOR-REPORTED", + body: "Figure 7 的 OOD validation loss–FLOPs family-level 差异;不是单组件、吞吐、参数效率或所有 benchmark 的 2.5×。", + }, +]; + +const paperChain = [ + ["2017", "Deep Learning Scaling is Predictable, Empirically", "https://arxiv.org/abs/1712.00409", "跨任务数据幂律前史。"], + ["2018", "An Empirical Model of Large-Batch Training", "https://arxiv.org/abs/1812.06162", "gradient noise scale 与 critical batch。"], + ["2020", "Scaling Laws for Neural Language Models", "https://arxiv.org/abs/2001.08361", "Kaplan 的 N / D / C 经典坐标。"], + ["2020", "Scaling Laws for Autoregressive Generative Modeling", "https://arxiv.org/abs/2010.14701", "跨模态自回归幂律。"], + ["2020", "Language Models are Few-Shot Learners", "https://arxiv.org/abs/2005.14165", "GPT-3 的规模与 in-context learning 实证。"], + ["2021", "Scaling Language Models: Methods, Analysis & Insights from Training Gopher", "https://arxiv.org/abs/2112.11446", "280B Dense 模型的任务分化。"], + ["2022", "Training Compute-Optimal Large Language Models", "https://arxiv.org/abs/2203.15556", "Chinchilla 与 IsoFLOP。"], + ["2022", "PaLM: Scaling Language Modeling with Pathways", "https://arxiv.org/abs/2204.02311", "540B 规模实践与任务变化。"], + ["2022", "Emergent Abilities of Large Language Models", "https://arxiv.org/abs/2206.07682", "涌现能力的原始系统化。"], + ["2022", "Broken Neural Scaling Laws", "https://arxiv.org/abs/2210.14891", "plateau、拐点与折断幂律。"], + ["2023", "LLaMA: Open and Efficient Foundation Language Models", "https://arxiv.org/abs/2302.13971", "面向推理效率的小模型长训练。"], + ["2023", "Are Emergent Abilities of Large Language Models a Mirage?", "https://arxiv.org/abs/2304.15004", "指标导致的伪阶跃。"], + ["2023", "Scaling Data-Constrained Language Models", "https://arxiv.org/abs/2305.16264", "unique data 与重复 epoch。"], + ["2023", "Pythia", "https://arxiv.org/abs/2304.01373", "训练中间 checkpoint 与可解释 scaling。"], + ["2024", "DeepSeek LLM", "https://arxiv.org/abs/2401.02954", "超参数 law、M 与开放 scaling study。"], + ["2024", "Beyond Chinchilla-Optimal", "https://arxiv.org/abs/2401.00448", "加入未来推理需求。"], + ["2024", "Language Models Scale Reliably with Over-training", "https://arxiv.org/abs/2403.08540", "104 个模型与 aggregate downstream error。"], + ["2024", "Chinchilla Scaling: A Replication Attempt", "https://arxiv.org/abs/2404.10102", "拟合参数与置信区间复查。"], + ["2024", "More Compute Is What You Need", "https://arxiv.org/abs/2404.19484", "计算分配敏感性的争议假说。"], + ["2024", "Resolving Discrepancies in Compute-Optimal Scaling", "https://arxiv.org/abs/2406.19146", "FLOPs、warmup 与调参解释分歧。"], + ["2024", "Optimization Hyper-parameter Laws", "https://arxiv.org/abs/2409.04777", "动态学习率 schedule 的预测。"], + ["2024", "Establishing Task Scaling Laws via Model Ladders", "https://arxiv.org/abs/2412.04403", "从 task loss 到 task performance。"], + ["2024", "The Llama 3 Herd of Models", "https://arxiv.org/abs/2407.21783", "超 Chinchilla TPP 的开放实践。"], + ["2024", "DeepSeek-V3 Technical Report", "https://arxiv.org/abs/2412.19437", "MoE、FP8 与系统协同。"], + ["2025", "Kimi K2: Open Agentic Intelligence", "https://arxiv.org/abs/2507.20534", "token efficiency、MuonClip 与改写。"], + ["2025", "Overtrained Language Models Are Harder to Fine-Tune", "https://arxiv.org/abs/2503.19206", "base loss 与后训练可塑性分离。"], + ["2026", "Data-Constrained LM Pretraining", "https://arxiv.org/abs/2606.06888", "SoftQ 与模型—数据耦合。"], + ["2026", "DeepSeek-V4", "https://arxiv.org/abs/2606.19348", "百万上下文的新缩放变量。"], + ["2026", "Kimi K3: Open Frontier Intelligence", "https://arxiv.org/abs/2607.24653", "双轴扩展与 2.5× family claim。"], +]; +--- + + +
+
+
+

SCALING / 04 EMPIRICAL LAWS & ENGINEERING

+

更大为什么有效,
又为什么不是越大越好?

+

+ Scaling law 不是一句“堆算力”。它要说明横轴是什么、纵轴是什么、固定了什么, + 以及一条从小实验外推到昂贵训练的曲线,究竟有多大误差、在哪些条件下会失效。 +

+
+
+
LEDGERS
9 张不能混的账
+
CORE SOURCES
29 个一手节点
+
LINEAGE
2017 → 2026
+
LAB
4 个独立实验
+
SPOTLIGHT
DeepSeek × Kimi
+
+
+
+ +
+ + +
+
+

00 NINE LEDGERS

+

第一步不是画曲线,而是给横轴、纵轴和“最优”补全单位

+

+ 同样写着 “scaling”,可能是在研究训练 loss、唯一数据、激活参数、累计推理请求或 RL FLOPs。 + 坐标不同,最佳决策甚至会朝相反方向移动。下面九张账是本章的防混淆协议。 +

+ +
+ {ledgers.map(([code, title, body], index) => ( +
+ {code}

{title}

{body}

+
+ ))} +
+ +
+ 一句话定义 +

+ Scaling law 是在一个明确的模型族、数据分布、训练 recipe 和指标下, + 用较便宜的实验拟合规模规律,再对未训练的大 run 做带不确定性的预测。 +

+
+
+ +
+

01 POWER LAW INTUITION

+

为什么 log-log 图上常出现一条直线?

+

+ 许多实验观察到可约误差随资源 x 近似按 x 下降。 + 取对数后,乘法变加法、指数变斜率,所以跨多个数量级的弯曲关系会变成近似直线。 +

+ +
+
+ GENERIC FORM + L(x) = L∞ + A · x−α +
+
L∞
当前实验族的不可约下界
+
A
数据、架构、tokenizer 决定的垂直位移
+
α
资源翻倍时,loss 下降有多快
+
+
+
+
+ LINEAR VIEW + + + + RESOURCE x + +
+ log +
+ LOG–LOG VIEW + + + + LOG x + slope = −α + +
+
+
+ +
+
翻倍不是翻倍能力

若 α 很小,每次翻倍只改善一点;跨越 10³–10⁶ 倍资源后,累积效果才显著。

+
直线不是永恒真理

数据分布、架构、优化器或指标改变后,前因子、指数、下界乃至函数形状都会改变。

+
拟合内不等于外推准

十个点能画出漂亮直线;真正的验证是把更大的目标 run 留到最后再揭晓。

+
+
+ +
+

02 2017 → 2026

+

从“数据多一点会更好”,到训练前先做模型家族搜索

+

+ Scaling laws 不是 GPT-3 后突然出现。2017 年的跨任务经验、2018 年的大 batch 统计, + 先把可预测性与训练效率摆上桌;语言模型只是把实验推到更大的数量级。 +

+ +
+ {history.map(([year, title, body], index) => ( +
+ + {String(index + 1).padStart(2, "0")} +

{title}

{body}

+
+ ))} +
+ + +
+ +
+

03 KAPLAN 2020

+

经典坐标建立:参数、数据、计算各自都能形成平滑幂律

+

+ Scaling Laws for Neural Language Models + 在 WebText2 和一族 Transformer 上分别研究参数受限、数据受限与计算受限的情况。 + 论文把 “规模有效” 变成了可拟合、可规划的工程问题。 +

+ +
+
+ PARAMETER-LIMITED + L(N) ∝ N−0.076 +

N 是 non-embedding parameters;需有足够数据并训练到接近收敛。

+
+
+ DATA-LIMITED + L(D) ∝ D−0.095 +

D 是 Token;常数依赖 WebText2、词表与 tokenizer。

+
+
+ COMPUTE-OPTIMAL + Nopt ∝ C0.73 +

该 recipe 下,大部分新增算力被分给更大的模型,数据增长较慢。

+
+
+ +
+
+ 当年的结论 + 更大的模型更 sample-efficient,compute-optimal 训练应偏向大模型并较早停止。 +
+
+ 今天不能省略的条件 +

+ 固定 3,000-step warmup、last-layer FLOPs 计数与不同规模的优化器调参方式都会影响谷底。 + 2024 年复现实验证明,recipe 公平性可以改变看到的指数。 +

+
+
+
+ +
+

04 CHINCHILLA 2022

+

同样训练 FLOPs,70B 认真读更多数据,可以胜过 280B 的欠训练模型

+

+ Training Compute-Optimal Large Language Models + 不只训练一个大模型,而是用三套方法寻找多个固定预算下的最优 N × D 配比。 + 三套结果共同指向:算力增长时,参数与 Token 应近似同比例增长。 +

+ +
+
+ PARAMETRIC LOSS + L(N,D) +
+
不可约E数据分布底噪
+ + +
模型项A / Nα容量不够
+ + +
数据项B / Dβ训练不够
+
+ +
+
方法实验/拟合方式N exponentD exponent
+ {approaches.map(([index, title, n, d, body]) => ( +
+ {index} +

{title}{body}

+ {n} + {d} +
+ ))} +
+ +
+
TOKENS / PARAMETER一个经验尺,不是自然常数
+
+ 1严重欠训 + ≈20Chinchilla 表 3 附近 + 200小模型长训练 + 2,000部署导向过训练 + 10,000论文探索边界 +
+

+ 表 3 的 1B→20.2B Token、10B→205.1B、67B→1.5T 形成约 20 TPP 的实用近似; + 它不保证跨数据质量、tokenizer、MoE、优化器或部署目标保持不变。 +

+
+
+ +
+

05 ISOFLOP METHOD

+

谷底不是用公式猜出来的,而是用很多次小训练“围”出来的

+

+ 固定一笔 compute budget,模型变大时能看的 Token 必须变少。最小模型可能容量不足,最大模型可能数据不足, + 中间就形成一条 U 型 IsoFLOP 曲线。对多个预算重复,连接谷底才得到 compute-optimal frontier。 +

+ +
+
+ + 不同训练算力预算下的 IsoFLOP U 型曲线 + + + + + + + + + + + + MODEL SIZE N · LOG + VALIDATION LOSS + OPTIMAL FRONTIER + +
+
    +
  1. 01
    选预算

    至少多个跨数量级的训练 FLOPs。

  2. +
  3. 02
    扫配比

    每个预算都要覆盖谷底两侧。

  4. +
  5. 03
    调 recipe

    不同规模的 LR、batch、warmup 需公平。

  6. +
  7. 04
    找谷底

    记录最优 N、D 与最终 loss。

  8. +
  9. 05
    真正外推

    用未参与拟合的大 run 检查误差。

  10. +
+
+ + +
+ +
+

06 REPLICATION & RECONCILIATION

+

“Kaplan 错、Chinchilla 对”太简单:训练 recipe 本身就在改变曲线

+

+ 2024 年两条复现路线把争议从口号拉回实验细节。 + Chinchilla replication 检查原论文 Approach 3 的拟合; + Resolving Discrepancies 则从 Kaplan 风格训练重做实验。 +

+ +
+
+ REPLICATION ATTEMPT +

精确参数和置信区间有问题

+
    +
  • 正文、TeX 与重建数据的参数不完全一致;
  • +
  • 原报告的 Approach 3 置信区间异常窄;
  • +
  • 重新拟合后,近等比例扩展仍与 Approach 1/2 相容。
  • +
+ 不是“Chinchilla 被推翻” +
+
+ KAPLAN → CHINCHILLA +

三项修正让指数明显移动

+
    +
  • 是否计入最后一层 / vocabulary FLOPs;
  • +
  • 固定 warmup 对小模型是否过长;
  • +
  • 是否做 scale-dependent optimizer tuning。
  • +
+ recipe 是 scaling law 的一部分 +
+
+ +
+
固定 3,000-step warmup

小模型大量训练仍在 warmup

+ +
小模型看起来不划算

谷底被推向更大模型

+ +
N exponent 变大

像是“规模定律”,实含 recipe 偏差

+
+ +
+ Scaling law 最值得学习的不是某个小数点,而是实验协议:定义、覆盖、调参、留出、误差条和失败条件。 +
+
+ +
+

07 DATA-CONSTRAINED REGIME

+

Seen Token 是系统付出的计算,Unique Token 才是第一次见到的信息

+

+ Scaling Data-Constrained Language Models + 用 UD 表示唯一数据,用 RD 表示重复次数: + D = UD × (RD + 1)。这个拆分让“训练了多少 Token”和“拥有多少新语料”不再混写。 +

+ +
+
+ UNIQUE DATA +
UD
+

第一次出现的内容;筛选和去重决定底层分布。

+
+ × epochs +
+ SEEN TOKENS +
D
+

训练系统真实处理的量;每次重复仍付完整算力。

+
+ +
+ EFFECTIVE SIGNAL +
Deff
+

不可直接测量的教学概念;重复、质量与正则化会改变它。

+
+
+ +
+
+ 论文实际报告 +
    +
  • 400+ 个模型,10M–9B 参数;
  • +
  • 最多 900B training Token;
  • +
  • 其设置中,约 4 epoch 内与等量 unique data 的差距可能很小;
  • +
  • 继续重复的边际收益最终趋近于零。
  • +
+
+
+ 不能改写成 +
    +
  • “任何语料重复四遍都无害”;
  • +
  • “第五遍开始完全没用”;
  • +
  • “改写一遍等于得到一个新 Token”;
  • +
  • “互联网数据将在某个固定年份耗尽”。
  • +
+
+
+ +

+ 2026 年的 SoftQ 进一步让模型与有限数据项发生耦合, + 并研究强权重衰减与 masked-input regularization。它是数据受限前沿的新证据,不是已定型的新常数。 +

+
+ +
+

08 OVER-TRAINING & DEPLOYMENT

+

训练最省算力的模型,未必是一生服务最省算力的模型

+

+ Chinchilla 只优化训练。如果一个模型会被调用十亿次,更小模型即使预训练更久, + 每次推理节省的计算也可能把额外训练成本赚回来。 +

+ +
+ TOTAL LIFETIME COST +
+ Ctotal= + Ctrain+ + requests × Cinference +
+

目标函数一变,最优点就可以从“大模型、少训练”移动到“小模型、长训练”。

+
+ +
+
+ TRAIN-ONLY OPTIMUM +
N
+

参数与数据在固定训练 FLOPs 下配平;不关心模型上线后调用多少次。

+
+
+ INFERENCE DEMAND ↑ + + 最优模型趋向更小、训练 Token 趋向更多 +
+
+ LIFETIME OPTIMUM +
N
+

用更多预训练摊薄每次调用;最终位置依赖流量、上下文、batch、硬件和寿命。

+
+
+ +
+
+ BEYOND CHINCHILLA +

10–10,000 TPP

+

+ Sardana et al. 训练 47 个 150M–6B 模型, + 在研究范围内没有看到极高 TPP 的 loss 完全停止改善;这不证明无限长训。 +

+
+
+ OVER-TRAINING LAWS +

104 models · 3 datasets

+

+ Gadre et al. 发现多个 token multiplier 的 + reducible-loss 曲线近似平行;aggregate downstream error 比单任务更可预测。 +

+
+
+ NEW FAILURE MODE +

Base loss ≠ Adaptability

+

+ Catastrophic overtraining 提醒: + 更低预训练 loss 可能伴随后续 fine-tuning 更困难,两阶段目标必须分账。 +

+
+
+
+ +
+

09 EMERGENCE DEBATE

+

“突然会了”可能是真机制,也可能只是评分尺把平滑曲线折成台阶

+

+ Emergent Abilities 系统记录多项任务在规模上从近随机跃升。 + Mirage 随后证明,非线性或不连续指标本身就能制造这种外观。 +

+ +
+
+ 同一底层 per-token 能力 + + + + +
+ 通过不同评分尺 +
+
TOKEN EDIT DISTANCE连续
+
EXACT MATCH很陡
+
PASS / FAIL阶跃
+
+
+ +
+
先换连续指标

Token-level、Brier score、edit distance,检查底层进展是否仍有拐点。

+
再补采样与方差

稀疏规模点和高方差 benchmark 很容易把噪声看成阈值。

+
最后谈机制改变

若多个连续指标、种子和数据集都出现稳定转折,才追查数据或网络机制。

+
+ + +
+ +
+

10 BEYOND DENSE N × D

+

MoE 之后,一个“参数量”已经不能同时说明容量、计算与系统成本

+

+ Dense 模型里,参数量常能粗略代理每 Token 计算。MoE 把这条绑定拆开:模型可以拥有巨大总容量, + 每个 Token 只激活一小部分;但未激活参数仍需存储,路由还会引入通信和负载不均。 +

+ +
+
+ CAPACITYNtotal

模型能装下多少专家与知识

+
+
ONE TOKENroute → active experts → combine
+
+ COMPUTENactive

该 Token 实际进入多少参数

+
+
+ SYSTEMbytes · imbalance

权重、dispatch、最慢 rank 与拓扑

+
+
+ +
+
DENSE PRETRAINN · D · C · L

经典 scaling law 主轴。

+ +
SPARSE / CONTEXTNtotal · Nactive · S

容量、激活计算与序列长度。

+ +
POST-TRAIN / SERVERL FLOPs · test-time · requests

数据生成、搜索和生命周期成本。

+
+ +

+ 因此 K3 报告所说的“双轴 scaling”——扩大预训练 foundation,同时扩大 RL、reasoning effort 与 agent 协作—— + 不能被压回一条 L(N,D)。它们优化不同目标、消费不同数据、产生不同状态。 +

+
+ +
+

11 DEEPSEEK SPOTLIGHT

+

DeepSeek 的亮点:不仅拟合模型和数据,还把超参数与真实算术放进搜索

+

+ DeepSeek LLM §3 的重要性在于把 scaling study + 变成训练大模型前的工程程序:先搜索 batch / LR,再决定模型—数据配比,并用更贴近算术的 M 替代参数数。 +

+ +
+
+ HYPERPARAMETER LAWS + ηopt = 0.3118 · C−0.1250 + Bopt = 0.2920 · C0.3271 +

系数只属于论文单位与实验族,不是通用配置。

+
+
+ MODEL SCALE PROXY + M = 72Ld² + 12LdS + C = M · D +

把 attention 随 sequence length 的计算纳入 non-embedding FLOPs/token。

+
+
+ ISOFLOP RESULT + Mopt = 0.1715 · C0.5243 + Dopt = 5.8316 · C0.4757 +

数据分布改变时,论文 §3.3 的 exponent 也会改变。

+
+
+ +
+ {deepseekSteps.map((step, index) => ( +
+ + {String(index + 1).padStart(2, "0")} +

{step.title}

+ {step.formula} +

{step.body}

+
+ ))} +
+ + +
+ +
+

12 KIMI K2 → K3

+

从每个 Token 的价值,到整个模型家族的 2.5× scaling-efficiency claim

+

+ Kimi K2 把高质量数据有限写进动机; + Kimi K3 则对包含新架构、新数据与新训练配方的模型家族重新做 scaling study。 +

+ +
+ {kimiSteps.map((step, index) => ( + <> +
+ {step.tag} + {String(index + 1).padStart(2, "0")} +

{step.title}

+

{step.body}

+
+ {index < kimiSteps.length - 1 && } + + ))} +
+ +
+
K3 FIGURE 7≈2.5×

overall scaling efficiency vs K2

+
+
它是

作者在 held-out OOD validation loss–FLOPs fitted curves 上报告的 family-level 横向差异。

+
它包含

KDA、AttnRes、Stable LatentMoE、数据与训练 recipe 的合计影响。

+
它不是

单个组件消融、吞吐 2.5×、参数少 2.5×、所有 benchmark 都提升 2.5×。

+
仍未知

足以独立重建全部曲线的原始 run 点、拟合代码、置信区间与完整数据配比。

+
+
+ +
+ K3 最值得带走的方法不是“cosine 永远优于 WSD”,而是不同 schedule 必须各自寻找近优 batch 与 peak LR,才能公平比较。 +
+
+ +
+

13 INTERACTIVE LAB

+

亲手移动“最优点”,比背 20 TPP 更接近真实 scaling study

+

+ 四个实验分别核算训练分配、生命周期成本、数据复用和指标变换。所有输出都是确定性教学模拟; + 它们展示因果方向和边界,不预测任何真实模型的 loss、价格或能力。 +

+ +
+ +
+

14 CURVE READING PROTOCOL

+

看到一张漂亮 scaling 图,按这 12 个问题逐项盘问

+ +
+
01纵轴是什么?

CE、BPB、PPL、平均错误率或单任务 accuracy?

+
02横轴是什么?

参数、Token、FLOPs、GPU hour、请求还是 test-time compute?

+
03N 怎样数?

total、non-embedding、active,是否包含 embedding / ViT?

+
04D 怎样数?

unique、seen、重复、合成,tokenizer 是否一致?

+
05C 怎样数?

6ND、真实算子 FLOPs,还是硬件峰值与 GPU hours?

+
06实验族可比吗?

架构、数据、优化器与训练稳定机制是否一起变化?

+
07配比扫到谷底两侧了吗?

没有两侧就无法证明找到了最优点。

+
08超参公平吗?

不同规模与 schedule 是否各自调 LR、batch、warmup?

+
09目标点被留出了吗?

拟合内漂亮不代表跨 100× compute 外推准确。

+
10误差条在哪里?

seed 方差、bootstrap CI、残差和版本是否公开?

+
11最优针对什么?

训练 loss、部署总成本、下游平均还是 post-training 后能力?

+
12作者没有公开什么?

原始点、拟合代码、数据配比与失败 run 都影响可信度。

+
+ +
+ FINAL MENTAL MODEL +

+ 曲线告诉你在当前条件下资源如何换 loss; + 谷底告诉你当前目标怎样分配预算; + 误差条告诉你能信多远; + 边界告诉你换数据、架构、阶段或经济目标后必须重新实验。 +

+
+
+ +
+

15 PRIMARY-SOURCE READING CHAIN

+

29 个节点:先读主干,再沿争议与模型谱系深入

+

+ 推荐顺序:Hestness → Kaplan → Chinchilla → data-constrained / inference-aware → + replication / reconciliation → DeepSeek LLM → K2 / K3。涌现与 broken laws 可作为平行争议线。 +

+ +
+ {paperChain.map(([year, title, url, note], index) => ( + + + {String(index + 1).padStart(2, "0")} + {title} +

{note}

+
+ ))} +
+ +
+ NEXT / CHAPTER 05 +

曲线告诉我们需要多少数据;下一章追问这些 Token 怎样采集、过滤、去重、混合和防污染。

+

Scaling law 把数据写成 D,数据工程则解释为什么两个同样大的 D,可能有完全不同的学习价值。

+
+
+
+
+ + +
diff --git a/src/styles/global.css b/src/styles/global.css index b3bada9..792c5b5 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -201,7 +201,7 @@ .top-nav { display: flex; align-items: center; - gap: 34px; + gap: clamp(12px, 1.55vw, 26px); } .top-nav a {