如何在两台 Mac Studio 上运行完整 DeepSeek V4 PRO Q4:DwarfStar 分片实战
【免费下载链接】ds4DeepSeek 4 Flash and PRO local inference engine for Metal, CUDA and ROCm项目地址: https://gitcode.com/GitHub_Trending/ds4/ds4
DwarfStar(项目名ds4)是一个专为 DeepSeek V4 Flash 与 PRO 打造的本地推理引擎,支持 Metal、CUDA 与 ROCm 后端。本文将带你用它的流水线并行(分片)能力,把完整的 DeepSeek V4 PRO Q4 量化模型拆分到两台 Mac Studio 上运行——哪怕单机内存装不下整个模型,也能在消费级硬件上跑起来。
为什么需要"两台机器"?
DeepSeek V4 PRO 是参数量更大的旗舰版本,完整 Q4 量化后的 GGUF 文件超出单台 512 GB Mac Studio 的舒适内存范围。DwarfStar 给出的方案很直接:
- 把模型按层(layer)切分,每台机器只加载自己负责的那一半
- 通过coordinator(协调者)与worker(工作者)角色,用普通 TCP 网络把激活值(activations)在机器间传递
- 对外仍然是熟悉的命令行 / API 体验,交互方式不变
核心源码位于 ds4_distributed.c 与 ds4_distributed.h,配置细节可参考 README.md 中的 "Distributed inference" 章节。
分片原理:谁负责哪一层?
可以把整台推理系统想象成一条流水线:
- coordinator负责分词、采样,并计算第 0–30 层
- worker连接上来,负责第 31 层直到输出头(
31:output) - 每个 worker 还各自保存自己那部分层的 KV 缓存
- 数据在 worker 之间点对点直传,不需要协调者中转,流量路径为
A -> B -> A
这个设计有两个巧妙之处:
- 每个进程只映射自己需要的张量,内存占用直接减半
- worker 拥有输出头后可以直接返回 logits,省去最后把完整隐藏状态传回协调者的开销
⚡ 小知识:预填充(prefill)阶段两台机器可以并行处理不同微批次,速度比单机还快;但生成(decode)是严格自回归的,每个 token 都要跨机器跑一整圈,所以生成速度会比单机略慢。
准备模型文件:各下载半个模型
仓库提供了现成的按层切分的 GGUF 文件,在两台机器上分别执行:
# 协调者机器(Mac Studio A) ./download_model.sh pro-q4-layers00-30 # 工作者机器(Mac Studio B) ./download_model.sh pro-q4-layers31-output脚本会下载并保存到本地./gguf/目录(支持断点续传):
| 机器 | 文件 |
|---|---|
| A(coordinator) | gguf/DeepSeek-V4-Pro-Q4K-Layers00-30.gguf |
| B(worker) | gguf/DeepSeek-V4-Pro-Q4K-Layers-31-output.gguf |
下载逻辑可查阅 download_model.sh。注意这两个分片文件不会更新默认的./ds4flash.gguf软链,启动时需要用-m显式指定。
最小双机配置:四行命令跑起来
两台机器用雷电 5(Thunderbolt 5)线直连效果最佳。以直连网口地址169.254.43.68(A)为例:
# Mac Studio A:协调者,负责分词、采样和第 0-30 层 ./ds4 -m gguf/DeepSeek-V4-Pro-Q4K-Layers00-30.gguf \ --role coordinator \ --layers 0:30 \ --listen 169.254.43.68 1234 # Mac Studio B:工作者,负责第 31 层到输出头 ./ds4 -m gguf/DeepSeek-V4-Pro-Q4K-Layers-31-output.gguf \ --role worker \ --layers 31:output \ --coordinator 169.254.43.68 1234要点提示:
- 层区间是闭区间:
10:20表示第 10 到 20 层;N:output表示第 N 层到最后一层加输出头 - worker 会主动连接协调者并注册自己"能算哪些层",注册齐了才形成完整路由
- 启动后就像正常使用
./ds4一样交互:聊天、/read、普通生成都走同一套会话接口
实测表现:11.47 t/s 是什么体验?
项目团队在直连192.168.0.182/192.168.0.183的两台 Mac Studio 上做了贪心解码冒烟测试:
| 指标 | 数值 |
|---|---|
| 生成速度 | 11.47 t/s |
| 本地层耗时 | 约 39–43 ms/token |
| 远端层耗时 | 约 44–49 ms/token |
| 单 token 总耗时 | 约 84–92 ms |
两点预期管理:
- 启动较慢:每侧都要把半个模型映射并驻留进内存,首次加载耐心等待
- 生成速度不算快:这是"容量型"部署,目标是"跑得起完整 PRO",而不是追求高吞吐。11 t/s 对于阅读和审查模型输出完全可用
PRO Q2 量化在单台 512 GB Mac Studio 上可达 9.56 t/s(见 README.md 的 Speed 表格),所以双机 Q4 方案用略高的速度换来了更高的量化精度。
网络怎么选:雷电 5、以太网还是 WiFi?
分布式模式底层是纯 TCP,任何链路都能工作,但延迟直接决定体验。官方在两台 M5 Max 上用同一个 91 GB Flash 量化测得:
| 链路 | 平均 Ping | 预填充 | 生成 |
|---|---|---|---|
| 雷电 5 | 0.45 ms | 582.99 t/s | 25.09 t/s |
| WiFi | 77.20 ms | 250.70 t/s | 10.70 t/s |
| 互联网 / VPN | 152.10 ms | 114.88 t/s | 3.63 t/s |
强烈建议使用快速以太网或雷电网络。如果只有慢速链路,可以试试--dist-activation-bits 16把激活值按 16 位传输,减半流量。
调优与排障
- 看遥测:协调者加
--debug会打印每一跳的层范围、本地计算时间、下游等待时间、发送耗时和字节数,是判断切分是否均衡的第一工具 - 预填充窗口:
--dist-prefill-window N控制端到端最多有几个预填充块在途;默认 4096 token 的分块(--dist-prefill-chunk)是经过验证的规范配置 - worker 掉线:协调者会自动把该 worker 移出路由;会话恢复后可通过重放 token 历史重建 worker 的 KV 状态,无需从头开始
- 会话持久化:分布式会话保存的 KV 文件与单机格式完全一致,
ds4-agent的/save、/switch等机制照常可用
写在最后
DwarfStar 用极小的工程量演示了一个很有说服力的思路:当模型太大、内存不够时,把机器"粘"起来。两台 512 GB 的 Mac Studio,靠一根雷电线和一个按层切分的 GGUF,就能完整运行 DeepSeek V4 PRO Q4——这在一年前还是只有数据中心才玩得起的规格。
如果你想继续探索,推荐从以下材料入手:
- 分布式配置全貌:README.md
- 模型下载目标列表:download_model.sh
- 分布式引擎接口:ds4_distributed.h
- 基准测试数据:speed-bench/
注意:仓库迭代很快(beta 状态),协议尚未"发布稳定",协调者与 worker 请用同一 commit 构建,并只在受信任的机器与网络上使用。
【免费下载链接】ds4DeepSeek 4 Flash and PRO local inference engine for Metal, CUDA and ROCm项目地址: https://gitcode.com/GitHub_Trending/ds4/ds4
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考