我花了200英镑将数据中心GPU装进我的游戏PC
摘要
一位博主描述了他们如何以150英镑的价格购得一块Tesla V100 SXM2数据中心GPU,并使用定制转接器将其与RTX 4080一起安装到自己的游戏PC中,实现了总计32GB的显存,并能够以每秒32个token的速度本地推理27B参数模型。
<p><a href="https://lobste.rs/s/2tskyy/i_put_datacenter_gpu_my_gaming_pc_for_200">评论</a></p>
查看缓存全文
缓存时间: 2026/05/31 10:18
# 我把一个数据中心GPU塞进了我的游戏PC,只花了200英镑
来源:https://blog.tymscar.com/posts/v100localllm/
我原本已经有了一块 RTX 4080,16GB 显存。打游戏够用,但要跑我想要的本地模型就不够了。想在 GPU 上更进一步,要么花大价钱买一块显存更大的卡,要么另辟蹊径。
我选了后者。
我买了一块连普通 PCIe 接口都没有的数据中心 GPU,用转接卡塞进我的游戏 PC 里。现在我有两块 GPU,共 32GB 显存,可以跑一个 270 亿参数的模型,速度达到每秒 32 个 token。总共才花了 200 英镑。
## GPU# (https://blog.tymscar.com/posts/v100localllm/#the-gpu)
V100 SXM2 正面
这是一块 Tesla V100 SXM2 16GB。它是为 NVIDIA 的 DGX 服务器和超大规模机架设计的。SXM2 形态意味着它没有 PCIe 插槽,没有显示输出接口,也没有普通电源接口。它直接插在服务器机架内的专用板卡上,通过 NVLink 通信。
V100 SXM2 背面
你没法直接把它插到主板上——除非借助一些手段。
但关键在于:这是一块 Volta 架构 GPU,拥有 16GB HBM2 显存、5120 个 CUDA 核心,而我花大约 150 英镑在 eBay 上淘来的。它的算力是实打实的,显存也是实打实的。而其显存带宽才真正让人惊喜。
HBM2 是一种不同级别的显存。V100 拥有 4096 位显存总线,提供 900 GB/s 的带宽。相比之下,我那块用着 fancy GDDR6X 显存的 RTX 4080 只能达到 736 GB/s。来自 2017 年的 V100,比 2022 年推出的消费级 GPU 的显存带宽还要高出 22%。
而且不只是 NVIDIA 的消费级显卡输给它。Apple M3 Max 是 400 GB/s,M4 Max 是 546 GB/s。全新的 M5 Max(一台笔记本要花超过 3000 英镑)也只能达到 614 GB/s。2017 年的 GPU 击败了市面上所有 Mac。
与我的 4080 最接近的 AMD 竞品是 RX 7900 XTX,它在 24GB GDDR6 上提供 960 GB/s 的带宽。技术上讲这确实超过了 V100,但 7900 XTX 要 700 英镑以上,而且 ROCm 对 LLM 推理的支持仍然不如 CUDA 成熟。V100 用不到四分之一的价钱就提供了 94% 的带宽,而且能和 llama.cpp 完美配合。
唯一能轻松超越它的消费级 GPU 是 RTX 5090,带宽达到 1,792 GB/s,但那张卡要 2000 英镑以上。对于 LLM 推理来说,显存带宽是瓶颈,直接决定了每秒生成的 token 数,这一点几乎比什么都重要。
唯一的问题就是接口。
## 转接卡# (https://blog.tymscar.com/posts/v100localllm/#the-adapter)
结果发现,有人做了一种 SXM2 转 PCIe 的转接卡。这不是 NVIDIA 生产的,也没有任何官方支持。它就是一块裸露的 PCB,一边是 SXM2 插槽,另一边是 PCIe 金手指。我花了大约 50 英镑,其中一半可能都是铜的成本。
V100 转接卡上的散热器
所以总共大约 200 英镑,我就有了一个 16GB 显存的 GPU,可以和我的 RTX 4080 一起插在主板上。总共 32GB 显存。单张 RTX 5090 有 32GB,但售价超过 2000 英镑。我不是说体验相同,我只是说显存容量是一样的。
## 令人抓狂的风扇# (https://blog.tymscar.com/posts/v100localllm/#the-fan-from-hell)
在能用 V100 做任何有用的事之前,我得先搞定风扇的问题。
V100 SXM2 原本是设计放在 2U 服务器里的,使用工业级散热。转接卡上的风扇一点都不含蓄,一点都不安静。这东西你绝对不想放在还需要睡觉的房间里。
我用 Apple Watch 测了一下:
Apple Watch 显示 82dB 测量值
82 分贝。这声音介于垃圾处理器和割草机之间,已经远远超过“电脑噪音大”的范畴,进入了“我在自己家里是不是该戴耳塞”的领域。
最糟糕的是:你根本无法控制它。我试过 `nvidia-smi`,在 Linux 上扫描过,甚至在 Windows 上试过 Afterburner(后话:这套配置在 Windows 上基本不能用)。都没用。这个转接卡上的风扇就不是设计成可控制的。它的设计就是永远以 100% 转速运行,在服务器机架里,那里没人需要听到它的声音。
这是我尝试搞清风扇引脚定义的过程。我猜测它可能是用了一个奇怪的连接器,但引脚定义是标准机箱风扇的,所以我把两根跳线插到 VCC 和 GND,接上一个 9V 电池试了试。风扇转了,而且比它正常 12V 下安静多了:
您的浏览器不支持视频标签。这证实了引脚定义,也让我看到了希望——这个风扇其实是能被驯服的。
## 让风扇听人话# (https://blog.tymscar.com/posts/v100localllm/#making-the-fan-listen-to-reason)
9V 电池测试告诉我,引脚定义是标准机箱风扇的,只是连接器比较奇怪。接下来要问的是,如果我把转速检测线和 PWM 控制线接到主板上,风扇是否会响应 PWM 控制。
所以我往连接器里塞了几根跳线,另一端插到一个空闲的风扇接口上(请调高音量):
您的浏览器不支持视频标签。成功了!主板可以读取风扇转速,风扇也能响应 PWM 控制。我把它设置在 10% 转速。即使在满负荷下,温度也从不超过 50°C,而且我几乎听不到它的声音。
现在我需要一根像样的线,而不是靠运气撑着的跳线。
PCI 转接卡风扇插头
转接卡上的风扇连接器是一个小型 JST PH2.0 四针插头。主板风扇接口是标准的 0.1 英寸(2.54mm)间距。GPU 风扇使用 2.0mm 间距的 JST PH 连接器,引脚更密,插头更小。
解决方案是一根 2.54mm 公头转 PH2.0 母头的跳线。PH2.0 母头一端插到风扇的转速检测和 PWM 引脚上,2.54mm 公头一端插到主板空闲的风扇接口上:
2.54mm 公头转 PH2.0 母头线缆已插好
这样就从 82dB 的耳朵伤害变成了我能实际忍受的程度。
## 廉价翻倍显存# (https://blog.tymscar.com/posts/v100localllm/#doubling-vram-for-cheap)
风扇问题解决后,V100 就顺理成章地和我的 4080 并肩工作了:
- **RTX 4080:** 16GB 显存,Ada 架构
- **Tesla V100:** 16GB 显存,Volta 架构
- **总共:** 两块 GPU 共 32GB 显存
llama.cpp 可以使用张量拆分将模型分配到两块 GPU 上。它会将各层通过 PCIe 总线流水线处理,让 4080 处理一些层,V100 处理其余部分。这不如单张 32GB GPU 快,但能用,而且成本大约只有 32GB GPU 的十分之一。顺带一提,我看到 V100 的最高功耗大约 150W。这不算少,但对于运行本地 LLM 推理的 GPU 来说,也不算离谱。
### 等等,你还能更大# (https://blog.tymscar.com/posts/v100localllm/#but-wait-you-can-go-bigger)
V100 还有一个 32GB 版本。它的价格是我买的两倍多,但我们仍然只谈几百英镑就能拿到单卡 32GB HBM2 显存。两块这样的卡就能给你 64GB 显存,成本大约只有当前市场上一张 RTX 5090 的 20%。
你还可以把它们组成集群。SXM2 格式原生支持 NVLink,意味着如果你要搭建一个真正的多 GPU 系统,这些卡之间可以以非常高的带宽通信。即使通过 PCIe 转接卡,张量拆分的性能也非常稳定。
## 软件方面# (https://blog.tymscar.com/posts/v100localllm/#the-software-side)
这部分出奇地顺利,多亏了 NixOS。V100 是 Volta 芯片。NVIDIA 从驱动程序 560 分支开始放弃了对 Volta 的支持。最后一个同时支持我的 RTX 4080(Ada)和 V100(Volta)的驱动是 550.x 分支,在 NixOS 上对应 `nvidiaPackages.legacy_535`。
该驱动只支持 CUDA 到 12.2。现在的 nixpkgs 最低提供 CUDA 12.6。所以我必须从 nixpkgs 24.05 中拉取 CUDA 12.2。
另外,这个驱动要求内核版本 6.6。旧版驱动不支持更新的内核。
还有一个奇怪的地方:即使这是一个无头推理服务器,也必须有 `services.xserver.enable = true`。没有它,NVIDIA 内核模块就不会加载。
NixOS 让大部分配置变得直接。以下是在驱动和内核方面关键的配置:
``
boot.kernelPackages = pkgs.linuxPackages_6_6;
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.legacy_535;
services.xserver.enable = true;
services.xserver.videoDrivers = [ "nvidia" ];
``
至于从旧的 nixpkgs 加载 CUDA 12.2(因为当前版本只提供 12.6+):
``
nixpkgs.overlays = [
(final: prev: {
cudaPackages_12_2 = nixpkgs-cuda.legacyPackages.${prev.system}.cudaPackages_12_2;
})
];
``
重要的是:它可以工作。两块 GPU 都能识别,CUDA 正常工作,NixOS 完美地处理了这一切。如果你想复现这个配置,完整的机器定义在这个点文件仓库的提交中 (https://github.com/tymscar/dotfiles/commit/9f3d647884c498d0b98b55ffcfa50dd806aed146),包括 llama.cpp 的服务定义和锁定到正确版本的自定义构建。
## 运行模型# (https://blog.tymscar.com/posts/v100localllm/#running-the-model)
我运行的是 Qwen3.6-27B-MTP,量化版本 Q5_K_M,大小大约 19GB。使用两块 GPU,整个模型可以完全放入显存,还有空间留给上下文:
nvidia-smi 显示两块 GPU
设置值模型Qwen3.6-27B-MTP Q5_K_M (19GB)上下文大小128k tokensGPU 层99(全部卸载)张量拆分`-ts 1.0,1.0`(两块 GPU 平均分配)
性能如下:
指标数值推理速度~32 tok/s提示处理速度~133-160 tok/s每秒 32 个 token 足够交互式使用。考虑到网络延迟,这比大多数云 API 端点都快。而且这还是通过 PCIe 连接两个不同 GPU 架构进行张量拆分的结果。
### 这个模型真的很不错# (https://blog.tymscar.com/posts/v100localllm/#this-model-is-actually-good)
我想明确一点:这不是“对于本地模型来说不错”,也不是“如果你降低期望值就还能接受”。Qwen3.6-27B 在人工分析的 Agentic 指数上与 Claude Sonnet 4.6 持平。在 MMMU-Pro 和 Terminal-Bench 2.0 上甚至超越了 Sonnet 4.6。一个在二手硬件上运行的 270 亿参数模型,确实能与 Anthropic 最新的云端模型一较高下。
是的,Sonnet 4.6 在 GPQA 和 SWE-Bench Verified 上略胜一筹。它理应如此,它是一个大型专有模型。而且,如果你想要绝对最好的,Opus 4.8 也存在。但它每次重度使用 20 分钟的成本,就超过了我买这块 GPU 和转接卡全部花费的总和。然而,差距已经小得惊人。我们已经到了能在卧室里运行的模型,与那些按 token 收费的模型处于同一水平的程度。
### 多 Token 预测# (https://blog.tymscar.com/posts/v100localllm/#multi-token-prediction)
模型名称中的 MTP 代表 Multi-Token Prediction(多 Token 预测)。普通的 LLM 推理一次预测一个 token:预测一个 token,接受它,预测下一个 token,重复。MTP 改变了这一过程,让模型一次预测多个未来的 token,然后验证哪些是正确的。被接受的 token 基本是“免费”的。错误预测则回退到正常路径。
结果是,在无精度损失的情况下,生成速度大约提升 1.5-2 倍。在我的设置中,当 MTP 进入状态时,推理速度可以从大约 32 tok/s 提高到 50-60 tok/s,尤其是在生成代码这类可预测的输出时。
缺点是 llama.cpp 对 MTP 的支持还很新。nixpkgs 中的版本不支持 Qwen3.6 的 MTP 架构,所以我必须从添加了支持的特定 commit 编译 llama.cpp 源码。在 NixOS 上这很简单。我有一个锁定到正确 commit 的自定义派生,整个过程是可重复的。当我想更新模型或更改 llama.cpp 版本时,只需修改 config 中的一行,运行 `nixos-rebuild switch` 即可完成。没有依赖地狱,不用手动重装,也不用担心是否编译了正确的 CUDA 版本。
## 视觉:模型如何看图像# (https://blog.tymscar.com/posts/v100localllm/#vision-how-the-model-sees-images)
Qwen3.6-27B 模型通过一个单独的多模态投影器文件 (mmproj) 支持图像输入。这个文件大约 928MB,非常有趣。
它的工作原理是:一个视觉编码器(类似于 ChatGPT 和 Claude 使用的)接收图像像素,将其转换为 LLM 的 token 嵌入空间。模型并不是像人类一样“看到”图像。相反,视觉编码器将图像压缩成一个向量序列,这些向量与文本 token 处于相同的数学空间。LLM 随后将这些向量视为另一个 token 序列进行处理。
实际效果就是:你向模型发送一个图像 URL 以及文字提示,它可以描述、分析并推理它看到的内容。整个视觉能力只增加了大约 1GB 的模型大小。仅此而已。一 GB,你的本地 LLM 就能读取图像了。
在 llama.cpp 中,参数非常简单:
``
--mmproj /mnt/nas/llamacpp/mmproj-F16.gguf --mmproj-offload
``
`--mmproj-offload` 参数将视觉编码器也加载到 GPU 上,与模型一起运行,这样即使处理图像也能获得快速推理。
## 通过 OpenCode 运行# (https://blog.tymscar.com/posts/v100localllm/#running-it-through-opencode)
我使用 OpenCode (https://opencode.ai/) 这个 AI 编码助手来利用这套设置,它可以对接本地模型。LLM 服务器运行在我的桌面上,但我并不是在那台机器上使用它。我会在房子里任何其他机器上通过网络使用,或者通过 Tailscale 从外部访问(但那是另一篇博客的内容了)。将 OpenCode 指向 llama.cpp 服务器只需要设置 API URL 即可。模型在本地运行,响应迅速,且没有任何数据离开我的网络。
## NAS 和 U 盘# (https://blog.tymscar.com/posts/v100localllm/#the-nas-and-the-usb-drive)
所有模型都存放在我的 TrueNAS 服务器上,通过 NFS 挂载:
``
fileSystems."/mnt/nas" = {
device = "truenas-nfs.tymscar.com:/mnt/oasis/services";
fsType = "nfs";
options = [ "nfsvers=4" "_netdev" "auto" "nofail" ];
};
``
llama.cpp 服务依赖于 `mnt-nas.mount`,所以在 NAS 可用之前它不会启动。这让我可以存储数 TB 的模型,而无需担心本地磁盘空间。
整个操作系统运行在一个 Corsair MP600 MINI (https://amzn.to/4dOg1nG) 上,装在 DockCase USB-C NVMe 硬盘盒 (https://amzn.to/3Rv8lPQ) 里。不需要修改内部硬盘。当我想玩游戏时,拔掉这个硬盘盒,重启进入我的主 Windows 系统,用 4080 正常打游戏。当我想做 LLM 相关工作时,插回硬盘盒,重启进入 NixOS,两块 GPU 就都可用了。
这不如双启动菜单那样优雅,但简单且有效。没有 GRUB,没有引导加载器冲突,没有分区管理。只是一个物理开关。
## 唯一烦人的地方# (https://blog.tymscar.com/posts/v100localllm/#the-one-annoying-thing)
V100 有时会在热重启后(操作系统重启但主板保持供电)从 `lspci` 和 `nvidia-smi` 中消失。这似乎是 PCIe 插槽的 ACPI 枚举问题。冷重启(物理关机,等待几秒,再开机)总能恢复它。
当 V100 消失时,llama.cpp 会无法启动,因为它无法将模型整块塞进单张 16GB GPU 里。服务会崩溃循环,直到 GPU 重新出现。实际上这不是大问题,因为我通常会在重启时在场,但了解这一点有好处。它给我一种似曾相识的感觉,就像臭名昭著的 AMD GPU 重置 bug:将 AMD GPU 直通给虚拟机后关闭虚拟机,GPU 会进入只有完整宿主机电源循环才能修复的状态。
## 最终成果# (https://blog.tymscar.com/posts/v100localllm/#what-i-ended-up-with)
(文章末尾未完整,但按原文翻译至此)
相似文章
我的4.8万美元GPU服务器值吗?
一位前FAANG工程师讲述了为独立AI研究构建一台配备六张RTX 6000 Ada显卡、价值4.8万美元的GPU服务器的经历,详细介绍了构建过程、电源限制以及与云GPU租用的成本对比。
@gippp69: 这位用户看到一张430美元的AI账单,于是干脆在桌下自己搭了个AI实验室 RTX 5090 + RTX 4090, 56GB VRAM, 128GB RAM, …
一位用户在桌下搭建了一个私人AI实验室,使用RTX 5090和RTX 4090显卡,运行Qwen、DeepSeek、Llama等本地开源模型,以避免API费用。
中国用户正在制作单槽半高PCIe V100显卡,配备NVLINK
中国GPU爱好者自制了一款单槽半高PCIe V100显卡,配备NVLINK,保留完整性能,目标售价约220美元。
对15款“电子垃圾”GPU进行现代工作负载基准测试
对15款退役的NVIDIA Tesla GPU(K80、P100、V100)进行现代AI工作负载基准测试,展示它们在家庭实验室推理设置中的可行性和性价比。
@analogalok: 买不起2000美元的GPU这个借口已经彻底失效了。昨天我展示了如何解锁一块企业级16GB……
关于如何使用Kaggle免费的双Tesla T4 GPU(32GB显存)来运行大语言模型并支持超大上下文窗口的指南,涵盖llama.cpp中的多GPU并行策略。