显然,你可以在加载时跳过整个Transformer模块,且性能影响极小
摘要
一位开发者为llama.cpp的一个分支实现了--skip-layers标志,基于近期论文,允许用户在加载时跳过整个Transformer模块,且性能影响极小。这为在有限硬件上运行大模型提供了另一种方法,与量化和构建时剪枝相辅相成。
其好处是提供了另一种技巧,使得原本无法在硬件上运行的模型得以运行。目前人们依赖量化,而这只是一个额外的工具(两者也可结合使用)。受近期(非常酷的)论文启发,我为llama.cpp的一个分支实现了--skip-layers标志,因此它永远不会实例化你指定跳过的模块。构建时剪枝已存在(--prune-layers、mergekit passthrough等);这只是同一思路的运行时版本。需要注意的是,跳过哪些模块的效果差异可达几个数量级,因此我必须附带一个选择机制。结果、图表和失败案例都在文章里。 - 文章:https://open.substack.com/pub/itayinbarr/p/you-can-skip-llm-layers-at-runtime - 分支:https://github.com/itayinbarr/llama.cpp 欢迎提出你的看法!
相似文章
Transformers 现在支持 llama.cpp 量化模型
Hugging Face 的 Transformers 库现在支持来自 llama.cpp 的 GGUF 模型,通过熟悉的 API 实现消费级硬件上的高效本地推理。
跳层还是循环?学习LLM中的Program-of-Layers
本文介绍了PoLar,一个学习针对冻结transformer层的输入特定执行程序的框架,允许层被跳过、保留或重复。与固定深度方法相比,它提高了准确性并减少了推理开销。
@mylifcc: 你想象中的所谓大模型升级:多买 H100、花几百万美元重训练、把参数从 70B 堆到 700B……
Apple 研究人员的论文《Decoding Looped Transformers Better for (Almost) Free》表明,通过对比解码(Contrastive Decoding)复用推理时被丢弃的中间状态,可以在零训练成本的前提下将计算消耗降低 47%,同时将数学问题的 pass@1 从 61% 提升到 73%——这标志着大模型发展正从硬件堆叠转向算法层面的精细优化。
在回复生成中途将模型各层在 GPU 之间迁移(8 毫秒,无需重新预填充)
开发者展示开源推理引擎 jitllm,借助 JIT 内核生成与分页 KV 缓存,可在推理过程中把 Llama-3.2 模型各层在不同 GPU/CPU 之间动态迁移(最短 8 毫秒暂停、无需重预填充)。
@askalphaxiv: 另一项关于循环Transformer的酷研究。他们提出一个问题:“我们能否直接在推理时循环一个冻结的、现成的检查点…
本研究介绍了一种技术,通过使用阻尼Runge-Kutta子步骤,在推理时循环冻结的、现成的Transformer检查点,将Transformer层视为残差ODE中的欧拉步骤。这无需微调、架构更改或新权重即可增加额外的潜在计算,在MMLU-Pro、GPQA和ARC等知识任务上显示出收益。