资讯动态

oMLX GDN 混合缓存:状态门控模型如何融入分页 KV 体系

发布时间:2026/8/30 9:46:46 来源:尧图企业网站定制
oMLX GDN 混合缓存状态门控模型如何融入分页 KV 体系【免费下载链接】omlxLLM inference server with continuous batching SSD caching for Apple Silicon — managed from the macOS menu bar项目地址: https://gitcode.com/GitHub_Trending/om/omlxoMLX 是运行在 Apple Silicon 上的本地 LLM 推理服务器支持连续批处理continuous batching与 SSD 冷缓存并通过 macOS 菜单栏应用统一管理。本文聚焦它最有意思的部分GDN 混合缓存——状态门控模型Gated DeltaNet如何融入分页 KVPaged KV缓存体系让混合架构模型的长对话前缀也能被高效复用。为什么 GDN 模型对分页 KV 缓存是个挑战传统 Transformer 的注意力层依赖 KV Cache上下文每增长一个 tokenKey/Value 张量就增长一点显存占用与上下文长度成正比。oMLX 用 omlx/cache/paged_cache.py 实现了类似 vLLM 的分页 KV 缓存管理器把 KV 切成固定大小的块block块内做引用计数、Copy-on-Write 共享和 LRU 驱逐块按内容哈希组织以支持前缀缓存。而 GDNGated DeltaNet这类状态门控 / 线性注意力层完全不同KV 层缓存随上下文线性增长需要分页、可切块、可共享GDN 层历史信息被压缩进一个固定大小的循环状态recurrent state无论上下文多长状态大小不变。像 Qwen3-Next、Qwen3.5 这类混合架构模型两种层在同一个网络里并存。oMLX 用 omlx/cache/hybrid_cache.py 中的ModelCacheConfig逐层探测缓存类型KVCache / ArraysCache 等并标记每层是否支持块切片从而让分页体系认识GDN 层。核心矛盾在于前缀快照需要同时保存增长的 KV和不增长的 GDN 状态且两者生命周期并不总是一致。oMLX 的答案热冷分层 GDN 侧车检查点oMLX 的缓存分为两层可在 omlx/cache/paged_ssd_cache.py 中实现热层内存PagedCacheManager管理分页 KV 块命中前缀时零成本复用冷层SSD热层写满后块以 safetensors 格式卸载到 SSD再次命中同一前缀时直接从磁盘恢复而不是重新 prefill——即使服务器重启也依然有效。前缀快照的存取由 omlx/cache/prefix_cache.py 驱动。当快照包含 GDN 层时oMLX 引入GDN 侧车sidecar机制把 GDN 循环状态从主 KV 块中解耦出来存储模式说明ssd_sidecar拆分模式GDN 状态单独写入 SSD 的_gdn_sidecars目录由GDNCheckpointIndex做带容量上限的 LRU 索引与 KV 块各自独立回收embedded内嵌模式GDN 状态直接随主缓存块一起存储实现简单但占用更大auto默认缓存启用时自动选择拆分模式否则回退内嵌逻辑见 omlx/settings.py拆分模式的价值在于KV 块可以被频繁地切分、共享与驱逐而固定大小的 GDN 状态无需跟着每一块复制。恢复快照时前缀缓存会按层校验 GDN 检查点见prefix_cache.py中的gdn_checkpoint_loads/gdn_checkpoint_walkbacks统计校验失败则回退到更早的可恢复位置保证恢复的正确性。精度可调GDN 侧车状态压缩GDN 状态原始精度是 float32直接落盘比较浪费。omlx/cache/boundary_snapshot_store.py 提供了一组存储编解码器codecfp32无损默认值bf16粗略减半体积int8/rht_int8行级量化进一步压缩rht_int16先做随机 Hadamard 变换RHT再 int16 量化数值分布更均匀精度与体积的折中更好。解码时带有完整校验codec 元数据、行缩放因子、非有限值检查任一不通过该侧车会被拒绝并计入gdn_decode_failures绝不让坏状态污染推理结果。在管理后台一键配置 GDN 缓存策略无需改任何代码打开 Web 管理后台的设置 → 高级页面即可配置界面模板见 omlx/admin/templates/dashboard/_settings.htmlGDN 快照存储auto/ssd_sidecar/embedded三选一GDN 待写入上限gdn_ssd_pending_max_size限制落盘前暂存的 GDN 检查点总量默认 512MB防止写入风暴占满磁盘GDN 侧车状态精度在上表所列 codec 中选择非 fp32 时界面会提示精度取舍。所有配置项在 omlx/settings.py 中定义gdn_ssd_pending_max_size、gdn_sidecar_state_dtype、get_gdn_snapshot_storage()也可以通过环境变量OMLX_GDN_SSD_PENDING_MAX_SIZE、OMLX_GDN_SIDECAR_STATE_DTYPE覆盖便于脚本化部署。关键源码地图 模块路径职责分页 KV 管理器omlx/cache/paged_cache.py块分配、COW 共享、前缀哈希SSD 冷层与 GDN 检查点索引omlx/cache/paged_ssd_cache.py块落盘、_gdn_sidecars管理前缀快照与 GDN 恢复omlx/cache/prefix_cache.py检查点加载、回退与统计GDN 状态编解码omlx/cache/boundary_snapshot_store.pyint8/RHT/bf16 codec 与校验混合模型逐层配置omlx/cache/hybrid_cache.pyKV 层与 GDN 层识别GDN 分块预填充补丁omlx/patches/qwen35_gdn_chunked.pyQwen3.5 GDN 层的分块处理设置与校验omlx/settings.py存储模式、上限、精度配置小结GDN 混合缓存是 oMLX 分页 KV 体系里的一块精巧拼图KV 层照旧享受分页、共享与 SSD 分层带来的前缀复用红利GDN 层则通过侧车检查点 可调精度压缩 严格校验回退融入同一套缓存生命周期管理。对使用者的收益很直接——混合架构模型的长会话前缀不再反复 prefill本地推理的延迟和吞吐都更稳定。【免费下载链接】omlxLLM inference server with continuous batching SSD caching for Apple Silicon — managed from the macOS menu bar项目地址: https://gitcode.com/GitHub_Trending/om/omlx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价