题图:2020年5月黄仁勋从自家烤箱中端出“世界上最大的显卡”——NVIDIA A100。
按语:简中关于英伟达、加速计算、数据中心、以及CPU/GPU/DPU/TPU各种XPU的内容实在太少了,券商研报大多集中在“游戏+数据中心双轮驱动”、“搭建生态”、“研发为体、AI为翼”……之类似是而非的东西。这种知识荒漠的感觉非常令人困惑。这个周末做了不少elaborating,看了大量英文资料,稍微理出来一点。
说实话我也是一名韭菜,前几年炒币热和元宇宙热的时候知道了之家公司,后来元宇宙泡沫破裂,NVDA业绩不及预期,我以为就结束了,并没有真正意识到这家公司的价值。直到今年业绩股价双双炸裂,才开始重新关注这家公司。我越来越意识到,人类的未来就在这些公司,我们做不了人家做的事,但至少要知道人家在做什么。
CUDA Core(CUDA核)是被应用于GPU中完成计算任务的一个个最小的单元(Processing Unit)。有些文章说GPU的CUDA核与CPU的核没有分别。这话大体上没错,CUDA core和CPU core本质上是同一个东西,都是运算处理器,即Processing Unit。
而两者的不同就在于,从设计思想上,GPU的理念是让每个核去做很简单的事,并同时有很多个核在做事。这个理念就是大名鼎鼎的并行计算(Parallel Computing)。而CPU的理念是让每个核做很复杂的事,而同时做事的核数量并不多。
既然这样,那为什么不叫CPU核,或者简单点就叫“核”,而要叫CUDA核?这就要谈谈CUDA是个什么东西。
CUDA四个字的意思是Compute Unified Device Architecture,中文意思是“统一的计算设备架构”。
CUDA的精髓其实在于Unified这个字。
CUDA的理念最先于2006年被英伟达提出。在此之前,英伟达于1999年首先推出GPU,即图像处理器(Graphics Processing Unit),于2003年首先将GPU用于非图像处理领域,包含蛋白质编码、股票期权定价、数据库调用等,提出了通用目的图像处理器(General Purpose GPU,也叫GPGPU)的理念。
但是这些领域对GPU的使用需要涉及API接口以及算法语言,例如DirectX、OpenGL以及Cg等,因此会造成几大困难:(1)程序员需要具有相当多的关于API接口和GPU架构的知识才能完成编程;(2)应用领域的具体问题需要被“转译”为矩阵坐标、材质、着色等语言才能被GPU所“听得懂”,因此极大地增加了使用的复杂性;(3)GPU不支持基础的编程特征,例如随机读写等;(4)不支持双精度导致了许多科学领域应用无法在GPU上面跑。这些问题使得英伟达在2006年做出创新。
(英伟达GeForce 7900芯片结构,也就是在Tesla架构推出之前的久远年代的产品形态)2006年,英伟达做了两件事,第一是推出了“统一”(Unified)的架构“Tesla”,以及具有划时代意义的显卡系列G80,具体产品上,最初是GeForce 8800、Quadro FX 5600和Tesla C870。(注意这里的Tesla是英伟达的架构名称,不是那个汽车品牌,“架构”的英文是Architecture)第二件事是上线了CUDA平台——这是一个软硬件结合的架构平台;在CUDA的帮助下,GPU变得更加“可编程”(programmable),也就是可以用相对高级的语言,主要是C、C++、和Fortain。至此极大地降低了程序员为GPU编程的难度和复杂度。而在GPU显卡中完成简单计算任务的每一个处理单元(Processing Unit)就被叫做CUDA core。(英伟达基于Tesla架构G80平台GeForce GTX 8800显卡结构,可以看出与上一幅图的7900有本质上的不同)第一代Tesla架构(也就是G80系列)显卡中有多少个CUDA核呢?128个。到2008年,英伟达对Tesla架构进行了一次升级,推出GT200系列,产品层面推出GeForce GTX 280, Quadro FX 5800和Tesla T10,这些显卡搭载CUDA核的数量提升到240个。到近代推出的显卡产品中,CUDA核的数量已经成千上万,例如GeForce RTX 4090这张显卡上面就集成了16384个CUDA核!伴随着核数的增加,运算速度与运算效率都极大地提升!概括而言,CUDA核与传统CPU的核没有本质区别,完成纯量计算(Scalar Computing),但是比传统CPU核的计算任务简单,以数量取胜。在英伟达的CUDA平台下,开发者可以对其编程,已完成specific的计算任务。(纯量计算与张量计算的概念后面介绍)那么Tensor Core(Tensor核)又是为何物?Tensor是数学概念,叫做“张量”,是线性代数里面比较难的部分。简化来讲,可以把张量理解为多维空间里面的矩阵。举个最实际的例子,股票的K线图其实就是一个巨大的张量。以天为单位,每天有开高低收四个价格,这就形成了一个四维矩阵,而1年365天每天都有开高低收四个价格,这就加了一个维度,即时间。而不同的股票又增加了一个维度。而每只股票又有许许多多个期权构成的期权链,这又增加了许多维度。而每个因素动一动,所有其它变量都要跟着动,所以这里涉及的计算量是极大的。当然股票这里还有分形学的问题,即不同的时间周期都能形成自己的张量,也就是我们常说的分钟K线,小时K线之类的。这无疑使得问题更加复杂。因此张量计算就是处理N维矩阵之间的计算,而张量核(Tensor Core)的特征就是每次个时钟周期都完成一次N维矩阵的张量计算。这里的N可能不止四维五维,有可能是成百上千,甚至是几万或几亿。这取决于具体Tensor Core的算力。因此张量核的数据流通量是巨大的,而当初为图像图形处理而设计的CUDA核就无法满足张量计算的庞大工作量。这张图生动地诠释了张量计算(Tensor)与纯量计算(Scalar)和矢量计算(Vector)之间的差别。图中第一个Pascal架构纯量计算,而后三个是不同精度Tensor Core的Turing架构矢量计算因此,于2017年,英伟达推出第一代Tensor Core,以及基于Tensor Core的架构——Volta和V100产品系列。V100搭载了640个Tensor核,平均计算速度是此前Pascal架构下GPU产品的5倍。(英伟达平均每两年更新一代架构,因此从2006年到2017年之间经历了五次架构升级,分别是Tesla、Fermi、Kepler、Maxwell、Pascal。到2017年Volta架构取代Pascal架构。)纯量计算的Pascal架构与张量计算的Volta架构2017年至今的6年间,英伟达进行了3次Tensor核架构的换代升级,分别是2018年推出的Turing架构(T100系列)、2020年的Ampere架构(A100系列),以及2022年新鲜热辣的Hopper架构(H100系列)。最后这些名字大家听着耳熟能详,这已经是很近代的事了。当然,基于CUDA核处理纯量计算的强大能力,目前游戏显卡和笔记本显卡中依然在使用CUDA核,就像前面提到的比较晚近的产品像RTX 4090中,用到的CUDA核的数量普遍成千上万。但是在涉及机器学习(Machine Learning)和深度学习(Deep Learning)等领域,则Tensor核的优势就更加明显,因而使用也更加广泛了。例如英伟达为其大型企业客户提供的使用A100或H100芯片的人工智能计算平台DGX系列,毫无疑问是在用Tensor核。
自Volta起至Hopper架构下各自使用CUDA Core与Tensor Core所支持的计算精度列表最后的一个问题是:英伟达的基于Tensor Core的GPU与Google在早些年(例如2016年AlphaGo)推出的Tensor Processing Unit(TPU)有什么分别?简单的理解是这样的:Google的TPU是一种专用集成电路(Application-Specific Integrated Circuit,ASIC),而英伟达的GPU毕竟还是GPU。GPU的特点最初是擅长图像处理,后来在英伟达手中被打造成了万能神器,尤其是配合上编程平台CUDA——而Tensor Core是对最初的CUDA Core的运算速度和运算精度进行了升级。而TPU则是专门为机器学习和深度学习等目的而设计的结构,它在一定程度上降低了计算精度(Precision)的要求,而提升了信息流通量(Throughput),同时TPU的内部带宽也较GPU有所提升,以便更好地进行高维度张量的计算;相反TPU的内部存储量则有所降低。总之,GPU是高度灵活的处理器,可以根据使用者的编程去完成多种任务;而TPU是Google公司专门为神经元网络机器学习的目的而打造的专用集成电路。GPU在一定程度上可以完成TPU的任务,但结果也许不如TPU理想,花费的时间可能也比TPU更长。反过来让TPU去处理图形则可能会比较糟糕。Google前两代TPU(2015-2017年)主要for公司内部使用,自2018年开始推出第三代TPU开始外销。在这里可以看到,巨头之间的竞争从来都是很激烈的,彼此之间就差一两个身位,将来哪天一旦神经元网络领域搞出什么落地的类似ChatGPT的东西,Google分分钟变成一个小英伟达也绝对是情理之中。