tiny-llm:在 Apple Silicon 上从 Transformer 算子走到推理系统与 Agent
如果你已经知道 Transformer 的基本结构,却仍然不清楚 vLLM 一类推理系统为什么需要 KV Cache、Continuous Batching、Paged Attention,以及这些技术最终如何支撑 Agent,skyzh/tiny-llm 是一条很好的动手路径。 它不是一个追求生产可用的迷你框架,而是一门以 Qwen3 和 MLX 为载体的系统课程:先用可读的数组运算实现模型,再围绕真实性能瓶颈写 Metal 内核,随后搭出动态批处理和分页缓存,最后把同一个本地模型接入带工具、检查点、压缩、评测和分支选择的 Agent 循环。 截至 2026 年 8 月 27 日,项目约有 4.5k stars,使用 Apache-2.0 许可证。课程主体分为四周,已覆盖从注意力到受控 Agent 的完整主线。 项目定位:不是“再写一个 Transformer” 很多教学项目止步于“加载权重并生成一句话”。tiny-llm 的不同之处,是把模型实现当作起点,而不是终点。 它试图回答三个递进的问题: 一个现代开源模型如何由矩阵运算变成文本? 一个正确但缓慢的实现,如何通过测量和内核优化接近成熟框架? 一个推理引擎如何进一步成为可暂停、可审计、可恢复的 Agent 执行器? 项目选择 Apple Silicon、MLX 和 Qwen3。统一内存让 CPU、GPU 和模型权重处在相对简单的硬件环境里;MLX 提供熟悉的 Python 数组接口,同时允许下沉到 Metal;Qwen3 则带有 GQA、QK Norm、BF16 激活和 4-bit 权重,足以暴露真实推理系统中的带宽、注意力与缓存问题。 代码结构刻意分成两套: src/tiny_llm/ 是学习者逐步补全的实现; src/tiny_llm_ref/ 是参考实现,用于测试和基准对照; src/extensions/ 与 src/extensions_ref/ 分别放置 Metal/C++ 扩展; tests_refsol/ 按周和天组织验收测试; book/ 是完整课程正文。 这种布局把“阅读—实现—测试—测量”闭成了环。 ...