Esc

返回文章

世界是类魂游戏

Lec 1#

为什么要学这门课#

我们越来越和底层技术脱节了:

  • 最开始的 ML 研究者会手写 CUDA,能掌控自己写的每一层神经网络。
  • BRET 时代后人们开始微调。
  • LLM 时代,我们只需要写 Prompt。在 2026 年,我们已经可以许愿式编程了。

LLM 的 Stack 实际上很小,我们有必要了解全流程,构建出新的东西。

LLM 的集权#

训练 LLM 所需成本越来越大,前沿技术掌握在少数企业手中。

openai 变成 closeai

我们需要注意到,小参数的情况可能无法迁移到大参数上。

ffn 层被 Scaling 后占比更大

面对算力 Gap 的我们#

尽管规模变得非常庞大,但是我们依然在 GPU 上使用 kernel 和并行进行构建,并且使用梯度进行优化。

可以学到直觉(小的)、思维方式(并行、kernel)和运行方式。

屠龙之技。

熟记 the bitter lesson,最大化效率。

五次作业#

作业

分词器#

有一些尝试使用字节代替 token 的工作比如 H-Net 但是目前还是以分词器为主。

注意力是平方复杂度,我们需要更短的序列,就是更高的压缩比。但是往往会受到表达效果的权衡。、

BPE Tokenizer#

首先,把文本变成字节序列。 然后,统计最常见的组合,把它作为一个整体放入词表。 接着,用词表里的新 token 来表示这一对最常出现的组合。 最后,进一步迭代。

其实这还是一个 encoder,让零碎的东西变得可建模。

Kernel(算子)#

PyTorch 调用内置算子在 GPU 上运行,但是实际上在特定硬件上对特定计算做优化永远是有空间的。

现代计算机是存算分离的,我们必须尽量减少搬运。

多 GPU 并行#

假如我们有千卡集群,我们要在不同的主机的不同的 GPU 之间搬运:

  1. 模型权重
  2. 激活值
  3. 梯度
  4. 优化器状态

切分的方式和取舍。

推理 inference#

不管是 rollout 还是 test time scaling 还是合成数据,都非常重要。

prefill and decode。

Lec 2 资源核算#

Q1: 在 1024 张 H100 上训一个 70B 参数、15T tokens 的模型要多久?

A1: 经验公式是:训练每个 token 约需 6N FLOPs,前向 2B,反向4B。

总需求=6×70e9×15e12=6.3e24总需求 = 6 \times 70e9 \times 15e12 = 6.3e24

而查表取 H100 的 1979 TFLOPS(FP8 峰值)除以 2 记作 990 TFLOPs/卡

折损系数 mfu = 0.5,因为有一半的时间是在搬数据,以及各种其他损耗。

每天总算力=990×0.5×1024×24×3600≈144天每天总算力= 990 \times 0.5 \times 1024 \times 24 \times 3600 \approx 144 天

Q2:不考虑任何优化技巧(naive),8 张 H100 用 AdamW 最多能训多大的模型?

A2: 权重,梯度和优化器状态需要被放到 640 G 显存中。

对于每个权重:

  • bf16 储存权重和梯度,共 4B
  • fp32 储存优化器一阶矩和二阶矩,8B

则可训练参数:

640×1024×1024×1024÷12=53B640 \times 1024 \times 1024 \times 1024 \div 12 = 53 B

如果换成 Muom 优化器,每个参数只需要储存一份动量 fp32,也就是说有 1/3 的显存被空了出来。

我们可以训练约 80B 的模型。

MFU#

指导我们怎么优化

先算出逻辑上应该执行的flop数,再看实际 wall clock 时间,根据你的显卡算力做比。0.5 是一个正常的值。 使用被硬件优化过的精度,比如在 H100 上,BF16 要远快于 FP32。

内存受限和计算受限(屋顶线模型)#

计组讲过了。

Lec 3 架构设计#

引用本文

Candlest. CS336 笔记[EB/OL]. (2026-10-31). https://blog.candlest.cc/archives/1033.

BibTeX
@online{candlest2026,
  author = {Candlest},
  title = {CS336 笔记},
  date = {2026-10-31},
  url = {https://blog.candlest.cc/archives/1033}
}