像 LeetCode 一样「手撕」LLM 与 RL 的核心组件;问答题用免费大模型当面试官给你逐点判分。
面试大模型 / Code Agent 方向,八股看一百遍不如自己手撕一遍。这个仓库把高频考点拆成两类可练的题:
- 🧩 代码题 —— 打开 notebook,在「实现 cell」补全函数,跑「测试 cell」看红/绿。每题用 PyTorch 官方算子 / 闭式公式做 oracle 自动判对错,而且测试会打印关键中间量(注意力权重、量化误差、BPE 合并过程…),让你跑一遍就看懂,而不是只得到一个 ✓。
- 💬 问答题 —— 练「讲清楚」型考点(分词、对齐取舍、量化、分布式、推理优化…)。每题备好评分要点 rubric,你作答后调一个免费大模型 API(智谱 / 豆包 / MiniMax 任选)当面试官,给出总分 + ✅正确点 + ❌错误点 + 改进建议;没配 key 也能打印要点供自评。
配套「速记卡」帮你把每个概念背成白板能写的一句话。
- 测试即讲解:代码题的 test case 不是 mock,而是边验证边
print关键张量/误差/中间过程,加深理解。 - oracle 独立于答案:用
torch.nn.functional/ 闭式公式 / 独立朴素实现当 ground truth,绝不偷看参考解,「测试过 = 真的对」。 - 免费大模型判分:纯标准库实现(零额外依赖),OpenAI 兼容,内置 5 家预设,
.env一行切换。 - 一题一个文件夹:源码 + notebook + 速记卡 + 参考答案都在该题目录里,自包含。
- headless 跑题器:不开 notebook 也能
python bagu.py ...跑测试 / 看进度 / 判分。
# 1) 用装了 torch 的环境(Python 3.10+,torch>=2.0)
pip install -r requirements.txt # torch / numpy / jupyterlab
# 2) 从源码生成所有刷题 notebook(就生成在各题目录下)
python build_notebooks.py
# 3) 开刷
jupyter lab # 进 exercises/ 或 qa/ 的题目文件夹点开 .ipynb
# 代码题:exercises/A_attention/A01_scaled_dot_product_attention/A01_*.ipynb
# 问答题:qa/QC_systems/QC01_lora_qlora/QC01_*.ipynb代码题 notebook:题面 → 环境准备 → ✏️实现 cell → ✅测试 cell(看红/绿 + 打印中间量)→ 💡参考答案 → 速记卡。 问答题 notebook:题面 → ✏️你的答案 → ✅判分(调大模型)→ 💡参考答案(独立文件运行时读取)。
代码题(27 题)
| 轨道 | 题目 |
|---|---|
| A · 注意力 & Transformer 内核 | SDPA · MHA · MQA/GQA · RoPE · KV-cache 增量解码 · RMSNorm/LayerNorm · 稳定 softmax & 交叉熵 · pre-norm block |
| B · RL 基础数学 | 折扣回报 · GAE · REINFORCE · PPO clip · value/TD · KL 散度 |
| C · 后训练 / Agentic RL | GRPO group advantage · DPO loss · RLVR reward · observation loss-mask · pass@k · importance ratio |
| D · 采样与训练杂项 | temperature/top-k/top-p · label smoothing · Adam 单步 · beam search · warmup+cosine |
| E · 工程内核 / 压缩与推理 | BPE 合并 · INT8 对称量化 |
问答题(14 题,大模型判分)
| 轨道 | 题目 |
|---|---|
| QA · 基础与架构 | 子词分词/BPE · 位置编码全景 · 注意力家族与 KV cache · SwiGLU+Pre-Norm |
| QB · 训练与对齐 | 训练三阶段 · RLHF 全链路与 KL · DPO vs PPO vs GRPO · 灾难性遗忘与对齐税 |
| QC · 高效训练与部署 | LoRA/QLoRA · 量化 · 分布式并行 · 推理优化 |
| QD · 评测与应用 | 幻觉 · RAG |
判分器(common/judge.py)是 OpenAI 兼容 + 纯标准库实现,内置 智谱 / 豆包 / MiniMax / 硅基流动 / OpenRouter 预设。切换只改 .env 两行:
cp .env.example .env
# BAGU_JUDGE_PROVIDER=zhipu # zhipu / doubao / minimax / siliconflow / openrouter
# BAGU_JUDGE_API_KEY=你的key各家怎么领免费 key、模型名怎么填,见 docs/free-api-guide.md。默认 zhipu(GLM-4.5-Flash,完全免费、国内直连)。判分长这样:
== QC02 判分结果 ==
总分:62 / 100
总评:抓住了量化核心机制,但覆盖面只到一半。
✅ 正确点(答到的):
● 量化在做什么 fp16→int8、scale 还原、省显存讲清楚了
❌ 错误点 / 没答到(要补的):
◐ 部分 PTQ vs QAT 区分了定义,但没提校准数据/伪量化/成本差异
○ 缺失 对称 vs 非对称 完全没讨论
○ 缺失 GPTQ / AWQ 完全没讨论
○ 缺失 outlier 难点 完全没讨论
改进建议:补上对称/非对称、量化粒度、GPTQ/AWQ 与 outlier 处理。
命令行也能判分:
python bagu.py qa QC02(显示题面 → 读你作答 → 大模型判分)。 参考答案放在独立文件qa/<轨道>/<题>/answer.md,notebook 运行时才读取,不写进 .ipynb,避免提前剧透。
python bagu.py list # 列出所有题(代码题 ✅/⬜ + 问答题 📝)
python bagu.py test A03 # 跑单题 / 整轨(python bagu.py test A)
python bagu.py solve A03 # 卡住了?打印参考答案
python bagu.py verify # 全量自检:确认每题参考答案都能让测试全绿
python bagu.py qa QA01 # 答一道问答题并判分LLM_bagu/
├── build_notebooks.py # 从源码生成 notebook,就放进各题目录(产物,勿手改)
├── bagu.py # headless 跑题 / 自检 / 问答判分器
├── common/checks.py # set_seed / assert_allclose / show / note / check_all
├── common/judge.py # 问答题判分器(OpenAI 兼容,默认智谱,无 key 优雅降级)
├── exercises/<轨道>/<题>/ # 代码题:problem.py solution.py test_problem.py README.md + <题>.ipynb
├── qa/<轨道>/<题>/ # 问答题:question.md + answer.md(评分要点+参考答案)+ <题>.ipynb
├── docs/cheatsheet.md # 代码题「一句话结论」汇总
├── docs/free-api-guide.md # 免费大模型 API 获取攻略
└── .env.example # 判分器多家预设 + key 配置模板
- 源码是真相,notebook 是生成产物:改题改
exercises/、qa/下的源文件,再python build_notebooks.py重生成,不要手改.ipynb。 - 代码题 oracle 独立于参考答案:测试用官方算子/闭式公式/独立实现当 ground truth,绝不 import
solution.py。 - key 绝不入库:从环境变量或
.env读取,.env已在.gitignore。 - 可独立运行:每道代码题
python exercises/<轨道>/<题>/test_problem.py也能直接跑(无需 pytest)。
- 扩充问答题:评测指标 / 长上下文 / Prompt & CoT / Agent 评测。
- 更多「打印关键信息」代码题:MoE top-k 路由 + 负载均衡、flash-attention 在线 softmax、投机解码接受率、per-channel 量化对比。
- 欢迎 PR:加题只需在
exercises/或qa/下按现有结构建文件夹,再python build_notebooks.py。
MIT —— 自由使用、修改、分发。题目内容仅供学习交流。