我花200英镑把一台数据中心级GPU装进了我的游戏电脑

Hacker News 热门(buzzing.cc 中文翻译)·2026-05-31 23:55·85天前·birdculture
AI 导读

一名用户以200英镑的价格购入了一块数据中心级GPU,并将其成功安装到自己的游戏电脑中。文章记述了这一非标准硬件改装过程、遇到的技术挑战以及最终实现本地运行大语言模型的体验。

Hacker News 热门(buzzing.cc 中文翻译)
精选
70AI 编辑部评分,满分 100

我花200英镑把一台数据中心级GPU装进了我的游戏电脑

2026-05-31 23:55· 85天前· birdculture
AI 导读

一名用户以200英镑的价格购入了一块数据中心级GPU,并将其成功安装到自己的游戏电脑中。文章记述了这一非标准硬件改装过程、遇到的技术挑战以及最终实现本地运行大语言模型的体验。

推荐理由

一个200英镑的二手 V100 加适配器,就让游戏电脑用上了 32GB 显存,跑 Qwen3.6-27B 达到 32 tok/s,噪音问题也解决了。对于想低成本本地跑大模型的人,这篇 DIY 手记很实用。

正文 · AI 翻译

花 200 英镑把一块数据中心 GPU 塞进了我的游戏 PC

2026-05-30

Oscar Molnar

13 分钟阅读(2710 字)

#

家庭实验室

#

GPU

#

NixOS

#

本地大语言模型

#

硬件

#

调试

我原本已经有一块 RTX 4080。16GB 的显存。打游戏够用,但跑我想在本地运行的模型就不够了。在 GPU 领域,下一步要么花大价钱买一块显存更大的显卡,要么另寻他路。

我找到了另一条路。

我买了一块连标准 PCIe 接口都没有的数据中心 GPU,用转接卡把它塞进了我的游戏 PC。现在,我拥有两块 GPU 共 32GB 显存,能以每秒 32 个模型 token 的速度运行一个 270 亿参数的模型。整件事只花了我 200 英镑。

这块 GPU

这是一块 Tesla V100 SXM2 16GB。它专为 NVIDIA 的 DGX 服务器和超大规模服务器机架设计。SXM2 形态意味着它没有 PCIe 插槽,没有显示输出接口,也没有普通的电源接口。它插在服务器机架内一块专用板上,通过 NVLink 通信。

你不能直接把它插到主板上。没有辅助手段不行。

但关键在于:这是一块 Volta 架构的 GPU,拥有 16GB HBM2 内存、5120 个 CUDA 核心,我在 eBay 上花大约 150 英镑淘到的。它的算力依然真实可用,显存也是实打实的。而它的内存带宽才真正令人惊讶。

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,带宽达到 1792 GB/s,而那张卡售价超过 2000 英镑。对于大语言模型推理而言,内存带宽是决定每秒 token 数的瓶颈,这一点比几乎其他任何因素都更重要。

唯一的问题在于接口。

转接卡#

结果发现,有人制造了 SXM2 转 PCIe 的转接卡。它并非英伟达生产,也不受任何官方支持。它只是一块裸露的 PCB,一侧是 SXM2 插槽,另一侧是 PCIe 金手指接口。我花了大约 50 英镑买下它。其中一半可能只是铜的成本。

所以总共花了大约 200 英镑,我就得到了一块 16GB 显存的 GPU,可以插在我的主板上,与我的 RTX 4080 并肩工作。总显存达到 32GB。而一块 32GB 显存的单张 RTX 5090 售价超过 2000 英镑。我并不是说体验相同,我只是说显存容量一样。

地狱级风扇#

在我能用 V100 做任何有用的事情之前,必须先解决风扇问题。

V100 SXM2 原本设计安装在配备工业级散热的 2U 服务器内部。转接卡上的风扇毫不含蓄,绝不安静,绝不是你想放在自己睡觉的房间里那种东西。

我用 Apple Watch 测量了一下:

82 分贝。这介于垃圾处理器和割草机之间,远远超过“电脑很吵”的程度,进入了“我在自己家里是不是该戴耳塞”的范畴。

最糟糕的是:你无法控制它。我试过 nvidia-smi,试过在 Linux 上扫描它,甚至在 Windows 上试过 Afterburner(稍后会详述,这套配置在 Windows 上几乎无法正常工作)。全都没用。这块转接卡上的风扇设计初衷就不是被控制的。它被设计成永远以 100% 转速运行,待在没人需要听到它的服务器机架里。

这是我试图弄清风扇引脚定义的场景。我猜测它可能是一个怪异接口上的标准机箱风扇引脚定义,于是我把两根跳线插到 VCC 和接地端,然后用一块 9V 电池去碰触它们。风扇转了起来。而且比它通常得到的 12V 供电时安静得多:

这证实了引脚定义,也让我看到了驯服这个风扇的希望。

让风扇听从理智#

9V电池测试告诉我,引脚排列属于标准机箱风扇范畴,只是接口比较特殊。接下来的问题是,如果我把测速线和PWM引脚接到主板上,风扇是否真的会对PWM控制做出响应。

于是我把几根杜邦线塞进接口,另一端插到一个空闲的风扇插针上(请调高音量):

成功了。主板能读取转速,风扇也对PWM有响应。我把它保持在10%转速。即使满载运行,温度也从未超过50摄氏度,而且我几乎听不到它的声音。

现在我只缺一根像样的线缆,而不是靠运气固定的杜邦线。

转接卡上的风扇接口是一个四针的小型JST PH2.0插头。主板风扇插针采用标准的0.1英寸(2.54mm)间距。GPU风扇使用的是2.0mm间距的JST PH接口。针脚更密集,插头也更小。

解决方案是一根2.54mm公头转PH2.0母头的杜邦线。PH2.0母头端插入风扇的测速线和PWM针脚,2.54mm公头端则插入主板上一个空闲的风扇插针:

噪音从82分贝的耳朵损伤级别,降到了我实际能忍受的程度。

廉价翻倍显存#

风扇问题解决后,V100就顺理成章地插在了我的4080旁边:

  • RTX 4080:16GB显存,Ada架构
  • Tesla V100:16GB显存,Volta架构
  • 总计:两块GPU共32GB显存

llama.cpp可以通过张量切分将模型分配到两块GPU上。它通过PCIe总线对层进行流水线处理,让4080处理部分层,V100处理其余部分。这不如单块32GB显存的GPU快,但能用,而且成本大约只有32GB显存GPU的10%。值得一提的是,我见过V100的最高功耗大约在150W左右。这不算低,但对于运行本地大语言模型推理的GPU来说,也不算离谱。

等等,还能更大#

V100还有32GB显存的版本。价格比我买的贵一倍以上,但单卡32GB HBM2显存,我们谈的仍然只是几百英镑。在今天的市场上,买两块这样的卡,就能获得64GB显存,成本大约只有RTX 5090价格的20%。

你还可以将它们组成集群。SXM2 格式原生支持 NVLink,这意味着如果你正在搭建一个合适的多 GPU 系统,这些显卡可以以非常高的带宽相互通信。即使通过 PCIe 适配器,张量拆分性能也相当不错。

软件方面#

这部分出奇地顺利,这要归功于 NixOS。V100 是一款 Volta 芯片。英伟达从驱动程序分支 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。没有它,英伟达内核模块就无法加载。

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 的方法,因为当前的 nixpkgs 只提供 12.6 及以上版本:

nixpkgs.overlays = [
  (final: prev: {
    cudaPackages_12_2 = nixpkgs-cuda.legacyPackages.${prev.system}.cudaPackages_12_2;
  })
];

重要的是:它运行起来了。两块 GPU 都能识别,CUDA 功能正常,NixOS 优雅地处理了整个过程。如果你想复现这个配置,完整的机器定义在我的 dotfiles 仓库的这个提交中,包括 llama.cpp 服务定义和锁定到正确版本的自定义构建。

运行模型#

我正在运行量化到 Q5_K_M 的 Qwen3.6-27B-MTP 模型,大小约为 19GB。使用两块 GPU,整个模型可以放入显存,并且还有上下文空间:

设置项
模型Qwen3.6-27B-MTP Q5_K_M(19GB)
上下文大小128k 模型 token
GPU 层数99(全部卸载到 GPU)
张量拆分-ts 1.0,1.0(在两块 GPU 之间均匀分配)

性能表现:

指标
推理速度约 32 tok/s
提示词处理约 133-160 tok/s

每秒 32 个 token 的速度对于交互式使用来说足够快了。考虑到网络延迟,这比大多数云端 API 端点都要快。而且这还是通过 PCIe 连接的两个不同 GPU 架构之间进行张量拆分的结果。

这个模型实际上很不错#

我想把话说清楚。这并非“对于本地模型而言表现不错”,也不是“降低预期后尚可接受”。Qwen3.6-27B 在 Artificial Analysis 的智能体指数上与 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 预测#

模型名称中的 MTP 代表多 Token 预测。常规的大语言模型推理一次只预测一个 token:预测一个 token,接受它,再预测下一个 token,如此循环。MTP 改变了这一点,它让模型一次性预测多个未来 token,然后验证哪些是正确的。被接受的 token 基本算是免费获得的,错误的预测则回退到常规路径。

结果是生成速度大约提升 1.5 到 2 倍,且精度毫无损失。在我的设备上,这意味着当 MTP 发挥最佳性能时,推理速度能从大约 32 tok/s 提升到 50-60 tok/s,尤其是在处理代码这类可预测的输出时。

问题在于 llama.cpp 对 MTP 的支持还很新。nixpkgs 中的版本不支持 Qwen3.6 的 MTP 架构,所以我不得不从添加了该支持的特定提交版本开始,从源码构建 llama.cpp。在 NixOS 上,这很简单。我创建了一个指向正确提交的自定义派生包,整个过程是可复现的。当我想更新模型或更改 llama.cpp 版本时,只需修改配置文件中的一行,运行 nixos-rebuild switch 即可。没有依赖地狱,无需手动重装,也不用担心是否针对正确的 CUDA 版本进行了构建。

视觉能力:模型如何理解图像#

Qwen3.6-27B 模型通过一个独立的多模态投影文件(mmproj)支持图像输入。这个文件大约 928MB,其功能令人着迷。

其工作原理是:一个视觉编码器(类似于 ChatGPT 和 Claude 所使用的)将图像像素转换到大语言模型的 token 嵌入向量空间。该模型并不会像人类那样“看见”图像。相反,视觉编码器将图像压缩成一系列向量,这些向量与文本 token 处于同一个数学空间中。然后,大语言模型将这些向量当作另一串 token 序列来处理。

这在实践中意味着:你可以将图像 URL 连同文本提示词一起发送给模型,模型就能描述、分析并推理它所看到的内容。整个视觉能力大约给模型增加了 1GB 的大小。仅此而已。增加一个 GB,你的本地大语言模型就能读取图像了。

在 llama.cpp 中,相关的标志参数很直接:

--mmproj /mnt/nas/llamacpp/mmproj-F16.gguf --mmproj-offload

`--mmproj-offload` 标志会将视觉编码器与模型一同加载到 GPU 上,这样即使处理图像,你依然能获得快速的推理速度。

通过 OpenCode 运行

我将这套设置与 OpenCode 配合使用,这是一个能够对接本地模型的 AI 编程助手。大语言模型服务器运行在我的台式机上,但我并不在那台机器上使用它。我通过局域网在家中任何其他机器上使用它,或者通过 Tailscale 从外部访问(不过这属于另一篇博客文章的内容了)。将 OpenCode 指向 llama.cpp 服务器,只需设置 API URL 即可。模型在本地运行,响应速度快,且没有任何数据离开我的网络。

NAS 与 USB 驱动器

所有模型都存放在我的 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 的模型,而无需担心本地磁盘空间。

整个操作系统运行在一个 DockCase USB-C NVMe 硬盘盒中的 Corsair MP600 MINI 固态硬盘上。无需修改内部驱动器。当我想玩游戏时,拔掉这个硬盘盒,重启进入我的主 Windows 系统,就能在 4080 显卡上正常游戏。当我想做大语言模型相关工作时,插回硬盘盒,重启进入 NixOS,两块 GPU 就都可用了。

这不如双系统启动菜单那么优雅,但它简单且有效。没有 GRUB,没有引导加载器冲突,没有分区管理。只是一个物理开关。

唯一烦人的一件事

在热重启(操作系统重启但主板保持通电)后,V100 有时会从 lspci 和 nvidia-smi 中消失。这似乎是 PCIe 插槽的 ACPI 枚举问题。冷重启(物理断电,等待几秒,再重新通电)总能恢复它。

当 V100 缺失时,llama.cpp 无法启动,因为它无法将模型放入单块 16GB GPU 中。服务会陷入崩溃循环,直到 GPU 恢复。实际上这问题不大,因为我通常在重启时就在旁边,但值得了解。这让我想起臭名昭著的 AMD GPU 重置 bug——将 AMD GPU 直通给虚拟机然后关闭后,GPU 会进入一种只有完全切断宿主机电源再重启才能修复的状态。

我最终得到了什么#

花 200 英镑,我得到了:

  • 一块 16GB 数据中心 GPU,与我的游戏 GPU 一起运行
  • 总共 32GB 显存,用于本地大语言模型推理
  • 在 27B 参数模型上达到每秒 32 个 token
  • 128k token 上下文窗口
  • 支持图像输入的视觉功能
  • 一个完全本地运行的模型,无需云端,无按 token 计费

唯一的实际代价是噪音,而我用价值 2 英镑的跳线和一点接头探索解决了这个问题。V100 并非最快的推理 GPU,且跨两种不同架构的张量拆分不如单块 GPU 那样干净。但就这个价格而言,它的性价比高得离谱。

如果你想在本地运行像样的模型,可以看看二手服务器 GPU 市场。你甚至不需要已有 GPU。我碰巧在游戏 PC 里有一块 4080,但单块 V100 放在廉价服务器机箱里就能给你 16GB 显存和一个完全可用的本地大语言模型,花费极少。V100 SXM2 并非唯一选择。P40 以类似价格提供 24GB 显存,不过速度更慢且没有 Tensor Core。V100 32GB 版本价格更高,但仍比任何拥有同等显存的消费级 GPU 便宜。

只是要做好应对风扇的准备。

来源:Hacker News 热门(buzzing.cc 中文翻译)· blog.tymscar.com