iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
AI Engineering

128GB 統一記憶體的三十天:DGX Spark 地端 LLM 與生成式 AI 部署實戰系列 第 17

Day 17|ds4 深度解析:Redis 之父只為一種模型造了一個引擎

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260830/20141816YjwJChh7Gh.png

從通則到特例

昨天講選型方法論,五個問題幫你在眾多模型裡挑一個。今天講一個把整套邏輯推到極端的特例,如果你已經知道自己要的就是那一款模型,接下來的問題就變成,願不願意為它放棄通用性,換取把它跑到最好呢。

這個問題有一個現成的答案叫 ds4(DwarfStar),作者是 antirez,寫出 Redis 的那位大神。它在 Day 6 的引擎圖鑑裡客串過「第五人格」,今天稍微詳細說明一下它的優點,因為它是我 Spark 1 上跑了 2 個月的日常主力引擎,服役時數比本系列任何一個通用引擎都長。

它是什麼 ? 一個專用的推論引擎

先講清楚它的定位。它不是 llama.cpp 的包裝,不是通用 GGUF 執行器,也不支援你選擇其他的模型給它用。它是純 C 寫成、完全自包含的原生推論引擎,深度支援的模型原本只有 DeepSeek V4 Flash 與 PRO 這兩款,現在又多了社群也很關注的 GLM 5.2 這款強大模型。這位大神作者在 README 裡誠懇致謝 llama.cpp 與 GGML 開出的路,而這個專案的程式碼是他精心打造的,維持了良好的執行效率。

這個「只服務一顆模型」的決定,換到的效益,每一樣都跟通用引擎的取捨相反:

KV cache 能從記憶體外放到 SSD 上

通用引擎的 KV 通常是活在記憶體裡,行程一關就蒸發。ds4 把 KV cache 設計成可以串流到 SSD 的持久資料,長對話關掉重開,上下文直接從磁碟回來,不用重算 prefill。對照本系列 Day 9 到 15 一路在算的 KV 記憶體帳,這是完全不同的解題路線,DS4 並不是採用省 KV 的路線,它反而讓 KV 可以不用住在最貴的地段,放到在 SSD 也能用,可讓記憶體載入量化過的 DeepSeek V4 Flash 模型。

量化配方為特定硬體量身訂做

它的 2-bit imatrix 量化可說是寫給 96GB 到 128GB 記憶體等級的機器採用,DeepSeek V4 Flash 壓到約 81 GB,正好讓 Spark 這一級的裝置塞得下一顆旗艦級 MoE 還有餘裕。Day 12 講過低位元沒有 imatrix 幾乎不能用,ds4 的 2-bit 就是 imatrix 功力的展示品。如果是更大尺寸檔案的版本,則可以放到更大記憶體的機器,特別是新世代 Mac 機器上,有更多的統一記憶體選項可用。

Makefile 裡有一行 make cuda-spark

專門為 GB10 特調的建置目標,官方效能表直接列 DGX Spark 實測成績(q2 量化、7,047 token 提示詞,prefill 343.81 t/s、生成 13.75 t/s)。一個開源專案把你的機器當一級支援平台,這種待遇通用引擎給不了。

ds4-server 支援度廣
OpenAI 相容與 Anthropic 相容端點都有,上層工具不管認哪一家的 API 格式都接得上。單一即時 session 的設計聽起來寒酸,對照 Day 11 的結論其實誠實,單人場景本來就不需要 continuous batching 的武器庫。

服役 2 個月的實話

規格講完,講體感,這部分是官方 README 沒有的。

它讓「旗艦 MoE 當日常」成立。 DeepSeek V4 Flash 的能力等級與 27B 級模型不是同一個等級的東西,通用引擎路線下它的量化檔對 128GB 是緊的,而 ds4 的 2-bit 讓它變成常駐可行。過去一個月我的查詢、翻譯、文件整理都是由它提供服務的,品質穩定,這是垂直整合最直接的紅利。

磁碟 KV 在長專案裡真的有感。 如果有某個工作 session 跨好幾天,重開機後上下文還在,這個體驗會讓人回不去。代價是 SSD 的寫入量,拿 Day 10 的儲存視角看,它把 KV 的頻寬壓力從記憶體轉嫁到了 NVMe,長期跑要留意 SSD 的寫入壽命,產生的影響,我會在維運篇補算。

它的極限也很誠實。 想換更多模型,沒有,目前只有兩種主流模型可選用。想平行處理服務公司更多人,沒有。當之後模型換代(V4 變 V5)時,這個托論引擎要等作者跟進才有辦法用,這是把身家押在單一專案節奏上的風險。Day 6 說過的那句話一個月後仍然成立,當你的日常主力就是那一顆模型時,這個取捨非常划算,前提是你要想清楚

GLM 5.2 入列,還教你兩台機器合體

DS4 深度支援名單從 DeepSeek 雙款擴充到近期熱門的 GLM 5.2,之後還會有 5.3,這件事的意義不只是多一顆模型可選,而是官方順手示範了一個新玩法,把一顆模型拆到兩台 128GB 的 MacBook 上合跑。GLM 5.2 的常駐 expert 分片約需 97.5 GiB,再加上 KV 與 scratch 的開銷,單機記憶體會比較難順跑,DS4 官方的做法是 coordinator 與 worker 各扛一段層(例如 --layers 0:19 與 --layers 20:output),兩台機器用 Thunderbolt 直連。

設定上有兩個每次開機要做一次的前置。第一是把 GPU 可鎖定記憶體上限拉高,macOS 預設約為 RAM 的 75%,要用 sudo sysctl iogpu.wired_limit_mb=120000 放寬到約 117 GB。第二是 RDMA over Thunderbolt 要求 IPv4 位址直接掛在實際接線的成員介面上,掛在 bridge 上的 IP 不算數,接受 TCP fallback 的話可以跳過這步。載入模型前可用 rdma_ctl status 與 ibv_devinfo -v 確認 verbs 裝置就緒。

官方也給了一張很誠實的網路連線對照表,同樣兩台 M5 Max、同一份 91 GB 的 Flash 量化檔案、8192 token 提示詞、生成 128 token,只換連線方式。

連線 Ping 平均 Prefill 生成
Thunderbolt 5 0.45 ms 582.99 t/s 25.09 t/s
WiFi 77.20 ms 250.70 t/s 10.70 t/s
Internet / VPN 152.10 ms 114.88 t/s 3.63 t/s

WiFi 與 VPN 的數字會隨現場環境變動,官方強調重點在型態,延遲直接打擊生成速度,頻寬不足則把長 prefill 也拖下水。拿本系列 Day 3 文章的視角看,這張表等於幫本系列的 10GbE 與雙 Spark 直連規劃背了一次書,跨機推論這件事,網路連線就是運算路徑的一部分,不能不重視。

官方載入模型的三條路線

README 這次也把模型進入 ds4 的途徑寫清楚了。

第一,原生 safetensors 加 config.json,官方推薦。
直接把 ds4 指向 Hugging Face 模型目錄,走原生 loader。官方明講這條路永遠比轉檔過的 GGUF 可靠。對照 Day 5 的 NFS 模型庫規劃,我們集中存放的本來就是 HF 原始格式,這條路等於零額外成本。

第二,預轉換的 .ds4 檢查點。
單一檔案,tokenizer 與量化中繼資料都內嵌,適合發佈與搬運。

第三,經 llama.cpp 工具轉出的 GGUF。
支援的架構可以用,但官方附上一個很重要的警告,轉檔工具遇到不認得的 tensor 名稱時會寫入假 tensor,而不會報錯中止。這解釋了社群偶爾回報的「檔案能載入、輸出卻不對勁」的靈異現象,問題不在推論引擎,在轉檔那一刻就發生了。官方的結論很乾脆,能用 safetensors 就用 safetensors。

它教會這個系列的三件事

跳出產品本身,ds4 的存在對地端 AI 用戶有三個啟示。

第一,通用與特化的光譜上,位置是自己選的。
llama.cpp 屬於最通用那端,ds4 則是最特化那端,vLLM 與 TRT-LLM 處在中間。昨天的選型五問文章,其實隱含了第六問,你要的是一個引擎服務所有模型,還是所有工程精力服務一顆模型呢 ?

第二,128GB 這一級的機器正在長出自己的生態。
ds4 的 2-bit 檔、Perplexity 的混合精度配方、Ornith 的 NVFP4,這些都是明確為統一記憶體桌面機設計的產物。一年前這個級距沒有專屬軟體,現在有了,這是 Day 1 說地端元年的另一個實證。

第三,單人開發者仍然能定義品類。
21.9k 星、一級支援三個硬體後端、KV 持久化這種大引擎都沒做的設計,主要出自一個人之手,證明開源世界的奧義,從來不在人數,貴在人。

明天預告

引擎與模型都說明清楚後,明天把視角拉高一層,如果你的機器上同時住著 ds4、vLLM、llama.cpp 三種服務、五六款模型,上層應用怎麼不被綁死在任何一家呢?

答案是那個所有引擎殊途同歸的介面,OpenAI 相容 API 層。多模型共存的路由設計、統一入口的做法、以及這個解耦在換模型換引擎時替你省下的許多重工。

我們 Day 18 見囉。

Day 1|為什麼 2026 年是地端 AI 部署元年:系列規劃與硬體總覽
Day 2|DGX Spark GB10 深度解析:128GB 統一記憶體到底解決了什麼問題
Day 3|網路與儲存規劃:10GbE 骨幹、雙 Spark 直連與 NFS 集中模型庫
Day 4|開箱之後:DGX OS 初始環境建置與 CUDA、Docker 生態確認
Day 5|NFS 模型庫實戰:下載工具、權限設計與版本管理
Day 6|llama.cpp、vLLM、TensorRT-LLM 、Ollama、DS4 與 Unsloth 的定位與取捨
Day 7|第一個模型上線:gpt-oss-120b 從模型庫到 API 的完整流程
Day 8|llama.cpp 實測:先定量尺與 SOP
Day 9|vLLM 實測:官方容器、同時處理吞吐曲線,與剛出爐的新模型 Ornith 1.5
Day 10|TensorRT-LLM 實測:我花了一個下午,跟它的預設值搏感情
Day 11|地端 AI 三大推論引擎綜合評測,同場加映神秘嘉賓
Day 12|量化格式解析:「4-bit」兩個字,古今多少事 ? 都付笑談中
Day 13|Perplexity 把整套 Agent 搬上 DGX Spark:地端元年的官方背書
Day 14|Qwen3.8-27B 與 Flash-Next 加碼實測:地端模型世代對決與落地評估
Day 15|Ornith 1.5 實測:為 AI agent 而生的 35B-A3B
Day 16|模型選型方法論:五個問題幫你跳脫排行榜迷失,找到適合自己任務用的 AI 模型
Day 17|ds4 深度解析:Redis 之父只為一種模型造了一個引擎
Day 18|OpenAI 相容 API 層:地端 AI 多模型常駐好助手


上一篇
Day 16|模型選型方法論:五個問題幫你跳脫排行榜迷失,找到適合自己任務用的 AI 模型
下一篇
Day 18|OpenAI 相容 API 層:地端 AI 多模型常駐好助手
系列文
128GB 統一記憶體的三十天:DGX Spark 地端 LLM 與生成式 AI 部署實戰21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言