OpenAI 在2022年底推出了 ChatGPT, AI 发展正式进入到了大模型时代。大模型表现出完美的知识连贯性,并拥有优秀的逻辑推理能力。而实现这一切的基础,来自于 OpenAI 使用大量互联网信息进行模型训练。
ChatGPT 的成功具备天时地利。云计算经过十多年发展累积了大量富余算力,千亿乃至万亿的智能模型依赖云技术对大规模数据"消化"来实现模型的生成。而巨量算力的基础离不开位于云底层的,经过数十年发展、十分强大的 GPU 能力。
为什么是 GPU?
抽象地看,计算方式有限(比如加减乘除等),但数据很多,即每种计算方式要处理大量数据 。CPU 能实现一次算一个,而 GPU 能实现一次算一组,这正是大算力的基础。
一、向量计算
如果把一组数据合成一个逻辑上的输入,就是向量,即:
标量(scalar):单个数值
向量(vector):一维数组,多个数值
在空间上来看,向量是一条线,数值是一个点。GPU 能实现一个指令对一组数据并行计算,是构建 AI 底层计算的基座。
熟悉编程的读者可能会想到一个问题,多线程也能同时执行,CPU使用多线程能替换GPU吗?
不能 。这两种在底层本质上不同,如果CPU有多个核心,CPU 的同时执行是把这些核心尽可能的利用起来。而 GPU 则是实现了让单个命令并行,一个命令多个输入,即向量计算。
二、向量计算的实现
SIMD(Single instruction, multiple data) 可实现向量计算,根据 Flynn 1972分类法,SIMD 可分为三类。
阵列处理器 (Array processor):接收一条相同的指令,但每个并行处理单元都有自己独立且不同的内存和寄存器文件,它也叫 SIMT(Single instruction, multiple threads)。SIMT适合大规模数据计算,也是 GPU 的基本结构。
流水线处理器 (Pipelined processor):接收一条相同的指令,然后从中央资源读取数据,每个处理器处理该数据的片段,然后将结果写回到同一中央资源。在 Flynn 1972 年的论文中,资源是主内存,对于现代 CPU,该资源应是寄存器。流水线处理器在现代 CPU 结构中应用广泛,它实现了不同指令的不同阶段的并行。
关联处理器 (Associative processor):接收一条相同的指令,但在每个并行处理单元中,根据单元本地数据做出独立决策 ,决定是否执行执行或是否跳过执行。在现代术语中,这称为"谓词SIMD"。"谓词SIMD"可以让每个处理单元独立进行判断,比较适合在大规模数据库查询时进行数据过滤。
下面通过一个例子来理解并行计算:
一个指令的执行在逻辑上可分为五大阶段:
- IF = Instruction Fetch,拉取指令
- ID = Instruction Decode,解码指令
- EX = Execute,执行
- MEM = Memory access,拉取数据
- WB = Register write back,写回结果
下图左边 为依次执行 的指令:指令1、指令2......指令5。上边 为逐个完成的时钟周期,周期1、周期2......周期7。
在时钟周期4,指令1、2、3、4同时在执行,这就是 SIMD 分类中的流水线处理器。如果把这样的单个处理核心的执行流程,扩展到大量多个处理核心一起执行,就实现了 SIMT。
三、未来还需要CPU吗?
GPU 在大规模数据的计算上表现出很大的优越性,既然 GPU 这么强,我们还需要 CPU 吗?
答案是我们需要 CPU 。GPU 能对大量数据并行执行相同的操作,让上千个核心同时工作来快速完成工作,但 CPU 不能被取代。把计算机硬件抽象为一个工作团队,CPU 是大脑,是 "Leader",它能协调各组件,GPU只被指挥来负责大数据计算的"员工",工作的指示还是要 CPU 下达。