前言
同步发布于 我的Gist
这篇文初稿写于2025年3月,之前本来计划写好了直接发出来的,兜兜转转一直咕了,最近准备对这套配置做个升级,现在再不发出来就晚了。
现在来看,选T10性价比其实已经不是那么高,当时做这个配置的时候 2080ti 22G还要2200一块,现在已经跌到1700左右了,T10现在还在1000出头。 2080ti算力更高的同时还支持NVLink,4卡互联应该可以跑起来社区最近比较火的 MiniMax-M2.1-REAP W4A16。
下面基本是25年3月写的:
24年底的时候,国内市面上流出了一批从机房下架的云桌面/云游戏专用卡。二手贩子打包卖的时候叫 PG150 或 Tesla 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) 这种级别的模型为例:
-
双卡方案 (32GB显存) + 16k 上下文:
- 大概能跑满 16384 tokens 的上下文。
- 每预测下一个token,需要读取约 30GB 数据 (21G权重+5G激活+4G KV)。
- 理论单并发Decode速度:约 27 tokens/s
-
四卡方案 (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 封号了。
好帖👍, 其实不训练光推理用x1的PCIe 4.0 足够了. 另外单槽卡是真的爽啊, 现在的垃圾游戏卡动不动要吃掉3槽绝了…
是啊,不仅3槽起步,还超长+越肩 小机箱爱好者苦不堪言了
lobogaga2 days ago
请问一下,大佬您用的什么散热方案?
我25年上半年也置办了一套,上了个X99-E WS的板子,用的普通机箱,海雀带的风扇和2080Ti散热器我都试过了,在散热和噪音之间始终没办法取得很好的平衡,又没有隔音的置物间,现在已经闲置快半年了 😅我一开始用的这个模型配的4CM磁浮暴力扇+调速器减速,1M噪音48dB的风力可以压住4卡满载150w烤机。
后面发现实际上跑vLLM TP的时候功率不高,32并发推理时平均单卡才60w不到,我就直接把整个机箱结构竖着放在空气净化器出风口了,静音高效还不用清灰 ☝️ 🤓
你发的模型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的上下文。
lobogaga2 days ago
感谢大佬分享,我觉得我又行了,回家给机箱吹吹灰,再试一下 😘


