ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenRig:从零搭建可复现的AI工作站与大模型推理实战

OpenRig:从零搭建可复现的AI工作站与大模型推理实战 你发现没有最近两年大家折腾的焦点已经变了。过去聊配置问的是“这台机器能不能跑满 4K 游戏”现在很多人开口就是“这台机器能不能在家跑大模型”。我陆陆续续花了大半年用一套完全开放透明的装配思路搭起了一台专门跑 AI 计算的工作站并且把它整理成了一个有完整文档的项目代号就叫 OpenRig。OpenRig 不是我原创了什么神秘黑科技它的核心就三个字开放装配。每一件硬件的选型理由、每一个驱动的版本、每一条启动命令都记录在案任何人拿这套文档都能复现出一台差不多的机器。这篇文章我会从整体设计、硬件选型、系统部署、性能实测到踩坑记录全部拆开讲适合那些想要本地算力、又不想花五六万买品牌整机的朋友参考。1. OpenRig 整体设计先把目标写清楚再动手很多人装机失败不是预算不够而是需求没想清楚就买了顶级硬件。我在动手之前先把 OpenRig 要解决的事情一条条列出来再反推配置。这一节就说说我的设计思路和取舍逻辑。1.1 一个“开放装备”到底解决什么问题“rig”在硬件圈里本来就有“专用机器”的意思。你搭一台机器专门跑模拟赛车那叫 sim rig专门剪视频的机器叫 editing rig。OpenRig 就是把“开放式装配”和“专门用途工作站”两个概念结合到一起。过去买品牌工作站最难受的是配置单不透明。同一个型号里面用的主板、电源、散热方案可能悄悄换过你只能靠拆机或者跑压力测试去猜。自己攒机又怕点不亮、怕兼容鸡、怕散热翻车。OpenRig 的思路是把整台机器当做一个可维护的开源项目来管理机箱内布局、供电分配、风道设计、软件环境全部文档化。这样出问题时可以回滚换配件不会牵一发动全身机器哪天被你折腾坏了也能按文档一步步排查。它解决的不是“性能天花板”而是“可控性”和“可复现性”。对个人玩家来说这俩词比单纯跑分重要得多。1.2 需求反推配置不盲目堆料我给自己定的使用场景很明确本地跑 13B 到 32B 量级的大语言模型推理偶尔试试 70B 级模型批量跑数据清洗、文本向量化、小规模微调实验编译代码、打包 Docker 镜像顺便当家庭实验室的宿主机不需要频繁跑超大规模训练不做集群渲染。基于这些我的核心判断是显存比算力更重要内存容量比频率更重要PCIe 通道数比 CPU 核心数更重要。预算控制在三万多。我采用的分配原则是电源、硬盘、机箱全部买全新CPU、主板、内存根据行情选择全新或准系统显卡优先考虑正规渠道或靠谱二手。这是个人玩法的妥协不代表所有人都该这么干。如果你预算充足全部买全新当然更省心。最终配置参考如下部件选择方向理由CPUIntel Xeon W-2400 系列 / Core i7-14700K 级别核心数够用PCIe 通道数是关键指标主板工作站级 W790 或高端 Z790支持多卡、内存插槽多、BIOS 可调项丰富内存DDR5 ECC 128GB4 通道长时间跑运算内存纠错能减少稀奇古怪的崩溃GPU2 x RTX 4090 24GB单卡能跑 14B双卡能跑 32B性价比均衡电源1600W 钛金双卡满载加 CPU余量充足存储2TB NVMe 系统盘 8TB 数据盘系统和数据分开避免模型文件塞满系统盘散热塔式风冷 大机箱风道比水冷耐造维护成本低这套方案最关键的一个取舍是没有直接上 4 卡。四张 24GB 卡确实能跑 70B 模型但代价是主板价格翻倍、电源要求更高、机箱散热压力巨大而且日常待机功耗高得离谱。对个人玩家来说双卡是“投入产出比”最好的一档。1.3 兼容性优先再考虑性能OpenRig 在设计时坚持一个原则先把兼容性跑通再谈性能调优。所以我选硬件时有几个硬性要求显卡必须是 NVIDIA 阵营因为 CUDA 生态最成熟PyTorch、vLLM、TensorRT 这些工具链对 NVIDIA 的支持最好主板必须支持 PCIe 拆分Bifurcation否则双卡只能跑在 x8/x8 而不是 x8/x4 的尴尬模式下内存必须能用满 4 通道因为大模型加载权重时内存带宽会直接影响读取速度电源接口尽量避免转接线能直插就直插。事实也证明这套原则让我在后续部署软件时少踩了很多坑。如果你也打算按 OpenRig 的思路搭机器我建议先把“兼容性检查清单”跑完再下单不要急着买最贵的。2. 核心硬件选型我把预算花在哪几个部件上这一节详细说硬件。我不会给你写“买这个型号就对了”因为硬件市场行情变化太快。我更想把选型的判断方法教给你你拿着这套方法去电商平台找参数基本不会走偏。2.1 CPU、主板、内存的组合逻辑很多人装机先看 CPU 跑分但 AI 工作站恰恰不是这么选。大模型推理和批量计算主要压力在 GPU 上CPU 只要不掉链子就行。CPU 真正重要的参数是 PCIe 通道数、内存通道数和“对多卡的支持能力”。我选 Xeon W-2400 平台是因为它自带 64 条 PCIe 5.0 通道足够我用双卡 x16/x16还能留出通道给 NVMe 硬盘和万兆网卡。如果选普通消费级平台很多芯片组只能提供 x16x4 的组合第二张显卡会严重跑不满。主板方面一定要确认支持 PCIe Bifurcation。这个功能允许你把一条 x16 插槽拆成两个 x8或者在 BIOS 里手动分配带宽。没有这个功能双卡系统可能只能识别一张卡或者第二张卡工作在 x4 模式下性能损失非常大。内存选择上工作站级平台我更看重 ECC 纠错。个人电脑非 ECC 内存也能跑但长时间跑模型训练数据量大起来以后内存偶发的一位翻转真的会导致 loss 突然变成 NaN特别让人崩溃。DDR5 从单条 16GB 到 48GB 都有我建议插满四通道总容量 128GB 起步。频率不用追求最高DDR5-4800 到 5600 就足够带宽差异对 AI 场景影响不大。2.2 GPU 选型显存第一、算力第二、功耗第三显卡是 OpenRig 里最值得烧钱的部分也是最容易翻车的地方。先给一个最简单的估算方法7B 到 8B 模型FP16 权重需要约 16GB 显存INT4 量化后约 6GB 到 8GB32B 模型FP16 需要约 64GBINT4 量化后约 18GB 到 24GB70B 模型FP16 需要约 140GBINT4 量化后约 40GB。所以一张 24GB 显卡能舒服地跑 7B 到 14B 模型跑 32B 会非常紧两张 24GB 卡加起来 48GB跑 32B 的量化版就宽敞了。如果你想本地跑 70B 量化模型那就得准备两张 48GB 的卡或者四张 24GB 的卡。我最终选了 2 张 RTX 409024GB 显存生态兼容性最好性价比也不错。RTX 6000 Ada 这类 48GB 专业卡当然更省心一张卡就能跑 32B两张能跑 70B但单价是 4090 的两三倍看个人预算。功耗这块容易被忽略。RTX 4090 满载功耗 450W 左右两张就是 900W加上 CPU、主板、风扇整机满载轻松到 1400W。所以我选了 1600W 电源保证峰值负载时电源不用顶着上限跑。还有一个经验显卡电源线尽量独立走线不要用一分二的转接头12VHPWR 接口尤其要插到底听到“咔哒”一声才算数否则就会成为发热点。2.3 散热和噪音真正的隐藏预算散热不是“加个风扇”那么简单。OpenRig 这种双卡机器最怕的就是两张卡贴太近导致第二张卡吸第一张卡的尾气。我的做法是机箱选大尺寸全塔至少支持 8 个 12cm 风扇位显卡之间的 PCIe 插槽间隔至少留 3 槽让两卡之间有空间走风进风前脸三把 12cm 风扇顶部两把排风后部一把排风CPU 用大型塔式风冷不用一体水冷因为水冷泵一旦挂了直接歇菜风冷最多是温度高几度。温度目标也很明确GPU 核心满载不超过 85 摄氏度显存不超过 95 摄氏度CPU 不超过 90 摄氏度。如果长时间超跑先看风道是不是短路了再看风扇曲线是不是设成了静音模式。很多新手的机器温度高根本不是散热器不行而是机箱内电源线乱成一团把风道挡住了。噪音方面双卡满载时不可能完全静音。我的底线是待机时 40 分贝以下满载时 55 分贝以内。如果超过了优先检查是不是风扇转速被主板默认策略拉满。在 BIOS 里手动设置温控曲线比任何“降噪棉”都有效。3. 系统与软件栈从裸机到能跑模型硬件装好只是第一步接下来才是真正花时间的地方。系统部署这部分我的经验是优先选择生产环境最成熟、踩坑最少的方案而不是自己造轮子。3.1 操作系统选 Ubuntu LTS不要纠结我在 OpenRig 上装了 Ubuntu 22.04 LTS Server 版。为什么不用 WindowsWindows 上跑 CUDA 也能跑但大模型生态里的部署工具、Docker 容器、GPU 调度工具几乎都是优先适配 Linux 的。Ubuntu LTS 有五年长支持驱动源和内核更新都保守更适合当服务器。安装时有几个细节要注意如果主板默认开启 Secure Boot可能在装 NVIDIA 驱动时遇到签名问题。我的做法是在 BIOS 里暂时关闭 Secure Boot装完驱动后再打开然后用 MOK 方式签入驱动模块系统更新和内核更新要分开看待。大版本内核尽量不要随手升级否则容易把 NVIDIA 驱动模块弄失效我装的 Server 版不带桌面日常维护全部走 SSH远程终端里敲命令比图形界面高效得多。装完系统后第一件事是配置静态 IP方便局域网内随时 SSH。OpenRig 放在我书房的角落同一局域网里的笔记本输入ssh user192.168.x.x就能连上不需要额外装什么远程桌面。3.2 NVIDIA 驱动和 CUDA 环境顺序比版本更重要很多人一上来就装最新版 CUDA然后发现和 PyTorch 不兼容。OpenRig 的经验是先确定你要跑的框架要求什么 CUDA 版本再回头装驱动。我目前用的是 CUDA 12.4 的工具链配合 PyTorch 2.5 的预编译轮子兼容性非常成熟。具体步骤是# 系统更新 sudo apt update sudo apt upgrade -y # 安装编译基础 sudo apt install build-essential dkms -y # 安装 NVIDIA 驱动使用官方仓库 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt install nvidia-driver-550 -y # 重启后验证 nvidia-smi这里多说一句nvidia-smi输出里会显示驱动版本和 CUDA 版本那只是驱动支持的“最高 CUDA 版本”不代表你现在就能用这个 CUDA。实际跑模型时PyTorch 镜像或容器会自带 CUDA 运行库所以主机层不用装完整的 CUDA Toolkit除非你要自己编译 CUDA 扩展。OpenRig 里大部分模型服务都跑在 Docker 容器里所以主机只需要装好驱动和 NVIDIA Container Toolkit。这样做的好处是容器里的环境和主系统隔离你今天跑 PyTorch 项目明天跑 TensorRT 项目互相之间不会弄乱依赖。# 安装 NVIDIA Container Toolkit curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \ | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \ | sed s#deb https://#deb [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g \ | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker之后在 Docker 命令里加--gpus all容器就能看到 GPU 了。3.3 用容器封装 AI 服务顺便做成开机自启OpenRig 现在跑的模型服务基本都是 Docker 容器。这样可以随时换镜像、换版本不影响主机系统。我推荐的做法是给每个模型服务写一个 systemd unit让容器开机自动启动。下面是一个运行 vLLM 服务的最小示例[Unit] DescriptionvLLM OpenAI Compatible Server Requiresdocker.service Afterdocker.service [Service] ExecStartPre/usr/bin/docker pull vllm/vllm-openai:latest ExecStart/usr/bin/docker run --rm --name vllm-server \ --runtime nvidia --gpus all \ -v /models:/models \ -p 8000:8000 \ vllm/vllm-openai:latest \ --model /models/Qwen2.5-32B-Instruct-GPTQ-Int4 \ --tensor-parallel-size 2 \ --gpu-memory-utilization 0.92 \ --max-model-len 8192 ExecStop/usr/bin/docker stop vllm-server Restarton-failure RestartSec10 [Install] WantedBymulti-user.target启动命令sudo systemctl daemon-reload sudo systemctl enable vllm.service sudo systemctl start vllm.service journalctl -u vllm.service -f局域网里访问就很简单了另一台电脑直接用浏览器打开http://192.168.x.x:8000或者用脚本请求http://192.168.x.x:8000/v1/chat/completions。整个过程完全在局域网内完成不需要把服务暴露到公网。4. 实操记录用双卡跑一个 32B 模型理论说再多不如跑一次真实模型。这一节我会记录在 OpenRig 上部署 Qwen2.5-32B-Instruct 量化版模型的完整过程包括模型下载、vLLM 加载、性能测试、备用方案对比。4.1 模型选型和下载为什么选 32B 而不是 70B因为 OpenRig 只有 48GB 显存32B 的 INT4 量化版正好能放进双卡跑起来还留有余量做 KV Cache。Qwen2.5-32B-Instruct-GPTQ-Int4 是社区常用的量化文件兼容 vLLM。下载命令# 使用 huggingface-cli 下载模型到本地 huggingface-cli download Qwen/Qwen2.5-32B-Instruct-GPTQ-Int4 \ --local-dir /models/qwen2.5-32b-gptq-int4下载完成后检查目录里的文件是否完整主要看 safetensors 分片数量和 config.json 里的模型参数。如果网络中断导致部分文件损坏重新执行下载命令就好工具会自动断点续传。4.2 vLLM 部署和参数解读vLLM 是目前兼容 OpenAI API 的高吞吐推理框架非常适合当模型服务底座。部署时几个参数要理解清楚--tensor-parallel-size 2把模型切分到两张卡上并行推理这就是双卡的意义--gpu-memory-utilization 0.92允许模型使用 92% 的显存留一点余量给输入输出和临时张量--max-model-len 8192限制输入加输出的最大 token 数这个值越大占用显存越多。如果你通常处理短文本没必要拉到 32768否则显存会被 KV Cache 吃掉一大半。启动后等日志里出现“Starting vLLM server”类似的信息说明服务已经就绪。我用一个简单的 Python 脚本测性能import time from openai import OpenAI client OpenAI(base_urlhttp://127.0.0.1:8000/v1, api_keyEMPTY) prompt 请用 200 字以内介绍什么是大语言模型并说出两个典型应用场景。 messages [{role: user, content: prompt}] start time.time() resp client.chat.completions.create( model/models/qwen2.5-32b-gptq-int4, messagesmessages, max_tokens1024, temperature0.7, ) cost time.time() - start print(返回内容:, resp.choices[0].message.content) print(总耗时:, round(cost, 2), 秒)实测下来OpenRig 双卡跑这个模型输出速度大概在每秒 40 到 55 个 token具体取决于输入长度和并发请求。这个速度对个人使用已经很舒服聊天场景几乎感受不到卡顿。下面是不同 batch 下的参考数据并发请求数单请求平均输出速率总体吞吐145 tokens/s45 tokens/s430 tokens/s120 tokens/s818 tokens/s144 tokens/s可以看出并发上来以后总量提高但单请求延迟会变高。如果你的场景是 API 并发服务可以调大--max-num-seqs控制并发批处理数量如果是自己聊天用保持默认就够。4.3 单卡备选方案llama.cpp 也很香有时候我只想开一张卡让另一张卡休息OpenRig 还准备了 llama.cpp 的备选方案。llama.cpp 的 GGUF 量化文件在社区里下载非常方便CPU 和 GPU 混合加载部署门槛更低。在单卡 24GB 场景下我常用 Qwen2.5-32B-Instruct-Q4_K_M 量化版这是一个能在较低显存下运行的配置llama-cli -m /models/qwen2.5-32b-instruct-q4_k_m.gguf \ -ngl 99 \ -c 8192 \ -t 8 \ -p 你好介绍一下你自己-ngl 99表示尽可能把层加载到 GPU-t 8是 CPU 线程数。如果显存不够把层数降到-ngl 80这样模型的一部分会跑在 CPU 上速度会明显下降但至少能跑。我的经验是单卡聊天用 llama.cpp 足够吞吐虽然不如 vLLM胜在配置简单双卡并行的场景果断用 vLLM。如果你要跑 70B 模型或者做批量请求就老老实实上 vLLM它能更好地利用多卡显存。5. 问题排查与避坑清单硬件装机这件事最花时间的往往不是装机过程而是装完之后的各种排查。这一节把我在 OpenRig 上遇到过的典型问题、排查思路、操作要点整理出来希望能帮你省几天时间。5.1 新装机最容易翻车的五个问题问题一开机不亮风扇转但没画面大概率是内存没插好或者插错顺序。四条內存插满时先确认主板手册里的推荐顺序一般是先插 A2/B2再插 A1/B1。不要凭感觉乱插。另一个常见原因是 CPU 供电线没插满主板 CPU 供电有 8pin 和 4pin 两个接口有些板子只插 8pin 也能亮但高负载时不稳定。问题二NVIDIA 驱动安装失败多半是 Secure Boot 和 DKMS 的锅。建议先关闭 Secure Boot安装完驱动进系统确认nvidia-smi正常再重新打开 Secure Boot 并用 MOK 工具注册驱动签名。如果还是装不上执行sudo apt purge nvidia-*清干净再重来比在残留环境里反复试靠谱。问题三系统只识别一张显卡先查主板 BIOS 里的 PCIe Bifurcation 设置。既然上了双卡就在 BIOS 里把对应插槽的拆分方式从 Auto 改成 x8/x8或者手动指定。然后进系统执行lspci | grep NVIDIA看两张卡是不是都在。如果第二张卡一直处于“unused”状态检查它是不是没插到底或者供电线没接。问题四跑模型速度远低于预期先用nvidia-smi看显卡利用率再看 PCIe 链路速度。进入系统后执行sudo lspci -vvv | grep -A20 NVIDIA | grep LnkSta如果显示的速度是 2.5GT/s 或者链路宽度只有 x4说明显卡没有跑在高带宽模式。重新插紧显卡通常能解决。另一个隐藏原因是内存没跑在四通道上数据换入换出出现瓶颈。问题五机器睡眠后无法唤醒服务器和工作站压根不需要睡眠。在 BIOS 电源管理里关掉 ACPI Suspend或者直接不启用睡眠模式。OpenRig 本身是常开机器服务挂在 Docker 里CtrlC 都只能停容器不能让整机睡过去。5.2 几个只有踩过坑才会注意的细节有些细节在参数表上看不见但对实际体验影响很大。第一显卡电源线一定要买原厂或者规格达标的线材。GPU 满载时电流很大劣质线材发热发软轻则降频重则有安全隐患。12VHPWR 接口附近有温控点平时用完可以摸一下接口区域温度发现烫手就要注意。第二M.2 硬盘发热比很多人想象中严重。系统盘如果裸奔跑数据加载时温度可以飙到 70 摄氏度以上。我后来加了散热片温度降了十几度。这看起来和性能无关但长期高温确实会影响硬盘寿命。第三不要迷信“最新内核”。很多 AI 编译包在 Ubuntu 原始内核上跑得挺好一旦主线内核升级NVIDIA 驱动模块没跟上就会出现一堆编译错误。OpenRig 的原则是内核升级滞后一个月再说先让生产环境稳定。第四GPU 二手卡要注意显存健康度而不是只看核心能不能点亮。二手卡最容易出问题的是显存虚焊、高温掉核心。上机后先用压力测试跑一晚最好再扫一遍显存。正规渠道买卡省下的心思比差价值钱得多。我在实际折腾 OpenRig 的过程中最大的体会是“文档比跑分重要”。每换一个配件、每改一个驱动版本我都顺手把原因和结果记在项目文档里。现在机器出了问题翻文档基本十分钟内能定位。OpenRig 这个名字之所以带 open就是因为这份可复现性让整套方案永远处于可维护状态。最后再分享一个小技巧机器装好通电后别急着盖侧板先全速压力测试一小时顺手检查所有电源线的温度再盖板理线。这一步虽然多花十几分钟却能避免后面反复开箱的麻烦。
返回列表