首页 / 文章 / Jamesob 的本地运行 SOTA 大语言模型完全指南
← 返回
AI技术

Jamesob 的本地运行 SOTA 大语言模型完全指南

✍️ zhirenhun 📅 2026/7/4 👁 208 阅读 ⏱ 23 分钟
Jamesob 的本地运行 SOTA 大语言模型完全指南

Jamesob 的本地运行 SOTA 大语言模型完全指南


注:本文除表格外的所有内容均由人类撰写,非 AI 生成。


手上有 2000 美元闲钱,想要一台本地运行、最先进的机器智能?

那 4 万美元呢?

如果 Dario 和 Altman 让你胃疼(你确实应该警惕他们),继续往下读,看看如何本地运行这种新型计算。


在这个仓库中,你会找到:

  • 我用于本地运行 SOTA 模型的硬件
  • 我为什么买这些配件,以及配置它们时一些鲜为人知的秘密
  • 如何本地运行语音转文本(STT)
  • 用于在 Docker 容器内运行我认为优秀的模型的即用配置

目录

章节一句话概括
你愿意花多少钱?2000 美元能跑 Qwen + 好的 STT(已经很不错了);4 万美元能接近 Opus 水平
基础系统上一代 EPYC + eBay DDR4,共 5600 美元
GPU4× RTX PRO 6000,共计 384GB VRAM(大头花在这里)
c-payne PCIe Gen4 交换机子 BOM来自 c-payne.com 的独立 PCIe 交换机,实现 GPU 对等通信
GPU 支架一天的木工活
让 PCI 交换机正常工作BIOS Bifurcation、链路速度、ASPM
Kernel / GRUB 参数iommu=off 否则 NCCL 会挂死
禁用 ACS(交换机 P2P 的关键)让 P2P 流量保持在交换机 Fabric 内部
GPU 功耗限制在 110V 电路上运行价值 4.6 万美元的硅片
结果Gen4 线速:27.5/50.4 GB/s,亚微秒延迟
runners/即用推理服务配置:GLM-5.2-594B:vLLM docker-compose,DCP4+MTP5,约 80 t/s @ 460k 上下文
runners/sttwhisper-large-v3 的即用语音转文本配置
tools/measure-gpu-speed.sh:P2P 带宽/延迟基准测试
资源rtx6kpro 仓库、c-payne

我的配置

我很幸运(或者说很傻)在 RTX Pro 6000 还便宜的时候买了 4 张。由于现在内存价格高昂,我选择搭建了一套上一代 DDR4 系统来搭载这些显卡,配件从 eBay 购入。这样既控制了基础系统的成本,又获得了大量 VRAM。

我的机器

另一个不太常规的做法是使用了 PCIe4 交换机(来自 c-payne.com)。这让 GPU 在张量并行(tensor parallelism)的 allreduce 步骤中能够以线速"直接"互相通信,而无需将所有数据通过 PCI Root Complex 传输。好处是降低了卡间延迟,且无需昂贵的 PCIe5 硬件。

交换机

因此,我把钱花在了 VRAM 上(真正值得投资的地方),而不是 PCIe5/DDR5 基础系统上——截至 2026 年 7 月,后者价格极其昂贵。

我的具体 BOM(物料清单)详见下文。

你愿意花多少钱?

约 2000 美元

一个很好的方案是 2× RTX 3090,总计 48GB VRAM。这样你就可以运行 Qwen3.6-27B,这是一个非常出色的模型。

你还可以运行 SOTA 语音转文本(STT)方案 whisper-large-v3,我觉得这非常有用。你可以配合我的跨平台 stt 工具来使用它。

我发现本地 STT 出乎意料地好用——而且用起来很放心,不像云端方案。你可以在 ./runners/stt 中找到即用配置,该配置仅要求 Nvidia GPU 上有约 11GB VRAM。

约 4 万美元

在这个价位,你能获得更高一级的模型智能——非常接近 Claude Opus 的水平。

你会购买 4× RTX 6000 Pro,总计 384GB VRAM

当前 4× RTX6kPRO 的最佳模型
日期最佳模型我的配置
2026-07GLM-5.2-Int8Mix-NVFP4-REAP-594BRunner 配置
其他方案

注意:以上是我的推荐,但还有其他完全可行的花钱方式。例如,也许有一种策略是不买 4 张 rtx6kpro,而是将大部分预算用于搭建一个 4× DGX Spark 联网集群,总共获得 512GB VRAM,将其作为"慢速大大脑"来驱动 Qwen3.7-27b 快速完成例行任务。

硬件

以下是我为这台 4× RTX 6000 pro 机器最终购买的硬件。

机箱

基础系统

一套适中的上一代 EPYC 系统,配件几乎全部从 eBay 购买。

组件规格价格
主板ASRock Rack ROMED8-2T(SP3,7× PCIe 4.0 x16,双 10GbE)$715
CPUAMD EPYC Milan 7313P(16 核 3.0GHz)$504
内存8× 16GB Crucial CT16G4RFD4213 DDR4 ECC RDIMM(共 128GB,eBay)$642
CPU 散热器Dynatron T17 SP3 塔式,280W TDP$40
机箱AAAWave Sluice V2 开放式框架$100
电源2× Super Flower 1700W$750
PCIe 交换机c-payne Microchip Switchtec PM40100 Gen4(见下方子 BOM)约 $1,330
启动 NVMe4TB M.2$291
存储 NVMe2× 8TB M.2(存放模型权重)$1,200
风扇3× 120mm PWM$15
总计$5,587

GPU

组件规格价格
GPU4× NVIDIA RTX PRO 6000 Blackwell Workstation(每张 96GB,总计 384GB VRAM约 $46,000

c-payne PCIe Gen4 交换机子 BOM(c-payne.com)

零件数量单价(欧元)备注
PCIe gen4 交换机 5× x16 — Microchip Switchtec PM4010011,0502× SlimSAS 8i 上行,5× x16 四槽间距下行,额外 x4 SlimSAS,3× 8-pin EPS 供电
SlimSAS PCIe gen4 Host Adapter x16 — REDRIVER AIC(DS160PR810)1140插入 ROMED8-2T x16 插槽,连接交换机上行
SlimSAS SFF-8654 8i 线缆 — PCIe gen42约 30每根承载 x8;两根配对 = x16 上行
总计约 €1,220(约 $1,330 USD)

GPU 支架

我不得不为 PCI 交换机和 GPU 定制制作了一个木制框架,花了大约一天时间。

木工

我发现 PCI 交换机自带的风扇噪音很大且似乎没什么用,所以直接把它从板上拔掉了。

存储模型权重

我将所有模型权重保存在本地 ZFS 文件系统上,该文件系统跨两块 8TB 硬盘进行复制,挂载在 ~/storage

对于任何我想运行的模型,我首先使用以下命令下载:

hf download <model-name> --local-dir ~/storage/<model-name>

运行模型

模型权重缓存到本地后,我为每个模型创建一个专门的目录,其中包含 docker-compose.yml 文件,将每个模型的运行隔离到各自的 Docker 容器中。

你可以在 ./runners/ 中找到这些配置。

每个容器以只读模式挂载 ~/storage/models 来获取本地缓存的权重。

然后我使用运行在另一台机器 VM 上的 opencode 来访问模型,模型在 http://clank.j.co:5000 上提供服务。

我使用内部 DNS 服务器将 clank.j.co 指向 LLM 机器,但你也可以直接使用 http://<llm-machine-ip>:5000

工具框架本身

我创建了一个 VM,并搭建了一个应用,它会为 VM 的 ~/src 目录下的每个子目录创建一个 tmux 会话,每个会话运行一个 opencode 实例,该实例连接到推理机器的 HTTP API(http://clank.j.co:5000)。

工具框架

让开源模型变得好用的关键之一是正确地配备工具;我的 skills/ 配置概要:

  • camofox、kagi.com API key 和 searXNG,用于网页浏览和搜索
  • Telegram bot,用于通信和告警
  • 本地私有 Gitea 实例,用于代码协作

这个工具框架可以与我交互式地在一个会话中工作,也可以被分配去处理 Gitea issue 并提交 PR。

这一切都发生在一个沙箱化的 VM 中,唯一与宿主机通信的方式是通过共享文件系统挂载,所以它可以任意折腾、安装任何东西。

让 PCI 交换机正常工作

为了确保主板不会降级 PCI 交换机的速度,我在 BIOS 中进行了大量调试。

BIOS 配置(ROMED8-2T)

设置项原因
Chipset Configuration → AMD PCIE Link Width(交换机插槽)x16(原来是 x8/x8)Bifurcation 将插槽分拆了;上行链路仅训练到 Gen4 x8。需要连接两根 SlimSAS 8i 线缆(每根承载 x8)。
PCIe Link Speed(交换机插槽)Gen4(非 Auto)Blackwell Gen5 设备通过 Gen4 交换机自动协商降速时可能失败并回落到 Gen1。强制 Gen4 可稳定运行。
ASPM禁用ASPM L1 会将空闲链路降至 2.5GT/s。这解释了 lspci 显示"Gen1 downgraded"的原因——实际在负载下链路是 Gen4 速度(通过 p2pBandwidthLatencyTest 验证),但禁用 ASPM 可以消除视觉恐慌并避免任何重训练延迟。
Re-Size BAR启用需要完整暴露 96GB VRAM BAR 地址空间,实现 GPU P2P。
SR-IOV禁用裸金属推理;避免 IOMMU 开销和 P2P 干扰。
Preferred IOAuto可选设为 Manual → bus 81(c-payne 交换机)以获得边际延迟改善,但保留 Auto——这是锦上添花的优化,而非必要修复,且 BIOS 变更后总线号会变动。

降低 Redriver 增益

根据 c-payne 的建议,我使用他的工具将增益降到了"level 3",这可能是整个过程中最棘手的部分。

增益水平取决于你的 SAS 连接线缆的长度。

选择正确的 SAS 线缆

我犯了个错误——从 c-payne 那里订的线缆太少,于是从 Amazon 买了自以为相同规格的 SAS 线缆。实际上存在细微差异,导致了问题,我不得不重新订购线缆——所以一定要仔细确认你买对了东西!

Kernel / GRUB 参数

# /etc/default/grub
GRUB_CMDLINE_LINUX="iommu=off amd_iommu=off nomodeset"
sudo update-grub

# nvidia_uvm P2P 修复
echo 'options nvidia_uvm uvm_disable_hmm=1' | sudo tee /etc/modprobe.d/uvm.conf
sudo update-initramfs -u

如果没有 iommu=off,NCCL 在多 GPU P2P 时会发生挂死。

禁用 ACS(交换机 P2P 的关键)

如果启用 ACS(默认状态),P2P 流量会通过 CPU Root Port 中转,而不是保持在交换机 Fabric 内部,这样就完全失去了交换机的意义。pcie_acs_override 需要修补过的内核,因此我们通过运行时 setpci 来禁用。

# /usr/local/bin/disable-acs.sh
#!/bin/bash
if [ "$EUID" -ne 0 ]; then
  echo "ERROR: must be run as root"
  exit 1
fi

for BDF in $(lspci -d "*:*:*" | awk '{print $1}'); do
  setpci -v -s ${BDF} ECAP_ACS+0x6.w > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    continue
  fi
  echo "Disabling ACS on $(lspci -s ${BDF})"
  setpci -v -s ${BDF} ECAP_ACS+0x6.w=0000
done

通过 systemd oneshot 在每次启动时运行:

# /etc/systemd/system/disable-acs.service
[Unit]
Description=Disable PCIe ACS for GPU P2P
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/disable-acs.sh

[Install]
WantedBy=multi-user.target

验证:lspci -vvv | grep ACSCtl 应全部显示为减号,nvidia-smi topo -m 应在四个 GPU 之间显示 PIX(而非 PHB/NODE)。

使用 ./tools/measure-gpu-speed.sh 可以轻松测量。

GPU 功耗限制

为了避免安装 220V 电路,我(可能不太明智地)在这台机器上使用单路 110V 电路,但对显卡进行了功率调节。

通过 systemd 在启动时应用持久化模式 + 功耗上限(install-gpu-power-limit.sh):

sudo nvidia-smi -pm 1
sudo nvidia-smi -pl 350    # 每张 GPU 350W(默认 600W)

350W/GPU = 1,400W GPU 负载,按电源预算设计。在过渡期单 1700W PSU 阶段(安装 240V 电路之前),显卡运行在约 260W(4×260 = 1,040W GPU + 约 280W 系统 ≈ 总耗电 1,320W)。

验证:nvidia-smi --query-gpu=index,power.limit,power.draw --format=csv

结果

上行链路:Gen4 x16(约 30 GB/s 到 CPU)。通过交换机的 P2P:单向 27.5 GB/s / 双向 50.4 GB/s,延迟 0.37–0.45 µs,即 Gen4 线速。注意:如果任何地方启用了 ASPM,lspci 在空闲时可能仍显示下游 GPU 链路为"2.5GT/s (downgraded)"——这只是显示问题,链路在负载下会重新训练到 Gen4 速度。

控制面板

资源


原文:Jamesob's Guide to Running SOTA LLMs Locally

——

🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

LLM 本地部署 硬件指南 GPU AI技术
← 上一篇
牵绳式AI编程法:如何写出超越Fable的高质量代码
下一篇 →
Soatok 非正式威胁建模指南

📌 相关推荐

结构化输出 vs 工具使用 vs 预填充:2026年从Claude获取JSON
2026/7/11
在AWS Bedrock上构建生产级AI代理——值得关注的架构与代码决策
2026/7/11
如何为你的AI代理构建评估框架(确保其在生产环境中不崩溃)
2026/7/11
← 返回文章列表