返回首页
24小时热榜
我发现,在大语言模型(LLM)推理中,KV缓存中的键(keys)和值(values)对量化的敏感性差异很大。为了保持质量,键需要比值更高的精度。
我对 llama.cpp 进行了修改,以便在 Apple Silicon 上为键和值启用不同的位宽。结果令人惊讶:
- K8V4(8位键,4位值):内存减少59%,但困惑度损失仅为0.86%
- K4V8(4位键,8位值):内存减少59%,但困惑度损失为6.06%
- 这两种配置使用相同数量的位,但 K8V4 在质量上优于 K4V8 7倍
这意味着你可以在同一台 Mac 上运行具有 2-3 倍更长上下文的 LLM。内存使用量与序列长度成正比,因此随着上下文的增长,节省的内存会不断累积。
实现过程相对简单:
1. 在 llama.cpp 中添加了 --kvq-key 和 --kvq-val 标志
2. 将现有的量化逻辑分别应用于 K 和 V 张量
3. 在不同的上下文长度下通过困惑度指标进行验证
4. 使用 Metal 进行加速(使用 -mlong-calls 标志以避免向量化问题)
在一台运行 TinyLlama 的 M4 MacBook Pro 上进行了基准测试,使用 8K 上下文窗口。与 Metal/MPS 兼容,并针对 Apple Silicon 进行了优化。
GitHub: [https://github.com/dipampaul17/KVSplit](https://github.com/dipampaul17/KVSplit)
我将在这里待接下来的5到6个小时。像往常一样,考虑到快速变化的移民形势,有无数话题可以讨论,我会根据你们的关注点来引导讨论。请记住,我无法就具体案例提供法律建议,因为我无法获取所有事实。请在提问时尽量保持讨论的客观性,我会在回答时尽量做到这一点。