1.2 前三阶段的产物与分工


1.2 前三阶段的产物与分工

本节摘要:后半程不是从零开始,而是从三样"行李"出发:分词器的词表文件、基座模型权重、以及加载它们的分词器对象。本节逐一清点这三样产物的形态与验收方法(一段代码跑通即验收),然后做一次对照回顾:它们与你在 《ht-gpt:从零搭建 GPT 训练与推理实战》里亲手训过的 GPT、在《Happy-LLM:从零训练大语言模型》里推导过的结构是同一族东西——nanochat 只是用了更小的词表与更短的训练。本节末尾给出对齐训练的路标:SFT 之后的 RLHF/DPO/GRPO 不在本书,详见 《深入理解 AI Agent:设计原理与工程实践》第 7 章。

学习目标

阅读完本节,你应当能够:

  1. 列出前三阶段交给后半程的三样产物并各自验收。
  2. 说清 nanochat 基座与你《ht-gpt:从零搭建 GPT 训练与推理实战》基座在词表规模上的差别及其影响。
  3. 知道没有自训基座时的替代获取方式(社区复现权重)。
  4. 复述对齐训练的延伸路标。

一、三样产物与验收

产物 形态 来源 验收方式
词表文件 BPE 词表(约 2000 token,含 merges) 阶段① 加载后能 encode/decode 一段文本
基座权重 checkpoint(模型参数 + 优化器状态) 阶段② 加载后能续写文本、loss 合理
分词器对象 封装词表的 encode/decode 接口 阶段① 与词表文件同源、vocab 尺寸一致

工作区里这三样产物齐不齐,一行命令先看个大概:

# ls_base.sh —— 产物存在性快查(写法示意,目录结构按 0.2 节约定) ls -lh base/tokenizer/ # 期望:词表与分词器配置文件 ls -lh base/model/ # 期望:模型权重 checkpoint

验收脚本(配合 0.2 节的工作区约定):

# check_artifacts.py —— 验收前三阶段产物(写法示意,以官方仓库 README 为准) from transformers import AutoTokenizer, AutoModelForCausalLM import torch TOK_PATH, BASE_PATH = "base/tokenizer", "base/model" tok = AutoTokenizer.from_pretrained(TOK_PATH) print(f"词表大小: {len(tok)}") # nanochat 口径约 2000 ids = tok("The Yangtze is the longest river in China.") print(f"编码: {ids['input_ids']}") # 能编码即验收通过 assert tok.decode(ids["input_ids"]) == "The Yangtze is the longest river in China." model = AutoModelForCausalLM.from_pretrained(BASE_PATH, dtype=torch.bfloat16) prompt = "Once upon a time" x = tok(prompt, return_tensors="pt")["input_ids"] with torch.no_grad(): y = model.generate(x, max_new_tokens=30, do_sample=True, top_k=40) print(tok.decode(y[0])) # 输出像样的英文续写 = 基座验收通过

⚠️ 验收时若输出乱码或复读,先查三件事:词表与权重是否配套(阶段②用的就是这份词表吗)、生成参数是否过贪(temperature 太高)、加载的 dtype 是否正确。基座问题是前半程问题——排障思路详见 《ht-gpt:从零搭建 GPT 训练与推理实战》训练与推理章节,本书不重复。

二、对照回顾:你其实已经训过它

如果你读过或跑过《ht-gpt:从零搭建 GPT 训练与推理实战》,这里的对照表能让你立刻把旧知识接上:

维度 《ht-gpt:从零搭建 GPT 训练与推理实战》的基座 nanochat 的基座 关系
架构 decoder-only GPT decoder-only GPT(124M) 同族
训练目标 下一词预测 下一词预测 相同
数据 中文/自选语料 FineWeb-Edu ~100B tokens 高质量子集 思路同(清洗→分块→打包),规模不同
分词器 自训 BPE 自训 BPE(约 2000 词表) 同原理,词表刻意更小
理论依据 《Happy-LLM:从零训练大语言模型》对应章节 理解注意力、warmup、cosine 衰减等概念,详见《Happy-LLM:从零训练大语言模型》

一句话:nanochat 的前三阶段 = 《ht-gpt:从零搭建 GPT 训练与推理实战》流程的一个"小词表、大数据、固定预算"实例化。因此本书默认你懂以下概念(不懂先补,括号内为指引):注意力与 KV cache(《Happy-LLM:从零训练大语言模型》)、混合精度与梯度累积(《ht-gpt:从零搭建 GPT 训练与推理实战》训练章)、数据清洗与打包(《ht-gpt:从零搭建 GPT 训练与推理实战》数据章)。

词表约 2000 vs 主流几万的差别,在后半程会显形两次:一是同样文本切出的序列更长(每 token 承载信息少),二是中文改造时几乎必然要扩词表(第 8 章)。

三、没有自训基座怎么办

两条替代路径:

  1. 社区复现权重:HuggingFace 上有多个 nanochat 完整流水线的社区复现(含基座与 SFT 后版本),可直接下载作为本书的起点——用它跑第 2~4 章实验毫无障碍。
  2. 任意小 GPT 基座:第 2~4 章的方法(数据形态、loss 掩码、模板对齐)对任何 decoder-only 基座通用;换一份开源小基座照书操作即可,只是第 4 章的 special tokens 要按新分词器重新设计。

💡 本书所有代码把 base/ 当成黑盒目录:里面是你训的、社区下的还是《ht-gpt:从零搭建 GPT 训练与推理实战》的产物,对后半程的脚本一视同仁。三条路的建议优先级:有卡有闲走自训(收获最大,且第 8 章中文化时对分词器的掌控最彻底);想快走社区权重;换第三方基座时唯一要重做的是第 4 章的 special tokens 设计(词表不同,标记也要跟着重设)。

四、对齐训练的路标

SFT 之上还有一层"用偏好信号继续训练"的深水区——RLHF、DPO、GRPO 等。nanochat 后续版本的流水线也包含了对话 RL 阶段(官方仓库 chat_rl.py 一类脚本,接口以官方 README 为准)。本书停在 SFT 与部署,理由有二:一是 100 美元 预算内,SFT 已经能得到"会好好说话"的模型;二是偏好优化自成体系,硬塞进来会挤掉工程细节的篇幅。延伸阅读:详见 《深入理解 AI Agent:设计原理与工程实践》第 7 章后训练,那里以完整的对齐训练为主题展开。

本节要点回顾

  1. 三样行李:词表、基座权重、分词器对象——用一段代码验收,不过关先回前半程排障。
  2. nanochat 前三阶段 ≈ 《ht-gpt:从零搭建 GPT 训练与推理实战》流程的小词表实例化;理论回查《Happy-LLM:从零训练大语言模型》。
  3. 基座可自训、可社区下载、可替换——后半程方法对 decoder-only 基座通用。
  4. 对齐训练不在本书,路标指向 《深入理解 AI Agent:设计原理与工程实践》第 7 章。

行李验收完毕,正式进入后半程第一站——第 2 章解决"拿什么数据教会基座对话"。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U