返回首页
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个小时。像往常一样,考虑到快速变化的移民形势,有无数话题可以讨论,我会根据你们的关注点来引导讨论。请记住,我无法就具体案例提供法律建议,因为我无法获取所有事实。请在提问时尽量保持讨论的客观性,我会在回答时尽量做到这一点。
大家好!<p>在过去的两年里,我全身心投入到全职工程师的工作中,目标很简单:编写能够<i>回馈</i>社区的代码。在经历了许多深夜的焦虑(“人工智能会为我们做一切,对吧?”)和一些痛苦的生产事故后,我终于将我的周末项目转变为一个开源库。<p>[ 什么是<i>Solidis</i>? ]<p>- <i>超轻量(< 30 KB)的 RESP2/RESP3 客户端</i>,没有运行时依赖,并且支持一流的 ESM/CJS。<p>- 完全<i>可树摇</i> – 只导入你需要的命令。<p>- 遵循 SOLID 原则编写,并为每个命令提供完整的 TypeScript 类型定义。<p>- 针对<i>冷启动敏感</i>的无服务器平台设计(小包体 + 微小内存占用)。<p>[ 我为什么构建它 ]<p>1. <i>node-redis 和 ioredis 的痛苦</i><p>- ESM 仍然是一个事后考虑。<p>- RST 上的隐性死锁,模糊的错误信息。<p>- 所有内容都被打包,甚至是你永远不会调用的命令。<p>2. 我拒绝添加我不完全理解的依赖 – 我在执行 `npm i` 之前会认真阅读候选库十遍。<p>3. 无服务器账单总是提醒我每个 KB 和毫秒都很重要。<p>[ 主要特性 ]<p>- 协议:RESP2 和 RESP3(自动协商)<p>- 包体大小:`<30 KB`(核心) / `<105 KB`(完整)<p>- 依赖:<i>0</i><p>- 可扩展性:即插即用的命令插件,自定义事务<p>- 可靠性:自动重连,逐命令超时,类型检查的回复<p>[ 路线图 / 需要帮助 ]<p>- <i>与 node-redis 和 ioredis 的基准测试</i>(欢迎提交 PR!)<p>- 更多一流的<i>Valkey</i>支持<p>- <i>模糊测试</i>解析器<p>- <i>文档网站</i> – README 是第一步;我希望能有人帮助完善完整的文档<p>这可能是我一段时间内最后一次大规模的开源项目推动,所以<i>星标、问题和 PR 对我来说意义重大</i>。<p>如果 Solidis 能为你节省一些冷启动时间,或者仅仅是满足了你对 TypeScript 的需求,请告诉我!<p><i>仓库:</i> <a href="https://github.com/vcms-io/solidis">https://github.com/vcms-io/solidis</a><p><i>许可证:</i> MIT<p>感谢阅读,祝编码愉快!<p><i>(欢迎在评论中提问 – 我会在这里。)</i>