作为上海交通大学流体力学专业上世纪七十年代末的学生。每当看到如今人工智能(AI)大模型在屏幕上生成复杂的图像或代码,看到那些动辄几百亿参数的神经网络,我们的思绪总会不由自主地回到当年那个安静、甚至有些冰冷的机房。
那里没有炫酷的图形界面,没有高速的互联网,只有王安计算机穿孔纸带机发出的轰鸣声,以及我们手中那一卷卷打满孔洞的纸带。但正是在那个看似原始的年代,我们其实已经触摸到了AI最核心的底层逻辑——算力、算法与数据的“铁三角”。如果说今天的AI是汹涌的潮水,那么我们当年的经历,就是这股洪流的源头。那是一场属于我们那个时代的、朴素却震撼的“AI”实践。
算力 (The Engine) —— 王安计算机
——角色:物理引擎。王安小型机(如MVP-2000)就是当时的“超级大脑”。它提供了执行复杂数学运算的物理能力。没有这台机器提供的算力,再多的公式也只是纸上的符号。
——现代类比:就像今天的GPU集群训练ChatGPT一样,当年的王安计算机就是您那个项目的“算力底座”。
现在的年轻人很难想象,当年支撑我们完成复杂流体力学计算的“超级大脑”,是引进自校友王安先生公司的王安MVP-2000小型机。
如果用今天的标准来“审视”它,它的算力简直是“寒酸”:
内存:仅有 256KB。这意味着什么?一张最普通的JPG图片都可能比它的全部内存还要大。而在运行我们复杂的有限元程序时,这256KB的内存几乎时刻处于“爆满”的边缘。
存储:我们依靠的是穿孔纸带机。数据不是点击“保存”,而是通过“打孔”来记录在长长的纸带上,或者读写在穿孔纸带机上。
但在当时,这就是我们的“星辰大海”。算力,作为AI的“引擎”,在那个年代虽然微弱,却足以驱动我们去挑战复杂的物理世界。每一次程序运行,都是对这有限算力的极限压榨。这种在资源极度匮乏下的优化与坚持,恰恰是后来算力狂飙的起点。
算法 (The Brain) —— 有限元方法与自编程序
——角色:逻辑与方法。在教授指导下建立的“力学模型和数学模型”,以及编写的程序代码,就是算法。这是将物理世界的流体力学规律(Navier-Stokes方程等)转化为计算机能理解的步骤的智慧结晶。
——现代类比:今天的深度学习算法(如Transformer)决定了AI如何“思考”,而您当年编写的有限元算法,决定了计算机如何“模拟水流”。
很多人觉得AI的“大脑”是神秘的,但在我们那个年代,这个“大脑”是我们一行行亲手编织的。
在盛振邦、何友声等教授的指导下,我们没有现成的软件包可以直接调用。我们必须将流体力学的物理规律(N-S方程等),通过有限元方法,转化为计算机能懂的语言。手写代码,用“0”和“1”构建思维(算法)。
这就是算法——AI的“大脑”。
1. 建立模型:先在纸上推导出力学模型和数学模型。
2. 编写代码:使用 FORTRAN 或 BASIC 语言,把公式变成指令。
例如,计算应力 sigma = F/A,我们要写成:
* READ(*,*) F, A (读取数据)
* SIGMA = F / A (核心算法)
* WRITE(*,*) SIGMA (输出结果)
这种将物理世界数字化的逻辑构建能力,正是今天深度学习算法的雏形。只不过,当年是我们人脑在设计复杂的数学逻辑,而现在是AI在自我学习逻辑。
数据 (The Fuel) —— 穿孔纸带与试验数据
——角色:原材料与验证标准。输入的网格数据、边界条件,以及最终用来比对的“试验数据”,就是数据。您通过“穿孔纸带”将数据喂给机器,计算结果再与实际试验数据对比,完成了一次完美的“训练-验证”闭环。
——现代类比:就像AI需要海量文本数据训练一样,您的模型需要精确的流体数据来“算”出正确结果。
在AI的语境里,数据是“燃料”。而在当时的交大,我们的燃料是沉甸甸的一盘盘穿孔纸带。
我们通过“打孔”将成千上万个网格节点、边界条件输入机器。这些数据经过算法的处理,输出结果。但最让我自豪的是,我们并没有止步于计算机的输出,而是将其与水池试验的实际数据进行严苛的比对。
当计算结果与试验数据完美吻合的那一刻,我知道,我们成功了。这不仅是流体力学的胜利,更是“数据闭环”的胜利。这与今天AI模型通过海量数据训练、验证、迭代的过程,在本质上没有任何区别。
这就是AI的“前世”——基础与雏形。虽然没有“人工智能”这个响亮的名词,但我们所做的,正是用最朴素的方式,让机器通过计算去模拟复杂的物理世界(流体力学)。这与今天AI通过算力训练模型,在本质上是一脉相承的。
回顾那段岁月,我深刻地认识到:今天的AI并非凭空而来,它是算力、算法、数据这“铁三角”在过去半个世纪里共同发酵的结果。
我们是那个时代的“极客”,用最原始的工具,探索着最前沿的科学。这段经历不仅奠定了我的专业基础,更让我在面对今天这场AI革命时,多了一份从容与理解。
这段“前世”的故事告一段落,但技术的演进永不停歇,这便是AI发展的“今生”——应用与追赶。(供稿:陈建榕)
【历史回望】王安及王安计算机
上海交通大学在上世纪七十年代末至八十年代初引进的确实是王安(Wang)公司的计算机系统。
1. 王安先生与交大的渊源
王安于1920年在上海出生,1940年毕业于国立交通大学(上海交大前身)电机工程专业。毕业后他曾留校任教。1945年他赴美留学,后在哈佛大学获得博士学位,并于1951年在美国波士顿创立了王安实验室(后发展为王安电脑公司)。
2. 引进的计算机系统型号
上海交通大学引进的并非单一的一台机器,而是一个数据处理系统。根据相关文献记载,具体型号主要涉及 WANG MVP-2000。
* 系统构成:这是一个以磁盘为基础的多用户小型机系统。
* 应用场景:该系统最早被用于上海交通大学图书馆的自动化建设,实现了科技情报联机检索系统和流通管理系统的早期探索。此外,也有记录显示该系统曾安装在计算机系机房,用于教学和科研。
3. 算力水平与配置
如果以今天的标准来看,当时的算力是非常原始的,但在那个年代这属于尖端技术。以下是基于 WANG MVP-2000 的具体参数:
配置项 详细参数 (1979-1981年水平)
内存 (RAM) 256KB (这是当时的主流配置)
存储设备 配置了3台 10MB 的磁盘机
终端支持 支持 8台 终端设备同时分时操作
处理器 以磁盘为基础的多用户小型机 (Multi-User Minicomputer)
解读:
* 256KB 内存:这相当于现在一张极低质量 JPG 图片的大小,但在当时足以运行 BASIC 语言和简单的数据库程序。
* 10MB 磁盘:这在当时是巨大的存储容量,但仅能存储几部高清电影的碎片数据。当时这属于昂贵的“海量存储”。
【科普知识之一】算力的基石与“B”(字节)
1. “0”和“1”的起源:计算机的底层是电子电路。“1”代表电路“通”(有电流),“0”代表电路“断”(无电流)。计算机里有成千上万个这样的“开关”(晶体管),通过它们的组合来表示所有信息。
2. 1个“B”(字节)的概念: Bit(位)是最小的单位,一个“0”或一个“1”就是1 bit。Byte(字节)是为了表示字母和数字,计算机规定 8个 bit = 1 Byte (B)。
例如:一个英文字母(如 A)占 1B;一个汉字通常占 2B~4B(取决于编码)。
在计算机里,一个数学公式本身作为“代码”存储,和它运行时占用的“内存”,是两回事。作为代码存储(在磁带上):
如果写一行 BASIC 代码:F = M * A,这大概有 7 个字符,大约占用 7 Bytes。
作为计算过程(在内存中): 这才是消耗算力的地方。有限元计算涉及巨大的刚度矩阵。
假设提供的计算模型有 1000 个节点,每个节点有 3 个自由度(XYZ方向),那么刚度矩阵大小约为 3000x3000。
每个数字(浮点数)通常占 4 Bytes (32位)。
那么仅存储这个矩阵就需要:3000 x 3000 x 4 Bytes ≈ 36 MB。
结论:虽然公式本身只有几个B,但它在运行时需要占用巨大的内存空间(在当年看来是海量的)。
【科普知识之二】计算机语言与编程体验
在王安小型机和当时的主流科研环境下,主要有以下几种语言:
1. 主流语言
* FORTRAN (Formula Translation):这是当时科学计算的绝对霸主。流体力学、结构力学、气象预报几乎都用它。它专门为数学公式计算设计,效率极高。
* BASIC:王安电脑的一大特色就是推广了BASIC语言,它相对简单,适合教学和初学者。
* 汇编语言 (Assembly):更底层,直接控制硬件,效率最高但编写极其繁琐。
2. 编程实操举例
假设我们要计算一个简单的结构力学公式:应力 = 力 / 面积 (sigma = F/A)。
第一步:编辑程序代码 (Algorithm)
需要在终端或纸带上写下类似下面的 FORTRAN 或 BASIC 代码:
! FORTRAN 77 风格 (当时采用的)
PROGRAM STRESS
READ(*,*) F, A ! 从数据带读取力F和面积A
SIGMA = F / A ! 核心算法:计算应力
WRITE(*,*) SIGMA ! 输出结果到打印机
STOP
END
第二步:编辑数据代码 (Data)
光有程序不行,还得有数据。我们需要准备一个数据文件(打在纸带上):
1000.0, 50.0 ! 假设F=1000牛顿, A=50平方米
第三步:计算需要多少“B”?
* 程序代码:上面那段代码大约占 100 Bytes。
* 数据:一行数据约 20 Bytes。
* 内存占用 (算力瓶颈):但在运行时,操作系统、变量存储、中间结果缓存,可能需要占用 几KB 到 几十KB 的内存。作为计算过程(在内存中),这才是消耗算力的地方。当时仅有 256KB内存,这意味着什么?一张最普通的JPG图片都可能比它的全部内存还要大。而在运行我们复杂的有限元程序时,这256KB的内存几乎时刻处于“爆满”的边缘。
图片来源网络