MAQ 在自有的雙卡 RTX PRO 6000 96GB(Blackwell Max-Q Workstation Edition)機器上,用 ollama 實測了三個模型的生成吞吐量。這台機器目前同時服務公司內部其他系統,功耗被鎖在 250W(滿血 325W),兩張卡之間也沒有 NVLink。發表這篇之前,先把話說在前面:這不是 tensor parallel(張量並行)測試,跨卡的結果是 ollama 底層 llama.cpp 的 layer-split(逐層接力,又稱 pipeline parallel),不是兩卡同時平行分擔同一層運算。標題與內文若不把這一點講清楚,很容易被誤讀成兩張卡加起來的算力,那是錯的。以下依序整理測試環境、方法與數據。
一、測試環境
| 項目 | 數值 |
|---|---|
| 顯示卡 | 2× NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition,各 96GB(實際回報 97,887 MiB) |
| 卡間拓樸 | `nvidia-smi topo -m` 顯示為 NODE,無 NVLink,跨卡走 PCIe |
| 功耗上限 | enforced.power.limit=250W(該卡上限 325W,本機未解鎖) |
| 處理器/記憶體 | AMD Threadripper PRO 9965WX(24 核心 48 執行緒)/122GB 系統記憶體 |
| 驅動/推論引擎 | NVIDIA Driver 595.84、CUDA 13.2;ollama 因相容性問題走 cuda_v12 後端(v13 對超過 2GB 的張量會觸發 ggml_nbytes 溢位) |
| 並行設定 | OLLAMA_NUM_PARALLEL=1(單一在途請求,非多人同時對話的並行吞吐) |
二、測試方法
吞吐量直接取自 ollama `/api/generate`(`stream:false`)回傳的計時欄位:生成(decode)吞吐=`eval_count / eval_duration`,提示詞處理(prefill)吞吐=`prompt_eval_count / prompt_eval_duration`,兩者單位皆為奈秒,本文只報 decode 數字。實際請求範例:
curl -s http://localhost:11434/api/generate -d '{
"model":"moe-120b-gpt-oss-mxfp4:latest",
"prompt":"用繁體中文寫一篇 800 字的宜蘭三星鄉深度旅遊攻略,包含交通、季節、必訪景點",
"stream":false,
"options":{"num_predict":1200}
}' -o /tmp/g.json
模型實際放置的顯示卡與 KV 快取大小,透過 `curl http://localhost:11434/api/ps` 確認:回傳的 size_vram 一旦超過單卡容量,即代表 ollama 自動觸發跨卡的 layer-split。功耗與拓樸則以 `nvidia-smi --query-gpu=... --format=csv` 及 `nvidia-smi topo -m` 讀取。
三、結果
| 模型 | 量化/參數 | 顯存佔用 | 放置 | 生成吞吐 |
|---|---|---|---|---|
| gpt-oss-120b | MXFP4,MoE 116.8B 總參數/約 5B 啟動 | 65GB | 單卡 | 185–187 tok/s |
| gemma4(dense) | Q4_K_M,31B 密集 | 21GB(含 262,144 脈絡的 KV 快取) | 單卡 | 53 tok/s |
| mistral-large-2411 | Q4_K_M,123B 密集 | 127GB(模型 73GB+131,072 脈絡的 KV 快取約 54GB) | 跨兩卡(layer-split) | 18 tok/s |
三個數字不能等量齊觀。gpt-oss-120b 的 185 tok/s 較能反映這張卡單卡執行 MoE 模型的實力:單卡、MXFP4 原生量化、每 token 僅啟動約 5B 參數。mistral-large 的 18 tok/s 則是四個不利條件疊加的結果——123B 密集架構(每個 token 都要算滿全部參數,非 MoE 的部分啟動)、Q4_K_M 量化、250W 功耗鎖、以及無 NVLink 的 PCIe layer-split——不宜當成這張卡的代表性效能,僅供「在這台機器上,這個模型能不能跑、跑多快」的量級參考。
數字均為單一在途請求(無並行)之生成吞吐,繁體中文提示詞,測試當下環境,樣本數 n=1~2。相同模型在不同提示詞長度、量化版本或功耗設定下,數字會不同。
四、功耗與載入時間
gpt-oss-120b 單卡執行時,實際運算的 GPU0 功耗約 70W,未使用的 GPU1 維持約 14W 待機;提示詞處理階段的功耗尖峰會打到 250W 的上限,持續約 5 秒後隨即回落,這代表 prefill 階段確實吃滿了電力上限,而 decode 階段用不到這麼多。mistral-large 跨兩卡執行時,兩張卡同時維持約 195–198W、各約 45–57% 使用率——這正是 layer-split 的特徵:兩卡並非同時全力運算同一層,而是各自處理被分配到的層、彼此等待與傳遞中間結果,總功耗因此接近兩張卡功耗上限的總和,但吞吐並未隨之等比放大。模型冷啟動的載入時間:65GB 的 gpt-oss-120b 約 20 秒,73GB 的 mistral-large 亦約 20 秒。
資料來源:本文數據為 MAQ 於自有機器實測所得(2026 年 9 月,ollama /api/generate 與 nvidia-smi 直接讀取),測試方法與原始指令已列於內文。gpt-oss-120b 之 MoE 架構與參數規模引自 OpenAI 官方模型卡;量化格式定義引自 llama.cpp/ollama 官方文件。本文數字僅反映測試當下之特定環境(250W 功耗上限、無 NVLink、單一在途請求),不代表該顯示卡之架構效能上限,亦非 tensor parallel 測試結果,讀者評估採購時宜以自身工作負載與框架另行實測。本文非受任何公司委託或贊助,亦未收受對價;MAQ 為 AI 硬體系統整合商,銷售之工作站包含文中測試之顯示卡型號,於本題具有商業利益。NVIDIA、RTX、Blackwell、CUDA 為 NVIDIA Corporation 之商標;AMD、Threadripper 為 Advanced Micro Devices, Inc. 之商標;OpenAI、gpt-oss 為 OpenAI 之商標;Mistral 為 Mistral AI 之商標;Google、Gemma 為 Google LLC 之商標;其餘商標歸各自所有者所有。