Arganzheng's Blog

stay hungry, stay foolish

预训练(05):训练配方与稳定性:学习率、batch、调度与 loss spike

Pretraining Recipes and Training Stability: Learning Rate, Batch Size, Schedules and Loss Spikes

前三篇定了 tokenizer、模型多大、数据多少与怎么配。剩下的是怎么训:一张十几行的超参表——峰值学习率、warmup 步数、batch 大小与它的增长计划、调度曲线的形状、AdamW 的两个 β、weight decay、梯度裁剪阈值、初始化标准差——外加几个防止训练崩掉的开关。这张表决定了几千万 GPU 小时是训出一个模型还是训出一条发散的 loss 曲线。 这些数字大多来自 L3 层的深度学习基础(方差传播、Adam 的二阶矩、warmup 的必要性),本篇不重推它们,只做两件事:把公开配方里的每个数字放到同一张表上比较,算出它们隐含的步数、每步时间、checkpoint 大小、一次 spike 的代价;再把”训练不稳定”拆成三个可以单独度量、单独修的机...

预训练(04):预训练数据工程:从 Common Crawl 到 15T token,去重、过滤与配比的账

Pretraining Data Engineering: From Common Crawl to 15T Tokens, the Arithmetic of Deduplication, Filtering and Mixing

第三篇的结论是:算力固定时模型应该更小、数据应该更多,而且唯一 token 至少要有目标数据量的四分之一。Llama 3 的 15T、Qwen3 的 36T 不是从哪里”下载”来的——公开网页抽出正文后约有 240T token,其中能进训练集的只有百分之几,再经过模型打分留下的”高质量”部分不到 1%。从 240T 到 15T 之间是一条几十个步骤的管线:URL 过滤、正文抽取、语言识别、启发式规则、模型打分、三个粒度的去重、配比、多阶段课程、污染检测。 这一篇讲这条管线。它是预训练里唯一不在 GPU 上跑的大工程,成本以 CPU 核·小时与工程师月计;它的每个决定——去重的阈值、过滤的严格程度、各来源的配比——都直接改变 loss,且改变的幅度常常大于结构上的...

预训练(03):Scaling law:从 Chinchilla 到"过训练",算力怎么分给参数与数据

Scaling Laws: From Chinchilla to Over-Training, Splitting Compute between Parameters and Data

《现代 LLM 结构》第二篇给出了训练一个模型的算力:\(C \approx 6ND\),参数量乘 token 数再乘 6。这个公式把一次预训练的成本压成两个变量的乘积,但没有说怎么分——同样 \(10^{24}\) FLOPs,是 100B 参数训 1.7T token,还是 10B 参数训 17T token?两者的 loss 差多少?训完之后哪个更便宜? Scaling law 回答的就是这个问题。它是过去五年里预训练最重要的一组经验规律:loss 随参数量、数据量、算力各呈幂律下降,幂律的指数决定算力该怎么分,而分法在 2020、2022、2024 各改了一次——Kaplan 说模型要大,Chinchilla 说数据要多,Llama 3 之后的所有模型都在...

预训练(02):分词与词表:BPE、词表大小与 token 效率

Tokenizers and Vocabulary: BPE, Vocabulary Size and Token Efficiency

《现代 LLM 结构:从 GPT-2 到今天的演进》把一个 LLM 的成本算成了 token 的函数:每个 token 多少 FLOPs、多少字节 KV、prefill 多长、decode 多久。”token 数”在所有公式里都是自变量——它从哪来,那八篇一直没有问。它来自 tokenizer。 本系列是那张成本表的训练侧:对象从”模型作为一个计算对象的结构”转到”这个模型是怎么训出来的”——分词与词表、scaling law、数据工程、训练配方。方法不变:写出公式,代入真实模型的数字,解释数字对系统意味着什么。tokenizer 排在端到端那一篇之后、其余各篇之前,因为它同时决定成本表的两端:词表大小 \(V\) 直接进参数量与 lm_head 的 FLOPs,...

预训练(01):一次预训练是怎么跑起来的:从两个网页文件到一个会续写英文的模型

Pretraining End to End: From Two Common Crawl Files to a Model That Writes English, on a Laptop

后面四篇各讲预训练的一个环节——分词、scaling law、数据、配方——每篇都会把公式代进 Llama 3 和 DeepSeek-V3 的数字。但如果你从来没有见过一次预训练从头到尾是什么样,那些数字就没有地方放。所以这一篇先走一遍:在一台 MacBook 上,从两个 Common Crawl 的原始网页文件出发,过滤、去重、训 tokenizer、打包、选模型大小、定配方、训练、评测,最后得到一个会续写英文的小模型。每一步都回答三个问题:做什么、为什么要做、做完之后剩下多少——文档数、字节数、token 数、参数量、loss。每一步末尾指向后面展开它的那一篇。 它与《Transformer 原理与实现》第四篇(nanoGPT 训莎士比亚)的区别:那一篇的数据...

预训练:从 tokenizer 到训练配方(总纲)

Pretraining: Tokenizers, Scaling Laws, Data Pipelines and Training Recipes

内容简介 《预训练:从 tokenizer 到训练配方》是一组共五篇正文加一篇总结的系列文章,面向要做或要读懂一次预训练的算法工程师,以及要为一次预训练做容量与 I/O 规划的训练基础设施工程师。第一篇先在一台笔记本上把一次预训练从原始网页到能续写英文的模型完整走一遍,让后面四篇的每个公式与数字都有落脚的地方。它是《现代 LLM 结构:从 GPT-2 到今天的演进》那张成本表的训练侧:那十篇把 token 数、参数量、数据量当作给定的输入,算出模型每一步算多少、读多少、存多少;本系列讲这几个输入各自是怎么定下来的——tokenizer 决定 token 数,scaling law 决定参数量与数据量的分配,数据管线决定有多少 token 可用、怎么配,训练配方决定...

现代 LLM 结构:系列总结与通关自测

Modern LLM Architecture: Series Recap and Final Self-Test

十篇正文从 GPT-2 到今天的模型,回答现代 LLM 改了什么、为什么、花了什么——01 先读 Llama / DeepSeek / VLM 的真实配置并数出参数量,02 把参数量换成算量、字节与时间(后面所有专项共用的尺子),03–10 再逐项展开位置外推、attention 与 KV、长上下文结构、MoE、MTP、投机解码、多模态与浮点格式。量化与 LoRA 已并入算法地图的《高效推理与压缩》与《LoRA 专题》。完整路线见系列总纲。 本文不讲新内容,做三件事:把十篇正文压成一张表并逐篇回顾,把贯穿全系列的几条线拎出来,然后给一套三段式的通关自测——判断与计算、跨篇综合、面试题。各篇末尾的自测检验的是”这一篇读懂了没有”,这里检验的是”十篇能不能连起来用”。...

现代 LLM 结构(10):浮点格式、数值稳定性与混合精度

Floating-Point Formats, Numerical Stability and Mixed Precision

本篇在系列中的位置。 现代 LLM 结构系列的最后一篇。前面所有的字节数都默认每个数 2 字节,本篇讲这 2 字节里存了什么、换成 FP16 / FP8 会在哪里出数值问题、混合精度训练为什么能工作。它是两条线的交接处:训练状态的字节数接到《预训练》与《大规模训练工程》;把权重、激活与 KV 压到更少的位(量化)在算法地图的《高效推理与压缩》第 03 篇起。完整地图见总纲。 第四篇的 train.py 里有两行一直没解释:torch.amp.autocast(dtype=bfloat16) 与 GradScaler(enabled=(dtype == "float16"))——为什么训练要用两种精度、为什么 fp16 需要一个放大器而 bf16 不需要。前...

现代 LLM 结构(09):多模态:vision encoder 的算量与 image token 的 KV 代价

Multimodal LLMs: The Cost of Vision Encoders and Image Tokens

本篇在系列中的位置。 现代 LLM 结构系列的第九篇。前面讲的都是文本模型的部件与成本,本篇先算输入侧的 vision encoder、connector、image token 与 KV,再看输出侧的离散图像自回归、diffusion、解耦生成和语音 token 成本。本篇只算账;视觉编码、语音、扩散模型与自回归图像生成的完整机制,见算法地图的《多模态》系列。完整地图见总纲。 前九篇讨论的模型只有一种输入:token id。它查一张 embedding 表得到向量,然后进入 decoder。这个前提决定了前面所有的账——参数量、FLOPs、KV cache——都只与 token 数有关,而 token 数由 tokenizer 决定。 多模态模型打破了...

现代 LLM 结构(08):投机解码——草稿、验证与收益条件

Speculative Decoding: Drafts, Verification and When It Pays Off

本篇在系列中的位置。 现代 LLM 结构系列的第八篇。第 02 篇算出 batch 小时 decode 受带宽限制、Tensor Core 大多空闲;第 07 篇的 MTP 模块给了一个现成的草稿来源。本篇不改结构、不改数值格式,改的是解码流程:先猜几个 token,再用一次前向验证,输出分布严格不变。LoRA 不在本系列:参数高效微调的账在《LoRA 专题》。完整地图见总纲。 第二篇算过 decode 的账:batch 为 \(B\) 时权重 GEMM 的算术强度约等于 \(B\),距 H100 的 ridge point 295 差两个数量级,每步时间被”把权重读一遍”钉在 4.8 ms 上,Tensor Core 几乎空转。第三篇的 MTP 模块在训...

×