[tilert] Add glm5.1-fp8-b200-tilert 1k1k+8k1k: vLLM prefill + TileRT decode PD-disaggregation / 新增 glm5.1-fp8-b200-tilert 1k1k+8k1k:vLLM prefill + TileRT decode PD 分离 - #2523
Open
CrimsonDump wants to merge 4 commits into
Conversation
CrimsonDump
force-pushed
the
glm5.1_fp8_8k1k_tilert
branch
2 times, most recently
from
August 7, 2026 06:50
0b5ea0e to
10cfea4
Compare
CrimsonDump
force-pushed
the
glm5.1_fp8_8k1k_tilert
branch
from
August 7, 2026 07:05
10cfea4 to
ef5276d
Compare
CrimsonDump
marked this pull request as ready for review
August 7, 2026 07:07
CrimsonDump
requested review from
Ankur-singh and
kedarpotdar-nv
as code owners
August 7, 2026 07:07
…ce list The guessed /lustre/fsw/models/GLM-5.1-FP8 does not exist: GLM-5.1 was retired in July and its weights were removed from that tree, which is root-owned and not writable by the runner account anyway. The checkpoint (zai-org/GLM-5.1-FP8, 142 shards) is now staged at /home/sa-shared/models/GLM-5.1-FP8 on the sa-shared-writable home Lustre mount, which is compute-visible at the same path. UCX_NET_DEVICES named mlx5_10/mlx5_11, which do not exist on these machines, and omitted mlx5_6/mlx5_7. ibv_devinfo inside a pyxis container on an allocated gpu-2 node reports exactly mlx5_0..mlx5_7, all PORT_ACTIVE with link_layer Ethernet. Left unpinned or pinned to absent devices, UCX can fall back to the management NIC and KV transfer collapses.
Contributor
|
Dispatched trusted sweep run for approved external revision 已为获批的外部提交 |
The tilert image bakes no NVIDIA_VISIBLE_DEVICES (vllm-openai does), and enroot's nvidia hook only injects the host driver when it is set — the decode container came up without libcuda and the weight converter died with 'Found no NVIDIA driver' on every b200-dgxc attempt (runs 31171126427 attempts 5-6, different nodes, prefill green both times). docker --gpus sets the variable implicitly, which is why the image works outside pyxis/enroot. Exported in run_role rather than appended to --export because NVIDIA_DRIVER_CAPABILITIES contains a comma, which srun's --export parsing splits on.
Contributor
|
Dispatched trusted sweep run for approved external revision 已为获批的外部提交 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a new framework
tilertfor GLM-5.1 FP8 on 8×B200, running prefill/decode disaggregated:stock vLLM prefill (
TileRTConnectoras akv_producer) hands KV over NIXL to a TileRTdecode_server, and tilert'spd_routerexposes an OpenAI-compatible endpoint.No vLLM fork or patch — the connector loads through vLLM's standard
kv_connector_module_path.TileRT decode serves bs=1 only, so this contributes a single point at
conc=1rather than aPareto curve. This is stated explicitly in the config and the changelog entry.
Results (validated on our own 2× 8×B200)
Threshold is 0.93; both pass. CI runs will of course have to reproduce this — these numbers are
from our own hardware and are provided for context only.
What this PR adds
configs/nvidia-master.yamlglm5.1-fp8-b200-tilertentry (multinode, disagg,kv-p2p-transfer: nixl, prefill/decode TP8,conc-list: [1], ISL 1k and 8k)perf-changelog.yamlrunners/launch_b200-dgxc.shtilertbranch that injects dgxc-specific settings and execs the thin entry pointbenchmarks/multi_node/glm5.1_fp8_b200_tilert-disagg.shbenchmarks/multi_node/tilert_utils/{submit,run_node,setup_deps}.shamd_utils/584 insertions, 0 deletions — no existing line is modified anywhere in the repo. The launcher
branch is a pure insertion that
execs before any dynamo code runs, so every dynamo path isbyte-for-byte unchanged.
Prefill and decode need different container images because
tilertpinstransformers==4.46.3while vLLM needs>=5.5.3— they cannot share one environment. Thishappens to match the P/D physical topology.
MTP is mandatory here rather than an optional speedup: the PD wire format carries 79 KV layers
(78 main + 1 MTP draft), so the handshake rejects a non-MTP prefill.
Checklist note — "must not patch the inference engine or serving stack"
Flagging this proactively.
tilert_utils/setup_deps.shrunspip install tilert==0.1.5.post2atcontainer start. We believe this is not a patch:
tilertpackage — it is a bare base environment, andruntime installation is the standard step in TileRT's own README.
--no-deps, so only the connector plugin lands. vLLMitself is untouched — no fork, no rebuilt engine wheel, no
site-packagesedits, nomonkey-patching. The connector is loaded through vLLM's documented
kv_connector_module_pathextension point.transformers>=5.4, which the official checkpoint'sTokenizersBackendrequires. That side runs tilert, not a vLLM/SGLang engine.benchmarks/multi_node/amd_utils/setup_deps.shinstalls dependencies atcontainer start the same way.
If reviewers still consider this in scope, we are happy to file a waiver under
docs/waiver/<PR_NUMBER>.md.Open questions (blocking — we would like guidance before requesting review)
1. GLM-5.1 is currently retired.
MODELS.md:143records GLM-5/GLM-5.1 as retired on2026-07-18 (#2276), and the review checklist requires verifying that a PR does not submit a
deprecated model. Should
glm5.1be restored to the active list first (a separate PR?), or shouldthis submission take the "additional reasoning" exception path?
2. CODEOWNER ownership.
.github/CODEOWNERSassignsconfigs/nvidia-master.yamlto@ankur-singh @kedarpotdar-nv @InferenceX/core. Our entry lands in that file because thebenchmark runs on B200, but we are the TileRT team, not NVIDIA. Should the current owners
sign off, or would you prefer a CODEOWNERS rule scoping the tilert paths to our team (mirroring
experimental/operatorx/ @hbarclay)?The dgxc-infrastructure questions are tracked separately in #2524 — weight path, ~700 GiB
storage for the converted 8-shard (and whether you could pre-stage it), lustre
flock, RDMAcapabilities under pyxis, UCX NIC pinning,
all-evalsfor a conc=1 entry, andb200-multinoderunner access. That issue also carries a measured timing table for planning.
概述
新增 framework
tilert,在 8×B200 上以 PD 分离方式跑 GLM-5.1 FP8:原版 vLLM 负责 prefill(
TileRTConnector作为kv_producer),KV 经 NIXL 交给 TileRTdecode_server,由 tilert 的pd_router对外提供 OpenAI 兼容端点。不 fork 也不 patch vLLM —— connector 通过 vLLM 标准的
kv_connector_module_path加载。TileRT 解码只支持 bs=1,因此本条目只贡献
conc=1的单个点,画不出 Pareto 曲线。这一点在config 和 changelog 条目里都已明确写出。
实测结果(我们自有的 2× 8×B200)
阈值 0.93,双双达标。CI 当然需要重新复现 —— 上述数字来自我们自己的机器,仅供参考。
本 PR 的内容
configs/nvidia-master.yamlglm5.1-fp8-b200-tilert条目(multinode、disagg、kv-p2p-transfer: nixl、prefill/decode 均 TP8、conc-list: [1]、ISL 1k 与 8k)perf-changelog.yamlrunners/launch_b200-dgxc.shtilert分支,注入 dgxc 专属配置后 exec 到薄入口benchmarks/multi_node/glm5.1_fp8_b200_tilert-disagg.shbenchmarks/multi_node/tilert_utils/{submit,run_node,setup_deps}.shamd_utils/584 行新增、0 行删除 —— 全仓没有修改任何既有行。launcher 分支是纯插入,且在所有 dynamo 代码
之前
exec走,因此每一条 dynamo 路径都逐字节未变。Prefill 与 decode 必须用不同镜像,因为
tilertpintransformers==4.46.3而 vLLM 需要>=5.5.3,装不进同一环境。这恰好与 P/D 的物理拓扑吻合。MTP 在这里是必需项而非可选加速:PD 线格式携带 79 个 KV 层(78 主 + 1 MTP draft),握手会拒绝
不开 MTP 的 prefill。
Checklist 说明 —— 关于「不得 patch 推理引擎或服务栈」
主动说明。
tilert_utils/setup_deps.sh在容器启动时执行pip install tilert==0.1.5.post2,我们认为这不构成 patch:
tilert包 —— 它是纯基础环境,运行时安装是 TileRT 官方 README 的标准步骤。
--no-deps安装,只落下 connector 插件。vLLM 本体未被触碰 —— 没有 fork、没有重编译的 engine wheel、没有改
site-packages、没有 monkey-patch。connector 通过 vLLM 文档化的kv_connector_module_path扩展点加载。transformers>=5.4,这是官方 checkpoint 的TokenizersBackend所需。该侧跑的是 tilert,不是 vLLM/SGLang 引擎。
benchmarks/multi_node/amd_utils/setup_deps.sh同样在容器启动时安装依赖。如果 reviewer 仍认为这在条款范围内,我们乐意在
docs/waiver/<PR_NUMBER>.md提交豁免说明。待确认的问题(阻塞项 —— 希望在请求正式评审前得到指引)
1. GLM-5.1 目前是 retired 状态。
MODELS.md:143记录 GLM-5/GLM-5.1 于 2026-07-18 退役(#2276),而评审 checklist 要求确认 PR 未提交已弃用的模型。是应该先把
glm5.1恢复到活跃列表(单独一个 PR?),还是本次提交走「额外说明」的例外路径?
2. CODEOWNER 归属。
.github/CODEOWNERS把configs/nvidia-master.yaml指派给@ankur-singh @kedarpotdar-nv @InferenceX/core。我们的条目因为跑在 B200 而落入该文件,但我们是TileRT 团队而非 NVIDIA。应该由现任 owner 签核,还是你们更希望新增一条 CODEOWNERS 规则、把 tilert
相关路径划给我们团队(参照
experimental/operatorx/ @hbarclay)?dgxc 基础设施方面的问题已单独记录在 #2524 —— 权重路径、转换后 8-shard 的约 700 GiB 存放
(以及你们能否直接预置)、lustre 的
flock、pyxis 下的 RDMA 能力、UCX 网卡绑定、conc=1 条目的all-evals,以及b200-multinoderunner 资源。该 issue 还附了一份实测时间表供排期参考。🤖 Generated with Claude Code