文讨论了 Groq,一种新的计算机硬件方法,它彻底改变了 AI 解决现实世界问题的方式。
在讨论 Groq 之前,我们将分析 AI 的根本含义,并探讨用于运行 AI 模型的计算机硬件的一些关键组件。即 CPU、GPU 和 TPU。我们将从 1975 年的 Z80 CPU 开始探索这些关键硬件,然后通过探索计算机硬件的一些关键演变来加深对现代系统的理解。
在了解了计算机硬件的一些基本概念和权衡之后,我们将利用这些理解来探索 Groq 是什么、它如何彻底改变 AI 计算的方式以及为什么它很重要。
当然,从早期的 CPU 到价值数十亿美元的尖端 AI 初创公司,还有很多内容需要介绍。因此,这是一篇相当长的文章。系好安全带,这是值得的。
定义人工智能
很多人认为人工智能就像一个黑匣子。你把数据输入进去,人工智能会做一些晦涩难懂的数学运算,然后你就可以得到数据。
人工智能的常见直觉是,它本质上是一个接收东西并输出东西的魔盒。
这种直觉很受欢迎,因为人类有时很难理解模型的思维过程。
仅仅因为人工智能模型擅长某项任务并不意味着人类能够轻易理解模型的决策。
尽管从整体上理解模型决策背后的原理可能很困难,但人工智能模型实际上采用非常简单的数学运算来得出结论。
人工智能思考方式的概念图。该模型通过查看大量数据来学习参数(以蓝色突出显示并加下划线),从而做出正确的决策。
换句话说,人工智能模型之所以复杂,不是因为它们做复杂的事情,而是因为它们同时做大量简单的事情。
有很多硬件选项可用于运行 AI。让我们从描述最基本的一个开始。
中央处理器
大多数现代计算机的主要部件是 CPU,即“中央处理器”。CPU 几乎是每台现代计算机的心脏。
从最根本的角度来说,CPU 是基于“冯·诺依曼架构”的。
本质上,冯·诺依曼装置可以接受一些输入,并使用控制单元来控制某些算术单元中的计算方式。然后,这些计算会产生一些有意义的输出。来源。
冯·诺依曼架构相当抽象;在将其付诸实践方面有很大的余地。本文中我们将讨论的几乎所有硬件都可以看作是冯·诺依曼设备的特定版本,包括 CPU。
早期流行的计算机 ZX Spectrum 使用 Z80 CPU 来完成工作。从概念上讲,现代 CPU 与 Z80 并无太大区别,因此我们可以使用 Z80 作为简化示例来开始了解 CPU 的工作原理。
采用 Z80 CPU(右)的 ZX Spectrum 计算机(左)。来源。
即使是这个不起眼的 CPU 的图表也相当复杂,但我们可以将其拆开,了解一些核心组件,这些组件在现代 CPU 中基本仍然存在。
Z80 CPU 的近似框图。来源。
Z80 具有一个控制电路,它将低级指令转换为芯片内的实际动作,并跟踪记录事项,例如 CPU 应该执行哪些命令。
Z80 CPU 内的控制电路。来源。
Z80 配备了一个“算术逻辑单元”(简称 ALU),能够执行各种基本算术运算。这才是 Z80 CPU 中真正进行大量实际计算的部件。Z80 会将一些数据输入到 ALU 的输入端,然后 ALU 会根据 CPU 当前正在运行的指令对这些数据进行加法、乘法、除法或执行其他运算。
Z80 内的算术逻辑单元(或 ALU)。来源。
几乎任何复杂的数学函数都可以分解成简单的步骤。ALU 旨在执行最基本的数学运算,这意味着 CPU 能够通过使用 ALU 执行许多简单的运算来进行非常复杂的数学运算。
即使是最复杂的数学运算通常也可以分解为许多简单的计算。这种积分(来自微积分)只是乘法、除法和加法。
Z80 还包含一组寄存器。寄存器是 CPU 中微小的超快内存,用于存储某些关键信息,例如 CPU 当前正在运行的指令、数字数据、CPU 外部数据的地址等。
Z80 内的寄存器。来源。
当人们想到计算机时,很容易将注意力集中在进行数学运算的电路上,但实际上,需要进行大量的设计工作来研究数据存储的位置。数据如何存储和移动的问题是本文的核心主题,也是现代计算为何依赖如此多不同的专用硬件组件的重要原因。
CPU 需要与计算机中的其他组件通信,这是总线的工作。Z80 CPU 有三条总线:
- 地址总线传达 Z80 感兴趣的数据位置
- 控制总线传达了 CPU 想要做什么
- 数据总线传送来自 CPU 的实际数据
Z80 的三条总线。来源。
因此,例如,如果 Z80 想要从 RAM 读取一些数据并将该信息放入本地寄存器进行计算,它将使用地址总线来传达它感兴趣的数据,然后它将使用控制总线来传达它想要读取数据,然后它将通过数据总线接收该数据。
这整套程序的重点是让 CPU 执行“获取、解码、执行”循环。CPU“获取”某条指令,然后将该指令“解码”为 CPU 中特定组件要执行的实际操作,然后 CPU“执行”这些操作。然后 CPU 获取一条新指令,重新开始循环。
获取、解码、执行循环,这基本上就是 CPU 所做的全部工作。
此循环与程序协同工作。人们通常认为程序是用 Java 或 Python 等编程语言编写的,但在编译器将程序文本解释为机器代码,并将该机器代码传输到 CPU 后,程序最终看起来会大不相同。本质上,编译器将人类编写的程序转换为 CPU 可以根据其预定义的控制逻辑执行的指令列表。
编译器的概念图,它将人类编写的程序转换为 CPU 可以理解的指令列表。这些指令执行简单的操作,例如将两个数字相加、将数据从 RAM 加载到寄存器等。
代码编译完成后,CPU 只需获取一条指令,将其解码为 CPU 内的操作,然后执行这些操作。CPU 使用程序计数器跟踪其所在位置,该计数器通常会在每次调用指令时递增,但它也可能根据某些逻辑(如 if 语句)在程序中跳转。
基本上就是这样。事实证明,即使是一个简单的 CPU 也能够通过遵循一系列简单的指令来执行几乎任何可以想象到的计算。真正的诀窍是让 CPU 快速执行这些指令。
CPU 的设计约束
Z80 是一款相当简单的 CPU。首先,它只有一个“核心”。核心的实际细节可能有点复杂,但核心本质上是 CPU 上工作的东西。想象一下,我们不是只有一个 Z80,而是在单个芯片上封装了几个 Z80,它们各自做自己的事情。这基本上就是现代多核 CPU 的本质。
<