Redis之父亲手为DeepSeek V4 Flash写了个推理引擎,只跑Mac

模型上新

antirez用两周时间从零写了个C+Metal的推理引擎ds4.c,专门服务DeepSeek V4 Flash,在M3 Max上能以可用速度跑起284B的MoE模型。这是一种刻意反通用化的全栈本地推理思路。

Redis之父亲手为DeepSeek V4 Flash写了个推理引擎,只跑Mac

5月8日,Salvatore Sanfilippo——也就是大家更熟悉的 antirez、Redis 之父——在 GitHub 上扔出了一个新项目 ds4。一句话概括:这是一个专门为 DeepSeek V4 Flash 写的本地推理引擎,用 C 和 Objective-C 写成,只跑 Apple Silicon 的 Metal 后端,不支持 CUDA,不支持 ROCm,不支持 CPU

听起来非常反潮流。当大家都在卷 vLLM、SGLang、llama.cpp 这种通用推理框架时,一位写了 11 年 Redis 的老程序员,跑去给一个具体型号的模型写了一个一次性的、绑死硬件的引擎。但你看完它的设计,会发现这件事其实挺有意思。

antirez 在 MacBook 上运行 ds4.c 的终端截图

起因:把 284B 的 MoE 塞进一台 Mac

先把背景理一下。DeepSeek 在 4 月 22 日发布了 V4 系列,开放权重,MIT 协议。其中:

  • V4-Pro:1.6T 总参数,约 49B 激活,100 万 token 上下文,旗舰款;
  • V4-Flash:284B 总参数,13B 激活,架构相同,定位效率型。

Flash 这个版本的卖点很清楚——它的激活参数只有 13B,理论上量化后塞进消费级硬件是可行的。社区里 Unsloth 已经给出了能在 2×48GB 上跑的 GGUF。但 antirez 想要的是另一件事:让 V4 Flash 在一台 Mac 上不只是“能跑”,而是“真正能用”——能接 coding agent,能处理长 prompt,能稳定调用工具。

于是 ds4.c 出现了。

项目结构:刻意的窄路

打开仓库你会发现整个项目小得有点反常。语言占比是这样的:

  • C:55.4%
  • Objective-C:30.2%
  • Metal Shading Language:13.8%

没有 Python 胶水层,没有 PyTorch 依赖,没有运行时框架,没有为多后端做的抽象层。Metal-only。这意味着它只能在 Apple Silicon 的 GPU 上跑——不管你手里是 4090 还是 MI300,都没用。

antirez 自己在 README 里写得很直白:通用引擎为了兼容所有模型,必须做抽象,而抽象意味着妥协。他想做的就是一条窄路,一次只赌一个模型,用官方 logits 做数值校验,做长上下文测试,做足够多的 agent 集成,来确认它真的能用。

这是和 llama.cpp 完全不同的哲学。llama.cpp 要兼容上百种模型架构、十几种后端、各种量化方案;ds4.c 只有一份针对 V4 Flash 的 Metal graph executor,加上为它量身打造的 GGUF 加载器、prompt 渲染、KV 状态管理和 server API。

顺便说一句,README 里 antirez 大方承认:ds4.c 是从 llama.cpp/ggml fork 出来的,但主路径已经是 DeepSeek V4 Flash 专用代码。这点态度还是很 antirez。

性能:M3 Max 上的真实数据

直接看跑分。

MacBook Pro M3 Max(128GB 统一内存),2-bit 量化,32K 上下文:

  • 短 prompt 预填充:58.52 token/s
  • 生成:26.68 token/s

Mac Studio M3 Ultra(512GB 统一内存),长 prompt(11709 token):

  • 预填充:468.03 token/s
  • 生成:27.39 token/s

这个数字什么概念?一个 284B 总参数的 MoE 模型,在一台笔记本上稳定输出 26 token/s——已经超过普通人的阅读速度,也足够支撑 coding agent 的实时交互。Mac Studio 那边长 prompt 预填充 468 token/s,意味着塞进 25K token 的 Claude Code 风格 system prompt,几十秒就能 prefill 完,然后正常聊天。

关键:精挑细选的混合量化

这套速度不是靠暴力 2-bit 怼出来的。ds4 做了一个非常具体的混合量化方案:

  • MoE 路由专家层(占模型体积绝大部分):up/gate 用 IQ2_XXS,down 用 Q2_K
  • 共享专家层、投影层、路由层:保留 Q8 精度,不动

这个分配很精明。MoE 的稀疏专家本来就有冗余,2-bit 损失可控;而共享层和路由层是“关键路径”,一旦精度掉了,整个模型路由都会乱掉,coding agent 会直接连工具都调不准。

antirez 在 README 里也写了一句颇为自信的话:

这些 2-bit 量化不是开玩笑,它们在 coding agent 下表现良好,能可靠地调用工具。

这其实是当下本地推理最看重的指标——不是 perplexity,不是 MMLU,而是 tool call 的可靠性

全栈本地推理:从引擎到 agent 协议

ds4 不止是一个推理 kernel,它还自带 HTTP server,并且同时支持两套协议

  • /v1/chat/completions:OpenAI 协议
  • /v1/messages:Anthropic 协议

Tool calling 也做了适配。README 里直接给了三个 agent 客户端的接入示例:opencode、Pi、Claude Code

这里有个特别贴心的设计:磁盘 KV 缓存。Claude Code 这种 agent 每次启动会发一个约 25K token 的 system prompt,每次都重新 prefill 显然不能忍。ds4 的做法是第一次 prefill 完直接把 KV state 落盘,之后会话直接从磁盘恢复,秒进。

这套链路串起来你会发现,antirez 在做的根本不是“一个推理框架”,而是一种全栈本地推理的思路:

  • 一份针对这个引擎特别打造的 GGUF
  • 一个绑死硬件的 Metal 执行器
  • 一套 HTTP API 同时讲两种 agent 协议
  • 一份和真实 coding agent 对接验证过的测试集

不是把组件拼起来,而是把整条链路当成一个产品来设计。

ds4.c 在 Mac Studio 上跑长 prompt 预填充的性能图

一个模型,一个引擎:这事能成吗?

这个项目最有争议的地方就在这里。一个推理引擎只服务一个模型,下一代 V5 出来怎么办?

antirez 自己在 README 里也很坦率:ds4 当前赌的就是 V4 Flash,模型可能会换。Metal-only 是当前形态,未来可能加 CUDA,但他写得很谨慎——“也许会,但仅此而已”。这个项目刻意保持小、快、专注。

但反过来想,这件事可能预示了一个新的趋势:

模型厂商发布新模型的同时,社区里就会有人跳出来给它做专属引擎、专属量化、专属 agent 接入。每一代模型都有一个自己的 antirez。

这种“一个模型一个引擎”的玩法,在通用框架还在适配新架构、还在调试新 kernel 的窗口期,专属引擎可以快速吃下早期高质量本地部署的需求。它不需要永远活下去,它只需要在 V4 Flash 是话题中心的这几个月里足够好用。

这某种意义上是对“大一统推理框架”路线的一个挑战。llama.cpp 的伟大在于把一切抽象掉,让所有模型都能跑;ds4 的姿态是反过来——抽象是有成本的,为单一目标定制能换来更高的天花板。两条路其实可以共存。

还有一件值得关注的事:AI 辅助编码

README 里有一段挺值得拿出来说的声明:ds4 是在 GPT-5.5 的“强力辅助” 下开发的,人类负责想法、测试和调试。

两周时间,从 fork llama.cpp 做适配,到几乎从头写出一个专用引擎,外加 Metal kernel、双协议 server、磁盘 KV 缓存、agent 集成测试——这个工作量在 AI 辅助之前,单人两周是不可想象的。

antirez 不是普通程序员,但他也不是搞 ML infra 出身的。他能把这个东西做出来,本身就是 AI 辅助编码在系统级 C 代码上能走到哪一步的一个真实样本。这件事可能比 ds4 本身还更值得关注。

顺带一提,DeepSeek V4 Flash 已经接入 OpenAI Hub,开发者如果想先用云端 API 跑通业务逻辑,再决定要不要在本地用 ds4 部署一份做隐私场景或长 prompt 缓存场景,可以无缝切换——协议都是 OpenAI 兼容的。

老派程序员的一点偏执

写到这里,绕不开 antirez 这个人本身。1977 年生于西西里,2009 年创建 Redis,主导这个项目 11 年,2020 年离开。离开 Redis 之后,他写过:

  • Kilo:不到 1000 行 C 代码的文本编辑器
  • dump1090:航空 ADS-B 信号解码器
  • linenoise:readline 的微型替代品
  • 在 Flipper Zero 上写 RF 协议分析工具,把 Asteroids 移植上去
  • 2022 年出了一本科幻小说《WOHPE》

他在博客里写过一句被反复引用的话,大意是:代码是一件制品,而不只是有用的工具。他宁可被记成一个糟糕的艺术家,也不愿被记成一个好程序员。

ds4 就很 antirez——它不是为了占领市场,不是为了做基础设施,它就是“我想让这个模型在我的 Mac 上好好跑起来”,然后一个人花两周写出来。这种一次性的、过分专注的、带点偏执的项目,在今天的开源世界里其实越来越少。

README 的最后一段,他写了一句话送给所有现代程序员:

现代编程正变得复杂、无趣,全是要粘合的层。它正失去大部分美感。大多数程序员既不在面对编程的艺术面,也不在面对编程的高级工程面。

ds4.c 这个项目,多少是他对这句话的一个反例。

参考来源