外观
配套实验与代码
网站可以直接阅读讲义、搜索和操作交互模型。下面的实验在你自己的电脑运行;源码页和下载包由仓库内同一份代码自动生成。先运行基线,再改动一个条件,最后解释观察结果。
下载与环境
| 课程 | 需要的环境 | 阅读与下载 |
|---|---|---|
| 操作系统 | Python 3.10+;官方 xv6 另需 RISC-V 工具链和 QEMU | 源码 · 下载 |
| CSAPP | C11 编译器、make、POSIX 系统 | 源码 · 下载 |
| 分布式 | Python 3.10+ 标准库 | 源码 · 下载 |
| 并行计算 | C++17 编译器、make、线程库;CUDA 为可选内容 | 源码 · 下载 |
| 语言模型 | Python 3.10+、NumPy;CPU 即可 | 源码 · 下载 |
下载包解压后是课程目录(例如 csapp/)。网站示例命令以整个仓库根目录为起点;只下载单门课程时,相应进入解压目录,省略命令中的 labs/课程名/。Windows 建议用 WSL2 执行 POSIX C/C++ 实验。
完整仓库中可以统一准备和检查:
sh
python3 -m venv labs/llm/.venv
labs/llm/.venv/bin/python -m pip install -r labs/llm/requirements.txt
PYTHON=labs/llm/.venv/bin/python npm run test:labsnpm run test:labs 执行三组 Python 测试和两组 CPU C/C++ 测试,不启动训练、不编译 CUDA,也不下载上游课程。若系统 Python 已有 NumPy,可以直接运行该命令。
操作系统:追踪映射与写时复制
sh
python3 labs/os/models.py
python3 -m unittest discover -s labs/os -p 'test_*.py' -v观察父子进程先共享一个物理页,子进程写入后分裂成两个物理页,退出后全部回收。模型覆盖 Sv39 地址解析、权限检查、2 MiB 大页、引用计数、COW、内存不足和 copyout。然后回到 2025 实验路线,按九个独立实验导读定位真正的 xv6 文件、修改路径与官方测试。
学习验收:不看实现,解释为什么只读代码页不能一遇写 fault 就变成可写页,以及为什么内核向用户缓冲区写数据也要处理 COW。
CSAPP:从位到并发
sh
make -C labs/csapp test
make -C labs/csapp sanitize六个 C 程序覆盖位表示、带 LRU 的缓存模拟、arena 分配器、子进程与信号、生产者消费者、最小 shell。先读 实验地图,再用断言、调试器和 sanitizers 验证修改。最小 shell 不包含完整的作业控制;分配器用于观察分裂与合并,不替换系统 malloc。
学习验收:为缓存构造一条冲突 trace;为分配器构造一次必须合并左右空闲块才能成功的申请;解释 fork 后为何应在父进程处理 cd。
分布式:让故障出现得可控
sh
python3 -m unittest discover -s labs/distributed -p 'test_*.py' -v
python3 labs/distributed/raft_model.py固定五节点 Raft/KV 模型由测试显式驱动选举、复制、分区和重启。它实现当前任期提交限制和请求去重;日志保存在 Python 进程内,没有真实 RPC 与磁盘持久化。参考 故障实验,在恢复前先预测哪些日志能被覆盖、哪些不能。
学习验收:一次超时写随后成功提交,客户端重试为什么不能生成新 request ID?五节点只剩两节点互通,为什么不能把“当前在线节点”重新当作全体成员计算多数派?
并行计算:先对答案,再看时间
sh
make -C labs/parallel test
make -C labs/parallel benchmark-run调度实验对比串行、静态连续分块与动态分块;布局实验观察相邻原子计数器与增加间距后的耗时。每次都检查结果,时间包含线程创建与回收。机器负载、编译选项和输入分布会改变结论,实测口径见 性能实验。
CUDA 归约附有源码,需要合适的 NVIDIA GPU、驱动和编译工具链。当前交付中尚未运行这部分,不将 CPU 测试通过算作 GPU 验证。
语言模型:真正做一次训练
sh
python3 -m unittest discover -s labs/llm -p 'test_*.py' -v
python3 labs/llm/train.py --steps 300
python3 labs/llm/generate.py --prompt "the fox " --tokens 100使用系统 Python 或将上述 python3 换成刚建立的虚拟环境解释器。微型 decoder-only Transformer 使用 NumPy 手写前向与反向,包含 RoPE、RMSNorm、SwiGLU、因果注意力和 AdamW。原创短句语料、训练日志与曲线一并提供;默认字符 tokenizer,也可以切换字节 BPE。
先阅读 CS336 实验手册,解释标签为什么右移、因果掩码阻止了什么、梯度检查在比较哪两个量。短语料上损失下降只是训练链路的验证,不代表模型已具备通用语言能力。
所有实际运行记录与未执行范围见 验证记录。