Chapter 0 — 出发前的准备

预计时间:45 ~ 90 分钟
本章目标:跑通课程的第一次 smoke test,并进入 Lab01 的真实工作目录

正式课程从下一章开始,但在那之前,你需要先把起跑线摆正。这里的“准备”不是为了让你多看几页导言,而是为了确保你接下来读到的每一章、写下的每一行代码、看到的每一次测试结果,都发生在正确的工作环境里。

这一章做完以后,你不需要已经懂张量,也不需要已经懂 attention。你只需要处于一个清楚、稳定、可继续推进的状态:你的机器能编译后面的 lab,你知道正式课程从哪里开始,你能看到第一章对应实验的初始输出。

0.1 这一章结束后,你应该达到什么状态

本章完成时,你应当同时满足下面四条:

  1. 你的机器上有可用的 gccmake
  2. 你能进入 course/practice/labs/lab01-step0/
  3. 你能执行 make clean && make test
  4. 你知道第一次看到 3 FAIL + 1 PASS 是正常现象,不是环境损坏。

这四条里,最后一条尤其重要。因为这门课不是让你一上来运行一个已经写完的程序,而是让你从一个可编译、可验证、但尚未完成的骨架出发,逐章把项目做出来。

0.2 你现在还不需要懂什么

零基础课程最容易犯的错误,就是在开始之前先把读者压进一大堆还用不上的概念里。这里先把边界说清楚。

在这一章,你还不需要理解:

  • 张量的 stride 公式;
  • softmax 为什么要减最大值;
  • attention 的 Q/K/V
  • 反向传播如何算梯度;
  • BPE 为什么能把字符序列压缩成更长的子词。

这些内容都会在后面按顺序出现。你现在真正需要做的,是保证自己已经站在正式课程入口上。

0.3 检查最小工具链

先打开终端,执行:

gcc --version
make --version

如果两条命令都能打印版本信息,说明你的机器已经具备最基本的起步条件。

如果这里直接报 command not found,先不要继续往下做。优先修工具链:

  • macOS:xcode-select --install
  • Debian / Ubuntu:sudo apt install build-essential
  • Windows:优先使用 WSL2,再在 WSL 内安装 build-essential

你不需要在这一章深入理解编译器原理。此刻只要记住一件事:后面的每个 lab 都建立在“make 能驱动 gcc 编译这些 .c 文件”的前提上。

0.4 进入课程目录

从仓库根目录开始,执行:

pwd
ls

你应该能看到仓库根下的 course/ 目录。继续进入:

cd course
ls

这里你会看到主线章节、附录,以及接下来要进入的 lab 目录。

到这一步为止,还只是“进入课程”。真正的起点在下面这一步:跑第一次 smoke test。

0.5 运行第一次 smoke test

请直接执行:

cd practice
bash scripts/bootstrap-practice.sh

这个脚本会帮你完成三件事:

  1. 检查 gccmake 是否存在;
  2. 进入 labs/lab01-step0/
  3. 自动执行一次 make clean && make test

如果你想手动确认它最后到底做了什么,也可以继续执行:

cd labs/lab01-step0
make clean && make test

0.6 第一次看到 FAIL,为什么反而是对的

第一次进入 Lab01 时,你看到的通常不是全通过,而是类似下面这种结果:

[TEST 1] ... [FAIL]
[TEST 2] ... [FAIL]
[TEST 3] ... [FAIL]
[TEST 4] ... [PASS]
3 test(s) FAILED.

这不是坏事。它恰恰说明三件事已经成立:

  1. 代码能编译;
  2. 验证程序能运行;
  3. 第一章需要你补的几个函数还没有写,所以失败被清楚地暴露出来了。

这门课的正式起点,不是“你已经什么都做完了”,而是“你已经进入一个可以开始做第一章的状态”。

0.7 如果这里跑不起来,先查什么

如果 smoke test 没有跑到上面的结果,先按这个顺序排查:

现象 先检查什么
gcc: command not found 编译器没有装好
make: command not found 构建工具没有装好
No such file or directory 当前目录不对
make 阶段失败 先回看编译输出,确认是编译错误还是链接错误
输出和预期差很多 先执行 git status --short,确认工作区是不是已经被改过

如果你只是第一次看到 3 FAIL + 1 PASS,那不属于故障,不需要排错,直接继续下一章。

0.8 本章小结

这一章没有教你模型结构,也没有让你开始写核心算法。它只完成了一件更基础的事:把你准确送到正式课程入口。

现在你已经知道:

  • 机器可以运行这门课的 lab;
  • 第一章对应的实验目录在哪里;
  • smoke test 的正常起始现象是什么;
  • 接下来应该去哪里写第一批代码。

这就够了。后面的解释,从下一章开始才真正进入知识本身。

0.9 下一步

现在直接进入:

  1. Chapter 1
  2. Lab01 的任务说明

从这里开始,课程才真正进入代码。