2. 项目概述与核心痛点
在深度学习和本地AI推理越来越普及的今天,性能跟得上、成本压得住的个人计算装备,成了像我这样既不想被云厂商"按月订阅"捆绑,又需要高频跑实验的研究者,最刚需的硬通货。市场上买整机太贵,自己攒机器又容易在各种细枝末节上踩雷——电源功率选小了、散热塔压不住13900K、双卡插上去供电相数不够。而网上那些所谓"发烧配置单"要么是商家软文,要么是只写硬件清单不讲走线和散热逻辑的半成品。
openrig 这个项目,本质上是一套开放源码的AI工作站整机方案——它把硬件选型、机箱布局、供电分配、散热风道、系统调优、AI推理框架部署的全链路经验,都以开源文档的形式沉淀下来。换句话说,它不是一张配置单,而是一份"制造指南"。你可以照着它原样复刻一台机器,也可以在它基础上按自己的预算和场景做替换,所有关键决策点的取舍理由都写在里面。
我最初接触 openrig,是因为手上有一批需要本地跑的Transformer模型微调任务。租云GPU不是不行,但长期跑数据预处理、小批量训练、模型评估这些"碎片化负载",成本实在划不来。而且很多数据涉及内部协议,不能往外送。于是从去年年底开始,我把这套方案完整落地了一遍——从选料到装机再到实测,花了大约三周时间,最终得到了一台能稳定跑7B~13B量化模型推理、同时兼顾中等规模微调的工作站。
这篇博客就是我基于这次完整落地过程的复盘。如果你正打算为自己或者小团队搭建一台以AI训练推理为核心用途的本地工作站,或者手头已经有一台机器但总觉得性能没吃满,那下面的内容应该能帮你少走不少弯路。我会从硬件选型思路、实际安装过程、软件栈配置、以及我踩过的那些坑四个大块,把整个方案的逻辑讲透。
首先明确一下,openrig 解决的核心问题有三个:第一,性价比——同样预算下,如何把算力、显存和扩展性往上顶;第二,可复现性——每个部件选型都附带理由和测试数据,不是拍脑袋;第三,可维护性——散热、供电、走线都设计成容易拆装和升级的结构,避免两年后想加一块卡就得全机返工。
在硬件圈子里,AI工作站这个概念已经被炒得很泛了,很多所谓"AI PC"其实就是普通游戏主机换了个名字。真正面向模型训练的机器和游戏机有本质差异。举个例子,游戏机瞬时帧率波动大,但整体功耗相对平稳;训练任务则是长时间、高负载、满载跑几十个小时不停歇,对供电稳定性和散热持续性的要求完全不是一个量级。openrig 在设计时把"持续满载工况"作为默认场景,这恰恰是很多自己攒机器的人最容易忽略的地方。
1. 整体方案设计与核心选型逻辑
1.1 为什么用"双卡消费级"而不是"单卡专业级"
openrig 最大的一个设计取舍,是选择了双卡RTX 3090 / 4090消费级显卡作为主力算力单元,而不是一块A6000或者A100。这个选择背后有非常现实的考量。
先看单卡专业级方案。一张A6000 48GB版,目前渠道价大约两万五到三万;一张A100 80GB价格更高,而且对大多数中小团队来说,能拿到的渠道和保修都是问题。如果是个人或者三五人小团队,这个成本直接把项目可行性杀死了。而一张二手3090 24GB的价格,现在大概在七千到九千之间波动,两张加起来还不到一张A6000的一半。
在显存边际效应明显的AI场景里,两张3090能组合出48GB显存(多卡推理或通过张量并行切分模型),相比单卡A6000的48GB,显存总量打平,但算力翻倍不止。3090的FP16算力大约35.6 TFLOPS,两张合计约71 TFLOPS,A6000的FP16算力是38.7 TFLOPS,双3090在纯算力上几乎是A6000的两倍。虽然显存带宽上3090的936GB/s比A6000的768GB/s也高出一截,综合性价比非常可观。
当然,双卡方案也有代价。功耗翻倍是必然的——两张3090满载功耗在700W上下,加上CPU和其他部件,整机峰值功耗轻松突破1000W。这就对电源、散热和机箱风道提出了更高要求。openrig 的应对方式是三步走:用1600W白金电源留足余量、用大体积塔式机箱配合前进后出的大风量风道、把两张卡之间留出三槽间距避免热量互烤。每一步都是针对双卡工况的专门优化,而不是简单地把两张卡插上去就完事。
1.2 硬件清单与避坑原则
这是 openrig 配置单的完整硬件部分,我按自己实际采购和测试的结果做了微调,标注了每个部件的核心选择理由:
| 部件 | 型号/规格 | 核心选择理由 |
|---|---|---|
| CPU | Intel Core i9-13900K / 13700K | 24核8性能核,多核性能对标Threadripper入门款,价格合理 |
| 主板 | Z790芯片组,支持双卡PCIe 4.0 x8 | 两卡各8条PCIe通道,带宽足够,兼容性好 |
| 内存 | 128GB DDR5 4800MHz(4×32GB) | 大模型推理时CPU内存用于放中间激活值和数据集缓存,越大越香 |
| 显卡 | 2× RTX 3090 24GB | 显存合计48GB,性价比首选 |
| 电源 | 1600W 白金全模组 | 双3090满载功耗余量计算后选择,单路12V输出优先 |
| 机箱 | 全塔式,支持E-ATX主板 | 双卡间距、360水冷安装、风道布局的基础 |
| 散热 | 360 AIO水冷 + 3前2上1后风扇 | CPU用360水冷,机箱整体正压差风道 |
| 存储 | 2TB NVMe系统盘 + 4TB NVMe数据盘 | 模型权重和数据集分离,避免系统盘被占满导致卡顿 |
| 网卡 | 板载2.5G + 1G双网口 | 多机分布式场景下预留带宽 |
避坑原则这一点我特别想强调:主板PCIe插槽间距和显卡厚度是双卡方案里最容易翻车的暗坑。很多Z790主板的第二条PCIe x16插槽位置紧贴第一条,两张三槽厚的3090插上去直接贴脸,中间连一根手指都塞不进去,温控立刻崩溃。openrig 的配置单专门选择了PCIe插槽间距足够大的型号(第二条x16在第四槽位),这样两张卡之间正好留下三槽距离,风道通畅,拆装也有下手空间。
另外就是电源。很多人看到3090公版标称TDP 350W就按"350×2+CPU"去选电源,这是典型的错误算法。显卡在瞬时功耗峰值可以达到标称TDP的1.5倍,双卡一起触发瞬时峰值时,电流冲击非常吓人。我见过不少人用1000W电源带双3090,结果重负载任务一启动就黑屏重启,就是这个原因。openrig 用1600W白金不是浪费,是给瞬时功耗留足缓冲区。
1.3 功耗与散热:这套方案的数学账
既然方案的核心是双卡,那功耗和散热的账必须提前算清楚,否则装完再改就迟了。
先说功耗。满负荷场景下,双3090各约350W,13900K满载约250W(如果有超频更高),主板、内存、NVMe硬盘、风扇水冷泵这些加起来约80W,合计大约1030W。考虑到电源在50%~80%负载区间转换效率最高,1600W白金电源在1000W负载时大约工作在60%档位,正好落在高效区。
散热方面就更有讲究了。双360W级别的显卡在机箱内持续产热,每小时大约要向机箱内释放700W热量,这是什么概念?相当于一个中大型电暖器在机箱里全功率运行。如果风道设计不合理,热量堆积在显卡和CPU散热器周围,风扇转速拉满也压不住核心温度。
openrig 的机箱风道遵循一个原则:前进后出,下进上出,形成单一方向的大风量贯穿风道。前部三只14cm风扇进风,后部一只14cm出风,顶部360水冷排负责CPU热量外排。两张显卡由于间距拉够,各自能从底部和侧板捞到冷空气,尾气直接往后排出。实测室温26℃环境下,双卡同时满载跑30分钟,核心温度稳定在72~78℃,不会降频。这个数据在自组AI工作站里已经算相当健康了。
我额外做的一个小改造,是给两张卡之间的缝隙里塞了一个8cm的小风扇,用扎带固定在显卡背板上,专门负责把两卡夹缝里的热空气往外吹。这个小风扇实测能让左侧显卡的温度再降3℃左右,成本不到30块钱,性价比极高。这也是 openrig 方案里"非标准动作"的一种,参赛者可以根据实际情况加自己的优化。
2. 核心实现:软件栈与系统调优
2.1 系统层面:Ubuntu Server + 内核参数
硬件装好只是第一步,真正让 openrig 展现生产力的,是软件层面的系统化配置。我使用的是 Ubuntu 22.04 LTS Server 版,为什么不用桌面版?因为这台机器定位就是跑训练任务的工具机,不需要桌面环境白白占掉几GB内存和CPU时间片。远程通过SSH操作,用 VS Code Remote 写代码,再加一个轻量级的 Jupyter 服务用于临时测试,全部搞定。
系统装好后,第一步是内核参数调优。深度学习和分布式训练涉及大量网络通信和内存分配,有几个参数会直接影响性能:
vm.swappiness=10:降低交换分区的使用倾向,让内存尽量留给模型权重和数据集缓存vm.max_map_count=655300:很多训练框架会创建大量内存映射区域,默认值不够用net.core.rmem_max和net.wmem_max:调大网络收发缓冲区,多机分布式训练时能减少丢包和重传
这些参数写进/etc/sysctl.d/99-openrig.conf,sysctl --system生效。如果你只是单机跑推理,网络参数作用不大,但内存那两条建议照抄,后面跑大模型的时候能规避好几种莫名其妙的OOM问题。
2.2 NVIDIA驱动与CUDA环境的坑
显卡驱动和CUDA环境,是AI工作站搭建中最容易翻车的地方之一,也是 openrig 文档里花篇幅最多的一部分。
先说一个最核心的教训:不要装最新的驱动。很多人习惯驱动用最新版,但在AI场景里,驱动、CUDA、PyTorch 三者之间存在版本耦合关系。比如 PyTorch 官方针对 CUDA 12.1 构建的版本,你装了 CUDA 12.3 的运行时,虽然也能跑,但可能出现奇怪的CUBLAS_STATUS_NOT_INITIALIZED错误。openrig 的做法是选择一组已知稳定、互相兼容的版本组合:
| 组件 | 版本 |
|---|---|
| NVIDIA驱动 | 545.23.06 |
| CUDA Toolkit | 12.1 |
| cuDNN | 8.9.4 |
| PyTorch | 2.2.1(官方+cu121构建) |
这套组合我实测了三个多月,跑了推理、微调、数据并行(DataParallel)各种场景,一次都没出过版本库冲突问题。如果你用的 PyTorch 版本更新,建议先去 PyTorch 官网查对应构建的 CUDA 版本,然后严格按那个版本去配驱动,不要自己拍脑袋乱配。
安装驱动的时候,有几个细节值得注意。第一,Ubuntu 自带的nouveau开源驱动必须禁用,否则在/etc/modprobe.d/写入 blacklist 文件然后update-initramfs -u,再重启,否则NVIDIA驱动装到一半会报CC版本不匹配或者内核模块编译失败。第二,安装驱动建议用--no-opengl-files参数,纯计算服务器没必要带OpenGL,能少很多X Window相关的依赖问题。
2.3 多卡推理与微调的具体配置
软件栈配好之后,重点就是怎么把两张卡真正用起来。很多人以为插了两张卡就能自动双倍显存,这是个误区。显存不会自动叠加,需要你通过框架层面显式地做多卡并行。
openrig 文档里针对三种常用场景给出了配置参考:
场景一:大模型推理(单模型超过单卡显存)用accelerate库或者直接device_map="auto"让框架自动把模型的不同层分配到两张卡上。比如加载一个13B参数的量化模型,权重总量约8GB,但推理过程中KV cache 和中间激活值会占用额外显存,单卡24GB可能不够,分布到两张卡上就从容很多。
实际操作中,我习惯用accelerate的--multi_gpu模式写个启动脚本:
from transformers import AutoModelForCausalLM, AutoTokenizer import torch model = AutoModelForCausalLM.from_pretrained( "模型路径", torch_dtype=torch.float16, device_map="auto" # 让accelerate自动分卡 ) tokenizer = AutoTokenizer.from_pretrained("模型路径") inputs = tokenizer("讲个笑话", return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=128) print(tokenizer.decode(outputs[0]))device_map="auto"的核心逻辑是先扫描所有GPU的显存,然后按层切分模型。实测下来,切分后的推理速度相比单卡大约能提升40%~70%,具体取决于通信频率和模型结构。如果模型单卡放得下,就不建议用多卡,因为跨卡通信有开销,反而可能更慢。
场景二:数据并行训练微调一个中等规模的模型(比如7B参数的量级),两张卡各放一个完整副本,用DataParallel或DistributedDataParallel做数据并行。这里我强烈建议用DistributedDataParallel(DDP),因为它按进程跑,两个GPU各自有独立的Python进程和梯度缓冲区,不受GIL限制,显存利用率和扩展性都优于老旧的DataParallel。
启动DDP的标准姿势是通过torchrun:
torchrun --nproc_per_node=2 train.pytrain.py里只需要加三行关键代码:init_process_group、model = DDP(model)、save时用rank == 0判断主进程写权重。我在微调一个6.7B参数的对话模型时,双卡DDP的吞吐大约是单卡的1.83倍,接近理想线性加速比,这说明3090之间的NVLink互联没有成为瓶颈。
场景三:混合并行如果你的模型大到单卡放不下,但又想用双卡一起训练,那就需要张量并行加数据并行的混合方案。这个配置相对复杂,需要用到 Megatron-LM 或者 DeepSpeed 的 ZeRO 策略。openrig 对这个场景的建议是——新手先不要碰,把前两种玩法吃透再说。混合并行调试成本高,而且双3090的PCIe互联带宽相比专业卡上的NVSwitch还是有差距的,遇到底层的通信瓶颈排查会很痛苦。
3. 装机实操与系统部署全流程
3.1 装机要点:从主板到风道的完整过程
装机环节,我把 openrig 方案里值得讲的几个节点详细拆开说。
第一步是主板准备。CPU安装没什么悬念,重点在内存插法。Z790主板的四根内存插槽是双通道架构,插法必须遵循"隔一插一"原则,即1号和3号槽为一通道,2号和4号为另一通道,四根全插满则无所谓。为什么这么讲究?因为双通道模式的带宽是单通道的两倍,对于大模型推理时需要频繁把权重从CPU内存换到显存的场景,带宽直接决定换入换出的速度。我实测同样的负载,双通道比单通道的模型加载速度快了约30%。
第二步是电源线材规划。这一步特别影响机箱内部整洁度和风道。openrig 的走线思路是:所有线材尽可能走机箱背板理线槽,而机箱正面(散热风道区域)尽量保持空旷。全模组电源的优势在这里体现得淋漓尽致——你需要哪根线就插哪根,多余的线完全不需要。两张显卡的供电线我用的是定制硅胶线,比原装PVC线软很多,弯折空间更充裕,方便贴着背板走。
至于主板24pin和CPU 8pin供电线,一定要在装水冷之前先插好,否则水冷装上之后,冷头和数据线会挡住CPU供电接口,手根本伸不进去。这是很多第一次装机的朋友会踩的空间规划坑。
第三步是显卡安装顺序。装了双卡和风冷的朋友,注意一个顺序问题:先装靠近CPU侧的第一张卡,再装第二张。因为PCIe卡扣在显卡正下方,如果先装了外侧卡,内侧卡的卡扣就被挡住,手伸不进去解锁。另外,现在很多主板的PCIe插槽卡扣设计在末端,理论上可以从侧面解开,但在实际空间狭窄的机箱里,这个"侧面"操作难度极高,不如老老实实按顺序来。
第四个重点是风冷风扇朝向。我之前在1.2节讲了机箱风道的大方向,安装时具体怎么定朝向也有讲究:前置风扇风向朝内(进冷风),后置和顶部风扇风向朝外(排热风)。每个风扇的外框侧面都会标注风向箭头,安装前看一眼,别装反。电源风扇尽量朝下安装(下置电源仓设计),从机箱底部进冷风,向后排出,这也是为什么电源仓底部要有防尘网。
全部装完后,我习惯先不上侧板,裸机状态下通电一次,确认所有风扇转动、显卡散热器风扇正常、水冷泵有工作声,然后再上侧板。这一步虽然笨,但能在早期排除大部分接线故障,省得闭箱后灯光不亮、风扇不转而拆半天。
3.2 BIOS与系统安装
BIOS设置这块,有两处必须修正。第一是开启 Resizable BAR(AMD叫SAM),中文一般叫"显存重映射"。开启后CPU可以直接访问显卡的全部显存,而不是按256MB小块取用。实测在部分推理负载下能提升3%~8%的性能。第二是把PCIe链路速度设为Gen4,一些主板默认是Auto,可能在开机自检时误判为Gen3,白白折半带宽。
装机这个环节,openrig 的做法和其他装机方案最大的不同在于它从头到尾都是按照"长时间满载不降频"这个目标来设计的。你可能跑游戏或渲染时对"瞬时帧率"敏感,但在AI场景里,你要的是"稳态性能",即10小时跑下来性能不衰减。这两者对散热和供电的要求完全不同。我在测试中跑了12小时连续推理任务,核心温度稳定在74℃左右,没有出现因过热导致的降频。
系统安装方面,Ubuntu Server 刻录U盘装完,第一步不要急着装驱动,先把系统更新跑完,apt update && apt upgrade -y,然后重启再装 CUDA 和驱动。如果直接装驱动再更新系统,内核一变,驱动模块可能编译失败,白折腾一趟。这个顺序问题促成了很多AI工作站系统装失败80%的原因。
3.3 环境配置与性能验证脚本
系统跑通后,我用了一套固定的环境配置与验证流程,也开放成了脚本形式,大体过程分享出来供参考。
首先是Python虚拟环境。记住一句话:永远不要污染系统Python。我用conda创建独立环境,Python版本选 3.10 或 3.11,不要追新(3.12以上目前有些深度学习库支持还不完美)。
接着装PyTorch时,务必用官方命令选择对应CUDA版本:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这里cu121对应CUDA 12.1,前面表格的版本组合里就是这套。装完后用一段Python代码验证GPU环境:
import torch print("CUDA版本:", torch.version.cuda) print("可用GPU数量:", torch.cuda.device_count()) for i in range(torch.cuda.device_count()): name = torch.cuda.get_device_name(i) total_mem = torch.cuda.get_device_properties(i).total_memory / 1024**3 print(f"GPU {i}: {name}, 显存 {total_mem:.1f}GB") # 实际计算测试 x = torch.randn(4096, 4096, device=f"cuda:{i}") y = torch.matmul(x, x) print("矩阵乘测试OK")这段脚本能同时确认驱动、CUDA运行时、PyTorch之间的兼容性,以及两张卡能否被正确识别。如果输出里看到两张卡的信息和CUDA版本号,基本说明软件栈已经通了。
之后装transformers、accelerate、datasets、deepspeed这些依赖,用pip一把梭。最后跑一个小的性能验证任务——加载一个小模型做两轮前向推理,确认GPU利用率能拉到90%以上,再跑一个1亿参数左右的微型训练任务,确认DDP双卡能协同工作。只要能过这两关,这台机器就进入了"堪用"状态。
4. 常见问题与排查技巧实录
装机到使用这几个月,我把 openrig 落地过程中踩过的坑和身边朋友复现时遇到的问题汇总一下,整理成一份速查表。这些坑大多数是文档和视频里不会明说的,属于"不踩不知道"的类型。
4.1 硬件相关坑
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 双卡满载时系统黑屏重启 | 电源瞬时功耗不足 | 确认电源单路12V输出能力,必要时降频或降压显卡 |
| 第二张卡插上后系统不亮 | 主板PCIe通道分配冲突 | 进BIOS检查PCIe槽位配置,确认是否与M.2硬盘共享通道 |
| GPU温度过高但风扇转速上不去 | 显卡风扇策略保守 | 用nvidia-smi -pl提高功耗上限,或用第三方工具自定义风扇曲线 |
| 内存四条插满只能跑2133MHz | 未开启XMP/EXPO | 进BIOS加载内存超频档案,注意DDR5四槽需降低频率换稳定 |
这里重点说说瞬时功耗黑屏重启这个现象。它的特点是负载起来几秒钟甚至几十秒内机器突然断电,不是蓝屏,是直接咔嚓一下断电。排查时你会发现日志里没有任何kernel panic。这种故障十有八九是电源扛不住瞬时电流冲击。我之前测试过几次,3090在负载切换瞬间的功耗可以达到标称TDP的1.5倍,两张卡同时触发时冲击电流高达30A以上。解决思路不是盲目加大电源瓦数,而是选择一个单路12V输出能力强、且带OCP保护适度的电源,给瞬时冲击留足空间。如果已经买了电源但瓦数确实不够,可以在NVIDIA驱动里把两张卡的功耗上限从350W限制到280W,代价是算力损失大约8%~10%,但至少不会随机断电。
4.2 软件环境相关坑
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
CUDA初始化报错CUDA_ERROR_OUT_OF_MEMORY但显存明明足够 | 有僵尸进程占着显存 | nvidia-smi查看进程PID,kill掉残留进程或用fuser -v /dev/nvidia*排查 |
| 训练中途突然OOM | 数据集加载没有走DataLoader的persistent_workers参数 | 用torch.utils.data.DataLoader并确保num_workers合理设置 |
| 推理加载模型时卡死 | 模型文件和内存映射区冲突 | 检查/etc/sysctl.conf的vm.max_map_count是否调大 |
| 双卡通信缓慢 | PCIe链路降速 | nvidia-smi查看卡片总线速率,确认是否运行在Gen4 x8 |
软件坑里最阴间的,是残留进程占用显存这个。有时候训练脚本崩溃了,但Python子进程没有完全退出,nvidia-smi里能看到一个CPU占用0%的孤儿进程,然而显存被占着不放。新任务一启动就报OOM,但你看显存总量却发现还空着不少。原因就是PyTorch CachingAllocator 把显存预分配了,即便进程不跑,内存块也没释放。排查办法是用fuser -v /dev/nvidia0找出占用设备文件的进程,手动清理。
还有个很实际的经验:跑长任务时,用nohup或tmux而不是直接SSH连终端跑。SSH断开时有些进程会收到SIGHUP信号直接挂掉,训练到一半前功尽弃。我用tmux建一个会话,进去跑训练,断网重连再session attach回去看进度,稳得很。
4.3 性能调优心得
除了问题排查,我再分享一些让这套机器跑得更顺的调优经验。
关于PyTorch进程设置:如果只跑单机双卡DDP,torchrun --nproc_per_node=2默认每个进程分成独立的CPU线程组,训练时CPU核心分配要预留足够。13900K的24个线程,两个GPU进程各用8个线程,还剩8个给系统预处理和数据加载,这样数据管线不会因为CPU吃紧而拖累GPU。
关于显存分配策略:遇到显存碎片化,可以在训练脚本开头设置torch.cuda.set_per_process_memory_fraction(0.95),限制单进程最多占95%显存,给系统预留缓冲,避免因为显存占满触发驱动层的报错。
关于NVLink与PCIe带宽:3090支持NVLink,但注意,这对卡的NVLink带宽约600GB/s,而主板走的是双PCIe 4.0 x8(单向约16GB/s)。如果训练任务里两张卡之间的通信特别频繁,NVLink能带来明显加速。不过NVLink桥需要单独购买,而且很多软件框架默认并不会使用它,需要额外设置环境变量NCCL_P2P_LEVEL=NVL才能让NCCL选择走NVLink通道。如果你主要跑DDP数据并行,大部分梯度和状态同步走NVLink会明显更快。实测在一个7B模型微调任务里,开启NVLink后训练速度提升了约18%,这个提升幅度取决于通信频率和批量大小。
关于显存碎片管理:跑长时间任务时,如果发现显存占用越来越碎片(训练中途OOM但显存显示还有几GB),可以用torch.cuda.empty_cache()在训练循环里定期清理缓存。这个操作不会影响已经分配的tensor,只是把PyTorch的缓存池里空闲内存释放回CUDA。
4.4 维护与升级路径建议
最后提一嘴维护。这套 openrig 方案我在使用中总结了一条维护周期:
- 每个月跑一次
nvidia-smi确认两张卡的驱动版本和温度曲线是否正常 - 每季度打开机箱清一次灰尘,双卡机器的吸灰速度远超你想象,前置防尘网和显卡散热鳍片是重灾区
- 每次升级CUDA或PyTorch前,先在虚拟环境里做好完整的依赖快照,出问题能秒回滚
升级路径方面,openrig 目前留了两个扩展方向:一个是把显卡升级到4090 24GB版本,双卡合计48GB显存但算力接近翻倍;另一个是加一张万兆网卡,为多机分布式训练做硬件预留。不过这两个动作的成本都不低,我建议先把现有双3090的显存和算力吃透再考虑。
整个 openrig 方案落地到现在,我个人最大的体会是——一套稳定可靠的AI工作站,难点不在某个部件的堆料上,而在所有环节的匹配和验证上。硬件的兼容性需要实测,软件栈的版本需要锁定,风道和供电需要计算,任何一个环节失衡,整台机器可能三天两头出各种诡异问题。这也是为什么 openrig 选择把所有踩坑经验和测试数据积累成开源文档的核心原因——让后来者不是从零开始,而是在一个相对成熟的路径上做自己的增量优化。
如果你正在规划自己的AI工作站,我的建议是:先顺着方案里的配置和逻辑跑通一套基础版本,再根据自己的实际负载做定向升级。比如你主要跑大模型推理,显存焦虑大于算力焦虑,那可以考虑换成两张24GB的卡甚至未来40GB的卡;如果你主要做数据并行训练,那算力更值钱,可以优先考虑高TDP版本。但无论怎么改,供电余量、散热冗余、软件栈锁定这三条底线,一定不要省。它们才是决定你的机器是"能用"还是"好用"的分水岭。