文章摘要
当超大型MoE模型Kimi K3开放权重后,有开发者挑战用64GB内存的第一代M1 Max Mac运行它。Deltafin开源项目实现了此目标,将SSD纳入推理数据通路。该项目有完整和流式两种部署模式,运行速度取决于数据传输效率。其从多维度优化,推理速度提升约82倍。不过现版本仅适用于技术研究。

当2.8万亿参数的超大型MoE模型Kimi K3开放权重后,有开发者提出了一个看似不可能的挑战:能否在一台仅64GB内存的第一代M1 Max Mac上完整运行这款模型?

这个名为Deltafin的开源项目由独立开发者团队维护,仓库托管在gavamedia名下,项目主页明确说明,其与模型官方没有任何关联。

Deltafin的核心目标清晰直接:在单台设备上完整运行Kimi K3,并提供兼容OpenAI的API服务,支持本地聊天与代码代理工作流。

测试使用的设备为10核CPU、32核GPU的初代M1 Max,模型完整存储在本地SSD中,最终稳态解码速度的中位数达到0.0687 token/s,换算下来每生成一个token需要14.6秒,一段100token的简短回答需要等待约24分钟。

这个速度虽然算不上理想,但更值得关注的是:这台Mac的内存仅能容纳模型权重的二十分之一,却依然完成了完整的模型推理,背后的工程思路颇具参考价值。

64GB内存如何容纳1.56TB模型权重?

Kimi K3是一款MoE混合专家模型,总参数量达到2.8万亿,每个token仅激活约1040亿参数。模型内置896个路由专家,每一层只会选择16个专家参与当前token的计算。

这并不意味着未被选中的专家可以被移除:下一轮会调用哪些专家需要由路由模块实时决定,因此完整的权重文件必须始终处于可调用状态。

Deltafin的核心思路是将SSD纳入推理数据通路,具体实现方式分为以下几点:

  • 将注意力、共享专家、嵌入层等非路由部分整理为约114GB的spine模块,转换为int8精度后逐层读取并计算
  • 82432个路由专家总计约1.45TB权重,在完整模式下全部存储在本地SSD中
  • 每进入一个MoE层时,仅读取路由模块刚刚选中的16个专家权重
  • 如果没有1.7TB的空闲磁盘空间,也可以选择仅下载约215GB的基础模块,缺失的专家可临时从远程仓库拉取

整个过程没有对模型进行蒸馏压缩,也没有裁剪专家池,只是将传统的“全部载入显存”模式,改为“需要时再从SSD调取”的思路。

每生成一个token,SSD需要传输25.8GB数据

Kimi K3共计92个MoE层,每个token需要读取16个专家,乘以92层后,每生成一个token约需要读取25.8GB的专家数据。因此Deltafin的运行速度,很大程度上取决于数据从SSD到内存的传输效率。

项目提供两种部署模式:

  • 完整模式:占用约1.7TB磁盘空间,下载需要5到10小时,推理过程无需依赖网络,在测试的M1 Max上可达到14.6秒/token的速度
  • 流式模式:初始仅占用约215GB磁盘空间,半小时即可完成启动,未缓存的专家需要临时从远程拉取,推理速度会降至3分钟以上每token

看似只是减少了1.5TB的下载量,实际上是将磁盘IO压力转移到了网络。由于单次聊天请求的模板本身就包含60多个token,首次预填充会触发大量不同的专家调用,流式模式下单次请求等待数小时并不罕见。

从20分钟1token到14.6秒1token,82倍提速背后的优化

Deltafin的首个版本仅能实现约20分钟每token的推理速度,当前版本已经将速度提升了约82倍,达到14.6秒每token。首个token的预填充速度提升更为显著:5token的提示词预填充时间从2429秒降至28秒,提升幅度接近87倍。

这些性能提升并非依靠单一的神奇优化,而是从内存管理、数据拷贝和磁盘读取多个维度进行了精细化调整:

  1. 对spine模块进行int8量化:非专家权重从约107GB压缩至约53GB,既减少了逐层读取的数据量,也为系统页缓存腾出了更多空间
  2. 优化专家权重的读取路径:通过Metal框架直接读取MXFP4打包格式的权重,将解码、矩阵乘法和专家结果合并在同一执行路径中,避免了先扩展为fp32格式再计算的额外开销
  3. 并行化处理层加载与计算:将层加载、专家预取和模型计算尽量重叠执行,当n-gram推测命中时,一次前向传播可以同时处理两个token

仅专家读取路径的吞吐效率就从约0.87GB/s提升至6.85GB/s,对应耗时从约40秒压缩至4.3秒。

0.0687 token/s的测试结果并非单次偶然,项目团队汇总了6次完整模型运行的结果:使用完全相同的5token提示词,核对固定的3token输出,舍弃第一次解码的结果后统计稳态速度,单次结果落在0.0503到0.0779 token/s之间,0.0687是所有测试的中位数。

项目使用建议与现状

按照14.6秒每token的速度计算,每分钟大约可以生成4.1个token。短问题还可以缓慢等待结果,但长文本回答和代码代理任务则需要按小时计算等待时间。

尽管项目提供了兼容OpenAI的API接口,可以对接聊天客户端和代码工具,但当前版本仅支持贪心解码,单次只能处理一个请求,长系统提示词的预填充成本依然很高。项目维护者的定位非常清晰:该项目仅用于技术研究,不适合作为日常工作流工具。

如果想要尝试部署该项目,需要提前准备以下条件:

  • 64GB内存仅为测试参考值,更多内存可以为SSD页缓存提供更大的空间
  • 完整模式需要约1.7TB的空闲磁盘空间,优先使用速度稳定的本地NVMe硬盘
  • 需要Python 3.12及以上版本,macOS环境还需要安装Xcode Command Line Tools
  • 新一代Max或Ultra系列设备理论上拥有更高的内存带宽,但当前的0.0687 token/s测试结果仅来自初代M1 Max

尽管这还不是一套成熟的本地聊天方案,但一台2021年的Mac已经能够完整运行2.8万亿参数的模型并生成正确的输出,这无疑为大模型本地部署打开了新的思路,Deltafin只是撬开了这条道路的一条缝隙。

以上内容不代表本平台立场,仅供读者参考