内参日期:2026-08-11
作者/来源:Bryan Shan / Daniel Nishball / Cam Quilic / Kimbo Chen / Alec Ibarra / Dylan Patel
原文:无

SemiAnalysis 研报:TileRT

同一篇 TileRT 分析的 PDF 版本,4278 字、六位作者署名完整,比网页版更适合精读和划线。与本区上一条是同一内容的两个载体,二轮精选时留一个即可。

导读

SemiAnalysis 付费研报。

核心观点

为什么超高交互性突然值钱了

GPU 的瓶颈不在带宽,在延迟

InferenceX 实测:TileRT 把 B200 推到另一个量级

TileRT 到底是什么:取消 kernel 作为执行单位

PD 分离:vLLM 留守 prefill,TileRT 只接管 decode

对比 Cerebras / Groq / SambaNova:软件能逼近 roofline,但抬不高它

成本账:同价位下 1.9 倍交互性

TileRT 为什么进展慢,以及下一步

概念网络

关键概念

交互性(tok/s/user)

context:全文的第一性指标。原文定义它"measures how quickly a single user receives tokens, the inverse of time per output token (TPOT)",并说它决定一次回答"feels snappy or sluggish"。TileRT 的全部跑分(340、494.2 tok/s/user)都是这个维度上的数字。

费曼一下:就是"你一个人看到字往外蹦的速度"。它和"这台机器一共能吐多少字"是两回事——后者是老板关心的产能,前者是你坐在屏幕前的体感。

吞吐(tok/s/GPU)

context:与交互性对立的另一极,"measures how many tokens the system produces in total across all users",很大程度上决定每 token 成本。TileRT 在 8k/1k 下是 160.4 tok/s/GPU,低于 GB300 并发 12 时的约 240。

费曼一下:一张 GPU 一秒总共产出多少字。它决定的是单价。交互性是给用户的体验,吞吐是给财务的账。

吞吐-交互性帕累托前沿

context:原文用公交车与赛车的比喻描述这条曲线,并给出一个量级化的实例:交互性从约 25 提到 260 tok/s/user,单卡吞吐从约 5,900 掉到 200,"roughly a 30× reduction in aggregate throughput for a 10× increase in per-user speed",且明言"There is no one-size-fits-all operating point"。

费曼一下:一条你只能沿着走、不能跳过去的曲线。想让一个人更快,就得放弃一大票人的产能,而且不是等比例交换——买 10 倍速度要付 30 倍产能。所有推理系统的设计都是在这条线上选一个点站着。

批大小 1(batch size 1)

context:TileRT 当前唯一支持的操作点,也是它跑分与代价的共同来源。原文写"TileRT as of publication also serves only one in-flight request per decode node, making this a deliberately specialized operating point rather than a general throughput configuration",并称它"not just a race car, but more like a private rocket ship with room for just one passenger"。

费曼一下:一次只伺候一个人。所有能被"摊薄"的固定成本此时都摊不掉了,于是那些平时看不见的开销全部浮到水面——这既是延迟问题最尖锐的地方,也是最能显出功夫的地方。

HBM 带宽 roofline

context:全文用来区分"理论上界"与"现实性能"的标尺。8 卡 B200 的 64 TB/s 对上 GLM-5 NVFP4 每 token 约 21 GB 活跃参数,推出 3,047 tok/s/user 的上界;单台 H200 的 38.4 TB/s 对上 MXFP8 每 token 42 GB,推出约 1,000 tok/s/user。原文强调"In practice, GPUs come nowhere close to this limit"。

费曼一下:按"每生成一个字要把多少数据从显存读一遍"算出来的速度天花板。它告诉你这台机器理论上能有多快;如果实际速度离它很远,说明问题不在管道粗细,而在别处。

kernel 启动与同步开销

context:GPU 在超高交互性下跑不动的真正原因。原文写传统引擎"launches and synchronizes many individual kernels, whose setup and teardown overhead becomes significant at ultra-high levels of interactivity",且"even with CUDA graphs, they dominate as token latency approaches the sub-millisecond TPOT range";同时每个 kernel 把半成品写回 HBM。

费曼一下:GPU 像一个必须被反复叫醒、每次只干一小件事的工人,每件事开头结尾都有固定手续。活儿大的时候手续可以忽略,活儿小到亚毫秒级时,手续本身就是全部时间。

持久化 Engine Kernel

context:TileRT 的核心机制。原文描述为"statically compiling the whole model ahead of time into a persistent Engine Kernel: the host launches once, execution stays resident on the GPU for the whole decode lifecycle, and most runtime orchestration moves into compile time"。

费曼一下:不再让 GPU 一件件接活儿,而是一次性把整条产线烧进去让它一直转。开工手续只办一次,之后所有工序在同一个"车间"里连续流动。

AoT 静态编译(ahead-of-time)

context:持久化 Engine Kernel 得以成立的前提,也是 TileRT 全部代价的来源。原文指出它带来"a tiny model catalog (currently GLM-5/5.1 and DeepSeek-V3.2), hard-pinned dependencies, and real engineering effort per new architecture",并列举必须提前定死的决策:tile 形状、流水线深度、缓冲驻留、warp group 划分、集合通信融合位置、GPU 专用角色。

费曼一下:把所有临场判断提前到出厂前做完。跑得快是因为现场不用再想,但代价是换个模型就得重新想一遍——这正是专用芯片一直被诟病的那种僵硬。

CUDA graph 与"取消 kernel 作为执行单位"的分野

context:原文用来界定 TileRT 独特性的关键对照。CUDA graph"captures the DAGs of kernel launches and memcpys once, then replays it with a single cudaGraphLaunch",但 kernel 仍是独立 kernel,边界仍有设备侧成本、片上状态在每个边界被抹掉。作者的判词是:CUDA graph 优化 kernel 的启动,TileRT 废除 kernel 这个执行单位。

费曼一下:一个是把一叠工单打包一次递进去,另一个是干脆不再有"工单"这个东西。前者省了递单子的时间,后者连每次交接时清空工作台的动作都不存在了。

tile 级任务调度与 warp 专业化

context:Engine Kernel 内部的组织方式。原文写不同 warp group 分别承担异步数据搬运、张量计算与通信重叠,原本串行的"load → barrier → compute → barrier"改为在 tile 粒度重叠,中间结果流经寄存器、共享内存和 L2 而非反复外溢到全局内存;每个 CTA"becomes a small heterogeneous factory rather than a uniform SIMT worker"。

费曼一下:把一群本来在做同样动作的工人拆成搬运工、加工工和传话工,让他们同时干、把半成品从手里直接递过去,而不是每人做完都放回仓库再取。

GPU 级角色专业化

context:把 warp 专业化的思路推到整卡粒度。原文指出稀疏路由、Top-K 选择、动态索引、长上下文注意力与 MTP"are not compute-heavy but depend on global information",让每个 rank 都跑一遍只会造成冗余与同步放大;于是 GLM-5.1 注意力层中 GPU 0 成为 Sparse Indexer worker,GPU 1 到 7 作为 MLA worker。

费曼一下:既然一张卡内部可以分工,八张卡之间当然也可以。让一张卡专门做那件"只需要一份、但所有人都要等它"的活儿,剩下七张专心算,比八张卡各算一遍同样的东西再互相等要快。

PD 分离(prefill-decode disaggregation)

context:TileRT 与既有生态共存的接口。prefill"is primarily compute-intensive"、decode"memory-intensive and highly sensitive to per-token latency",因此可以拆到不同节点;一个共享的 vLLM prefill 池可以同时喂 TileRT decode 池与常规 vLLM decode 池,通过 MultiConnector API 与 kv_transfer_params 标记完成分流。

费曼一下:把"读题"和"答题"拆成两班人马。读题要的是马力,答题要的是反应速度,那就让擅长各自那件事的机器去做,中间只把笔记本传过去。

数据流芯片(dataflow silicon)

context:TileRT 的参照系与竞争对象。Groq 用确定性、编译器编排的执行加大容量片上 SRAM;Cerebras CS-3 提供约 900,000 核、44 GB 片上 SRAM 与 21 PB/s 带宽;SambaNova 用可重构数据流单元。作者的判断是三者"share the same idea",但"encoded more of the solution in hardware"。

费曼一下:把模型的形状直接刻进硬件布局,让数据像在流水线上一样流过去,权重根本不用来回搬。TileRT 做的是同一件事的软件版——像不像是架构上的像,底子还是那台通用 GPU。

算力池的可替换性(fungibility)

context:作者认为比跑分更重要的结构性论点。GPU 池是"one liquid resource",速度层容量与其他容量的比例是软件调度决策、可按小时跟随需求;ASIC 机队则"the ratio is fixed in hardware the day the purchase order is signed",改变要花几个月重新上架布线。

费曼一下:同一批机器今天能当快车用、明天能当货车用,猜错了改个配置就行;而专用机队一旦买定,猜错就只能眼看着机器闲置,或者把最赚钱的客人往外推。

速度层(speed tier)

context:全文最锋利的重构。原文写 TileRT"reframes what most buyers need: not a speed machine, but a speed tier, provisioned dynamically out of the fleet they were going to own anyway",并以小米与 Z.ai 的部署为证——两家都没买新芯片,而是从既有集群里切出速度容量。

费曼一下:客户要的从来不是"一台最快的机器",而是"我这里能提供一档更快的服务"。前者是采购问题,后者是配置问题——一旦能用配置解决,采购这条路的说服力就塌了一半。

软件逼近 roofline 与硬件抬高 roofline

context:作者给这场竞争划定的边界。TileRT 用"enormous compiler effort convincing that machinery to impersonate a spatial pipeline",而"Native dataflow silicon never fights its own substrate";结论是 Cerebras 服务稠密 70B 的速度"no eight-GPU node can reach regardless of scheduling: software can approach the HBM roofline, but it cannot raise it"。

费曼一下:再好的调度也只能让你把已有的管子用满,不能把管子变粗。所以速度市场的最顶端不会消失,消失的是它下面那一大片"其实也不需要那么极致"的中间地带。

概念网络

graph TD
C1["超高交互性市场"]
C2["吞吐与交互性取舍曲线"]
C3["kernel 启动与同步开销"]
C4["HBM 带宽 roofline"]
C5["持久化 Engine Kernel"]
C6["AoT 静态编译"]
C7["tile 级调度与 warp 专业化"]
C8["GPU 级角色专业化"]
C9["PD 分离架构"]
C10["批大小 1"]
C11["数据流专用芯片"]
C12["GPU 池的可替换性"]
C13["速度层而非速度机器"]
C14["模型目录狭窄"]
C15["同价位 1.9 倍交互性"]
C1 -->|催生| C11
C1 -->|要求| C10
C10 -->|放大| C3
C3 -->|阻挡| C4
C4 -->|设上界| C5
C5 -->|取消| C3
C6 -->|支撑| C5
C7 -->|支撑| C5
C8 -->|支撑| C5
C5 -->|组合| C9
C9 -->|支撑| C13
C12 -->|支撑| C13
C13 ---|对立| C11
C6 -->|代价| C14
C5 -->|带来| C15
C15 -->|支撑| C13
C2 ---|张力| C15
C10 ---|张力| C2

费曼 x3

一个行业里最贵的东西,往往是被公认"结构上做不到"的那件事。超低延迟推理长期就是这样一件事:GPU 擅长吞吐、不擅长反应速度,这几乎是共识,也正是晶圆级和数据流芯片得以存在的理由。共识之所以危险,在于它常常把"当前实现的局限"错认成"硬件的局限"。

把账算一遍就知道差在哪儿。八卡 B200 的聚合显存带宽是 64 TB/s,批大小 1 下生成一个 token 只需要读约 21 GB 的活跃参数——按这个比例,理论上该跑到三千多 tok/s/user。现实里连零头都够不着。差距不在带宽,而在延迟:传统引擎要启动并同步成千上万个独立 kernel,每个都有开工与收工的手续,每个都把半成品写回显存。这些成本在常规速度下藏得很好,一旦每 token 的时间逼近亚毫秒,它们就是全部。更值得注意的是,显存带宽每代涨两三倍,内存延迟一点没改善——这条路上没有硬件红利可等。

TileRT 的做法之所以有意思,不是因为它把 kernel 启动优化得更好,而是因为它拒绝在那个层面竞争。CUDA graph 优化的是 kernel 的启动,TileRT 废除的是 kernel 这个执行单位:整张 decode 图被提前静态编译成一个常驻的引擎内核,host 只启动一次,执行在整个解码生命周期里驻留在卡上,运行时的编排被前移到编译期。这是一种典型的换维度解法——当你在既定框架里怎么优化都撞墙时,往往该问的是这个框架本身是不是可选项。

代价来得同样诚实。提前定死意味着模型目录只有寥寥几个、依赖被硬钉死、换个注意力机制大半调度就作废。TileRT 因此继承了专用芯片最大的弱点:它模仿了数据流的执行模型,连带也模仿了它的僵硬。软件可以逼近显存带宽的天花板,但抬不高它。

真正的转折不在跑分,而在部署形态。小米和 Z.ai 都没有为速度采购新硬件,而是从已有的加速器集群里切出一层速度容量,让 vLLM 保留预填充与调度,TileRT 在同一个端点背后接管解码。买家要的从来不是一台速度机器,而是一档速度服务。当这件事可以由一个配置文件供给时,为它单独买一批硅片的理由就塌掉了大半——不是因为专用硬件不够快,而是因为它猜错了就改不了。