桃子桃子 AI 快讯
返回首页
工具

llama.cpp 社区分支实现运行时跳过 Transformer 层

开发者为 llama.cpp 引入 --skip-layers 标志,可在加载时跳过整层 Transformer 块,并…

2026.06.29 · 周一3 分钟阅读评分 45
评分细项加权总分 45
重要性
42
新颖性
52
影响面
35
可信度
55
实质性
48

一位社区开发者近日在 llama.cpp 的个人分支中实现了一个名为 --skip-layers 的加载期选项,允许在推理时直接跳过指定的整层 Transformer 块。作者表示,这一思路参考了近期几篇相关论文,并将其作为 llama.cpp fork 的实验性功能开源,同时在 Substack 发布了完整的技术说明与对比数据。

实现思路:把「烘焙式剪枝」搬到运行时

作者指出,静态的「烘焙式」层剪枝(bake-time pruning)早已存在,例如 llama.cpp 自带的 --prune-layers 选项,以及 mergekit 的 passthrough 等方案。这些做法会在模型文件层面删减权重,得到一个更小的最终模型。

  • --skip-layers 的不同之处在于「运行时」生效:被跳过的层在加载阶段就不被实例化(never instantiates),因此推理时不会进入这些块。
  • 它不需要先生成一个剪枝后的权重文件,适合临时实验或在多份配置之间快速切换。
  • 由于灵感来自已有的静态剪枝研究,作者将其定位为同一思路的运行时版本。

选择机制:跳过哪些层「量级差异巨大」

作者特别强调一个经验性结论:跳过哪几层对结果的影响在数量级上差异显著,因此不能简单地均匀剪枝。为此,他在功能中内置了一个「选择器机制(selector mechanism)」,帮助用户在跳过层数与效果之间做权衡。具体的最优层组合、benchmark 数字与失败案例,均在 Substack 写明的 writeup 中给出。

上游合并与社区协作

功能目前托管在作者的 llama.cpp 分支仓库中,作者坦言自己无力完成向 llama.cpp 上游合并所需的完整流程:包括先发起讨论、提交 feature request、再面对规模庞大的 PR 队列(他提到上游积压约 1.1K 个 PR)。因此他在帖子中向社区征集方案:是继续以独立分支维护、移交给有精力推进的人,还是以 co-maintainer 形式与上游同步更新。

试用与验证建议

作者鼓励读者在自己常用的模型与硬件上进行 PPL(困惑度)或生成质量验证(generation sanity-check),以补充他未覆盖到的配置组合。代码与写明的链接如下:

  • 写明(Substack):open.substack.com/pub/itayinbarr/p/you-can-skip-llm-layers-at-runtime
  • 代码分支(GitHub):github.com/itayinbarr/llama.cpp

需要注意的是,截至目前该功能仍以社区 fork 形式存在,尚未进入 llama.cpp 上游主线,稳定性与兼容性仍需更多验证。

信源