搞AI这一年多,我踩过最大的坑不是模型调参,而是把多张显卡组织成一台能干活、不闹脾气的机器。单卡跑大模型,显存就是个透明天花板,想上70B以上的模型,要么租云上几万块一张的卡,要么自己拼一台多卡机器。我最终选的方案就是自己搭一台开源开放式多卡工作站,也就是圈里常说的openrig方案——不靠量产整机,自己选配件、自己排供电、自己调散热,把一堆消费级和准专业级硬件拼成一台能跑推理、能微调的算力机。这篇文章就把我这套openrig的完整设计与实操过程整理出来,包括为什么这么选、每个零件的参数怎么定、装机过程中哪些细节能让你少走大弯路,以及我把整机跑起来后遇到的最典型的几类问题。
这套方案适合谁?如果你手里有两到四张卡,想本地跑跑LLM推理、做做微调实验,又不想花几万块去买成套的服务器;或者你是个AI方向的学生、独立开发者、小团队运维,需要在本地有一台相对安静、且灵活好扩展的算力设备,那这套openrig的设计思路和踩坑记录应该能给你省下很多探测时间。
1. 整体设计与思路拆解:为什么是openrig而非整机服务器
1.1 单卡瓶颈:显存、带宽与散热三重夹击
我一开始也是老老实实用一台普通台式机插一张RTX 4090,24GB显存看着不小,但当你真的去跑一个Qwen等规模的模型时,量化后随便一个7B模型就吃掉5到6GB,加上上下文窗口、KV cache,稍微把max length拉长一点,显存直接见底。换成70B的量化模型,单卡只能把模型放进去但推理速度惨不忍睹,batch稍微大一点就开始OOM。
有人会说,那就租云嘛。但长期做实验的人都知道,GPU云主机在高峰期排队、数据上传带宽、以及按小时计费的心理压力叠加起来,短期内也许便宜,跑一次长时间微调实验的成本非常不稳定。自家有设备的好处是随便折腾,显存不够就堆卡,卡不够就加机器。
真正让我转向多卡并联方案的,是NVLink和PCIe带宽带来的现实收益。现代大模型推理框架比如vLLM、TensorRT-LLM都支持张量并行,简单说就是把一层计算切到多张卡上。两张卡之间需要高频交换中间激活值,如果走PCIe 4.0 x16,实测单方向带宽大约32GB/s,比NVLink的600GB/s差了一个数量级。所以硬件方案上优先把同一机箱内卡间互联带宽做足,这是openrig能拉开和普通堆卡机差距的核心。
1.2 整机服务器PK自组openrig
我也认真对比过购买二手整机服务器或者准系统工作站,比如拆解某品牌的4U GPU服务器,支持4卡双宽GPU,看起来省事,但真正拿到手你会发现几个问题:第一,工业服务器风扇全速运行时噪音非常夸张,放在办公环境里完全没法接受,必须另外配隔音机房;第二,很多二手准系统的主板是专有规格,扩展槽位、电源接口非标准,后续维护和升级麻烦;第三,整机厂商对新款GPU的支持往往滞后,你要自己刷BIOS、魔改散热,反而比从零DIY更费劲。
而openrig思路是把机架式服务器的核心优点——开放扩展、集中散热、模块化供电——移植到开放式机架里,所有配件走标准件路线。你可以理解为:服务器是把所有东西装进一个黑箱里,而openrig是把黑箱拆成几层金属框架,把GPU卡像书架一样排开,风道完全开放,供电系统自己拉线。好处是散热效率极高,坏处是防尘和噪音需要自己控制,但这在实际使用中完全可以通过定期清灰和选择低转速大风量风扇来平衡。
1.3 整体架构规划:一张图想清楚所有环节
在设计openrig之前,我先列了核心约束条件:
- 支持4至8张双宽GPU卡,同时保留将来扩展的余量
- 风道走前后贯通方向,所有风扇单侧出风
- 供电能力冗余不低于整体峰值功耗的120%
- 卡间互联优先支持NVLink,至少也要保证全速PCIe通道互不抢带宽
- 系统内存不低于16GB,建议32GB起步,因为CPU要承担数据预处理和推理调度任务
- 所有零件能在常见电商渠道买到,不依赖特殊厂商渠道
这个架构规划直接决定了我选的平台。CPU方面,消费级酷睿这代产品PCIe通道数量只有20条左右,如果想要两张卡跑全速x16,加上系统盘和网卡,通道数就非常紧张,所以我直接选定了支持多通道的工作站级平台。当时看了两个方向:AMD TRX系列平台和英特尔W系列平台,两者都能提供足够数量PCIe通道,其中AMD线程撕裂者Pro更是把通道数给到了96条以上,对应多卡扩展最从容。实际装机时我只用了4条PCIe插槽,其中GPU占用4条x16、网卡1条x8、存储用M.2直连CPU,这样通道分配宽裕不打架。
软件层面同样重要。操作系统选了Ubuntu Server LTS,容器方案用了Docker,集群调度暂时不上Kubernetes,因为单机多卡阶段docker compose配合自写脚本管理服务已经够了。有人喜欢一上来就全套K8s,我个人的建议是先别折腾,AI训练推理对网络和存储的要求极高,单机先跑通了再谈横向扩展,否则你会在排查基础设施问题中消耗大量精力。
2. 核心细节解析与实操要点:供电、散热与线缆全规划
2.1 供电方案:先算总功耗再决定电源数量
从GPU规格说起。像RTX 4090这样双宽卡,标准功耗是450W,瞬时峰值可能冲到600W左右。如果我们插四张卡,光GPU就按2400W保守估算。加上CPU,这台工作站CPU满载功耗可能到280W,还有主板、内存、风扇、硬盘,大约100W。整机峰值就是2780W左右,这还没算启动瞬间的浪涌电流和显卡驱动重置时的尖峰。
市售单电源常见功率在1600W以内,再往上就是大功率服务器电源了,噪音和价格都不适合桌面环境。所以我直接采用双电源方案——两个1600W电源并联供电。这里有个重要细节:不是简单买两个ATX电源插上就完事,你要有一根双电源启动同步线,让两个电源同时启动、同时输出。我用的是一块双PSU启动适配板,它会向两个电源的PS_ON信号同时发送低电平触发信号,避免单电源先启动导致负载分配不均。
接线规格上,每张450W的显卡需要至少两个8Pin PCIe供电接头,最好用原生12VHPWR线缆,别用转接线,因为转接线在长时间高负载下温升非常明显。实际走线时,把四张卡的供电线分成两组,分别接在两个电源上,同时确保每路12V输出不超载。比如A电源负责CPU主板的24Pin和CPU辅助供电以及GPU1和GPU2各一根供电线,B电源负责GPU3、GPU4供电线和所有SATA/周边,这样均衡一些。
2.2 散热风道与机架布局:开放机架的优势是我没想到的
一开始我担心开放式机架会不会落灰严重,实际用了快半年,只要房间不是土建施工现场,灰尘量完全可控,定期一个月吹一次即可。更关键的是散热效果。封闭机箱里GPU背对背安装,热风排出路径不畅,显卡温度容易卡在82度降频线以下一段时间然后强制降频。开放机架把每张卡的进风和出风区域都暴露在环境中,配合机架后侧挂一排12cm风扇形成负压抽风,温度表现非常好看。
具体的布局是:机架共4层,底层放电源模块,第二层放主板,第三层和第四层放GPU卡。GPU通过PCIe延长线连接到主板的x16插槽上,这样显卡就不受机箱体积限制,可以每张卡间隔一个卡位安装,让卡与卡之间有充足气流通道。我实测四张卡在室温26度的房间、满载跑大模型推理时,GPU温度稳定在65到72度之间,热点温度在80度左右,比装到传统机箱里低了接近10度。
风扇选型上我踩过坑。一开始用了普通机箱风扇,转速拉满但风压不够,根本吹不透GPU散热器。后来换了支持PWM调速的工业级双滚珠风扇,单把风量能达到150CFM以上,转速在1600转/分时噪音还能接受,温度表现立竿见影。如果觉得风噪太大,还可以在机架外面包一圈吸音棉,但注意进风口和出风口坚决不能堵。
2.3 PCIe延长线与NVLink桥接:最容易被忽视的稳定性细节
开放式机架里GPU不可能直接插在主板上,PCIe延长线成了必经之路。这里我强烈建议买带屏蔽层的PCIe 4.0延长线,那种几块钱一根的裸线在PCIe 4.0高速信号下非常容易出现降速或者不稳定掉卡问题。我最初为了省钱用了两根普通延长线,结果一张卡始终跑在PCIe 3.0模式且偶尔掉卡,排查了主板设置、驱动版本,最后才发现是延长线信号质量太差。换上带屏蔽后的线缆后一次性解决问题。
PCIe 4.0高速信号的靠谱传输上限约在30cm左右,所以机架布局要尽量让主板插槽和显卡安装位置距离短。如果你布了一个超长走线方案,很可能要接受PCIe 3.0的降级运行。实测表明PCIe 3.0 x16跑纯推理场景影响不大,但张量并行通信会有可感知的延迟,所以优先保持PCIe 4.0。
NVLink桥接器这块同样有讲究。NVLink可以让两张卡之间共享显存,或者更准确地说,以极高带宽进行内存池化。如果你跑大模型的张量并行,两张卡之间隔一层NVLink,通信开销会显著降低。但NVLink桥接器只支持相邻槽位的两张卡,且桥接带宽受桥接器版本影响。我的四卡方案是两两一组用NVLink组成两个对,再用PCIe交换机或CPU通道跨组通信。实际表现比全NVLink四卡环要弱一些,但成本便宜得多,也足够跑绝大多数开源模型。
2.4 网络与存储规划:别让数据搬运拖后腿
很多人搭AI工作站只顾着算力,容易把存储和网络放到次要位置。实际用下来,模型权重文件动辄几十GB,如果内网传输速度只有千兆,光是传一个70B模型就要等上小十分钟,本地调试开发体验极差。所以我的openrig在网络这块规划了两张网卡:板载万兆电口主要承载日常局域网传输,另外加了一张25G光纤网卡,直连开发机和存储服务器。如果你没有高速存储服务器,至少也要在机器内放一块大容量NVMe SSD组RAID或者直接单盘跑模型,读权重文件的速度是推理启动时间的关键。
存储容量方面,建议至少4TB起步。我放了一块8TB的企业级NVMe SSD和一个16TB机械仓库盘。模型文件和数据集都放NVMe上,实测加载一个7B模型只要几秒,加载70B量化模型也就一分钟不到。机械盘主要充当冷备份,定期把训练日志和数据checkpoint转储过去。
3. 实操过程与核心环节实现:从装机到部署全流程记录
3.1 配件清单与选型心得
这里给出我当时实际使用的核心配件,做一个参考表格,不代表唯一答案,但大多数组合在兼容性上游刃有余。
| 部件 | 具体型号/规格 | 关键参数 | 备注入手理由 |
|---|---|---|---|
| 机架 | 4层开放式服务器机架,深度60cm | 支持4卡位、前后风扇架 | 开放风道、安装灵活 |
| 主板 | 工作站级WRX80E | 支持4路PCIe 4.0 x16,多条M.2 | 专为多卡设计,通道充足 |
| CPU | 线程撕裂者Pro 3955WX | 16核32线程,PCIe通道128条 | 多卡平台不二之选 |
| 内存 | DDR4 ECC 3200 16GB x8 | 128GB总容量 | UV内存大,模型KV缓存才不慌 |
| GPU | RTX 4090 24GB x4 | 双宽、NVLink支持 | 性耗比与生态平衡点 |
| 系统盘 | 2TB NVMe SSD | PCIe 4.0,读速7000MB/s | 系统和docker镜像都放这里 |
| 数据盘 | 8TB企业级NVMe SSD | 读速6500MB/s | 模型权重与数据集集中存储 |
| 电源 | 1600W白金ATX电源 x2 | 双PSU同步启动 | 总供电冗余充足 |
| 风扇 | 14cm工业风扇 x6 | PWM、150CFM | 机架后侧抽风 |
| 网络 | 25G光纤网卡 + 万兆电口 | SFP28 / 10GBase-T | 数据搬运不卡脖子 |
先说一下CPU选择。有人觉得AI工作主要靠GPU,CPU差不多就行。但多卡推理和多卡训练场景下,CPU要负责数据加载、预处理、算子调度、Docker容器开销等任务,核心数量太少吃紧。线程撕裂者Pro系列在性价比上确实不便宜,但胜在PCIe通道多,这点对多卡机来说就是命根子。如果不那么追求极致,上一代撕裂者或者至强W系列也可以,前提是把PCIe通道数确认清楚。
内存容量很多人低估了。以70B量化模型推理为例,模型权重大约40到50GB,跑起来KV cache又可能吃掉10GB以上,再加上系统开销和Docker映射,128GB内存运行起来刚好宽裕。如果同时跑微调,建议直接上256GB,因为CPU内存还要承担训练数据的预取和样本缓冲。
3.2 装机走线与开机测试:给新手的完整顺序
装机顺序上,我的建议是先把电源、主板、CPU、内存、系统盘装成一个最小系统,插一张显卡在机架原有位置上,通电点亮并安装好操作系统,然后再逐步加入其他显卡和扩展卡。这样做的好处是遇到问题容易定位,不至于一上来四张卡全都插上去,结果系统点不亮就直接抓瞎。
最小系统搭建完成之后,进BIOS完成几项关键设置:
- 开启Above 4G Decoding(现在可能叫Re-Size BAR Support)
- 开启PCIe链路速度强制为Gen4
- 把超线程和Turbo Boost策略设为Auto即可,不必手动极限超频
- 内存频率按标称XMP/EXPO设定,多通道交叉安装确保对称
然后安装Ubuntu Server 24.04 LTS,磁盘分区时建议给根分区分配200GB以上空间,Docker默认存储位置也放到大容量数据盘上,不然系统盘容易被镜像日志塞满。
驱动与CUDA环境我强烈建议用NVIDIA官方CUDA仓库来装,避免从官网手动下载runfile后与系统自带驱动冲突。参考命令如下:
# 添加NVIDIA官方CUDA软件源 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update sudo apt -y install cuda-toolkit-12-4 # 重启后验证 nvidia-smi正常情况下nvidia-smi会列出所有四张卡。如果只看到部分卡,先不要慌,多半是PCIe延长线接触不良或者电源线没插到位,重新拔插加紧固就好了。
Docker方案上,我推荐使用NVIDIA Container Toolkit,这样容器内可以直接透传GPU能力。安装完成后启动一个测试容器:
sudo apt -y install nvidia-container-toolkit sudo systemctl restart docker docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi看到四张卡都出现在容器内的nvidia-smi输出后,硬件环境就可以算通过验证了。
3.3 部署大模型推理服务:vLLM容器化全流程
算力底座就绪,接下来我直接部署vLLM推理服务作为核心应用。之所以选vLLM,是因为它在高吞吐推理方面做得足够出色,对多卡张量并行支持更成熟。这里以Qwen2.5-72B-Instruct-GPTQ-Int4模型为例,四张卡刚好跑得动。
先拉取镜像并准备模型目录:
mkdir -p /data/models cd /data/models # 用huggingface-cli或模型站点的工具下载对应模型文件 huggingface-cli download Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4 --local-dir /data/models/qwen72b-gptq-int4然后写一个docker-compose.yml文件:
services: vllm: image: vllm/vllm-openai:latest container_name: vllm_qwen72b runtime: nvidia environment: - HUGGINGFACE_HUB_CACHE=/data/models command: > --model /data/models/qwen72b-gptq-int4 --served-model-name qwen72b --tensor-parallel-size 4 --gpu-memory-utilization 0.92 --max-model-len 32768 --host 0.0.0.0 --port 8000 ports: - "8000:8000" volumes: - /data/models:/data/models shm_size: 16g几个关键参数值得展开说。--tensor-parallel-size 4就是四卡张量并行,意味着模型权重会按张量维度切分到四张卡上,每张卡负责一部分计算,同时通过NVLink和PCIe交换中间结果。--gpu-memory-utilization 0.92表示把每张卡92%的显存都给模型和KV cache,余量留给计算图。这个值不建议设到0.95以上,因为CUDA上下文和深度学习框架的碎片化显存需求会造成OOM。--max-model-len 32768要根据显存和显存占用微调,太长会挤占KV cache导致实际可用并发变低。
启动服务后,用curl验证一下:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "qwen72b", "messages": [{"role": "user", "content": "你好"}], "max_tokens": 256}'第一次请求需要加载模型,可能在十几秒到几十秒之间。之后理论上应该回到几十毫秒到几百毫秒的生成间隔。如果响应时间异常缓慢,查看日志,常见问题要么是模型分片不均匀,要么是显存利用率和max length设置冲突。
3.4 推理性能实测:并发、吞吐与延时数据
服务跑起来后,我用自己的压测脚本简单打了一下吞吐。从结果来看,四卡张量并行跑72B模型,在并发32、输入输出长度各512token时,吞吐可以稳定在1200到1500 token/s左右,单请求首token延迟大约300到500ms。这个成绩对本地推理来说已经是可用水平,比单卡跑同模型强得多。
如果只跑7B或13B级别的小模型,四卡方案显得大材小用,直接把tensor-parallel-size设为1或者2,同时把并发调高,反而可以获得更高的资源利用率。甚至可以把同一台机器切成多个服务,一张卡跑7B模型服务、三张卡跑大模型服务,通过不同容器端口暴露API,这也是openrig灵活性的体现。
4. 常见问题与排查技巧实录:开机、掉卡、降速与散热
4.1 机器无法点亮:从最小系统开始逐层排查
很多人在装机过程中遇到点不亮的问题会直接怀疑主板坏了,其实90%的情况出在内存、供电或者插卡顺序上。这里我整理了一份排查顺序:首先只保留CPU、单根内存、核显或亮机卡,拔掉所有扩展卡和其他内存,短接开机针脚。能点亮,说明主板和电源没问题,接下来一根一根加内存,每加一根都要确认识别。内存都OK后再插显卡,这个阶段如果黑屏,先看显卡供电线是否插紧,再看PCIe插槽是否到位,最后再怀疑主板BIOS设置。
关于内存插法有个细节:像WRX80这种8通道主板,内存条必须按CPU内置的通道规则分布,不能随便插满就完事。插错通道就算内存容量识别正确,访问带宽也会变成单通道,性能差一大截。正确做法是按照主板说明书里的推荐顺序,比如从靠近CPU的第二、第四、第六、第八根插槽开始,对称安装。
4.2 系统内只能识别部分GPU的排查实录
有一次我把第四张卡插上后,系统死活只识别三张卡。检查顺序是:
- 先跑
lspci | grep NVIDIA看PCIe总线上全不全几张卡 - 如果PCIe能识别但nvidia-smi看不到,多为驱动问题,重新安装驱动即可
- 如果PCIe层面都缺卡,优先级最高的是供电线、延长线接触、插槽物理连接
- 确认卡是否需要额外供电。部分双宽卡的辅助供电接口多达两个甚至三个,少插一个会直接导致系统不认卡
我那次的问题其实很蠢——电源线标着PCIe 8Pin和CPU 8Pin长得一模一样,但线序不同,不能混插。有一根线插反了之后,虽然卡上的辅助供电指示灯没亮,但系统就是检测不完整。换成对应线缆立刻解决。
4.3 多卡通信速度不达预期的分析思路
如果你跑多卡并行时发现吞吐提升远小于卡数增加,首先得怀疑卡间通信协议没有正常工作。最简单的验证方式是用nvidia-smi topo -m查看卡间通信拓扑,它会把GPU两两之间的互联方式打印出来。如果是NVLink,显示NV#编号,如果走PCIe,显示PHB或PIX。正常配置下,NVLink连着的两张卡通信延迟最低、带宽最高。
实测中我发现一个问题:在BIOS里启用了Above 4G Decoding后,如果PCIe交换机把多张卡挂到同一个Root Port下,跨Root Port通信会走系统内部互联,速度反而不如预期。解决办法是手工调整插槽优先顺序,让有NVLink的卡对尽量占在同一个CPU Root Complex下面。同时确认主板BIOS已开启PCIe ARI和SR-IOV相关选项,这两个设置对多卡同时工作的稳定性影响很大。
4.4 散热噪声与长期稳定性的经验
开放式机架最大问题是声音和防尘。满速运行时六把工业风扇的噪音大约在55分贝左右,放在书房会觉得吵。我的做法是接一个PWM温控器,把风扇策略设置为根据显卡温度自动调速,日常待机时转速压低到800转/分,基本无感;高负载时自动拉到1200到1500转,温度控制在可接受范围。不要直接满载3000转,那个声音真的能劝退所有人。
防尘方面,定期清理是一个方面,更重要的是在机架进风侧加一层可水洗的防尘网。我用的磁吸式防尘网,每两周拆下来冲一下,内部基本没有积灰。再就是湿度控制,南方回南天的话建议机架周围放个除湿机,不然显卡PCB和电源裸在外面受潮容易出问题。
提醒:开放机架虽然散热好,但对摆放环境有一定要求。不要让机架紧贴墙壁,至少留出10到15厘米的后排风空间,否则出风受阻,温度会显著上升。
4.5 各类问题速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 系统点不亮 | 内存未插好或通道不对 | 最小系统逐根排查,按主板通道顺序安装 |
| 只能识别部分卡 | 供电线未插全或插错 | 确认所有8Pin/12VHPWR接口,核对线序 |
| nvidia-smi显示错误码43 | 驱动版本与CUDA不匹配 | 升级到NVIDIA官方推荐版本,并禁用Nouveau |
| 卡间通信走PCIe而非NVLink | 插槽位置不对或桥接器未装好 | 调整卡位,重新安装NVLink桥接器 |
| GPU温度过高 | 风扇策略太温柔或风道受阻 | 调整PWM温度曲线,清理进出风口 |
| 推理速度提升不明显 | tensor parallel设置偏大或模型太小 | 观察nvidia-smi利用率,调整并行度 |
| Docker容器内看不到GPU | Nvidia Container Toolkit未正确安装 | 重装toolkit,并重启docker服务 |
我个人体会最深的一点是,openrig这种方案的真正价值不在某个牛掰的硬件单品,而在于当你理解了算力机的底层架构后,可以根据自己的实际需求快速调整配置,想加卡加卡,想换平台换平台,不会被封闭生态绑定。现在这台四卡机跑了两个多月,除了定期清灰和维护,几乎没有因为硬件问题重启过。如果你也准备搭一台自己的AI工作站,欢迎参考这套思路,从确定核心需求和用量计费开始,一步一步来,不要一上来就追求八卡满配,先把两卡跑通,再逐步加码,这才是最稳的路线。