硬體選購

RTX PRO 6000 96GB 雙卡實測:gpt-oss-120b 推論吞吐、7B 微調訓練與雙卡擴展效率

2026-09-10 | 約 12 分鐘 | MAQ 技術團隊

MAQ 在一台雙卡 RTX PRO 6000 96GB(Blackwell Max-Q Workstation Edition,功耗上限 300W,兩卡之間無 NVLink)機器上,跑了一輪推論與訓練的 benchmark:vLLM 與 ollama 的生成吞吐、以及 Qwen2.5-7B 全參數微調的訓練吞吐。本文列出全部量測到的數字、測試方法與功耗觀察,並說明 vLLM 的 tensor parallel 在這個硬體配置上跑不起來的實況。

一、測試環境

項目數值
顯示卡2× NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition,各 96GB(實際回報 97,887 MiB)
功耗上限enforced 300W(該卡 max 325W/min 250W)
卡間拓樸nvidia-smi topo -m = NODE,無 NVLink,跨卡走 PCIe
處理器/記憶體AMD Threadripper 9960X(24 核 48 執行緒)/122GB 系統記憶體
驅動/CUDANVIDIA Driver 595.91.07、CUDA 13.2
推論引擎vLLM 0.29.0(官方 docker 映像)、ollama(llama.cpp 底層)
訓練PyTorch 2.9.0 + CUDA 12.8 官方 docker、transformers + DDP

二、單串流推論

gpt-oss-120b(MXFP4 原生量化,MoE 116.8B 總參數/每 token 約 5B 啟動)單卡執行、單一在途請求、逐 token 生成——這是一般人開一個對話視窗打字聊天時的實際情境。

引擎設定生成吞吐(decode)
vLLMcompletions endpoint,強制輸出 512 token185 tok/s(TPOT 5.3ms)
ollama/api/generate,num_predict 1200185.6 tok/s

兩套完全不同的推論引擎測到同一個數字,每秒約 185 個 token。這是因為單串流 decode 每產生一個 token,都要把被啟動的那批專家權重從顯示記憶體讀進運算單元一次,瓶頸在記憶體頻寬——GPU 的運算單元其實大部分時間在等記憶體,這個階段 GPU 功耗遠低於 300W 上限。要拉高吞吐,得靠下一節的批次推論把運算單元餵飽。

三、批次推論

把單卡 vLLM 的並行請求數往上加(模擬多人同時使用),輸入 512 token、強制輸出 512 token:

同時並行請求數總輸出吞吐每個請求的 decode 速度中位首字延遲(TTFT)GPU0 功耗
1185 tok/s185 tok/s約 18 ms遠低於上限
16894 tok/s約 58 tok/s467 ms
641,786 tok/s約 29 tok/s945 ms峰值 300W、忙碌均值 298W

並行度拉到 64 時,總輸出吞吐衝到每秒 1,786 個 token,GPU 這時被打滿 300W——批次推論把很多請求的運算合在一起做,運算單元終於有事情做、吃得到電。代價是單一請求的體感變慢:每個請求的 decode 從 185 掉到 29 tok/s,首字要等將近 1 秒。這是「總吞吐」與「單人體感」之間的取捨。

四、訓練吞吐與雙卡擴展

Qwen2.5-7B 全參數微調(bf16、AdamW 最佳化器、gradient checkpointing、每卡 batch 2、序列長度 2048):

配置總訓練吞吐每卡吞吐每卡峰值記憶體GPU 功耗
單卡3,243 tok/s3,243 tok/s77.4 GB
雙卡 DDP6,010 tok/s約 3,000 tok/s92.7 GB(逼近上限)兩卡峰值 305W、忙碌均值 291–296W

雙卡擴展效率 = 6,010 ÷(3,243 × 2)= 92.7%。DDP 的梯度 all-reduce 走 PCIe(沒有 NVLink)只吃掉大約 7% 的每卡吞吐——對訓練這種「前向加反向算一大段、才通訊一次梯度」的工作型態,PCIe 頻寬夠用。訓練時兩張卡都咬在 300W 上限(瞬時峰值 305W),運算單元是滿載的。需要注意,DDP 每卡仍要放下完整的模型與最佳化器狀態,雙卡的每卡峰值記憶體(92.7GB)比單卡(77.4GB)更高、逼近 96GB 上限——DDP 只加吞吐,不省記憶體。這次要跑起來也需設 NCCL_P2P_DISABLE=1(原因見下節)。

五、tensor parallel 的現況:vLLM 跑不動,DDP 可以

「真正的多卡並行推論」(tensor parallel,每一層都把運算切開分給多張卡同時做)這次沒有測到數字。vLLM 的 tensor parallel 在這台無 NVLink 的雙卡 Max-Q 上跑不起來:NCCL 初始化會卡死,要設 NCCL_P2P_DISABLE=1 才過;過了之後,vLLM 的 FlashInfer attention kernel 首次暖機又慢到不實際——兩張卡顯示 100% 使用率,卻只吃 97W,跑十幾分鐘還沒完成。這是 vLLM 0.29、gpt-oss 的 MXFP4、Blackwell 架構、停用 P2P 幾個條件疊在一起的軟體邊角問題。

不代表硬體不能做多卡集合通訊:PyTorch 的 DDP 訓練用同一個 NCCL_P2P_DISABLE=1 就跑得動,擴展效率 92.7%。兩者差別在通訊型態——DDP 每個訓練步只做一次梯度同步,對延遲不敏感;tensor parallel 推論則是每一層 attention 與 MLP 都要跨卡通訊,對延遲極度敏感,沒有 NVLink 的低延遲互連就會被放大。要拿到真正的 vLLM tensor parallel 推論數字,可能需要換 vLLM 版本、換非 gpt-oss 的模型測試,或加裝 NVLink 橋接。

六、其他模型與 layer-split 多卡推論

ollama(底層 llama.cpp)的 layer-split——把模型依層數切開放到多張卡、推論時各層依序接力——這種方式不走 NCCL 集合通訊,只做點對點的中間結果複製,在這台機器上正常運作:

模型量化/參數放置decode 吞吐
gpt-oss-120bMXFP4,MoE 116.8B/約 5B 啟動單卡(65GB)185.6 tok/s
gemma4-31b(dense)Q4_K_M,31B 密集兩卡(34GB,ollama 自動分配)64.9 tok/s
nemotron-120bQ4_K_M,MoE 123B/12B 啟動兩卡 layer-split(97GB)120.6 tok/s

密集架構的 gemma4-31b(每個 token 都要算滿全部參數)每秒 64.9 個 token;MoE 架構的 nemotron-120b 雖然總參數 123B,但每 token 只啟動 12B,跨兩卡 layer-split 下仍有每秒 120.6 個 token。同一台機器上,模型是不是 MoE、以及是密集還是稀疏啟動,比總參數量更能決定生成速度。

七、測試方法

vLLM 吞吐用官方的 vllm bench serve,走 /v1/completions 端點、--ignore-eos 強制輸出滿指定長度。這裡有個坑:一開始用 /v1/chat/completions 端點測,gpt-oss 的 harmony 對話格式會讓輸出提早結束、長度不受控,量到的吞吐是假的(一度量到 68 tok/s);改用 completions 端點強制輸出後才正常。ollama 吞吐取自 /api/generatestream:false)回傳的計時欄位,decode = eval_count / eval_duration。訓練用 torchrun --nproc_per_node=2 跑 DDP,量測穩態 30 步的 tokens/sec。功耗全程以 nvidia-smi 每 0.5 至 1 秒取樣。

資料來源:本文數據為 MAQ 於自有機器實測所得(2026 年 9 月 10 日),vLLM 0.29.0 官方 docker 映像、ollama、PyTorch 2.9.0,功耗以 nvidia-smi 直接讀取,測試方法與原始指令已列於內文。gpt-oss-120b 之 MoE 架構與參數規模引自 OpenAI 官方模型卡;量化格式定義引自各推論引擎官方文件。本文數字僅反映測試當下之特定環境(300W 功耗上限、無 NVLink),不代表該顯示卡之架構效能上限,讀者評估採購時宜以自身工作負載與框架另行實測。單串流 decode 之功耗觀察取樣數不多,不應視為精確測量。vLLM tensor parallel 未能在本機成功執行,相關數字從缺。本文非受任何公司委託或贊助,亦未收受對價;MAQ 為 AI 硬體系統整合商,銷售之工作站包含文中測試之顯示卡型號,於本題具有商業利益。NVIDIA、RTX、Blackwell、CUDA、NVLink 為 NVIDIA Corporation 之商標;AMD、Threadripper 為 Advanced Micro Devices, Inc. 之商標;OpenAI、gpt-oss 為 OpenAI 之商標;Qwen、通義千問為阿里巴巴集團之商標;Google、Gemma 為 Google LLC 之商標;其餘商標歸各自所有者所有。

常見問題

gpt-oss-120b 單串流才每秒 185 個 token,這張卡不是應該更快嗎?

單串流生成(一次一個請求、逐 token 產出)卡的是記憶體頻寬,不是運算力。每產生一個 token,都要把被啟動的那批專家權重從顯示記憶體讀進運算單元一次,GPU 的運算單元大部分時間在等記憶體,此時 GPU 功耗遠低於上限。要讓運算單元忙起來、拉高吞吐,得靠把多個請求的運算合在一起做的批次推論——本文第三節的 vLLM 並行測試就是這個情況,並行 64 時總吞吐是單串流的近十倍。

這次有做 tensor parallel(真正的多卡並行)推論嗎?

嘗試了,但 vLLM 的 tensor parallel 在這台無 NVLink 的雙卡 Max-Q 上跑不起來:NCCL 初始化要設 NCCL_P2P_DISABLE=1 才過,過了之後 vLLM 的 FlashInfer attention kernel 首次暖機又慢到不實際(兩張卡 100% 使用率卻只吃 97W,跑十幾分鐘還沒完成)。這是 vLLM 0.29 加上 gpt-oss 的 MXFP4、Blackwell 架構、以及停用 P2P 幾個條件疊在一起的軟體邊角問題,不是硬體不能做多卡集合通訊——因為 PyTorch 的 DDP 訓練用同一個 NCCL_P2P_DISABLE=1 就跑得動,而且擴展效率有 92.7%。要拿到真正的 vLLM tensor parallel 推論數字,可能需要換 vLLM 版本、換非 gpt-oss 的模型測試,或加裝 NVLink 橋接。

訓練的雙卡擴展效率 92.7% 是怎麼算的?跨卡沒有 NVLink 不會拖很慢嗎?

Qwen2.5-7B 全參數微調(bf16、AdamW、gradient checkpointing、每卡 batch 2、序列長度 2048):單卡每秒約 3,243 個 token,雙卡 DDP 每秒約 6,010 個 token。擴展效率 = 6,010 ÷(3,243 × 2)= 92.7%。也就是說,DDP 的梯度 all-reduce 走 PCIe(沒有 NVLink)只吃掉大約 7% 的每卡吞吐——對訓練這種「前向加反向算一大段、才通訊一次梯度」的工作型態,PCIe 頻寬夠用。這與 vLLM tensor parallel 每一層都要跨卡通訊、對延遲極度敏感的情況不同。

單串流 decode 時 GPU 只吃約 280W,批次與訓練卻咬在 300W 以上,這代表什麼?

代表這張卡的功耗上限與散熱設計,只在批次推論與訓練這兩種「運算單元真的忙得起來」的工作負載下才會直接影響吞吐;單串流對話式生成用不到那麼多電。選購時如果主要用途是單人對話式使用,功耗上限的高低影響有限;如果要跑訓練、微調或多人同時推論,功耗上限與散熱就是實際的規格差異。單串流 decode 的功耗觀察取樣數不多(十幾個 0.5 秒間隔的樣本),數字僅供參考,但這個「不同工作負載吃到的資源不同」的方向是確定的。

MXFP4、Q4_K_M、FP8、INT4 這些量化這次測齊了嗎?

沒有。這次測到 vLLM 的原生 MXFP4 路徑與 ollama 的 GGUF MXFP4,兩邊 gpt-oss-120b 單串流 decode 都是每秒 185 個 token,互相驗證過。但 FP8 與 INT4(AWQ/GPTQ)的乾淨對照仍未做——這類量化多半要搭配 vLLM 的 tensor parallel 才有測試意義(例如 72B 密集模型 FP8 跨兩卡),而 vLLM TP 目前卡在第五節說的問題。Qwen2.5-72B 的權重已經下載好,等 TP 的問題解決後可以補上。

同規格硬體,MAQ 現貨可配置

本文實測機器的雙卡 RTX PRO 6000 96GB 配置,對應 MAQ「LLM 訓練 多張 GPU」機型(AI-Server);單卡規格對應「gpt-oss-120b LLM 模型」機型(AI-Highend)。若工作負載偏訓練或高並行推論,功耗上限與散熱設計是實際會影響吞吐的規格,選型時可一併確認。