收官 · 第 25 / 25 课 · 总结拼装课

总结拼装课:24 课零件,拼成一台真模型

真权重交互 复用已加载权重(未加载则首次点击确认下载 28.1MB) 建议 20–40 分钟

学完这课你能

  1. 把前 24 课的零件拖上画布、拉线拼成 pythia-14m 完整计算图,拼错时能读懂每条提示说的是哪一步。
  2. 脱稿复述一条 token 的旅程:文本 → id → 128 维残差流 → 6 层并行残差 → 归一 → 50304 个分数 → 采出一个字。
  3. 亲手运行你拼的模型——它就是 EleutherAI 发布的 pythia-14m 本尊,权重跑在你的浏览器里。

前 24 课把一台大模型拆成了零件:token、嵌入、注意力、FFN、归一化、残差流、采样、量化……零件全摊在桌上,拼装台就在下面,亲手把它拼回去。

01零件清单与拼装路线

零件全认一遍:左侧模块库里躺着 分词器(第 1 课)、词嵌入(第 2 课)、变换层 ×6(第 5–11 课的注意力、多头、FFN、归一化、RoPE、残差流全封在这一件里)、最终归一(第 8 课)、输出投影(第 3 课见过的 logits 从这来)、采样器(第 21 课),外加一件可选的 int8 量化器(第 23 课)。把它们连成一条线,就是 pythia-14m 的完整计算图。

五层路线图上的每一站,都能在拼装台上找到自己的位置:

  • 入门层(第 1–4 课)——机器的进出口:分词器、词嵌入、输出投影、采样器,文本变成 token 进来,概率变成 token 出去。
  • 解剖层(第 5–11 课)——机器的躯干:注意力搬信息、FFN 深加工、归一化踩刹车、残差流当主干,打包成变换层,一拖就是 6 个。
  • 锻造层(第 12–16 课)——躯干里数字的来历:拼装台不负责练它,但你拖动的每一个权重矩阵,都是预训练一把一把磨出来的。
  • 调教层(第 17–20 课)——换一份权重的性格:同一具躯干,base 模型只会补全,SFT 之后学会听话——拼装台拼的是结构,性格住在权重里。
  • 发力层(第 21–24 课)——油门与减重:温度/top-k 是采样器的旋钮,int8 量化给权重瘦身,没有 KV-cache 的慢在第 22 课算过账。

开拼之前,先读半页说明书——有三处,真实架构和教科书画的不一样,拼装台按真实架构判定。

02拼装说明书:三处和教科书不一样

第一处:残差是并行的,不是串行的。第 10 课讲过两种布局:GPT-2 教科书是串行——注意力加完,中间结果再过 FFN,加第二次;pythia-14m 是并行——注意力和 FFN 各自从同一份主干 x 出发(各自先过自己的 LN),两份输出同时加回主干。最容易看错的位置在 LN₂:并行布局里它吃的是主干 x,不是注意力的输出。对照图画出来是这样:

GPT-2 教科书:串行——两站排队 pythia-14m:并行——两支同时加 x 主干 LN₁→注意力 第一站 中间结果 x₁ LN₂→FFN 第二站 h′ 出层 LN₂ 吃的是加完注意力的中间结果 x₁ x 主干 取 x 取 x LN₁→注意力 分支一 LN₂→FFN 分支二 主干 x 直通(不加工) h′ 出层 LN₂ 吃主干 x——不是注意力的输出 一句话公式:并行 h′ = x + Attn(LN₁(x)) + FFN(LN₂(x))——x 加两份改动,一次加完
对照 左:GPT-2 教科书的串行残差,两站排队,LN₂ 吃加完注意力的中间结果 x₁;右:pythia-14m 的并行残差,两支同时加回,LN₂ 吃主干 x。画布判定按右边这张来。

第二处:RoPE 不是独立零件。第 9 课转过的那两片旋转盘,在 pythia 里不住在流水线上——它藏在注意力卡内部,打分前把 Q/K 每头前 8/32 维转个角度(部分旋转)。所以模块库里没有「RoPE」可拖:找不到不是漏了,是它本来就不单独接线。

第三处:位置编码有两套方案,别混。第 13–16 课那只微型模型用的是可学习位置向量——给每个位置查一张表;pythia 用的是 RoPE——没有位置表,位置随 Q/K 的旋转进算式。两套都合法,是同一道题的两种解法;拼装台按 pythia 的真实做法判定。

03按下运行之前:停止符、慢的真相、油门与减重

模型怎么知道停?靠一个特殊的 token:<|endoftext|>,id 是 0,在 pythia 里既当句首(bos)也当句尾(eos)。连跑生成时,采样采到 id 0 就收工。这是全课程第一次讲「停止」:前 24 课都在看模型怎么往下写,只有这里看它怎么刹车。

这台引擎没有 KV-cache。第 22 课算过:没有笔记,每生成一个 token 都要把整段前缀全量重算一遍。14M 的玩具模型毫秒级出一个字,感觉不到慢;但连跑 8 步时每步耗时就摆在结果区——如实标注,不假装有 cache。

油门与减重都在运行条边上。温度和 top-k 滑杆是第 21 课的采样旋钮——logits 已经在手,拖动只重采样、不重算前向;拖一件 int8 量化器上画布(第 23 课),前向就改走量化路径:权重口径 28.1MB→14.1MB 账面,top-1 漂没漂移当场对照,移除即恢复 fp16。

对拍锚点:默认那句 The capital of France is,低温下 pythia-14m 把约 65.6% 押给「␣the」——和第 3 课线上实测一致。你在拼装台上跑出的 top-5 应当与它对得上(±0.5% 浮点差内)。

交互实验:拼装台(拖模块 · 连线 · 运行点亮)

引擎加载中…

从模块库拖出零件(或点一下放进对应的列),从「文本输入」拉线连到「输出 token」;端口三色——橙 token、蓝张量、紫 logits,同色才能相连。拼对了「运行」按真实前向顺序逐层点亮;点卡片看公式与出处课。画布自动存进度,刷新不丢。

拼装台挂载点 · 需要启用 JavaScript

04收官:从零件回到整机

盘个总账:入门层给了进出口——分词器、词嵌入、输出投影、采样器;解剖层给了躯干——6 个变换层加最终归一;锻造层说清了每个矩阵里数字的来历;调教层换上了会听话的性格;发力层装好油门与减重。五层路线图的每一站,此刻都摊在你的拼装台上,连成一条真实的流水线。

更重要的是:你拼的不是示意图,就是 EleutherAI 发布的那个 pythia-14m 本尊。28.1MB 真权重跑在你的浏览器里,逐层点亮的是真实前向,top-5 是真实概率——第 3 课见过的那台黑盒机器,现在每一根线都是你亲手连的。

25 课到这里全部完结。还想继续玩:去试玩场拿真 API 把采样参数拧个够;或者回到课程目录,从第 1 课重走一遍——这次你会认得路上每一块零件。拆解大模型,完。