随着Nvidia(英伟达)的股价屡创新高,其市值短短几年突破1万亿、两万亿和三万亿大关,这家依靠GPU发家的厂商在AI领域发挥着越来越重要的基础设施作用。Nvidia是如何在过去30年中崛起的?本文简单回顾并探讨一下GPU发展的简史。
GPU,全称Graphics Processing Unit,图形处理器,最早诞生于上个世纪90年代初。随着计算机技术的发展,游戏领域开始出现3D游戏。和2D游戏相比,3D游戏能提供更真实的游戏体验,但它带来的一个问题就是,3D游戏的计算量和2D游戏相比大大增加。
于是问题来了:3D游戏加速的重担,究竟是让CPU来扛,还是让显卡来扛?
历史的重任还是交给了显卡,因为显卡本身承担着2D加速的任务,再加一个3D加速的功能可以让游戏玩家玩得更爽,因此,GPU,作为游戏加速的芯片,就加到了显卡中。
然而,上个世纪90年代,做GPU的都是业内赫赫有名的实力派显卡厂商,比如3dfx,Trident,ATI等,Nvidia只是众多不起眼的一个小厂商。当时3dfx推出的高性能3D加速卡Voodoo一度是游戏玩家的首选,并且他们还搞了一个Glide API作为3D加速的软件接口。在当时,3D加速接口除了Glide API,还有跨平台的OpenGL,以及微软自己的Direct3D。
Direct3D在最初很长一段时间都没有OpenGL流行,但Nvidia做了一个简单而重要的决定,即放弃支持其他的3D接口,全力支持微软的Direct3D。随着Direct3D的版本迭代并在游戏中应用越来越广泛,Nvidia的3D显卡逐渐成为市场的头号玩家,并于2000年收购了3dfx的大部分资产。
GPU,实际上诞生于90年代初,但GPU这个名字,直到1999年才由Nvidia为了推广它的GeForce256芯片才正式提出。
随着历史的行程来到2008年,中国人民正在喜迎奥运,美国人民也喜提次贷危机。此时,一个叫中本聪的神秘人物提出并设计开发了一种点对点的电子现金系统,他把这个系统命名为比特币。通过挖矿的形式,以强大的密码学理论为基础,比特币成为人类历史上第一个加密货币。挖矿,则是当时网络极客的一种行为艺术。
比特币和GPU看似不相关,但这个世界是万物互联的,冥冥中自有安排。在2010年,一位早期比特币持有者决定用1万个比特币买了两个披萨,这一史诗级事件让比特币第一次有了定价,即10000BTC=$25。
实际上披萨哥并不是普通人,他是早期比特币核心开发者。他有一台高性能游戏电脑,因为挖矿,披萨哥意识到GPU巨大的并行计算能力可以大大提高挖矿速度,所以,披萨哥编写了第一个GPU挖矿程序。由于GPU挖矿效率碾压CPU,大家迅速转向了GPU挖矿。但比特币的GPU挖矿并没有持续多久,就被ASIC挖矿取代了。
GPU并行算力虽然非常强大,但是它毕竟是为图形加速设计的,而比特币挖矿所需的SHA-256算法只能利用GPU的一小部分能力。如果设计一种专用的只能进行SHA-256并行计算的芯片,则可以大大提升挖矿效率。针对比特币挖矿的ASIC芯片最早诞生于2013年,迅速取代了GPU挖矿与FPGA挖矿。
虽然GPU很快不再用于比特币挖矿,但是又一个名叫Vitalik的小伙因为对比特币提出的改进不被社区接受,他决定开发一个新的区块链系统——以太坊。以太坊设计为与比特币类似的挖矿机制,但以太坊的挖矿算法不是简单的SHA-256,而是故意设计的一种极其消耗内存的Ethash算法,这使得针对以太坊的ASIC芯片因难产而迟迟不能面世。因为比特币的ASIC芯片对内存几乎没有需求,但以太坊的ASIC芯片如果加上巨大的内存那不就变成显卡了嘛,所以,GPU挖矿一直是以太坊矿工的主流选择。
Vitalik曾经来北京拜访过火币并为以太坊募资,在他详细介绍了以太坊的相关技术后,火币拒绝了向以太坊投资。
在2021年以太坊价格暴涨的牛市中,市面上所有能用于挖矿的Nvidia显卡如3070等都被一抢而空,挖矿这个市场竟然意外成了Nvidia的重大收入来源。这可苦了全世界的游戏玩家,游戏玩家想要更新显卡,竟然得加价购买期货!这种情况一直持续到2022年,以太坊最终完成了PoW挖矿向PoS挖矿的转变后,加密市场从此不再需要GPU来挖矿了。
实际上,Nvidia很早就意识到GPU不仅可以用于3D游戏加速,也可以作为一个通用的并行计算平台,去完成那些需要大规模并行计算的任务。早在2007年,Nvidia就推出了基于通用计算的GPU软件平台——CUDA:Compute Unified Device Architecture。CUDA定义了一种并行计算的软件接口,它不再专为游戏进行计算,而是一个并行计算的编译、调度和执行的软件平台,这样就可以让许多需要大规模并行计算的科学计算能在CUDA上运行,并最终由GPU实现加速。
在2012年,AI三巨头之一的Hinton带领他的两个学生——其中之一就是后来OpenAI的首席科学家,开发了一种基于CNN神经网络的图像识别系统AlexNet,当时的神经网络计算量非常巨大,程序运行十分缓慢,因此,Hinton建议他的学生试试CUDA。结果,通过CUDA使用GPU加速,Hinton的三人组轻松击败有百倍、千倍算力和人力的大公司,获得ImageNet竞赛冠军,随后谷歌就收购了Hinton刚成立的三人公司。
由于AlexNet的成功,所有AI算法都开始采用GPU加速。Nvidia意识到AI加速和游戏加速需要的GPU实际上不是重叠的,游戏加速的很多功能,如纹理贴图、光线追踪等,AI加速用不到,因此,Nvidia把GPU分为游戏专用GPU和AI专用GPU,后者有了个新名字叫GPGPU:General-Purpose GPU(通用计算图形处理器),用于AI加速的GPGPU没有游戏功能,只能放到服务器上使用。
早期的CUDA程序必须使用C++编写,十分繁琐。而现在,使用Pytorch这类AI框架训练时,只需要写NeuralNetwork().to('cuda')
就可以通过CUDA实现GPU加速。
关于Nvidia最有意思的故事还是老黄自己讲的,当年他创办Nvidia,给他妈妈打电话,告诉她自己创办了一家芯片公司。他妈妈问做什么用的,他说可以让大家更好地在家打游戏。他妈妈想了想说:“你还是找个班上吧”。
与这个故事对应的还有另一个故事,就是米哈游实际上有4个创始人,其中一人因为“找了个班上”而把自己的股份以一万多块钱转让了。
最后,让我们回顾GPU发展的30多年,相信大多数人可以得出一个结论:游戏不是洪水猛兽。相反,游戏,是世界上最具创意的天才程序员开发的软件艺术品,他们以各种意想不到的方式在推动计算机软硬件的发展。GPU,为游戏而生,一度成为矿卡,现在却变成了AI的基础设施。