2026年11月11日
hero-blog-cover
从全新 Ubuntu 到双卡服务跑通的完整部署教程:两张 RX 7900 XTX 跑 125B MoE,128K 首字延迟从 41.8s 腰斩至 22.9s,预填充 5,748 tok/s,256K 上下文满血通关。含硬件 BOM、引擎编译、Experts Pack、双卡配置与基准复现全流程。

双卡 7900 XTX 从零部署 125B 大模型:48GB 显存满血跑通 256K,首字延迟腰斩至 22.9 秒

测试平台:AMD Ryzen 7 3700X · 2 × RX 7900 XTX 24GB(PCIe 4.0 x8 + x8 实测)· 94GB DDR4 · Ubuntu 24.04.4 · ROCm 7.2.4
推理引擎:Strata RDNA3 fork(锁定 commit e1dad2dc,张量并行 + 双路预填充)
被测模型:Qwen 125B MoE · Swift IQ3_S(46.8GB)/ Unsloth UD-IQ4_XS(56GB)
本文性质:从全新 Ubuntu 到双卡服务跑通的完整部署教程,所有命令与配置均来自真机实测,照抄可复现

适合谁:想在消费级平台上私有化部署千亿模型、跑超长上下文 Agent 的开发者和装机玩家
预期耗时:全程约 2~4 小时(模型下载占大头;编译约 15 分钟)
前置技能:会用终端、能装 Ubuntu,仅此而已


先看结果:照着搭完,你能得到什么

社区长期流传”消费级显卡组双卡跑大模型是智商税”。这套方案用真机实测回答:只要引擎和并行架构选对,两张 7900 XTX 就是把同一个千亿模型的计算任务切碎了协同计算,1+1>1.8。

照本文部署完成后,你的机器可以达到(同平台对照,3 轮中位数,temp=0):

指标 单卡 双卡(本教程目标) 加速比
128K Prefill 吞吐 3,148.4 tok/s 5,748.5 tok/s 1.83x
128K 首字延迟 TTFT 41.752 s 22.917 s 1.82x
32K Decode 生成 88.6 tok/s 133.7 tok/s 1.51x
256K(261,632 tok)Prefill — * 5,766.9 tok/s —

*256K 档位未做单卡对照(不在本次测试范围),如需单卡 256K 数据请自行按第六步规程补测。

配套能力:256K 满血上下文大海捞针 100% 召回、全程 零 OOM 零崩溃、长输出扫描单次峰值 210.35 tok/s(推测解码高命中场景)。整套平台成本只是专业算力卡的零头。

128K 预填充吞吐:单卡 3,148 vs 双卡 5,748 tok/s

(图 1:128K 预填充吞吐实测,双卡较单卡提速 83%)

36K 输入下长输出扫描:单次峰值 210.35 tok/s

(图 2:长输出扫描峰值成绩,属推测解码高命中场景的特定峰值,非稳态速度)

下面开始动手,共六步 + 一份踩坑清单。


第一步:硬件选型与装机避坑(BOM 账本)

组双卡推理工作站,瓶颈不在 CPU,而在总线带宽、显存、内存与供电散热。

配件 推荐规格 关键避坑
显卡 2 × RX 7900 XTX 24GB(gfx1100) 24G 显存 + 384-bit 位宽,双卡组成 48GB 池
主板 支持 x8+x8 或双 x16 拆分(X570 / B650 / X670E) 最大踩坑点:第二张卡绝不能插在走芯片组(PCH)的 x4 槽上,跨卡通信带宽直接砍到 1/4。两张卡必须直连 CPU——x8+x8 够用(本机实测即 x8),x4 会毁掉双卡收益
CPU R7 3700X / 5700X / 7700X 级即可 不需要多路 U:98% 专家缓存命中率下,无 AVX-512 的老 3700X 照样跑出 5,700+ tok/s
内存 ≥ 96GB(64GB 起步) IQ3 峰值 73.91GB,IQ4 峰值 83.16GB——差 9GB 就是”流畅”和”OOM 边缘”的差别
电源 1000~1200W 金牌 双卡满载 2×303W。每张卡的 8-pin 必须独立直连电源,严禁一分二转接线
散热 3 槽厚卡双插机箱或开放测试架 双卡紧贴上卡会被烤到降频,卡间留 1~2 槽空隙或加进风扇

双 7900 XTX 实装:两张暗黑犬并排,中间保留散热间隙

(图 3:双卡实装俯拍——两张 RX 7900 XTX 各占一条 PCIe 4.0 插槽,卡间保留散热间隙;实拍画面可见上卡 RADEON 标识)


第二步:系统安装与双卡环境验证

推荐 Ubuntu 24.04 LTS(22.04 亦可),内核自带 amdgpu 驱动。装好系统先验证双卡状态,这一步不对,后面全白搭:

# 确认两张 7900 XTX 都被识别
lspci | grep -i vga
# 期望看到两条 RX 7900 XTX 记录

# 逐张验证 PCIe 链路速率(地址换成你自己的)
sudo lspci -vv -s 03:00.0 | grep LnkSta
sudo lspci -vv -s 0c:00.0 | grep LnkSta
# 关键行:LnkSta: Speed 16GT/s, Width x16 或 x8
# x8+x8 拆分完全可接受(本机实测即为 GEN 4@8x,不影响张量并行)
# 若显示 Width x4 或 Speed 8GT/s —— 查 BIOS 是否开启 x8+x8 拆分,别往下走

# 安装监控工具,确认双卡在位
sudo apt install -y rocm-smi build-essential git
rocm-smi   # 应列出 GPU0、GPU1 两张卡

ROCm 说明:本教程的引擎编译脚本会自动在虚拟环境里安装所需 ROCm 组件,无需提前手动装。如果你的发行版需要手动安装,按 AMD 官方源装 rocm-hip-sdk rocm-smi hipblaslt 后,记得 sudo usermod -a -G render,video $USER 并重启。


第三步:编译 Strata RDNA3 引擎

先划清两条路径:上游官方 Strata(Niko1221/Strata)的 ./setup.sh 也能用双卡,但默认是流水线切分——跑不出本教程的张量并行成绩。要复现本文数字,必须用 RDNA3 深度优化 fork:

mkdir -p ~/AI/strata-rdna3-test && cd ~/AI/strata-rdna3-test

# 克隆 fork 并检出本期实测锁定的 commit(复现成绩的关键)
git clone --branch rdna3 https://github.com/nicejunjie/Strata-rdna3.git fork
cd fork
git checkout e1dad2dc     # ep16 实测锁定提交(含 AVX2-only 兼容修复,3700X 实测可用)

# 一键编译:固定版本工具链(ROCm / rocWMMA / llama.cpp)+ gfx1100 引擎
D="$HOME/AI/strata-rdna3-test/data"
mkdir -p "$D"
./setup.sh --setup --build --backend hip --family qwen --model IQ3_S \
  --vision cpu --data-dir "$D" --no-start --yes

# 验证编译产物:backend 必须是 hip,archs 必须包含 gfx1100
cat engine/BUILD.json

编译约 10~20 分钟,仅需一次。


第四步:下载模型与生成 Experts Pack

跑千亿 MoE 的精髓:把专家权重打包成针对 RDNA3 高速吞吐的专用二进制包。

模型二选一:

模型 打包后体积 适合 内存峰值
ukisai/Swift-1.5-Qwen3.8-Flash-Next-GSQ-RCO-GGUF(IQ3_S)推荐 46.8GB 日常对话、生成速度优先 73.91GB
Qwen3.8-Flash-Next-UD-IQ4_XS(Unsloth,3 分片) 56GB 代码、数学等高精度场景 83.16GB
cd ~/AI/strata-rdna3-test/fork
D="$HOME/AI/strata-rdna3-test/data"

# 从 HuggingFace 或国内镜像 hf-mirror.com 下载 IQ3_S 两个分片
# (分片体积以下载页面实际为准;断点续传,中断后重跑同一命令即可)
# 存放到 $D/models/swift-IQ3_S/ 目录,两个分片缺一不可

# 生成 Experts Pack(约 46.8GB experts.bin)
export STRATA_GGUF_PY="$PWD/third_party/llama.cpp/gguf-py"
.venv/bin/python tools/iq_pack.py \
  --gguf "$D/models/swift-IQ3_S/Swift-Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf" \
  --out "$D/packs/swift-iq3_s" --experts-bin

# 确认产物
ls -lh "$D/packs/swift-iq3_s/experts.bin"

第五步:双卡配置与一键启动(核心)

先用一句话讲清这套配置在干什么:--tensor-parallel 2 把模型参数矩阵切碎、两张卡各算一半,每层通过 PCIe 交换一次部分结果——这是”一道数学题两人分工”,不是”开两个窗口各跑各的”。长文本预填充再叠加 DP/TP 双路并行,128K Prefill 才能从 3,148 冲到 5,748 tok/s。

配置文件 rdna3/configs/swift-iq3-2gpu.json(关键字段已注释):

{
 "exe": "@STRATA@/engine/strata",
 "cwd": "@STRATA@",
 "tokenizer": "@DATA@/packs/swift-iq3_s/tokenizer",
 "model_name": "swift-iq3",
 "backend": "hip",
 "gpu": [0, 1],
 "layer_split": "auto",
 "host": "0.0.0.0",
 "port": 18088,
 "open_browser": false,
 "args": [
  "--pack",           "@DATA@/packs/swift-iq3_s",        // 第四步生成的专家包
  "--native",         "@DATA@/models/swift-IQ3_S/Swift-Qwen3.8-Flash-Next-GSQ-RCO-IQ3_S-00001-of-00002.gguf",
  "--tensor-parallel", "2",                              // 双卡张量并行(核心)
  "--prefill",        "auto",
  "--max-context",    "262144",                          // 要跑 256K 必须给到 262144
  "--kv",             "int8",                            // KV 缓存 8-bit:48GB 塞下 256K 的必备开关
  "--kv-resident",    "32768",                           // 前 32K 常驻显存,超出部分 pinned 内存流式置换
  "--expert-cache",   "auto",                            // 专家缓存自动填满双卡显存(48GB 吃满的关键)
  "--vram-reserve-mib", "512",
  "--pool-workers",   "8",                               // 按 CPU 核数设:3700X 为 8
  "--mtp-q4",         "all",
  "--spec",           "4",                               // 推测解码窗口
  "--spec-min-p",     "0.5"
 ],
 "env": {
  "STRATA_HIPBLASLT_TUNING": "@STRATA@/tools/hip/gfx1100-hipblaslt-100202.txt",
  "STRATA_DP_PREFILL": "1",      // 数据并行预填充:长文档分段同时灌入两卡
  "STRATA_TP_PREFILL": "1",      // 张量并行预填充:预填充阶段也切分
  "STRATA_HIP_WMMA":   "1",      // RDNA3 WMMA 矩阵核加速
  "STRATA_SELECT_WMMA": "1",
  "STRATA_PEER_TRANSPORT": "host",  // 跨卡走 P2P host 通道(无 NVLink 平台的正确姿势)
  "GPU_MAX_HW_QUEUES": "8"       // 保持双卡满载(以 fork 文档 RDNA3_SETTINGS.md 为准)
 }
}

三个开关(--tensor-parallel 2 + STRATA_DP_PREFILL + STRATA_TP_PREFILL)缺一不可:只开 TP 不开双路预填充,128K Prefill 只能回到 3,148 tok/s 的水平。

启动:

cd ~/AI/strata-rdna3-test/fork
D="$HOME/AI/strata-rdna3-test/data"
.venv/bin/python rdna3/run.py swift-iq3-2gpu --data "$D" --gpus 0,1

约 48 秒加载完成后,服务在 http://127.0.0.1:18088/v1 提供 OpenAI 兼容 API。

验证双卡真的在协同(新手最容易翻车的检查点):

# 另开终端:双卡显存都应涨到 23GB+,功耗同步拉到 250~300W
watch -n 1 rocm-smi

# 快速问答测试
curl http://127.0.0.1:18088/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "swift-iq3", "messages": [{"role": "user", "content": "用Python写一段并行质数查找代码"}], "temperature": 0.6, "max_tokens": 1024}'

只有一张卡在动 = 双卡没生效,回头检查 --gpus 0,1 和 TP 开关。

双卡 nvtop 满载实测:GPU0 304W / GPU1 303W,显存 23.94 + 23.96 GiB,双卡 100% 占用

(图 4:部署成功后的 nvtop 实时监控——双卡功耗同步 303~304W、显存各吃掉 23.94/23.96 GiB、GPU 利用率双 100%,证明模型确实被切成两半分摊到两张卡上)


第六步:跑基准,验证部署达标

部署完成 ≠ 部署正确。按本规程复测,与目标成绩对照:

复现规程(与本期视频完全一致,规程不同数字没有可比性):

  • 每档上下文:1 轮预热 + 3 轮正式,取中位数
  • 固定 temp=0、seed=42、单次输出 256 tokens、关闭 prompt cache
  • 档位递进:32K → 128K → 256K(261,632 tokens)
  • 也可以直接跑官方 ./bench.sh 出自己机器的报告

目标对照表(3700X + 94GB DDR4 平台实测):

档位 指标 双卡目标值
32K Prefill / Decode / TTFT 5,275.6 tok/s / 133.7 tok/s / 6.25s
128K Prefill / Decode / TTFT 5,748.5 tok/s / 133.7 tok/s / 22.9s
256K Prefill / Decode / TTFT 5,766.9 tok/s / 119.3 tok/s / 45.3s
256K 大海捞针(首/中/尾三秘钥) 100% 召回
256K 稳定性 3 轮 0 OOM 0 报错

Decode 持续生成速度走势

(图 5:Decode 速度走势——各档位持续吐字稳定性)

接近 128K 输入下仍维持 161.68 tok/s

(图 6:极端长文本输出测试,102K/128K 档位成绩表)

成绩边界声明(防杠):Prefill 对 CPU/内存平台敏感——fork 作者在 9950X3D2 + DDR5 平台可跑出 6,700+ tok/s,本表为 3700X + DDR4 平台成绩。你的复现数字在 ±20% 内都属正常;加速比(1.83x)比绝对值更有参考意义。另外别拿冷启动成绩对比:48 秒加载 + 1 轮预热之后才是真实性能。

换高精度版:把第四步换成 IQ4 模型重打专家包、配置照抄改路径即可。128K 下 IQ4 Prefill 反而更快(5,881.3 tok/s、TTFT 22.4s),代价是 Decode 降到 114 tok/s、内存峰值 83GB。选型一句话:求速度选 IQ3,求代码/数学精度选 IQ4。


踩坑清单(每条都对应真实物理约束,部署失败先查这里)

  1. PCIe 拓扑第一杀手:第二张卡插了芯片组 x4 槽 → 跨卡带宽砍到 1/4,双卡速度和单卡差不多。用第一步的 lspci 命令检查,BIOS 开 x8+x8
  2. 128K 以上必须 --kv int8:不加的话 KV Cache 显存暴涨直接 OOM 崩溃
  3. 内存不足会被系统 OOM Killer 强杀:free -h 确认可用物理内存;不足 64GB 时预挂 NVMe Swap 兜底:sudo fallocate -l 64G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
  4. 显存余量为零是常态:--expert-cache auto 会把两卡填到 99.8%~99.9%,推理机别开桌面浏览器抢显存
  5. 冷启动成绩不算数:48 秒加载 + 预热之后才测
  6. IQ4 比 IQ3 多吃 9GB 内存:83.16GB vs 73.91GB
  7. max-context 要够:跑 256K 前确认 ≥ 262144,否则 26 万 token 塞不进去
  8. 散热别省钱:双卡 303W 持续满载,风道不足降频后吞吐肉眼可见地飘

总结

  • 协同是真的:TP=2 + 双路预填充下,128K 预填充提速 83%、TTFT 腰斩省近 20 秒——诚实地说不到 2.0x 无损翻倍(跨卡 AllReduce 通信开销是物理天花板),但远超”各跑各的”
  • 老平台扛得住:3700X 无 AVX-512 也没关系,98% 专家缓存命中率把内存带宽瓶颈旁路掉了
  • 复现要锁定 commit:e1dad2dc,跨版本对比无意义
  • 测试满意后建议 systemd 守护(崩溃自动重启、给足冷启动超时),完整 unit 模板与构建补丁包可通过文末方式获取

本文配有完整真机实测视频(4 分 42 秒),实拍双卡满载运行与全部测试过程。
引擎构建补丁、systemd 模板与原始日志已打包,欢迎联系获取。

扫码交流

(图 7:文末名片二维码——与视频 S18 结尾一致)


数据来源:Strata RDNA3 双卡实测报告(Issue #108)、IQ4 补测报告(Issue #110)、final_report.json / iq4_report.json 全量基准、suite.log 运行日志。所有数字均为真机实测,欢迎按本文规程复现验证。

About The Author

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注