@no_stp_on_snek: 还有人谈论 mlx-swift-lm 吗?说我在休息一天……清理了鸡舍,锻炼了一下,然后…
摘要
作者描述了将 TurboQuant KV-cache 压缩集成到 Apple 的 mlx-swift-lm 中,实现了 2.7 倍压缩,质量与 8-bit 相当,并通过融合 Metal 内核将解码速度提升了 3-4 倍。
查看缓存全文
缓存时间: 2026/07/16 18:17
还有人聊 mlx-swift-lm 吗?
说好今天休息的……清理了鸡舍,锻炼了身体,过了大约两小时“平衡生活”。然后打开笔记本想看一眼东西。但从来不是只看一眼。
花了这个“休息日”把 TurboQuant KV-cache 压缩集成到 Apple 的 mlx-swift-lm 中。
它在设计上是一种非对称方案。Key 几乎无法容忍压缩(softmax 会放大其误差),因此 K 保持近乎无损;Value 则几乎可以无代价地压缩,所以对 V 进行大力压缩。结果:2.7 倍 KV 压缩,质量与 8-bit 相当,在 6 个模型家族(1.7B 到 30B MoE 和一个 32B)上通过 KL 散度与 fp16 缓存对比验证。基于测量,而非感觉。
有趣的部分是解码速度。第一遍运行速度约为 fp16 的 20%,瓶颈并非计算本身。而是每个 token 都要重新实例化整个缓存:全缓存 f32 类型转换、GQA 张量扩展、17 次 GPU 调度,而 fp16 只需 3 次。
于是我将自己 llama.cpp fork 中的融合单核解码移植到 Metal。score、softmax 和内联反量化在一个 SIMD 并行调度中完成,K 以其原生格式一次性读取。解码速度提升了 3 到 4 倍。现在以四分之一 KV 字节实现与 fp16 相当的性能。
一直在逐渐向上游贡献一些 Swift 改动。这次是一个较大的 PR。
相似文章
@no_stp_on_snek:在自定义Rust内核和Swift调度领域忙碌的一晚。9个PR中有3个是真正新增或修改的Metal内核……
在自定义Rust内核和Swift调度逻辑的优化下,Qwen3.6-35b-A3B模型的预填速度在2k提示下从255 tok/s提升到1058 tok/s,实现了约4倍的加速,解码和困惑度未受影响。
@no_stp_on_snek: 如果你想试试,可以在这里找到:
这是一个 llama.cpp 的分支,集成了 TurboQuant+,用于先进的 KV 缓存和权重量化,支持跨后端内核(Apple Silicon、NVIDIA CUDA、AMD ROCm、Vulkan),并被 LocalAI、Chronara 和 AtomicChat 用于生产环境。
@no_stp_on_snek: 与此同时,我们其他人都在埋头苦干。我现在正试图为mlx-swift-lm解决稀疏注意力问题。进展不错……
开发者报告在mlx-swift-lm中实现稀疏注意力的进展,在M5 Max上仅比密集注意力多4%的开销。
动态KV缓存量化与按需加载mmproj/MTP:我的llama.cpp愿望清单
一位开发者已为llama.cpp实现了一个概念验证的PR,通过HTTP端点添加了动态KV缓存量化功能,允许用户按需重新量化其KV缓存,而无需完全重新加载模型。该帖子还概述了一个愿望清单,包括按需加载mmproj/MTP交换以及用于上下文优化的自动--fit标志。
@jundotkim: oMLX 0.3.9rc1 发布。亮点:- 低内存Mac保持稳定,不再被系统杀死 - DFlash 升级至…
oMLX 0.3.9rc1,一个为Apple Silicon Mac优化的LLM推理服务器,增加了低内存稳定性、分块预填充、多任务管理聊天等功能。