这些长文出自一个在 2× RX 7900 XT(gfx1100,RDNA3)上做 ROCm 与 vLLM 实测的仓库。 每篇文章的图都取自仓库自己会去校验的那份已入库数据,并在页面上标明哪些数字可以重算、哪些不能。
每个模型、每台机器一条线,画的都是它自己实测到的最快配置,而不是一个统一口径。Radeon 这边六条里 有四条出自同一场 campaign、同一套栈,彼此可以直接比;另外两条来自更晚的栈,因为在这两个模型上, 那场 campaign 已经不是这台机器的上限了。A100 那边有同样五个模型,是它自己一个下午跑完的一整场。 每条线都写明自己是哪一种。
图 1. 批量 1 的解码速率对上下文长度,横轴取对数。默认视图是 2× RX 7900 XT、 张量并行 2 上的所有模型;图上方的开关把问题掉个头,变成一个模型在每台机器上,颜色也跟着问题走: 一种视图里是模型,另一种里是卡。
--enforce-eager 给它换回 2.51 GiB 和一个 2 020 token 的池子。图 2. 同一个问题的另一半:图 1 是每台机器生成得多快,这张是它读提示词 读得多快。六个模型、五十二条线、十一台机器 —— 本仓库在 500 到 32 000 token 之间所有 chart-grade 的预填充阶梯。自七月起每场 campaign 都在 decode 旁边记了 prefill,却从没画过。颜色和线型沿用图 1。
T(S) = a + b·S + c·S² —— b 是算力,c 是 attention
随长度恶化得多快。悬停可看该条线拟合出的这一对系数。gemma-4-31B 和
Qwen3.8-27B 两条线最初测于 2026-08-29,当时两张卡中的一张训练在
PCIe 3.0 x8 而非 x16 —— 宿主机的开机日志记录了这个变化;客户机看不到,因为它的
sysfs 报的是卡内桥的链路。一次重启把宽度恢复了,两条臂在同一个容器、同样的 serve
参数下重新跑了一遍:31B 的 b 从 868.7 降到 722.6,Qwen3.8 从 846.2 降到
758.5。画出来的就是这两次。图 1 里这两个模型仍是 2026-08-29 的解码 —— 同一套配置,
而链路对解码最多只动 1%。其余五条 Radeon 线是 2026-08-24 的,在 x16 上。TRITON_ATTN 上 —— 本仓库直到 2026-08-30 都称之为「免费」——
在 32 K 处 decode 快 1.15×,prefill 却亏掉 1.45×。TILE_PREFILL 减半 —— 那正是本图所分解的二次项。所以它的 c 是这张
卡换了内核之后的结果,默认关着、也被排除在上面那组比值之外。它的 b 同样没被自己的
阶梯确定住:32 K 那一档来自第二台 VM,两台在那一档相差 4.61 %,换成由哪一台提供,
b 会动 29.9 %。这条曲线二次项主导的程度是这里独一份的 —— 32 K 处 224 s 对
97 s —— 所以线性项把不确定性全吸收了,就像 a 在每条线上那样。直到 2026-09-03,这台机器上每一条阶梯都停在 32 000 token,看上去像是机器的极限。其实是
campaign 的:每条臂都把 max_model_len 设成 33 000,而它的 KV 池装得下好几倍。下面两张图
是同样两个问题问到 128 000 —— 主角是这一对卡,跑当天为它裁的一条阶梯;同一天租用的那几台机器作为背景,
点一下就能叠上来。
图 3. 批量 1 的解码速率对上下文长度,500 到 128 000,横轴取对数。默认视图是 2× RX 7900 XT、张量并行 2,跑 2026-09-03 那条阶梯 —— 这台机器上第一批超过 32 000 的行; 图上方的开关换成一个模型在当天租用的每台机器上。控件和图 1 一样。
图 4. 预填充吞吐对提示词长度到 128 000,画的是与图 3 相同的那些线。
T(S) = a + b·S + c·S² 在这里是对整条阶梯拟合的;图下的注记写明在这一对卡的每条线上,
c·S² 从哪一点起超过 b·S,以及它在最深一档里占多少。
十一篇,按卡片上的日期从新到旧 —— 那是这篇文章的证据最后一次在这台机器上实测、 向上游上报、或者被重新核对的日子。标题下面一行是这篇文章原来的引子; 再下面一行是它确立了什么,用的是综述篇给它分类时的原话,所以两处不会把同一个结论说成两回事。
文章上的日期是证据取得的日期,不是撰写的日期。十一篇里有三篇记在七月最后一周,八篇记在八月最后一周。 机器本身是在 7 月 25、26、28 日和 8 月 1 日跑的,之后三周没有再跑——第二批基本上是在第一批搞错了的 条件下重测一遍。跨两个日期的条形,说明这篇文章的证据来自两次分开的测量,而不是中间一直在跑。
每一篇都是一份有日期的记录,不是长期有效的建议。这个仓库里最大的两个结论,
在测完之后就已经变了:一个 Ubuntu 内核回归在 7.0.0-30 里修掉了;
而一个 3.9× 到 5.6× 的加载提速,在把 page cache 真正控制住之后被撤回了。
所以每篇文章都以「此后发生的变化」一节收尾,那一节只往后追加,不回头改写。
每张图都带一个来源标记。可由仓库重算 表示
verify_doc_figures.py
会把这个值对照它的源文件检查一遍,两者不一致就非零退出——和守着仓库自身文档的是同一套检查。 原始输出未入库
表示这个数字抄自一次原始输出没有入库的运行, 无法重算。
这里的绝对速率是下限,不是这套硬件的跑分:这是一台 VFIO 虚拟机,两张卡之间没有 P2P, 走的是跨 die 的 PCIe 3.0,是刻意挑的最不利拓扑。形状搬得到别的机器上,绝对值是最坏情况。
源码、原始数据,以及产生它们的运行脚本: github.com/cadamcat/dual-radeon-vllm。 上游的报告与补丁在每篇文章里给出链接。