前言

同步发布于 我的Gist

这篇文初稿写于2025年3月,之前本来计划写好了直接发出来的,兜兜转转一直咕了,最近准备对这套配置做个升级,现在再不发出来就晚了。

现在来看,选T10性价比其实已经不是那么高,当时做这个配置的时候 2080ti 22G还要2200一块,现在已经跌到1700左右了,T10现在还在1000出头。 2080ti算力更高的同时还支持NVLink,4卡互联应该可以跑起来社区最近比较火的 MiniMax-M2.1-REAP W4A16。

下面基本是25年3月写的:


24年底的时候,国内市面上流出了一批从机房下架的云桌面/云游戏专用卡。二手贩子打包卖的时候叫 PG150Tesla T10

这卡有点意思,参数和NVIDIA官方文档里的T10有些出入:CUDA核心数量大致相当于 RTX 2080,但显存很特殊,配备了单颗粒 16Gbits 的显存,单卡总共 16GB。虽然403GB/s的显存带宽放在今天不算快(作为参考:RTX 4090 是 1008GB/s,5090 是 1.7TB/s),但胜在体积小,部署密度高且价格说得过去。

为什么选这个卡?

Tesla系列作为NV的数据中心产品线,天生支持 PCIe P2P 直接访问,多卡互联延迟更低;另外我手上还有一块之前搞来吃灰的 PEX8796 PCIe Switch底板,这简直是绝配。

理论性能推算

简单算一下Transformer架构的推理瓶颈。生成每一个Token需要从显存读取:模型权重 + 激活层参数 + KV Cache数据。 以 Qwen 32B (Int4) 这种级别的模型为例:

  1. 双卡方案 (32GB显存) + 16k 上下文:

    • 大概能跑满 16384 tokens 的上下文。
    • 每预测下一个token,需要读取约 30GB 数据 (21G权重+5G激活+4G KV)。
    • 理论单并发Decode速度:约 27 tokens/s
  2. 四卡方案 (64GB显存) + 128k 上下文:

    • 在超长上下文下,KV Cache 占用飙升。
    • 每预测下一个token,需要读取约 54GB 数据 (21G权重+5G激活+28G KV)。
    • 理论单并发Decode速度:约 31 tokens/s

(注:以上未考虑Attention计算瓶颈和PCIe传输延迟,仅为带宽理论值)

总之,该卡在贩子卖1000左右的时候还是很值得购入的,我1100买了4块。准备用于Homelab来整一套垃圾级的大模型推理方案。

上机实测

装好了连上服务器,跑一波测试看看。 这个扩展底板上只有3个3.0x16,剩下几个都是x8的,不过后续实测的时候发现一般的张量并行推理负载撞不上x8的瓶颈。

基本参数

root@ubuntu:~# nvidia-smi
Wed Jan 21 09:00:28 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  Tesla T10                      Off |   00000000:03:00.0 Off |                  Off |
| N/A   27C    P0             37W /  150W |   15637MiB /  16384MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  Tesla T10                      Off |   00000000:04:00.0 Off |                  Off |
| N/A   28C    P0             34W /  150W |   15635MiB /  16384MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   2  Tesla T10                      Off |   00000000:05:00.0 Off |                  Off |
| N/A   29C    P0             34W /  150W |   15637MiB /  16384MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   3  Tesla T10                      Off |   00000000:08:00.0 Off |                  Off |
| N/A   28C    P0             35W /  150W |   15637MiB /  16384MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

拓扑互联

接下来是拓扑互联,可以看到打好驱动之后啥也不干就默认有PCIe P2P了,如果是GeForce卡还得打破解补丁。

root@ubuntu:~# nvidia-smi topo -m
        GPU0    GPU1    GPU2    GPU3    CPU Affinity    NUMA Affinity   GPU NUMA ID
GPU0     X      PIX     PIX     PIX     0-19    0               N/A
GPU1    PIX      X      PIX     PIX     0-19    0               N/A
GPU2    PIX     PIX      X      PIX     0-19    0               N/A
GPU3    PIX     PIX     PIX      X      0-19    0               N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

root@ubuntu:~# nvidia-smi topo -p2p p
        GPU0    GPU1    GPU2    GPU3
 GPU0   X       OK      OK      OK
 GPU1   OK      X       OK      OK
 GPU2   OK      OK      X       OK
 GPU3   OK      OK      OK      X

Legend:

  X    = Self
  OK   = Status Ok
  CNS  = Chipset not supported
  GNS  = GPU not supported
  TNS  = Topology not supported
  NS   = Not supported
  U    = Unknown
  
root@ubuntu:~# grep -E "via (P2P|SHM|NET)" /tmp/nccl.*.log | head -n 200
/tmp/nccl.ubuntu.691282.log:ubuntu:691282:691542 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[1] via P2P/CUMEM
/tmp/nccl.ubuntu.691282.log:ubuntu:691282:691542 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[1] via P2P/CUMEM
/tmp/nccl.ubuntu.691282.log:ubuntu:691282:691660 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[1] via P2P/CUMEM
/tmp/nccl.ubuntu.691282.log:ubuntu:691282:691660 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[1] via P2P/CUMEM
/tmp/nccl.ubuntu.691282.log:ubuntu:691282:691742 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[1] via P2P/CUMEM
/tmp/nccl.ubuntu.691282.log:ubuntu:691282:691742 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[1] via P2P/CUMEM
/tmp/nccl.ubuntu.691283.log:ubuntu:691283:691541 [1] NCCL INFO Channel 00/0 : 1[1] -> 2[2] via P2P/CUMEM
/tmp/nccl.ubuntu.691283.log:ubuntu:691283:691541 [1] NCCL INFO Channel 01/0 : 1[1] -> 2[2] via P2P/CUMEM
/tmp/nccl.ubuntu.691283.log:ubuntu:691283:691663 [1] NCCL INFO Channel 00/0 : 1[1] -> 2[2] via P2P/CUMEM
/tmp/nccl.ubuntu.691283.log:ubuntu:691283:691663 [1] NCCL INFO Channel 01/0 : 1[1] -> 2[2] via P2P/CUMEM
/tmp/nccl.ubuntu.691283.log:ubuntu:691283:691740 [1] NCCL INFO Channel 00/0 : 1[1] -> 2[2] via P2P/CUMEM
/tmp/nccl.ubuntu.691283.log:ubuntu:691283:691740 [1] NCCL INFO Channel 01/0 : 1[1] -> 2[2] via P2P/CUMEM
/tmp/nccl.ubuntu.691284.log:ubuntu:691284:691539 [2] NCCL INFO Channel 00/0 : 2[2] -> 3[3] via P2P/CUMEM
/tmp/nccl.ubuntu.691284.log:ubuntu:691284:691539 [2] NCCL INFO Channel 01/0 : 2[2] -> 3[3] via P2P/CUMEM
/tmp/nccl.ubuntu.691284.log:ubuntu:691284:691661 [2] NCCL INFO Channel 00/0 : 2[2] -> 3[3] via P2P/CUMEM
/tmp/nccl.ubuntu.691284.log:ubuntu:691284:691661 [2] NCCL INFO Channel 01/0 : 2[2] -> 3[3] via P2P/CUMEM
/tmp/nccl.ubuntu.691284.log:ubuntu:691284:691743 [2] NCCL INFO Channel 00/0 : 2[2] -> 3[3] via P2P/CUMEM
/tmp/nccl.ubuntu.691284.log:ubuntu:691284:691743 [2] NCCL INFO Channel 01/0 : 2[2] -> 3[3] via P2P/CUMEM
/tmp/nccl.ubuntu.691285.log:ubuntu:691285:691540 [3] NCCL INFO Channel 00/0 : 3[3] -> 0[0] via P2P/CUMEM
/tmp/nccl.ubuntu.691285.log:ubuntu:691285:691540 [3] NCCL INFO Channel 01/0 : 3[3] -> 0[0] via P2P/CUMEM
/tmp/nccl.ubuntu.691285.log:ubuntu:691285:691662 [3] NCCL INFO Channel 00/0 : 3[3] -> 0[0] via P2P/CUMEM
/tmp/nccl.ubuntu.691285.log:ubuntu:691285:691662 [3] NCCL INFO Channel 01/0 : 3[3] -> 0[0] via P2P/CUMEM
/tmp/nccl.ubuntu.691285.log:ubuntu:691285:691741 [3] NCCL INFO Channel 00/0 : 3[3] -> 0[0] via P2P/CUMEM
/tmp/nccl.ubuntu.691285.log:ubuntu:691285:691741 [3] NCCL INFO Channel 01/0 : 3[3] -> 0[0] via P2P/CUMEM

P2P 性能测试

nccl-tests 跑一下 all_reduce_perf 来验证 P2P 性能,选了两张 x16 连接的卡。 性能差距还挺大的,特别是TP推理比较看重的延迟,有P2P就能低不少。

开启P2P

root@ubuntu:~/nccl-tests/build# CUDA_VISIBLE_DEVICES=0,1 ./all_reduce_perf -b 8 -e 1G -f 2 -g 2
# nThread 1 nGpus 2 minBytes 8 maxBytes 1073741824 step: 2(factor) warmup iters: 5 iters: 20 agg iters: 1 validation: 1 graph: 0
#
# Using devices
#  Rank  0 Group  0 Pid 696820 on     ubuntu device  0 [0000:03:00] Tesla T10
#  Rank  1 Group  0 Pid 696820 on     ubuntu device  1 [0000:04:00] Tesla T10
#
#                                                              out-of-place                       in-place
#       size         count      type   redop    root     time   algbw   busbw #wrong     time   algbw   busbw #wrong
#        (B)    (elements)                               (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
           8             2     float     sum      -1     7.27    0.00    0.00      0     7.28    0.00    0.00      0
          16             4     float     sum      -1     7.25    0.00    0.00      0     7.22    0.00    0.00      0
          32             8     float     sum      -1     7.34    0.00    0.00      0     7.34    0.00    0.00      0
          64            16     float     sum      -1     7.45    0.01    0.01      0     7.35    0.01    0.01      0
         128            32     float     sum      -1     7.76    0.02    0.02      0     7.40    0.02    0.02      0
         256            64     float     sum      -1     7.54    0.03    0.03      0     7.34    0.03    0.03      0
         512           128     float     sum      -1     7.49    0.07    0.07      0     7.47    0.07    0.07      0
        1024           256     float     sum      -1     8.56    0.12    0.12      0     7.48    0.14    0.14      0
        2048           512     float     sum      -1     7.90    0.26    0.26      0     7.82    0.26    0.26      0
        4096          1024     float     sum      -1     8.94    0.46    0.46      0     8.60    0.48    0.48      0
        8192          2048     float     sum      -1    10.61    0.77    0.77      0    10.48    0.78    0.78      0
       16384          4096     float     sum      -1    11.81    1.39    1.39      0    11.53    1.42    1.42      0
       32768          8192     float     sum      -1    14.52    2.26    2.26      0    14.47    2.26    2.26      0
       65536         16384     float     sum      -1    20.40    3.21    3.21      0    20.16    3.25    3.25      0
      131072         32768     float     sum      -1    31.02    4.23    4.23      0    30.92    4.24    4.24      0
      262144         65536     float     sum      -1    46.93    5.59    5.59      0    46.58    5.63    5.63      0
      524288        131072     float     sum      -1    71.88    7.29    7.29      0    71.16    7.37    7.37      0
     1048576        262144     float     sum      -1    116.4    9.01    9.01      0    115.0    9.12    9.12      0
     2097152        524288     float     sum      -1    211.3    9.93    9.93      0    208.8   10.05   10.05      0
     4194304       1048576     float     sum      -1    417.0   10.06   10.06      0    414.9   10.11   10.11      0
     8388608       2097152     float     sum      -1    819.8   10.23   10.23      0    818.6   10.25   10.25      0
    16777216       4194304     float     sum      -1   1617.5   10.37   10.37      0   1614.3   10.39   10.39      0
    33554432       8388608     float     sum      -1   3190.1   10.52   10.52      0   3197.7   10.49   10.49      0
    67108864      16777216     float     sum      -1   6306.3   10.64   10.64      0   6329.9   10.60   10.60      0
   134217728      33554432     float     sum      -1    12516   10.72   10.72      0    12516   10.72   10.72      0
   268435456      67108864     float     sum      -1    24784   10.83   10.83      0    24735   10.85   10.85      0
   536870912     134217728     float     sum      -1    48271   11.12   11.12      0    48207   11.14   11.14      0
  1073741824     268435456     float     sum      -1    96277   11.15   11.15      0    95516   11.24   11.24      0
# Out of bounds values : 0 OK
# Avg bus bandwidth    : 5.02193
#

关闭P2P

root@ubuntu:~/nccl-tests/build# NCCL_P2P_DISABLE=1 CUDA_VISIBLE_DEVICES=0,1 ./all_reduce_perf -b 8 -e 1G -f 2 -g 2
# nThread 1 nGpus 2 minBytes 8 maxBytes 1073741824 step: 2(factor) warmup iters: 5 iters: 20 agg iters: 1 validation: 1 graph: 0
#
# Using devices
#  Rank  0 Group  0 Pid 696796 on     ubuntu device  0 [0000:03:00] Tesla T10
#  Rank  1 Group  0 Pid 696796 on     ubuntu device  1 [0000:04:00] Tesla T10
#
#                                                              out-of-place                       in-place
#       size         count      type   redop    root     time   algbw   busbw #wrong     time   algbw   busbw #wrong
#        (B)    (elements)                               (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
           8             2     float     sum      -1    10.31    0.00    0.00      0    10.00    0.00    0.00      0
          16             4     float     sum      -1    14.56    0.00    0.00      0    14.24    0.00    0.00      0
          32             8     float     sum      -1    14.06    0.00    0.00      0    14.53    0.00    0.00      0
          64            16     float     sum      -1    14.20    0.00    0.00      0    14.45    0.00    0.00      0
         128            32     float     sum      -1    14.23    0.01    0.01      0    14.33    0.01    0.01      0
         256            64     float     sum      -1    14.41    0.02    0.02      0    14.44    0.02    0.02      0
         512           128     float     sum      -1    15.88    0.03    0.03      0    15.75    0.03    0.03      0
        1024           256     float     sum      -1    16.94    0.06    0.06      0    16.90    0.06    0.06      0
        2048           512     float     sum      -1    19.83    0.10    0.10      0    19.48    0.11    0.11      0
        4096          1024     float     sum      -1    36.53    0.11    0.11      0    36.01    0.11    0.11      0
        8192          2048     float     sum      -1    37.58    0.22    0.22      0    37.39    0.22    0.22      0
       16384          4096     float     sum      -1    42.16    0.39    0.39      0    41.72    0.39    0.39      0
       32768          8192     float     sum      -1    50.20    0.65    0.65      0    49.67    0.66    0.66      0
       65536         16384     float     sum      -1    65.28    1.00    1.00      0    65.20    1.01    1.01      0
      131072         32768     float     sum      -1    98.94    1.32    1.32      0    98.55    1.33    1.33      0
      262144         65536     float     sum      -1    164.3    1.60    1.60      0    163.6    1.60    1.60      0
      524288        131072     float     sum      -1    293.8    1.78    1.78      0    292.9    1.79    1.79      0
     1048576        262144     float     sum      -1    552.2    1.90    1.90      0    552.3    1.90    1.90      0
     2097152        524288     float     sum      -1   1035.2    2.03    2.03      0   1034.6    2.03    2.03      0
     4194304       1048576     float     sum      -1   1955.3    2.15    2.15      0   1953.0    2.15    2.15      0
     8388608       2097152     float     sum      -1   3712.2    2.26    2.26      0   3711.1    2.26    2.26      0
    16777216       4194304     float     sum      -1   7145.1    2.35    2.35      0   7162.3    2.34    2.34      0
    33554432       8388608     float     sum      -1    13954    2.40    2.40      0    13909    2.41    2.41      0
    67108864      16777216     float     sum      -1    27760    2.42    2.42      0    27946    2.40    2.40      0
   134217728      33554432     float     sum      -1    56382    2.38    2.38      0    56275    2.39    2.39      0
   268435456      67108864     float     sum      -1   113047    2.37    2.37      0   113217    2.37    2.37      0
   536870912     134217728     float     sum      -1   226942    2.37    2.37      0   227052    2.36    2.36      0
  1073741824     268435456     float     sum      -1   454329    2.36    2.36      0   454501    2.36    2.36      0
# Out of bounds values : 0 OK
# Avg bus bandwidth    : 1.15383
#

vLLM推理性能

电费&收益

这套东西部署好之后已经稳定运行快一年了,4张卡待机功耗大概 30w *4 ,加上整个系统的其他部分,总待机功耗差不多 280W,总运行峰值功耗700W左右。 平均下来一天9度电,一个月电费比之前多200块钱左右。

因为是个人用,带来的收益肯定没法量化。但是从我的 newapi中转日志来看,过去10个月在这套设备上已经跑了总计差不多 1.2T tokens,换算成API市场价也有个大几百刀了。虽然也不是很多,但是这种可以随便用LLM的感觉是第三方付费API带不来的。

总结

这套东西搞下来成本大概 6000 多,本来 Turing 架构的垃圾实在是不太堪用了,不支持BF16也没有 marlin 算子,25年很长一段时间推出的新模型的 AWQ 量化版都跑不动。 转机是25年底社区给 vllm 推了个 PR vllm-project/vllm#29901 ,让 Turing 卡也能支持 marlin 了,这个 PR 已经被 merge 到主线,并且今天包含这个补丁的 v0.14.0 版本已经正式发布了。

目前(2026.1)我在上面主要跑了个 80k tokens 上下文的 Qwen3-Next-80B-A3B-Instruct-AWQ-W4A16 ,就像前文图表展示的,28 并发下可以跑出单并发 21tps ,总计 590tps 的生成速度。 这套系统平时个人拿来用在沉浸式翻译插件,或者清洗一些私有化的小数据,拿来做本地知识库Agent QA挺方便。 另外还把 api 提供给了群友做 TG 的 spam 审核 bot,不担心各种 NSFW Spam 让第三方 LLM api 封号了。

6
message-square
7
  • karminski-牙医MA
    2 days ago

    好帖👍, 其实不训练光推理用x1的PCIe 4.0 足够了. 另外单槽卡是真的爽啊, 现在的垃圾游戏卡动不动要吃掉3槽绝了…

    • Anthony-HooOP
      1 day ago

      是啊,不仅3槽起步,还超长+越肩 小机箱爱好者苦不堪言了

  • lobogaga
    2 days ago

    请问一下,大佬您用的什么散热方案?
    我25年上半年也置办了一套,上了个X99-E WS的板子,用的普通机箱,海雀带的风扇和2080Ti散热器我都试过了,在散热和噪音之间始终没办法取得很好的平衡,又没有隔音的置物间,现在已经闲置快半年了 😅

    • Anthony-HooOP
      2 days ago

      我一开始用的这个模型配的4CM磁浮暴力扇+调速器减速,1M噪音48dB的风力可以压住4卡满载150w烤机。

      后面发现实际上跑vLLM TP的时候功率不高,32并发推理时平均单卡才60w不到,我就直接把整个机箱结构竖着放在空气净化器出风口了,静音高效还不用清灰 ☝️ 🤓

      • lobogaga
        2 days ago

        😮
        我以为这个4CM的扇会比较暴力,所以没试。。。
        我试了这个模型(1)这个模型(2),模型(1)我搭配了追风者T30,模型(2)用的海雀搭的风扇,全速都压不住。。。(貧弱!貧弱ぅ!)
        另外还买了个首席玩家4000转,全速的时候声音已经人在机场,直接放弃了。。。
        我测试的场景是vLLM跑Qwen2.5-Coder-32B,–max-model-len好像配置的是32768?另一边用Roo Code连跑一个小时生成代码,测试的时候已经是夏天,GPU满载就撞墙86度了 😇

        • Anthony-HooOP
          2 days ago

          你发的模型1我也用过,当时试了下12038风扇得拉到5600RPM才能压住4卡满载不降频,真的直接起飞了。

          另外,Qwen2.5-Coder-32B是 dense 模型,之前Qwen3还没发布的时候我跑过一阵子Qwen2.5-32B和Qwen2.5VL-32B。 现在对比下来,发现确实,4卡TP的时候 dense模型比现在主流的moe模型要发热更多。我猜可能moe引入了一些性能开销导致卡实际上吃不满?

          btw这4卡跑Qwen3-30B-A3B-2507 W4A16的工况,–max-model-len可以开满256K,这个时候单并发生成速度有76tokens/s ,体感非常快。 但是感觉这个模型在上下文超过100K的时候召回就很不可用了,而且30B模型的能力确实不太行,后面还是换了Qwen3-Next-80B,配81920 tokens的上下文。

          • lobogaga
            2 days ago

            感谢大佬分享,我觉得我又行了,回家给机箱吹吹灰,再试一下 😘