# CMU 11-868 大语言模型系统讲义代码的依赖（全部在 CPU 上运行，不需要 GPU）
# 第 1 讲 01_next_token_probability.py 只用 Python 标准库（Python 3.9 及以上）；前置讲 P3、第 3–4 讲只需要 numpy；其余脚本需要 numpy 和 torch。
# 第 2–4、10 讲的 CUDA 内核在 code/lecture02/simt.py（纯 Python 的 SIMT 模拟器）上运行，不需要 GPU 或 CUDA 工具链。
# 第 8 讲的 01–04 只用标准库（BPE 的预分词正则用标准库 re，不需要第三方 regex 包）。
# 第 12、13 讲不需要 JAX：迷你 JAX / XLA 与 Pallas 风格的模拟器都是用 NumPy 写的。
# 第 14–18 讲的部分脚本用 torch.distributed 的 gloo 后端在本机起多个进程（CPU 版 torch 自带）；脚本在 macOS 上会设置 GLOO_SOCKET_IFNAME=lo0（其他系统不设置）。
# 第 18 讲 03 用到 FSDP2 的 torch.distributed.fsdp.fully_shard（需要 torch 2.6 及以上）；不需要安装 DeepSpeed。
# 第 19、20、22–25 讲共用一个在 CPU 上训练的小 LLaMA（第一次约 40 秒，缓存在 code/lecture19/checkpoints/）。
# 第 21–25 讲不需要 GPU、SGLang、vLLM、bitsandbytes、PEFT 或 veRL：FlashAttention、推理服务器、分页 KV 缓存、NF4 / QLoRA、RLHF 都用从零写的最小版本；
# 第 21、23 讲用到 torch 的 float8_e4m3fn 与 bfloat16 做舍入。
# 第 26、27 讲与附加讲 A1–A4 不需要 Dynamo、LMCache、Triton、Mooncake、KTransformers、FAISS 或 hnswlib：服务、KV 缓存、向量检索都用从零写的最小版本；
# 附加讲 A3 的 02、03 只需要 numpy；第 27 讲、附加讲 A2 / A4 第一次运行会在 CPU 上训练小模型并缓存到各自的 checkpoints/。
# 前置讲 P1、P4 和第 10 讲 01 的部分内容还需要一个 C 编译器（不是 pip 包）：macOS 上运行 `xcode-select --install`，Linux 上安装 gcc。
numpy>=1.24
torch>=2.1        # CPU 版即可：pip install torch --index-url https://download.pytorch.org/whl/cpu
                  # 第 1 讲用到 torch.utils.flop_counter.FlopCounterMode；前置讲 P2 用到 float8_e4m3fn / float8_e5m2
