当我们谈论深度学习训练时,通常想到的是拥有数百 GB 显存的高端 GPU 集群。然而,一个有趣的工程挑战是:在 1970 年代的微型计算机上,能否通过纸带这一古老的外存储介质来完成神经网络的基本训练?这种看似不可能的任务,恰恰揭示了机器学习工程中一些最本质的约束条件。
硬件基础与带宽瓶颈
以 PDP-11 为代表的 1970 年代微型计算机,其纸带阅读器的数据传输速率通常在每秒 10 到 300 个字符之间。以常见的每秒 100 字符为例,这意味着理论最大带宽仅为 800 比特每秒,约 0.1KB/s。与现代 NVMe SSD 动辄数 GB/s 的读取速度相比,纸带 I/O 慢了七个数量级之上。即使与最早的软盘驱动器相比,纸带的速度也慢了两个数量级。这种极端的带宽限制,成为整个系统设计中的首要瓶颈。
在实际工程中,纸带还存在启动与停止的机械延迟问题。阅读器从静止状态加速到稳定读取需要数十毫秒,停止时同样存在惯性延迟。这意味着对于短数据块的读取,实际有效带宽会更低。因此,典型的工程实践是每次加载至少 1KB 以上的数据块,以摊销启动延迟的开销。
存储容量的硬性约束
PDP-11 的地址空间为 16 位,意味着最大可寻址内存为 64KB。考虑到操作系统、运行时环境以及程序代码的占用,实际可用于训练数据的内存空间通常不超过 32KB。对于一个简单的全连接神经网络,假设隐藏层神经元数量为 64,输入层为 32,输出层为 10,则仅模型参数就需要约(32×64 + 64×10)×2 字节≈5KB 的存储空间。这已经占用了可用内存的相当比例。
更关键的问题在于训练过程中必须保留的中间状态。前向传播的激活值、反向传播的梯度,都需要在有限内存中暂存。以批大小为 1 的反向传播为例,每层的梯度需要与前向激活值相同大小的存储空间。在 32KB 的总内存限制下,即使是最简单的单隐藏层网络,也只能处理极小的批次或极少的层数。
训练可行性的量化分析
假设我们使用一个三层的全连接网络,目标是在纸带上完成一个简单的模式识别任务,例如对 ASCII 字符进行分类。训练数据集假设包含 1000 个样本,每个样本长度为 8 个字符即 64 比特。如果使用随机梯度下降法,每次参数更新需要完成一次完整的前向与反向计算。
让我们计算一个具体场景下的时间消耗:每个训练样本的读取需要 64 比特 ÷800 比特每秒 = 80 毫秒。前向计算假设需要 1000 条指令,约 0.1 毫秒。反向传播需要约 1500 条指令,约 0.15 毫秒。参数更新写入纸带需要额外 80 毫秒。因此,单个样本的单次迭代需要约 160 毫秒。
对于 1000 个样本完成一次完整遍历(一个 epoch),理论耗时为 160 秒,约 2.7 分钟。如果要训练 100 个 epoch 达到收敛,总耗时将接近 4.5 小时。这在纸带可以承载的数据量范围内是可行的,但前提是训练能够在此数据量下收敛。
工程实现的关键参数
基于上述分析,在纸带 I/O 约束下进行神经网络训练的工程实践,可以总结出以下关键参数建议。内存布局方面,建议将模型参数置于内存低地址区域,训练数据缓存置于高地址区域,中间计算结果使用覆盖式复用策略。数据分块方面,每次从纸带加载的数据块建议不低于 512 字节,以摊销机械启动延迟;批次大小设为 1 以最大化内存利用率。训练策略方面,优先选择收敛速度快的简单模型,如单层感知机或带有一个小隐藏层的全连接网络;学习率需要通过实验精细调优,因为极低的训练速度意味着无法承受大量的超参数搜索。
监控与容错机制
纸带读取的错误率虽然远低于磁带,但仍不可忽视。工程实现中需要加入校验机制,例如奇偶校验或简单的校验和验证。读取失败时应提供重试机制,同时记录错误发生的纸带位置以便离线修复。更重要的是,由于训练周期可能长达数小时,系统应当支持断点续训功能,定期将模型参数写入纸带备份。
结论与工程意义
在 1970 年代微型计算机上通过纸带 I/O 进行神经网络训练,虽然在技术上可行,但面临带宽、存储与计算的三重约束。量化分析表明,对于极简模型与小型数据集,完成基本训练是可能的,但训练效率极低。这一工程实践的价值在于:它剥离了现代深度学习中所有非必要的抽象层,直面数据加载、内存管理、计算调度这些最基础的问题。对于理解机器学习系统的本质约束,以及在极端边缘计算场景下设计高效方案,这种 retrocomputing 视角提供了独特的洞察。
资料来源:GitHub 项目 dbrll/ATTN-11(https://github.com/dbrll/ATTN-11)提供了在 PDP-11 上实现纸带 I/O 神经网络训练的参考实现。