數位天堂

Nokia:科技始終來自於人性; 拜耳:如果文明不能使我們更相愛,那科技便失去意義!
歡迎您的加入,讓我們一起討論科技與環保的整合應用...

您尚未登入。

#1 今天 14:17:41

Service
天使
註冊日期: 2007-07-15
文章數: 351
目前積分 :   0 

32GB RAM 本地跑 DeepSeek V4.1 Flash 初體驗

前幾篇我們用 Strata 在雙 2080 Ti 22G 上跑 Qwen 系列的 MoE 模型。Strata v0.2.9 加入了 DeepSeek V4.1 Flash(5,440 億參數的 MoE),但官方的硬體表只列 RTX 30/40/50,預先編好的引擎也沒有 2080 Ti(Turing,sm_75)。

我們讀了原始碼,發現引擎其實有為 RTX 20 保留一條舊架構的運算路徑,只是官方沒編、沒測。這篇記錄我們自己編譯、下載約 240 GB 模型檔、實際跑起來的過程,以及量到的速度和瓶頸。

https://digiland.tw/uploads/3_20261104_045357_ds41-flash-32gb.jpg

■ 先講結論

  • 2080 Ti 跑得動,而且第一次就輸出正確:自己用 sm_75 編譯官方引擎,約 6 分鐘;冒煙測試回答「The capital of France is Paris.」。這次檢查的中文回答通順,長文摘要也抓到主要重點。
  • 生成速度 3.4 tok/s,把 RAM 快取調到 16 GB 後 4.8 tok/s:讀長提示詞約 35 tok/s。可以用,但比官方公布的 3060 12G+46 GB RAM(8–10 tok/s)慢;那是另一套平台的記錄,不是同條件對照。
  • 這台主要卡在資料供應:兩張卡只放得下 27% 的專家,其餘由 CPU 計算、從 NVMe 讀。每個 token 約 210 ms,顯卡運算只佔 16 ms,CPU 等硬碟就佔 109 ms;兩張 2080 Ti 平均使用率只有 25% 左右。顯存仍有影響(放得越多,要讀的越少),但在我們這台雙卡、32 GB RAM 的配置下,時間主要花在 CPU 路徑與 SSD 讀取。
  • 240 GB 的模型檔不必再多一份空間:Strata 的「打包」只寫索引(8.5 MB、1 秒),權重直接從 GGUF 原地讀。
  • 這次沒有官方預編版本,但自行編譯後能執行:判斷能不能跑,原始碼的編譯條件比 README 的硬體表更有參考價值。


  • ---

    ◆ 01 測試平台
    項目規格
    主機板MSI X470 GAMING PLUS MAX
    CPUAMD Ryzen 5 3500X(6C/6T)
    RAM32 GB DDR4-2400(4 × 8 GB,插槽已滿)
    顯卡RTX 2080 Ti 22G(改裝)× 2,NVLink 橋接
    PCIe 實際連結3.0 x8 / x8
    模型碟ADATA LEGEND 700 512 GB(PCIe 3.0、無 DRAM 快取)
    系統Ubuntu 26.04、驅動 595、CUDA 13.1、gcc 15
    推論引擎Strata v0.2.9 的 DeepSeek 引擎 strata-dsv41(自行編譯 sm_75)
    模型DeepSeek V4.1 Flash 1017,ISTA-DASLab IQ1_M(1.75 bpw)
    ---

    ◆ 02 官方沒列,但原始碼留了路

    Strata v0.2.9 的 DeepSeek 引擎是獨立的程式(strata-dsv41,源自 project-maya,MIT 授權),官方預編套件只有 sm_86/sm_89/sm_120 三種機器碼。我們一開始也以為 2080 Ti 沒機會,讀了原始碼才發現:
  • src/dsv41/exl3.cu 寫明 sm_80 以前的卡(V100、T4、RTX 20)走 exl3_legacy.cu,用一般 CUDA 核心計算,不需要新架構的 tensor core 指令。
  • bf16 轉換用位元運算實作,不依賴 sm_80 才有的指令。
  • CMake 只拒絕比 sm_75 更舊的架構。

  • 所以只要把編譯目標改成 75 就行。官方的 Linux 編譯腳本可以直接用,只改 ARCH:

    SRC=~/Strata B=~/Strata/build-dsv41 CUDA=/usr/local/cuda-13.1 \ GG=~/Strata/third_party/llama.cpp ARCH=75-real JOBS=5 \ nice -n 19 bash packaging/build_dsv41_cuda.sh


  • llama.cpp 要用 setup.py 裡釘住的版本(LLAMA_CPP_COMMIT,這版是 3cf0325)。
  • 179 個編譯單元,6 核心約 6 分鐘完成,0 錯誤;用 cuobjdump 確認執行檔裡只有 sm_75 的機器碼。
  • 自己編的引擎沒有 Strata 的簽章,官方文件說明這在自己的電腦上沒問題;也歡迎回報給作者,他們只把「有人實際跑過」的卡列為已測試。


  • ---

    ◆ 03 選量化、下載 240 GB、打包

    官方提供三組量化,都要再加共用的 Engram 查詢表(111 GB)和 DSpark 草稿模型(8 GB):
    組合模型合計下載官方建議 RAM
    IQ1_M 1.75 bpw(本文)121 GB239 GB34 GB
    IQ2_XXS 2.00 bpw138 GB257 GB40 GB
    IQ2_XS 2.25 bpw155 GB274 GB44 GB
  • 我們只有 32 GB RAM、NVMe 剩約 250 GB,所以選最小的 1.75 bpw。官方說明它在一般文章上品質略差。
  • 我們實際下載 8 個檔、共 240 GB:表中的 239 GB,再加識圖模組(mmproj)約 1 GB。本文的容量一律是十進位 GB;Linux 的 du -h、df -h 顯示的是 GiB,同樣的檔案會顯示成約 224G。
  • 建議用可以續傳的方式下載,並逐檔核對 setup.py 裡記載的大小和 SHA256(用 setup.py 自己下載時也會檢查)。
  • Strata 的「打包」不複製權重:pack_gguf.py 只記錄每個張量在哪個檔、哪個位置,1 秒完成、8.5 MB。所以 240 GB 的模型檔不需要再預留一份空間。
  • 打包參數要完全照 setup.py 的配方(dsv41_pack_cmd)。程式註解特別警告:自己加 --skip-tensors 或 --dense-override 會「打包成功,但輸出亂碼」。
  • 官方的熱門專家清單(profile-2.00.bin)也要複製進去,引擎會優先把這些專家放進顯存和 RAM。


  • ---

    ◆ 04 冒煙測試與實際回答

    官方的 smoke.py 會問「法國首都是哪裡」,並檢查回答的文字(要有 Paris、要是正常單字),不是只看程式有沒有正常結束,因為打包錯誤時會出現「跑得完但全是亂碼」的情況。

    我們的結果:The capital of France is Paris.(含載入共 60 秒)

    接著用中文實測。問題是「用繁體中文約三百字說明,為什麼 MoE 模型可以用比總參數量小很多的顯示卡記憶體來執行,分點說明並舉生活比喻」,回答節錄:

    混合專家(MoE)模型能用遠小於總參數量的顯示卡記憶體來執行,主要有以下幾個原因:
    1. 稀疏激活:MoE 模型雖然總參數量很大,但每次輸入只會激活少數專家……
    (中略)
    生活中的比喻:就像一家大型餐廳有上百位廚師,但客人點餐時只會叫其中兩三位廚師來做菜……

    另外給它約 2,300 token 的 Strata 中文 README,請它用五點摘要,有抓到主要重點。這只是幾次人工檢查,不足以代表模型整體品質。

  • 如果不透過 setup.py、直接用系統的 Python 執行 smoke.py,會缺少 regex 套件;改用 Strata 安裝時建立的虛擬環境執行即可。


  • ---

    ◆ 05 速度:RAM 快取給多少最快?

    https://www.digiland.tw/uploads/3_20261103_123349_02_speed_cache.png
    設定讀提示詞生成每 token 讀硬碟RAM 快取命中
    預設(引擎自動給 8.8 GB)2.5 tok/s3.44 tok/s249 MB68%
    --ssd-cache 163.3 tok/s4.80 tok/s167 MB78%
    --ssd-cache 203.4 tok/s4.70 tok/s167 MB80%
    長提示詞 2,323 token(16 GB)35 tok/s3.23 tok/s255 MB75%
  • 測試條件:兩張卡、--dspark auto、關思考;中文問答提示詞 48 token、生成 256 token。預設設定重跑一次結果幾乎一樣(3.46 tok/s)。
  • 引擎預設的 RAM 快取偏保守:32 GB 的機器它只給 8.8 GB。手動加到 16 GB 快了 39%;加到 20 GB 沒有更快,可用記憶體只剩 2.9 GB、開始用 swap。32 GB 的機器建議 --ssd-cache 16。
  • 短提示詞「讀」得很慢(48 token 要十幾秒),長提示詞反而有 35 tok/s。引擎的記錄寫明「the chunked pass from 96 tokens, windows of 16 below」:96 token 以上才走整批處理,以下每 16 個 token 一段。
  • 長提示詞之後的生成比較慢(3.2 tok/s):量到的是 RAM 快取命中率從 78% 降到 75%、每 token 讀硬碟從 167 MB 增加到 255 MB。原因我們推測是上下文長,挑到的專家比較分散,但沒有進一步驗證。
  • 模型載入每次約 50 秒。

  • DSpark(推測解碼,類似 MTP):開了反而慢 12%

    引擎預設(--dspark auto)在這台自動不開,記錄裡的理由是專家總量 115 GB 遠大於顯存 44 GB。我們用 --dspark on 強制開啟,同一次開機連續對照:
    設定生成卡上的專家每 token 讀硬碟每輪產出
    不開4.19 tok/s4,113 個173 MB1 token
    --dspark on3.69 tok/s3,407 個202 MB1.64 token
    --dspark on --dspark-block 33.65 tok/s3,407 個201 MB1.60 token
    草稿其實猜得很準,每個位置有 80–100% 被採用,問題出在成本:草稿模組佔掉顯存,卡上的專家少了 700 多個;一次驗證多個 token,要挑的專家也更多。兩者加起來,每 token 讀硬碟多了約 17%。在一台卡在硬碟讀取的機器上,多猜中的 token 抵不過多讀的資料。官方數據也是同一個方向:3060+46 GB RAM 開啟只快 2–13%,128 GB RAM 的 4090 才明顯有效。

    注意:這組是剛開機、磁碟快取還是空的時候量的,所以「不開」只有 4.19,比上表的 4.80 低。比較時請看同一組內的差距,不要和上表混用。

    ---

    ◆ 06 時間花在哪裡?

    我們的雙卡合計 44 GB 顯存,約為 3060 12 GB 的 3.7 倍,生成速度卻只有官方數據的一半左右。不過官方那組的 RAM、CPU、SSD、量化(2.00 bpw)和測試輸入都和我們不同,速度差不能直接說明原因。以下用我們自己的時間拆解來判斷瓶頸。

    https://www.digiland.tw/uploads/3_20261103_154724_03_time_per_token.png

    引擎的 --verbose 會列出每個 token 的時間花在哪裡:
  • 兩張卡各管一半的層(第 0–19 層、第 20–39 層),算完 40 層只要 16–21 ms。
  • 放不進顯存的專家由 CPU 計算,CPU 這條路要 180–260 ms,其中 109–180 ms 是在等硬碟把專家讀進來。
  • 測試期間兩張 2080 Ti 平均使用率只有 24–27%(這是整段測試的平均;只看逐字輸出的時候約一半,平均約 50%、最高 66%,讀提示詞時只有約 10%),CPU 的 I/O 等待平均 24%。顯卡在等 CPU,CPU 在等硬碟。

  • https://www.digiland.tw/uploads/3_20261103_123350_04_expert_placement.png
  • 這個模型有 15,360 個專家,每個約 7.5 MB;每生成一個 token 要挑 240 個,約 1.79 GB。
  • 兩張卡在放完其他權重後,各只剩 567 MiB,共放了 4,113 個專家(約 31 GB);RAM 快取放 1,838 個;剩下 9,409 個(61%)留在硬碟,用到才讀。
  • 這顆 PCIe 3.0、無 DRAM 快取的 NVMe,引擎在這個工作負載下實測讀取速度只有 1.12 GB/s,大約是循序讀規格的一半。
  • 官方的 3060 那組有 46 GB RAM,快取應該放得下更多專家;官方文件也寫了「RAM 低於約 40 GB 未經測試,而且會慢」。

  • 結論:在我們這台雙卡、32 GB RAM 的配置下,時間主要花在 CPU 路徑與 SSD 讀取,顯卡運算只佔一小部分。如果要升級這台,我們的優先順序是:
  • 1. 加 RAM(4 個插槽已滿,要整組換成 64 GB 以上):直接減少每 token 要讀硬碟的量。
  • 2. 換更快的 NVMe:X470 只到 PCIe 3.0。換有 DRAM 快取的碟預期會改善,但我們沒有實測,效果要以這種工作負載的實測為準。
  • 3. 最後才是顯卡


  • ---

    ◆ 07 過程中踩到的雷
  • 只看 README 就下結論:我們第一次評估時只看了硬體表,就說 2080 Ti 不支援;讀原始碼才發現可以自己編。


  • ---

    ◆ 08 值不值得跑?
  • 適合:想在自己的電腦上試 DeepSeek V4.1 Flash、可以接受每秒 4–5 個 token 的離線用途(整理文件、批次問答)。
  • 不適合:即時對話或語音助理。光是讀短提示詞就要十幾秒,每次載入還要 50 秒。
  • 同一台機器跑 27B 的密集模型(vLLM 張量平行)可以到每秒 36–48 個 token;以這台的硬體來說,那還是日常使用比較實際的選擇。
  • 如果你的電腦 RAM 有 64 GB 以上,結果應該會好很多,歡迎分享數據。


  • ---

    ■ 參考連結
  • Strata(本文使用的推論引擎):https://github.com/Niko1221/Strata
  • Strata v0.2.9 release(加入 DeepSeek V4.1 Flash):https://github.com/Niko1221/Strata/releases/tag/v0.2.9
  • 模型 DeepSeek V4.1 Flash 1017 GSQ-RCO GGUF(ISTA-DASLab,本文使用 IQ1_M):https://huggingface.co/ISTA-DASLab/Deep … Q-RCO-GGUF
  • Engram 中繼資料、DSpark 草稿模型、視覺模組(unsloth):https://huggingface.co/unsloth/DeepSeek … -1017-GGUF
  • project-maya(DeepSeek 引擎的來源):https://github.com/mw00/project-maya
  • llama.cpp:https://github.com/ggml-org/llama.cpp

  • ■ 同系列文章
  • Strata 實測:家用 2080 Ti 22G 跑 125B 的 Qwen3.8-Flash-Next:https://www.digiland.tw/viewtopic.php?id=3512
  • 續篇:32 GB 記憶體+雙 2080 Ti 22G 跑 Strata IQ3_S:https://www.digiland.tw/viewtopic.php?id=3516
  • 續篇:DeepSeek V4.1 Flash Coder 版,寫程式快六成:https://www.digiland.tw/viewtopic.php?pid=23031#p23031


  • (圖表與原始數據都是我們自行量測整理,歡迎討論或指正。)



    Mac Mini M6

    線上

     

    相關討論主題

    主題 回覆 點閱 最後發表
    0 174 2026-10-30 16:33:23 作者 Service
    0 420 2026-10-22 11:56:31 作者 Service
    0 1024 2026-10-10 13:07:12 作者 Service
    <Flash Game>快打旋風2 作者 Aven  [ 1 2 ]
    16 58155 2019-07-19 23:49:33 作者 hemmis
    <Flash Game>泡泡龍 作者 Aven  [ 1 2 3 ]
    26 78603 2019-03-24 17:15:36 作者 fishkoka

    友情連結

    論壇頁尾

    Powered by PunBB
    © Copyright 2018 Rickard Andersson
    RSS Feed