GPU 雲伺服器怎麼選?視訊記憶體往往比算力更早成為瓶頸。按訓練與推理兩條邏輯拆解視訊記憶體估算、精度開銷、NVLink 與多卡擴充套件,附估算公式。
GPU 雲伺服器怎麼選?答案取決於你跑的是訓練還是推理,更取決於你最可能先撞上哪一堵牆。最常見的誤判是照著算力排行榜買卡,結果模型載入到一半才發現視訊記憶體差一截。在絕大多數深度學習任務裡,視訊記憶體比浮點算力更早成為瓶頸——本文把訓練和推理兩條選型邏輯分開講,再補上精度換算、CPU/網路配套、CUDA 相容、競價實例和多卡擴充套件,最後給你一套自己能動手的估算方法。
唯一的前置動作:先量出你現在任務的視訊記憶體峰值(訓練看 nvidia-smi 最高佔用,推理看框架的 max_memory_allocated),再去挑卡。沒有這個數字,算力排行榜上的 TFLOPS 對你沒有意義。
先分清:訓練和推理要的從來不是同一種卡
訓練和推理跑的是同一個模型,但瓶頸幾乎相反。把這一點想清楚,能省掉一半的試錯。
- 訓練瓶頸在算力與視訊記憶體頻寬:滿負荷矩陣乘,GPU 利用率常年在 90% 以上,並行度決定吞吐
- 訓練要裝下最佳化器狀態:全參微調除權重外還要存梯度和動量,視訊記憶體佔用通常是純推理的 5–8 倍
- 訓練對卡間通訊極敏感:多機訓練有相當比例的時間花在 all-reduce 上,互聯質量直接決定有效算力
- 訓練可容忍中斷:有 checkpoint 就能續,適合放在競價實例上
- 推理瓶頸在視訊記憶體容量與頻寬:單請求解碼本質是「把權重讀一遍」的記憶頻寬問題,不是算力問題
- 推理看併發與每卡吞吐:同樣的總 QPS 下,一張大視訊記憶體卡往往比多張小卡更省、更好運維
一句話概括:訓練買算力,推理買視訊記憶體和頻寬。 用錯方向最典型的情況是推理服務買了 8 張訓練卡,其實瓶頸是併發時的 KV cache,視訊記憶體不夠;或者團隊為了一次 7B 微調租了 8 卡 H100,其中 6 張在等通訊。
視訊記憶體是第一道牆:算力過剩之前你就撞滿了
把 OOM 出現的順序看清楚,就知道該買多少視訊記憶體:
- 推理第一步:模型權重載入不進視訊記憶體。換卡,或者只能換更小的模型、更短的上下文
- 推理第二步:權重放得下,KV cache 撐不住。表現為併發上不去,或長上下文請求被截斷
- 訓練第一步:最佳化器狀態放不下。被迫上 ZeRO / FSDP 分片,step 時間通常上升 30%–60%
- 訓練第二步:啟用值吃滿。被迫開 gradient checkpointing,用算力換視訊記憶體,單步時間再漲 20%–40%
別用「算力還有富餘」安慰自己。 同一代卡裡,貴 1.5 倍但視訊記憶體多一倍的型號,對 70B 級別的模型往往是「能跑」和「跑不了」的差別,而不是快一點和慢一點的差別。
另一個常被忽略的量是有效視訊記憶體頻寬。單流解碼速度的物理上限大致是:視訊記憶體頻寬 ÷ 權重體積。7B 模型 FP16 權重約 14GB,落在 2TB/s 級頻寬的卡上,理論上限約 140 token/s,落到 80–120 token/s;落在 1TB/s 級的消費級卡上,理論上限約 70 token/s,實測常在 40–60 token/s。同樣的模型,跨一個頻寬檔位,體驗差一倍——但視訊記憶體容量是及格線,頻寬才決定速度。
GPU 型別對照:資料中心卡、消費級卡、推理卡
| 型別 | 代表型號(示例) | 視訊記憶體 | 定位 | 適合 |
|---|---|---|---|---|
| 資料中心訓練卡 | H100 SXM / H200 | 80GB / 141GB | 算力與互聯頂級 | 大模型預訓練、70B 以上全參微調 |
| 資料中心通用卡 | A100 SXM / PCIe | 40GB / 80GB | 訓練推理通用 | 多數團隊的主力卡,價效比常優於 H 系列 |
| 推理最佳化卡 | L40S | 48GB | 中高算力 + 大視訊記憶體 | 單卡 13B/30B 推理、渲染、多租戶切分 |
| 低功耗推理卡 | L4 | 24GB | 低功耗、高密度 | 高併發小模型、CV 推理、實時音影片 |
| 上一代推理卡 | T4 | 16GB | 低功耗、老架構 | 輕量模型、遺留負載 |
| 消費級旗艦 | RTX 4090 / 5090 | 24GB / 32GB | 單卡價效比高 | 小團隊實驗、DevBox、LoRA 微調 |
| 大視訊記憶體專業卡 | RTX A6000 | 48GB | Ampere 消費級 + 48GB | 單卡微調 7B/13B、多模型共存 |
| AMD 方案 | Instinct MI300X | 192GB | 超大視訊記憶體 | 大視訊記憶體優先的批次推理吞吐 |
消費級卡便宜,但有四個硬限制,選型時要明確知道:
- 無 ECC 視訊記憶體:長時間訓練可能積累無法察覺的資料錯誤,表現為訓練 loss 莫名發散
- 多數型號沒有 NVLink:多卡只能走 PCIe,通訊頻寬可能差近 20 倍
- 不支援 MIG:無法把一張物理卡切成多個實例分給不同租戶,多租戶服務很難做
- 虛擬化與企業支援需額外授權:商用多租戶場景要確認許可成本
判斷口訣:自用實驗 → 消費級卡可以;對外提供多租戶 AI 服務、要 SLA、要切分售賣 → 資料中心卡 + MIG 劃分。
精度怎麼改寫賬:FP32 / FP16 / BF16 / INT8 / INT4
精度是你手上最有效的「視訊記憶體摺扣旋鈕」,也是最容易踩坑的一環。先看它對視訊記憶體的直接影響:
| 精度 | 每引數位元組 | 相對 FP32 視訊記憶體 | 硬體要求 | 典型用途 |
|---|---|---|---|---|
| FP32 | 4 | 100% | 所有卡 | 數值基線、少量運算元兜底 |
| FP16 | 2 | 50% | Volta 及以後 | 訓練與推理的預設精度 |
| BF16 | 2 | 50% | Ampere 及以後 | 大模型訓練首選,動態範圍同 FP32 |
| INT8 | 1 | 25% | Ampere Tensor Core(T4 僅有 INT8) | 量化推理,吞吐提升明顯 |
| INT4 | 0.5 | 12.5% | Ampere 及以後 | 70B 單卡、極致批次吞吐 |
速度上,Ampere 及以後的卡在 Tensor Core 上 FP16 與 BF16 吞吐基本一致(所以選 BF16 不損失效能,只損失一點舊卡相容性);INT8 通常是 FP16 的 1.5–2 倍,INT4 在 Ampere 上可達 2–4 倍。但端到端不會線性加速:訪存、kernel 支援和反量化開銷會吃掉一部分,實測常見收益是 1.3–1.8 倍,不是理論值。
- 精度換視訊記憶體是線性且可靠的,因為權重體積直接按位元組數縮放
- 精度換速度不是線性的,取決於你的模型形狀、batch 與 kernel 覆蓋率
- 訓練不要用 INT8/INT4:最佳化器狀態、梯度尺度和小更新量在高動態範圍下容易出問題
T4(Turing 架構)不支援 BF16。 老專案裡寫死 bfloat16 會直接報錯,同時它的 INT4 也不走 Tensor Core。同理,FP8 需要 Hopper 或更新架構,FP4 需要 Blackwell。選老推理卡前先確認精度需求。
量化對效果的影響要分情況:INT8(對稱/分組量化)在大多數任務上指標波動在 0.5% 以內,可以放心上生產;INT4(GPTQ、AWQ)要按任務測,程式碼生成、長鏈推理和數學題掉點明顯,而閒聊、分類、檢索類任務基本無感。量化前一定要在自己的評測集上跑一遍。
算一遍你自己的視訊記憶體:拿模型估一次
下面三個公式能覆蓋絕大多數場景,先套公式得出下界,再加 20%–30% 餘量,這就是你的目標視訊記憶體。
推理視訊記憶體 ≈ 引數量 × 每引數位元組數 × 1.2(預留 20%) 全參訓練(Adam) ≈ 引數量 × 12–16 位元組 + 啟用值 LoRA / QLoRA 微調 ≈ 引數量 × 2 位元組 + 啟用值(啟用值用 gradient checkpointing 壓到可接受範圍)
- 7B 推理 FP16:7×10⁹ × 2 位元組 = 14GB 權重 → 含預留約 17GB → 24GB 卡可跑,16GB 卡必須 INT8 或砍上下文
- 7B 推理 INT4:約 3.5GB 權重 → 起步 4.5GB → 一張 16GB 卡能扛幾十路併發
- 70B 推理 FP16:140GB 權重 → 單卡無解 → 2×80GB 做張量並行(TP=2),或 141GB 卡勉強裝下但沒空間給 KV cache
- 7B LoRA 微調 BF16:權重 14GB + 少量最佳化器狀態 + 啟用 → 24GB 卡開 gradient checkpointing 能跑,40GB 更寬裕
- 7B 全參微調 Adam:7×10⁹ × 16 位元組 = 112GB → 至少 2×80GB;ZeRO-3 分攤到 4×40GB 也能跑,但通訊開銷會明顯拉長單步時間
推理側還必須單獨算 KV cache,這是長上下文場景真正的隱形殺手:
KV cache(位元組)≈ 2 × 層數 × hidden 維度 × 序列長度 × 併發數 × 每元素位元組數
2 是 K 和 V 兩份。GQA 模型要把 hidden 換成 頭數 × head_dim。
- Llama-2-7B(32 層、hidden 4096、無 GQA):每 token 約 512KB,4K 上下文單請求約 2GB,32 併發就要 64GB
- Llama-3-8B(32 層、GQA 8 個 KV head):每 token 約 128KB,4K 上下文單請求約 0.5GB
- 結論:同樣權重體積,GQA 讓你在相同視訊記憶體上把併發翻數倍。評估服務容量時一定要把這個乘進去
還有一個高頻翻車點:batch size 不是線性縮放視訊記憶體。線性層和啟用值是線性增長,但 PyTorch 預設會盡量複用視訊記憶體,Attention 內部的中間張量是平方級增長。序列長度從 2K 提到 8K 時,啟用值視訊記憶體增長可能超過 4 倍。如果你的任務是長序列訓練,先按 8K 上下文算視訊記憶體,而不是按預設 512。
別隻看 GPU:CPU、主存、儲存與網路怎麼配
GPU 決定上限,配套決定你能用到幾成。很多「GPU 很便宜」的機器,實際利用率上不去,就是因為這裡沒配對。各機型的視訊記憶體、CPU/記憶體配比與可選卡型,見 GPU 雲伺服器。
- CPU:資料載入、解壓、增強都是 CPU 密集工作。每張 GPU 配 4 vCPU 是底線,2 vCPU 的機器會讓 GPU 餓著,實測利用率常掉到 50%–70%
- 主存:至少裝得下正在讀的資料分片。經驗值是主存 ≥ 全部 GPU 視訊記憶體之和,並配合 pinned memory 加速主機到視訊記憶體的複製
- 儲存:本地 NVMe 順序讀通常 1–2GB/s;直接從物件儲存讀要靠高併發堆吞吐,單流往往只有幾百 MB/s。做法是先把資料同步到本地 NVMe 再開始訓練
- 網路:單機內網至少 10Gbps 起步。多機訓練看網絡卡是不是 100Gbps RDMA(InfiniBand / RoCE)——用 25Gbps 共享網絡卡做梯度同步,往往比單卡算力還慢
驗機時必須實測管線速度:先跑一個純資料載入的 benchmark(不打 GPU),看每步準備資料的時間。準備時間大於計算時間,就說明 CPU 或儲存是瓶頸,換更貴的 GPU 也沒用。
推理側的重點不一樣:多併發請求下,CPU 負責解 token 後的排程、預處理和批處理合併。建議讓 vLLM / SGLang 這類框架跑在 CPU 核數充足的機型上,再疊一張或幾張大視訊記憶體推理卡——GPU 少而 CPU 足的組合,對小模型高併發場景往往比堆卡更划算。
NVLink 與 PCIe:多卡訓練時差距有多大
| 互聯方式 | 理論頻寬 | 典型場景 |
|---|---|---|
| NVLink 3 + NVSwitch(A100 SXM) | 600 GB/s | 同節點 8 卡訓練,張量並行主力 |
| NVLink 4 + NVSwitch(H100) | 900 GB/s | 更大模型、更高並行度 |
| PCIe 4.0 x16 | 約 32 GB/s | 消費級多卡、跨節點互聯 |
| PCIe 5.0 x16 | 約 64 GB/s | 新平臺伺服器與工作站 |
| 100Gbps RDMA 網絡卡 | 約 12.5 GB/s | 多機資料/流水線並行的梯度通訊 |
NVLink 3 的頻寬約是 PCIe 4.0 的 18–19 倍,這個差距在張量並行裡會被放大:每一層前向和反向都要做 all-reduce,通訊量隨層數線性增長。通訊走 PCIe 時,通訊時間可能吃掉 30%–60% 的單步時間,你的卡貴了一倍,有效算力反而沒提升。
- 單卡任務:互聯無所謂,直接選視訊記憶體和算力都夠用的型號
- 2–8 卡訓練:優先同節點 NVLink / NVSwitch 機型,這是訓練卡價格溢價的主要來源
- 跨節點:張量並行留在節點內,跨節點用資料並行,或用流水線並行把計算切開
- 消費級多卡:先跑
nvidia-smi topo -m看拓撲。顯示PIX(走 PCIe)還是NV#(走 NVLink),吞吐可能差幾十個百分點
同一臺機器上不要混裝不同代際的卡。 集合通訊速度由最慢的那張決定,一張 PCIe 卡就能把 7 張 NVLink 卡拖慢。寧可型號統一、張數少一點。
CUDA 與驅動相容:最容易翻車的一環
規格選對了但跑不起來,多半是軟體棧的問題。簽約前把這幾件事問清楚,比事後 debug 划算得多。
- 驅動向後相容,但框架往往要求較新驅動:CUDA 12.x 執行時一般需要 r525 或更高版本的驅動
- PyTorch 官方 wheel 自帶 CUDA 執行時,容器裡的系統 CUDA 版本要和 wheel 匹配,不是升驅動就行
- cuDNN 與 NCCL 要對齊:列印不出
torch.cuda.nccl.version()通常就是 NCCL 沒裝對,多機訓練會掛在初始化階段 - 架構支援是硬門檻:Turing 無 BF16,Hopper 起才有 FP8,Blackwell 起才有 FP4。新卡配老框架可能要原始碼編譯擴充套件
- 典型報錯
CUDA driver version is insufficient for CUDA runtime version,幾乎都是驅動或映象混裝問題,不是程式碼 bug
簽約前問供應商三件事:預裝映象的驅動版本、映象裡 PyTorch 的版本與編譯選項、是否支援 NCCL 多卡通訊與直通拓撲。答案越具體,越說明這家是真跑過而不是轉發。
自己驗證只要一條命令:nvidia-smi 看驅動和識別到的卡,python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available(), torch.cuda.get_device_capability())" 看框架側是否就緒,再跑一次 NCCL 的 all-reduce 微基準(nccl-tests)確認通訊正常。十臺機器裡有一臺通訊慢,你都會是那個倒黴的使用者,所以要逐臺驗,不要抽樣。
競價 GPU:把訓練成本打到按需的幾分之一
競價實例(Spot / 搶佔式)常見的折扣區間是按需價格的 1/3 到 1/10,具體以官方實時報價為準。對訓練這種「可重入」的負載,這是最直接的省錢手段。除了競價,計費模式本身就決定了長期賬單,五類配置的價位區間見 雲伺服器價格指南。
- 適合:超參搜尋、批次資料標註、離線評測、checkpoint 間隔不超過 15 分鐘的訓練
- 不適合:線上推理服務、不可中斷的長訓練、狀態存在本地且沒有外部備份的任務
- 多卡必須放在同一臺實例上:回收時整組一起釋放。否則被回收後剩下 1/4 的卡繼續計費,「長尾殘留」是競價實例最常見的隱形浪費
- 訓練指令碼要做到可重入:定期儲存 checkpoint,框架側通常有自動捕獲和恢復的選項(如 PyTorch 的 elastic 模式)
把最貴的一段留給按需實例。 訓練接近收斂的最後幾千步,往往同時是資料要重跑、競價池最容易滿的一段時間,機器被回收的損失最大。工程上常見做法是:主體訓練全程用競價,最後 5%–10% 的步數切到按需實例一口氣跑完。
資料也要跟著這個思路設計:資料集放物件儲存(不要放在會被一起回收的實例本地盤),checkpoint 同步寫回物件儲存。這樣任意時刻實例消失,你最多損失 15 分鐘的計算進度,而不是一整晚。
多卡擴充套件怎麼選:資料並行到流水線並行
| 並行方式 | 通訊模式 | 適用場景 | 門檻 |
|---|---|---|---|
| 資料並行(DDP) | 每步同步梯度 | 卡數 2–16,模型已裝得下 | 最低,上手最快 |
| ZeRO / FSDP | 梯度與引數分片 | 視訊記憶體不夠的中大型模型 | 通訊量約為 DDP 的 1.5–2 倍 |
| 張量並行(TP) | 每層多次 all-reduce | 單層權重放不下(70B+) | 強依賴 NVLink;頭數需被卡數整除 |
| 流水線並行(PP) | 層間點對點 | 跨節點、超大模型 | 有氣泡損耗,需配排程系統 |
選擇順序其實很固定,按「視訊記憶體不夠的原因」從上往下走:
- 權重和最佳化器裝不下 → ZeRO-3 / FSDP,視訊記憶體隨卡數近似線性下降,通訊開銷可接受
- 單層權重灌不下(通常 70B 以上)→ 張量並行,把每層權重切到多張卡,必須同節點 NVLink
- 卡數超過單機容量 → 流水線並行,按層切分,配合 Slurm 或 Kubernetes 排程層
- 引數規模還想繼續漲 → MoE 把引數稀疏化,視訊記憶體壓力下降,但負載均衡和 All-to-All 通訊是新的坑
並行效率的經驗判斷:如果 8 卡的有效吞吐不到 5 卡的 5 倍,問題基本出在互聯(走 PCIe)或通訊庫(NCCL 配置),而不是卡不夠。先測 nccl-tests 的 bus bandwidth,再看多卡擴充套件比,排查順序能省幾天時間。
推理側的多卡思路不一樣,通常優先張量並行把一個大模型塞進節點,再用多副本橫向擴,而不是資料並行——推理沒有梯度同步,資料並行的收益遠不如訓練場景。vLLM / SGLang 裡對應的是 --tensor-parallel-size 與 --data-parallel-size 的組合。
選型避坑:最常踩的 8 個坑
- 只看 TFLOPS 不看視訊記憶體——最常見的誤判,直接導致 OOM 或被迫上分片
- 預設消費級卡能扛生產——無 ECC、無 MIG、許可受限;長訓練有靜默錯誤風險,商用要確認
- 忘了算 KV cache——短上下文測試透過,上線後長上下文直接打滿,擴容又來不及
- 多卡只寫卡數不看拓撲——
nvidia-smi topo -m裡是PIX還是NV#,差別是幾十個百分點的吞吐 - 混裝不同代際的卡——最慢的一張決定所有集合通訊速度
- 用競價實例跑線上推理——回收時服務直接掛,且沒有優雅下線的視窗
- 一上來就籤長約——先按小時計費跑通真實負載,拿到 step 時間或 tokens/s 的實測值再轉長約
- 忘記 checkpoint 與資料備份——GPU 故障、誤刪實例、資料丟失的恢復成本遠高於一個月的實例費用
這八條裡,前四條與技術判斷有關,後四條更多是運維習慣。真正讓預算超支的通常是第 6 和第 7 條:該用便宜卡的用錯了、該籤長約的沒先測。
下一步:24 小時內驗證你的選型
選型不該靠猜。用下面五步,一個工作日就能拿到一個有實測資料支撐的決定。
- 量視訊記憶體峰值:在現有環境跑 50 步訓練或 100 個推理請求,記下
nvidia-smi裡的最高佔用和框架的max_memory_allocated - 算出下界:用第 4 節的公式算權重 + 最佳化器 + KV cache,再加 20%–30% 餘量,得到目標視訊記憶體
- 篩出 2–3 個候選型號:對照 GPU 型別表,核對 CUDA 驅動、映象裡的 PyTorch 版本和是否支援 NCCL
- 按小時開一臺最小規格:跑 30 分鐘真實負載,記錄單步時間(tokens/s)和總時間,換算成「每小時訓練成本」或「每百萬 token 成本」
- 把結論寫成對比表再籤長約:訓練主體用競價 + 末段切按需,推理用按需 + 長約混合,兩種模式的賬要分開算
需要按你自己的模型和併發量算一遍,把引數量、精度、上下文長度、併發數、是否全參微調發過來,我們可以給出候選規格區間和視訊記憶體估算;GPU 的具體報價以官方實時報價為準,不同區域和機型差異較大。
別在沒實測資料前籤超過一個月的合約。 GPU 價格隨晶片供給和區域浮動很大,年度預算是最容易被市場變化打亂的一項。