top of page

一个 210 亿参数 Transformer 无需训练即可运行 Doom 渲染器

Cursor Horizon 如今有了一个不同寻常的技术参照:一个无需训练、却能渲染 Doom 的 210 亿参数 transformer。开发者 Rob Porter 将游戏的渲染算法直接编译进 transformer 权重中。这一成果挑战了“大型 transformer 的行为都源于数据学习”的假设。

该模型并不预测一帧 Doom 画面应当长什么样。它执行的是一套经过转换的渲染流程,每次生成一个 token。提示词提供场景几何信息和相机状态,输出则包含中间计算结果与绘制指令,由一个小型宿主程序将其转换为像素。

这一差异使该项目区别于那些基于游戏视频训练的生成式 Doom 实验,也构成了这则 Cursor Horizon 故事的核心张力。Transformer 推理已经成为传统软件的一个奇特运行目标,而生成出的程序却比原版游戏慢得多。

公开产物让这一说法具备了罕见的可检验性。Porter 发布了编译器、渲染器图、检查点、提示词、解码工具和参考实现。不过,大多数性能与准确性结果仍来自项目自身测试,而非独立复现。

Doom 的渲染器变成了标准 Transformer 检查点

关键变化不在于 AI 模型生成了一张 Doom 图像,而在于普通渲染代码变成了模型的权重。

Porter 于 2026 年 8 月 13 日发布该项目,随后发表了一篇详细的社区帖子。他的技术文章介绍了一款名为 torchwright 的编译器。它可将计算图转换为 decoder-only transformer 的注意力层和前馈层权重。

其中没有优化循环、训练语料库、梯度更新,也没有对 Doom 游戏过程进行学习式近似。编译器根据 Python 编写的图计算检查点权重。这些权重编码了渲染器在执行期间所需的操作。

生成的产物采用标准 Phi3ForCausalLM 架构。这一点很重要,因为 Hugging Face Transformers 已经知道如何加载和执行它。用户无需使用自定义模型代码,也无需启用可能存在安全风险的 trust_remote_code=True 设置。

旗舰检查点包含 38 层 transformer,约有 210 亿个参数。其 fp32 权重分片占用 85.87 GB。一个较小的 80×50 版本使用 70 层,fp32 分片大小为 34.09 GB。

较大的检查点接收一个代表场景的 3,614-token 提示词,随后在完成一帧画面前生成 53,747 个 token。合并后的序列长度达到 57,361 个 token。

其中只有一部分输出直接绘制像素。其余 token 代表渲染器操作、计算值、控制流和临时状态。它们的功能更接近执行轨迹,而非自然语言。

已发布的检查点包含模型配置、tokenizer、提示词、调色板和解码工具。其 tokenizer 为操作和值使用可读词汇,因此无需解码任意 token ID,也能理解部分执行轨迹。

宿主程序承担的工作被刻意限制在很小范围内:它记住光标位置,从 Doom 调色板中选择颜色,并绘制所请求的像素段。它不计算可见性、几何关系、墙体排序、纹理坐标或遮挡关系。

五条输出命令控制绘制。其中两条设置光标坐标,两条决定光标水平或垂直移动,第五条则以指定颜色和宽度绘制一段像素。

这一边界是项目可信度的核心。若模型只是让外部软件渲染 Doom,项目的意义会小得多。这里,据称检查点完成了与视角相关的渲染工作,而宿主程序只机械地执行其绘制指令。

该检查点并非完整的 Doom 游戏。它不实现游戏玩法、敌人、通用精灵、声音或玩家控制。它实现的是受限版本的渲染器,面向使用固定纹理库的场景。

完整输出采用 Doom 的 320×200 显示分辨率和低细节模式。渲染器计算 160 列,并将每列显示为两个像素宽。九种墙体纹理和六种地板或天花板纹理被编译进模型。

玩家位置、视角方向、地图几何信息、扇区信息及二叉空间分割树均通过提示词输入。二叉空间分割树(BSP 树)会对地图进行划分,以便高效安排可见性顺序。

只要场景仍处于已编译的纹理与配置限制内,这些输入就可以改变,而无需重建检查点。加入不受支持的纹理则需要重新编译。

这正是 Cursor Horizon 这一叙事框架值得关注的原因。该项目将 transformer 检查点视作一种可执行的软件包格式,而不是存储学习知识的载体。它的参数是由编译器生成的程序材料。

为什么 Cursor Horizon 挑战了“训练优先”模式

Torwright 将 transformer 架构变成确定性的计算基底,尽管它并不能实际取代传统处理器。

大多数大型语言模型通过训练获得行为。工程师选择一种架构,将其暴露于数据,衡量误差,并通过梯度下降调整权重。最终模型包含从这些示例中学到的模式。

Torwright 颠倒了这一流程。开发者定义计算图,编译器则构建可执行这些操作的权重。完成后的 transformer 仍会逐个预测 token,但其预测过程遵循的是预先设计的程序。

这种区别类似于从示例中学习乘法,与运行一个乘法电路之间的差别。两者都可能得到相同答案,但其内部来源、可靠性边界和失效模式不同。

开源的torchwright 编译器支持线性操作、基于注意力的查找、比较、选择和乘法。它会将图节点调度到 transformer 各层,并把计算值存储在残差流中。

残差流是贯穿 transformer 各层、持续演化的向量。Torchwright 会将该向量的一部分分配给程序值。当一个值不再需要时,另一个操作会将其抵消并复用其空间。

在这种安排中,注意力的作用不止于语义关联。它通过匹配结构化字段,从更早的 token 中检索值。这些字段可以表示节点标识符、树深度、操作类型或屏幕坐标。

前馈层实现非线性操作。Torchwright 提供基于 ReLU 或 SwiGLU 激活函数构建的操作库。编译器会将每项图操作转换为特定的前馈权重行或注意力头。

这种方法有学术先例。RASP 引入了一种编程语言,其原语可映射至 transformer 操作。DeepMind 的Tracr 研究将 RASP 程序编译为 transformer 权重,用于可解释性实验。

Torwright 将这一方向扩展到常规 Python 计算图和标准 Phi-3 输出格式。目标格式意义重大,因为现有推理软件无需理解其不同寻常的来源,就能加载结果。

这种兼容性带来了一种耐人寻味的可能性。一个标准检查点可能包含学习得到的统计行为、刻意编译的逻辑,或两者的混合。仅凭其文件结构,无法判断其权重是通过哪种路径产生的。

对开发者而言,这改变了理解模型产物的方式。参数量通常是学习能力和推理成本的粗略信号。在这里,210 亿参数主要反映了一种极其低效的编译目标。

这一数字并不意味着该检查点拥有广泛的语言知识。它不能回答一般问题,也不能即兴生成超出其支持渲染器范围的 Doom 场景。其权重实现的是受约束的程序,而不是开放式语言模型。

因此,Cursor Horizon 捕捉到了一个更广泛的边界问题。Transformer 生态系统如今提供加载器、加速器、分片、部署工具和标准化模型类。编译器可以利用这些基础设施运行从未训练过的软件。

这并不意味着 transformer 比 CPU 更可取。它表明,其执行机制足够通用,能够承载显式构建的算法。通用性、效率与实用性仍是彼此独立的问题。

该项目最强的贡献在于概念层面,而非商业价值。它让架构与训练之间的区别变得可见。Transformer 是一种数学结构;LLM 则是通过在语言上训练这种结构所构建的一种常见应用。

Porter 的模型移除了学习过程,却保留了熟悉的推理行为。它接收 token,应用注意力层和前馈层,选择下一个 token,然后重复。即使内部计算并不寻常,这个循环看起来依然普通。

这一特性也提供了一个受控的研究环境。由于每一项权重都源自已知的图操作,研究人员可以追踪某个值出现的原因。这与解释内部特征由训练涌现的模型形成鲜明对比。

不过,Doom 检查点远大于典型的可解释性测试模型。其规模证明,经编译的构造可以抵达现代模型基础设施的层级;同时也使检查与独立复现的成本变得高昂。

Transformer 逐 Token 执行 Doom

该渲染器的工作方式,是将 Doom 可变的执行状态转换为注意力机制可搜索的追加式 token 历史。

Doom 的渲染器从近处区域到远处区域遍历 BSP 树。它将墙体投影到屏幕列上,跟踪哪些区域已被覆盖,并跳过被较近表面遮挡的几何体。

传统代码会更新内存中的变量和数据结构。自回归生成无法修改此前的 token;每个新 token 都会加入一条追加式序列,并始终可供后续 transformer 计算使用。

该编译渲染器通过将每次状态变化表示为新的 token 来解决这一不匹配。后续操作利用注意力查找最新的相关记录,或组合多个较早的记录。

递归树遍历通常依赖调用栈。模型则在向下遍历时发出面包屑记录。当它到达叶节点后,注意力会检索相应的面包屑,并确定执行应从何处恢复。

墙体覆盖需要另一种策略。Doom 将被覆盖的水平范围存储在名为 solidsegs 的可变结构中。这些范围帮助它避免绘制已被较近几何体遮挡的墙体。

Transformer 无法合并或覆盖先前的范围记录。它会追加每个新覆盖的范围。后续操作查询累积历史,以确定某列是否已被覆盖,以及覆盖区间在何处结束。

地板和天花板采用相关模式。墙体处理阶段会记录每个屏幕列的可见边界。后续处理阶段检索这些记录,并发出水平绘制段。

结果是一串同时承担多种角色的词元序列:它既是指令流、工作记忆、调用栈、状态日志,也是输出协议。注意力机制提供了连接这些角色的查找机制。

较长的计算同样被拆分到生成出的词元之间。Transformer 的每一层在将其残差流传递下去之前,只能完成有限量的顺序工作。更长的依赖链则需要更多层。

渲染器有时会输出一个中间结果,并在之后的解码步骤中读取它。这种策略会消耗更多词元,以降低每一步所需的计算深度。

墙面投影说明了这种取舍。模型计算世界角度,将其转换为相对于相机的角度,再将端点投影到屏幕上。中间角度词元将这些相互依赖的阶段分隔开来。

这一设计使旗舰模型保持在 38 层。它也促成了渲染一帧所需的 53,747 词元 rollout。每增加一次中间交接,都意味着额外进行一次完整的模型前向计算。

renderer source 展示了这条流程。各模块负责处理场景输入、遍历、投影、光栅化、纹理和输出协议。另有一个独立的 Python 渲染器作为正确性参考。

模型以贪婪方式生成词元,也就是说,它不进行采样,而是选择得分最高的下一个词元。随机性并不合适,因为该 checkpoint 的目标是执行确定性逻辑。

Cursor Horizon 这个关键词在这里可作为模型状态边界的隐喻。它的输出光标在渲染图像上推进,而其注意力视界则向后延伸至执行历史之中。

不过,这一机制的含义并不只是诗意的比喻。每个新操作都可以检查之前的场景事实和已生成记录。整个过程不需要对话模型所具备的语义灵活性。

提示词充当只读记忆。其中包含与视角无关的地图事实,以及玩家的位置和朝向。生成部分则作为仅追加的工作记忆,用于处理与视角相关的计算。

随后,宿主程序会利用 Doom 的 256 色调色板解释绘图词元。它移动软件光标并绘制所请求的连续像素段。Porter 的极简演示仅用 43 行 Python 实现了这一部分。

这个小型宿主程序并不能证明每一项渲染计算都位于 checkpoint 内部。不过,公开源代码使这一边界可以被检验。审查者可以查看提示词构建、图模块、输出解码和参考结果对比。

该项目报告称,其结果与 Python 渲染器进行了逐像素检查。对于旗舰帧,测得像素覆盖率完整、在允许颜色选项范围内的一致率为 99.9%,精确一致率为 96.7%。

这些数字与原始文章中四舍五入后的 97% 略有不同。仓库中的规范事实文件称,最新测量来自 8 月 9 日的一次生产渲染。

据称,低分辨率 checkpoint 达到了完整覆盖、颜色选项范围内完全一致,以及 93.9% 的精确一致率。该帧包含 3,964 个参与对比的像素。

这些数据均为项目方报告的测量结果。独立测试尚未确认同样的结果是否能在不同环境、提示词或场景变化下复现。

真正的结果是每天 35 帧

这个项目之所以能成功展示编译器概念,恰恰是因为它作为实用 Doom 渲染器时失败得如此彻底。

原始 Doom 面向的是 1990 年代早期硬件上每秒 35 帧的目标。Porter 的完整 checkpoint 在 Nvidia B200 加速器上每秒约可产生 0.0004 帧。

在报告的生产运行中,贪婪解码耗时 2,383.5 秒。模型加载和其他开销使端到端时间达到 2,528.1 秒,即 42.1 分钟。

在持续运行且耗时相近的假设下,这大约相当于每天 35 帧。这个对比成了该项目最令人印象深刻的笑点,也揭示了将普通软件编译进自回归推理的核心成本。

每输出一个词元,都需要再经过一次 210 亿参数模型。绘制一帧要经历数万次这样的计算。该架构将传统硬件通过紧凑指令和并行流水线完成的操作串行化了。

据称,B200 运行时峰值预留了 151 GiB 内存。按二进制 gibibyte 计量,仅 checkpoint 就接近 80 GiB。这不是大多数读者可以在桌面 GPU 上测试的程序。

消费级 checkpoint 将分辨率降至 80×50 像素。它会生成 7,007 词元的 rollout,据称在一张配备 80 GB 内存的 A100 上解码耗时 338.3 秒。

其 34.09 GB checkpoint 还可通过自动设备映射分布到两张 32 GB 消费级 GPU 上。这个版本让复现更可及,但对一个微小画面而言,依然极其奢侈。

精度带来了另一项限制。公开的模型采用 fp32 权重。传统 LLM 部署通常会通过更低精度格式或量化来降低内存和计算消耗。

但量化在这里风险很高,因为数值误差并不只是让语言概率变得模糊。它们可能破坏程序状态、比较、类似地址的查找,以及残差流中的抵消计算。

Torwright 的编译器文档承认,一些非线性构造使用了分段线性近似。其测试会测量单个操作的误差边界,并将编译后的图节点与直接求值进行比较。

这些防护措施提供的是证据,而非每一次完整执行都具有数学确定性。单个操作的误差边界不会自动在长链中组合,因此该编译器还依赖更广泛的图探测与输出比较。

该项目公开的 Reddit 讨论直接提出了这一担忧。Porter 表示,他预计粗心的量化会导致输出损坏,而不是得到保真度更低的图像;他还指出,自己尚未测试过这种情况。

另一项限制涉及通用性。该 checkpoint 只支持选定区域、固定分辨率,以及 E1M1 起始区域附近所需的纹理。它并未在所有 Doom 内容中复现完整渲染器。

精灵图仍未实现。武器和状态栏固定为手枪开局状态。模型渲染的是一个场景,而不是带有常规游戏系统的交互式游戏循环。

项目的地图提示词也会在推理前经过准备。宿主端代码将关卡裁剪为固定的世界空间区域,并将静态事实编码为词元。仓库将这一边界描述为类似于加载一个关卡。

批评者可以合理地追问,这是否仍算是 Doom 在 Transformer 内部运行。最站得住脚的回答要更收敛一些:针对受限 Doom 场景、与视角相关的渲染逻辑运行在一个编译后的 checkpoint 内。

若声称 Doom 本身已经变成一个 LLM,那并不准确。这个 checkpoint 没有习得语言能力,也没有实现完整游戏。“由 Transformer 承载的渲染器”是更贴切的描述。

Cursor Horizon 的视角应当保留这一区分。该项目扩展了标准模型文件能够表达的内容,但并未展示一条可与现有图形计算竞争的新路径。

它也尚未获得广泛的独立验证。仓库提供了代码、权重、提示词、测量结果和对比工具,但复现旗舰结果仍需要昂贵硬件和可观的下载容量。

社区反应体现了这两面。开发者称赞了编译器的构想,也对其性能感到好笑。另一些人则询问,并行输出、替代架构或扩散系统是否能更高效地渲染画面。

这些建议忽略了项目刻意设置的一部分约束。Porter 想要的是一个普通 Hugging Face 类能够加载的标准文本生成模型。这一选择让渲染器绑定在低效的“每步一个词元”循环中。

改变架构或许可以提升速度,但会削弱演示本身。该项目之所以有趣,正是因为它接受了原生因果 Transformer 的限制,却依然完成了整个渲染过程。

Cursor Horizon 接下来应关注什么

下一个考验不是再来一张令人惊叹的截图,而是外部人员能否复现、压缩并泛化这种编译后的执行。

第一个信号是独立复现。第三方应运行已发布的低分辨率 checkpoint,将其输出与参考渲染器比较,并公布硬件和软件细节。

成功复现将加强这样一项主张:标准 checkpoint 可以执行文档化的图。若输出存在差异,则会暴露其对 Transformer 版本、数值内核、设备放置或浮点行为的敏感性。

第二个信号是低精度执行。经过验证的 bf16、fp16 或量化版本将降低项目的硬件门槛,也会测试 torchwright 能否在精度降低时处理残差抵消和比较。

成功将使编译后的 Transformer 更容易研究和分发。失败则会明确表明,精确的数值行为仍是这种编程模型的一大约束。

第三个信号是更广泛的场景支持。同一 checkpoint 应能在无需重新编译的情况下渲染多个位置、方向和兼容地图区域。公开对比不应只覆盖旗舰 E1M1 视图。

这项测试将区分通用渲染器实现与高度优化的演示路径,也会展示随着几何形状和词元数量变化,仅追加状态机制如何工作。

并行性仍是一个重要的长期问题。Porter 当前的设计为每个有界计算步骤生成一个词元。若系统能在每次前向计算中输出多个安全操作,或许能减轻巨大的解码负担。

不过,这种改变必须保留项目的核心主张。把几何计算或可见性决策转移到宿主代码中会提升性能,但那是通过迁移渲染器实现的,而不是改进编译后的 Transformer 执行。

未来的 torchwright 示例可能会比更快的 Doom 帧更有启发性。确定性解析器、协议验证器、计算器和透明的算法模块,比实时图形更契合该编译器的优势。

编译逻辑也可能与训练组件结合。学习型模型可以处理含糊的语言,而构造出的子网络则负责强制执行计算或协议。这个可能性仍属推测,且技术上颇具难度。

安全研究人员也应关注标准 checkpoint 格式。现有模型扫描器通常聚焦于序列化代码、不安全加载或可疑文件。直接构造的权重可以在不附带传统可执行代码的情况下引入行为。

这并不意味着 torchwright 具有恶意。它的源代码和意图异常开放。更广泛的教训是,“没有自定义代码”并不等同于“没有被编程的行为”。

开发者也不应把参数数量当作智能程度的指标。这个 checkpoint 拥有 210 亿参数,是因为其编译器将一个渲染器映射进了笨重的架构。规模本身几乎无法说明习得知识或有用推理能力。

对 Cursor Horizon 的读者而言,实际收获是形成一个更清晰的 Transformer 心智模型。训练是设置其权重的一种方式;编译是另一种,即便结果极其低效。

该项目最有价值之处在于,它是一项可执行的论证。它表明,熟悉的模型基础设施不仅能承载统计记忆,也能承载确定性程序;同时也说明了,传统计算机依然极其擅长传统计算。

不妨先阅读执行轨迹、检查编译器图,或复现那个更小的检查点。然后提出一个比 Doom 更重要的问题:哪些算法能从 transformer 原生执行中真正获益,哪些又只会沦为昂贵的噱头?

 
 

免费开始

一款本地优先的AI助手,具备个人知识管理功能

为了获得更好的人工智能体验,

remio 目前仅支持Windows 10+ (x64)M-Chip Mac

在你的大脑里添加一个搜索栏

Ask remio

记住一切

​无需整理

bottom of page