1.4.3 机器学习算法的主力引擎——GPU
“GPU”这个名词是1994年由SONY提出的,最早用于其PlayStation游戏机中。实际上,采用专用的协处理器处理图像并非SONY独创。早在1983年,日本任天堂(Nintendo)公司在推出的NES FC(Nintendo Entertainment System Family Computer,俗称“红白机”)中,就在CPU之外引入了一颗Ricoh公司的两台2C02处理器,专门用于图形处理,被称为“PPU”(Picture Processing Unit)。这就是GPU的前身。
图1-5所示是全球首台有专用图形处理器的计算机——任天堂FC。
图1-5
1999年,Nvidia推出了第一款标准化的GPU——Geforce 256,外观如图1-6所示。
图1-6
Geforce 256并非首个通过并行运算单元实现图形加速的产品。在Geforce 256之前,Nvidia还推出过STG2000、Riva 128、Riva TNT/TNT2等一系列3D加速卡,在市场上也存在3dfx Voodoo/Banshee等一系列竞品。那么,为什么说Geforce 256是一个跨时代的产品呢?
较为资深的计算机玩家可能知道,Geforce 256增加了对坐标转换和光源处理(Transform&Lighting,T&L)的计算能力。在此之前,3D游戏中的坐标转换和光源处理都是由CPU进行计算的。Geforce 256将这部分计算量从CPU中“卸载”(Offload),把CPU从繁忙的重复劳动中解放出来,使之能做更有价值的工作。从此,大型3D游戏的流畅度与CPU性能几乎实现解耦,更多地取决于GPU的性能。然而,Geforce 256之所以能成为划时代产品,另有其因。
在3D游戏中,一个非常重要的环节就是纹理贴图,比如在游戏“半条命·反恐精英”中可以通过替换材质(Texture)将手雷替换为可乐瓶。纹理贴图的实质是计算3D物体上的图片在第一人称视角平面上的投影,也就是计算3D建模中的每个空间三角形与第一人称视角平面之间夹角的三角函数。而三角函数又可以通过泰勒展开式转换为幂函数,最终通过加减乘除运算得到结果。因此,GPU的Texture Shader单元实际上有强大的并行数值计算能力,可以并行执行大量的加减乘除基本运算指令。工程师们通过Geforce的Texture Shader单元,就可以计算对流扩散方程(Convection Diffusion Equation,偏微分方程的一个分支)等工程数学问题的数值解。这也是GPU用于高性能数值计算的开始。
当Geforce系列的GPU演进到第10代产品时,Nvidia又引爆了一个跨时代的变革:CUDA(Compute Unified Device Architecture,统一计算设备架构)。在每颗GPU芯片内部都会集成一定数量的CUDA Core,每个CUDA Core都能够执行加减乘除等运算指令,并支持8bit、16bit、32bit和64bit的整数或浮点数,开发者可以很容易地通过CUDA运行时库(又称“CUDA库”)调用GPU进行任何算术运算,特别是进行并发算术运算。
从2008年起,伴随着人工智能、区块链和大数据等技术的流行,使用GPU进行通用计算的用户也越来越多。对于这些用户而言,GPU的显示功能实际上是无须存在的,可以将其去掉以节约成本和减少功耗。因此,Nvidia又推出了Tesla系列的GPU产品,即GPGPU(General-Purpose Graphics Processing Unit,通用图形处理单元),其特点是不具备显示功能,没有连接显示器的硬件接口,仅提供高性能并发计算功能。截至2024年5月,Nvidia最高性能的Tesla系列GPU为Nvidia B100和Nvidia B200。
除Nvidia外,业界也有其他GPGPU厂商,比如AMD(通过2006年收购ATI获得GPU设计生产能力)、寒武纪及海光信息等。
GPGPU目前是业界主流的机器学习算法依托的硬件计算单元。与此同时,对机器学习领域有较为深入研究的部分厂商,也基于自己的认知,做出了另一种选择。是什么呢?接下来会进行深入讲解。