穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

试想,若将当今盛行的大模型技术带回1970年,会是何种景象?

那个年代,没有GPU,没有CUDA,甚至没有浮点数运算单元,更不存在任何深度学习框架。唯有一台PDP-11小型机,以及一门近乎退出历史舞台的编程语言:汇编语言

近日,一位开发者给出了他的答案。他复现了当年的技术环境,使用1970年代的PDP-11汇编语言,成功实现并训练了一个Transformer模型。该项目名为ATTN-11。

具体而言,该项目旨在使用纯汇编语言,在PDP-11小型机上实现一个单层、单头的Transformer模型,并完成一项“序列反转”任务——输入一串数字,模型需输出其反序结果。

例如,输入:4 7 4 9 6 3 6 5,输出应为:5 6 3 6 9 4 7 4。

任务看似简单,但其关键在于,模型无法通过“记忆内容”来完成,必须理解“位置之间的映射关系”。而这正是自注意力机制的核心能力。

项目结果显示,在这台1970年代的计算机上,一个仅包含1216个参数的极简Transformer,经过约350步训练后便达到了100%的准确率,整个训练过程仅耗时5分钟左右。

有趣的是,由于PDP-11时代的主要存储介质是穿孔纸带,开发者亦将该项目戏称为“Paper Tape is All You Need”。

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

该项目一经发布,便引发了广泛讨论。

当下,大模型的发展主要围绕“扩展定律”展开,追求更多的参数、更庞大的数据与更强大的算力。而ATTN-11却在极低的资源与极简的结构下,成功实现了功能闭环。这不禁引人深思:Transformer,究竟需要什么?

一位网友对“在PDP-11上训练仅需5分钟”表示惊讶,更令他感到震撼的是,这似乎暗示“我们其实一直都有能力做到这些?”

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

另一位网友则认为无需惊讶,事实正是如此。他指出:“1980年代的Cray超级计算机性能已非常强大,尤其在矩阵乘法方面。例如,1984年的四核Cray X-MP可提供持续800 MFLOPS至1 GFLOPS的算力。若配备1GB SSD,其算力与带宽已足以在半年内训练一个700万至1000万参数的语言模型,并以每秒18至25个token的速度进行推理。到了1990年代中期,一台Cray T3E的算力已能承载GPT-2规模的模型,这比OpenAI早了24年。我个人甚至曾用一台1965年的打孔卡计算机,通过反向传播学会了异或运算。真正的瓶颈从来不是硬件,而是想法。”

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

另一位网友以密码学为例补充道:基于格的加密方案早在1990年代就已提出,但真正走向产业化却花费了数十年时间。关键障碍并非数学理论不成熟或硬件不足,而是让这些理论“运行起来”的关键思路在当时尚未出现。

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

接下来,让我们深入了解该项目的具体实现。

开发者表示,该项目是Xortran项目的“精神续作”。Xortran是一个在IBM 1130与PDP-11/20上,用Fortran IV实现反向传播以学习异或运算的神经网络。很自然地,下一步便是探究这些机器能否在可接受的时间内成功训练一个小型Transformer。

从架构上看,Transformer本质上只是基础神经网络的适度扩展。矩阵乘法、反向传播、随机梯度下降和交叉熵损失等构建模块早已存在。新增的核心部分主要有三:
* 自注意力:映射后的查询与键之间的点积得分计算。
* 位置编码:学习得到的位置嵌入,与输入相加。
* Softmax:将得分转换为概率分布。

该项目的目标是训练一个Transformer来反转数字序列。尽管任务简单,但模型必须学会仅根据索引位置来路由每个标记,无法依赖基于内容的捷径。这类问题正是为自注意力机制设计的,实际上也是谷歌2017年原始Transformer参考实现Tensor2Tensor中包含的算法基准之一。

架构

数据路径较为直接:标记被嵌入后,通过带有残差连接的自注意力层,然后映射回词表并通过softmax得到预测。

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!
穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

这是一个极简的Transformer:包含嵌入层、带残差连接的自注意力层以及输出映射层。它是一个真正的、具备自注意力的Transformer,但既非BERT也非GPT:没有层归一化,没有前馈网络,没有解码器。对于当前任务,无需对标记表示进行复杂变换,因此注意力与残差连接已足够。层归一化主要用于防止深层网络中的激活漂移,在单层模型中并非必需。

针对1970年代硬件的优化

首次实现沿用了Xortran的方案,使用Fortran IV编写。在统一学习率为0.01的情况下,模型完成100步训练需要25分钟,而要达到100%准确率约需1500步。这在真实硬件上相当于约6.5小时的训练时间,在IBM 1130上甚至可能长达一周。即便以1970年代的标准衡量,这也难以接受,因为当时的计算机通常采用分时共享机制,计算资源极为宝贵。

因此,首要改进是将统一学习率替换为手动调优的分层学习率:

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

编码“反转模式”的注意力权重更适合较高的学习率,而输出映射层在较低学习率下收敛更好。通过这一调整,训练步数降至600步,预计训练时间缩短至约2.5小时。

优化器采用了最基础的随机梯度下降。像Adam这类优化器虽能自适应调整步长,但代价是每个参数需额外维护两个状态向量,使内存占用增至3倍,且每次更新需进行平方根和除法运算,在PDP-11上开销较大。相比之下,分层学习率在不增加额外成本的情况下实现了类似效果。由于模型规模小,三组学习率可以手动调优。这也使得Transformer模型可以装入32KB的核心内存,而非64KB,这在1970年代至关重要。

补充说明:由于采用裸机汇编实现,ATTN-11的内存占用并不高于需要承担操作系统和Fortran运行时开销的Xortran。最终生成的二进制文件相当紧凑,仅为6179字节。

NN11

核心算术运算基于NN11,这是一个为ATTN-11及PDP-11设计的最小化定点神经网络计算栈。

NN11的组织结构类似于BLAS,分为多个层级:最底层是标量基础操作;其上是向量运算,如点积和缩放;再往上是矩阵-向量运算,每一层都构建在下层之上。此外,还有两个模块将该计算栈扩展到线性代数之外:一个是激活函数及其查找表,另一个是层级操作,用于组合前述运算以实现嵌入、映射及注意力等功能。

这些算术计算会根据不同的计算阶段进行适配:

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

在 PDP-11 上,前向计算采用 Q8 格式,反向传播采用 Q15 格式,这种组合非常高效。将一个 Q8 数与一个 Q15 数相乘,会在一个 32 位寄存器对中得到 Q23 格式的结果,只需执行一次 ASHC #-8 指令即可将其缩放回 Q15 格式。

因此,反向传播中的乘法开销并不高于前向计算,同时还能让梯度的精度达到激活值的 128 倍。

经过优化,模型在 350 步内即可收敛,使得在开发者的 PDP-11/34A 上,总训练时间缩短至仅 5.5 分钟。

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

在该项目中,开发者并未使用物理纸带读取器,而是通过控制台将目标代码直接写入内存。

以下是运行该 Transformer 后的结果:

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

原型

在正式转向汇编实现之前,必须先验证设计的正确性。因此,开发者首先在 Sheaf 中对浮点和定点算术进行了原型设计与验证。Sheaf 是开发者构建的一个函数式机器学习框架,内置了可观测性机制。

对于这类机器学习工作,Sheaf 相比 Python 有几个优势:
* 代码量大约减少三分之一。
* 其纯函数式语义带来了更强的正确性保障。
* 能够对每一个中间张量进行内置追踪,包括其形状、数值范围以及计算时间。在开发定点算术时,这一点尤为关键。

例如,在 vtmul 操作上设置一个范围保护,可以立刻捕捉到遗漏 >>8 位移的问题:

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

浮点与定点两种原型实现都可以在项目的 proto 文件夹中找到,同时还包含最初的 Fortran 版本。

实现细节

由于没有浮点运算单元,超越函数(如 explog)被预先计算的查找表所替代。在 PDP-11 上,一次查表只需一条 MOV 指令,其开销远低于多项式近似或 CORDIC 算法。

Softmax

Softmax 使用一个包含 256 个条目的查找表(EXPTBL,Q8 格式),将每个索引 i 映射为 exp (−i/32)。计算分为三个步骤:
* 找到输入向量中的最大值,并从每个元素中减去该值,以保证数值稳定性。
* 将差值 (max − x_i) 除以 8,作为查表索引,并限制在 [0, 255] 范围内。
* 将得到的 exp 值除以它们的总和(通过 FXDIV),得到概率分布。

该查找表大约覆盖了输入范围内的 8 个单位,在趋近于 0 之前,这对于一个 10 类词表来说已经完全足够。

交叉熵损失

损失函数每 50 步计算一次,用于报告训练过程。它依赖另一个查找表(LOGTBL,257 个条目,Q12 格式),将每个值 x ∈ [0, 256] 映射为 −ln (x/256) × 4096

计算流程遵循标准路径:先对 logits 做 softmax,读取目标 token 的概率,然后在查找表中查得 −ln (p)。8 个位置(每个序列位置一个)的结果累加到一个 32 位寄存器对中(因为 8 个 Q12 值的和可能超过 16 位),再通过 ASHC #-3 指令除以 8。Q12 精度(1/4096 ≈ 0.0002)可以提供四位小数,足以用于监控收敛过程。

查找表

ATTN/11 使用两个查找表。第一个将每个索引映射为 Q8 表示的 exp (−i/32),在 softmax 中用一条 MOV 指令替代指数计算。另一个表主要用于便利计算,将每个值映射为 Q12 表示的 −ln (x/256),每 50 步用于计算交叉熵损失,以监控模型收敛情况。

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

两个查找表均通过 Sheaf 脚本离线生成,并以 .WORD 常量的形式存储在源代码中。

交叉熵梯度

反向传播利用了 softmax 与交叉熵组合的一个经典性质:logits 的梯度可以简化为:

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

从而在训练过程中完全避免了对数运算的开销。该结果最初以 Q8 表示,随后左移 7 位转换为 Q15,这是整个反向传播过程中使用的数值格式。同一个 SFTMX 例程同时用于前向与反向计算,无需单独实现反向传播版本。

最后补充一点:在这些算法的开发过程中,开发者仅将 AI 工具作为辅助使用,而所有的设计决策、缩放策略以及数值验证,均是在硬件上由人工完成的。

内存布局

ATTN/11 总共占用 19.2 KB 内存。下表展示了其内存分布情况,整理自 MACRO-11 汇编器的输出列表:

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

这 1216 个参数由于计算需要被复制了三份:Q16 累加器(4.8 KB)、用于前向计算的 Q8(2.4 KB),以及用于梯度的 Q15(2.4 KB)。仅模型本身就占用了 9.6 KB,是整体内存使用中占比最大的部分。

构建

构建所需的两个条件是:MACRO-11 汇编器,以及用于将目标代码转换为可加载二进制文件的 obj2bin 工具。

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

运行

运行需要具备以下条件之一:
* 一台真实的 PDP-11,且其 CPU 支持 EIS 指令,并配备 32KB 的核心内存或 MOS 内存。
* 或使用 ll-34:这是一款电路级、微周期精确的 PDP-11/34 模拟器,可作为真实硬件的数字复刻。

ll-34 几乎可以视作拥有一台真正的 11/34。启动 ATTN/11 的方式如下:

穿越回1970年:用PDP-11汇编语言实现Transformer,5分钟训练成功!

或者,如果只是想快速体验,可以使用这里提供的 WebAssembly 版本:
* https://dbrll.github.io/ll-34/

SIMH 也可以使用,但它模拟的是 PDP-11 的高层行为(而非电路级),并以宿主机 CPU 的速度运行。虽然可以通过人为方式降低速度,但其时序并非周期级精确,因此不太适合用于性能调优或还原真实体验。


关注“鲸栖”小程序,掌握最新AI资讯

本文来自网络搜集,不代表鲸林向海立场,如有侵权,联系删除。转载请注明出处:http://www.itsolotime.com/archives/30086

(0)
上一篇 6小时前
下一篇 6小时前

相关推荐

  • TiDB大佬黄东旭周末打造mem9.ai:解决OpenClaw龙虾「金鱼脑」痛点,引爆开发者社区

    2026年最火的不是某个大模型,而是一只龙虾。 OpenClaw——这个源于奥地利程序员Peter Steinberger周末实验的项目,在短短三个月内GitHub星标数突破16万,一周涌入200万人次访客。腾讯云为它在深圳大厦设立了「龙虾安装站」,深圳龙岗区甚至出台了专项扶持政策。 然而,在全民养虾的狂热背后,一个致命的问题正困扰着每一位用户—— 你的龙虾…

    2026年3月15日
    73700
  • AI绘图革命:Next AI Draw.io一周斩获4500星,自然语言秒变专业图表

    Next AI Draw.io:一周斩获4500星,用自然语言秒变专业图表 在GitHub上,一个名为 Next AI Draw.io 的开源项目迅速走红,仅一周就获得了超过4500个Star,并登上了开源热榜。 如果你在工作中经常需要绘制流程图、架构图或UML图,又觉得传统的拖拽连线方式效率低下,那么这个项目或许能成为你的效率利器。 开源项目简介 Next…

    2025年12月18日
    55700
  • AiToEarn:AI驱动的全平台社交媒体自动化管理工具,让内容创作与分发一键搞定

    AiToEarn:AI驱动的全平台社交媒体自动化管理工具 项目概述 AiToEarn 是一个基于 AI 驱动的全平台社交媒体管理与内容分发工具。其核心目标是利用 AI Agent 技术,帮助自媒体创作者、营销人员及商家实现内容的自动化生产与分发,从而提升运营效率。项目主页的标语 “Let‘s use AI to Earn!” 清晰地传达了其愿景。 项目背景与…

    2026年3月8日
    80900
  • Karpathy开源autoresearch:630行代码实现AI自主科研进化,5分钟一轮实验效率超人类

    Karpathy开源autoresearch:630行代码实现AI自主科研进化 AI领域知名研究者Karpathy近日开源新项目 autoresearch,这是一个能够自主进化的AI科研循环系统。其核心目标是让智能体完全自主地进行科研探索:用户只需在Markdown文档中设定研究指令,后续的代码修改、实验运行、结果评估与决策优化等流程将全部由AI自动完成。 …

    2026年3月9日
    68500
  • OpenResearcher:首个开源离线深度研究轨迹合成流水线,训练30B模型超越GPT-4.1与Claude-4-Opus

    训练一个能够像人类研究员一样执行“搜索→浏览→推理”的深度研究智能体,其核心瓶颈往往不在于模型本身的能力,而在于高质量、长程研究轨迹数据的严重匮乏。现有的数据采集方法要么依赖昂贵且不稳定的在线搜索API,要么只能生成2-5轮的浅层交互,远不足以覆盖真实深度研究中动辄数十轮甚至上百轮的复杂推理链条。 针对这一痛点,来自德克萨斯农工大学、滑铁卢大学、加州大学圣地…

    2026年3月29日
    30600