我在一台没有GPU支持的Mac电脑本上本地部署了stable-diffusion-webui,并生成了一张图。这张图大概需要10分钟的时间才能生成,但如果有GPU支持的话,只需要几秒钟就能完成。这让我深刻体会到GPU的算力比CPU强大得多。
GPU算力为啥远高于CPU
更多的处理单元
GPU在同样芯片面积上集成的处理单元数目远高于CPU。如NVIDIA Tesla V100有5120个CUDA核心,而同期高性能CPU核心数一般在10-32个。这使GPU可以高度并行化,一次可以执行成千上万个线程,实现超高的计算粒度和吞吐量。
图:NVIDIA Tesla V100
更简单的处理单元
GPU的处理单元更简单,主要针对高度并行的矩阵和向量运算优化。而CPU的处理单元复杂得多,需要支持各种串行指令和流控制,以实现复杂的逻辑运算和代码执行流程。
GPU简单的处理单元可以以更高密度集成在芯片上。
图:GA100核心架构图
内存带宽更高
GPU的内存体系结构专门为大规模矩阵运算和数据访问优化。它提供的内存带宽远高于CPU,这也是GPU高计算能力的重要支撑。大内存带宽可以保证GPU的成千上万个处理单元同时高效读取和写入数据。
图:Nvidia GTX 780 PCB 布局
专用的编程框架
GPU有专门为其打造的编程框架,如CUDA和OpenCL。
这些框架可以让程序员直接基于GPU体系结构进行编程,充分利用其高度并行的结构。而CPU的传统编程模型难以高效利用GPU的算力。
图:CUDA processing flow
GPU和CPU的对比表
GPU和CPU的主要对比如下表:
对比项 | GPU | CPU |
处理单元 | 成千上万个简单CUDA核心 | 几个复杂高性能核心 |
开发目的 | 图形学与科学计算 | 一般运算和控制 |
架构优化 | 高度并行,矩阵运算 | 混合运算与控制流 |
内存结构 | 高带宽,低延迟 | 较低带宽,较高延迟 |
编程模型 | CUDA, OpenCL | C/C++,汇编等 |
并行粒度 | 非常细(线程) | 较粗(进程) |
发展历史 | 2000年后迅速发展 | 上世纪80年代已成熟 |
主要应用 | 人工智能,科学计算 | 普适运算与控制 |
性能指标 | FLOPS(每秒浮点运算数) | GHz(时钟频率) |
代表厂商 | NVIDIA, AMD | Intel, AMD |
典型产品 | NVIDIA Tesla V100 | Intel Xeon |
所以,总体来说,GPU vs CPU的算力差异在于:
- GPU采用无数简单的处理单元和内存体系结构,以支持超大规模的并行计算。
- GPU有面向其体系结构的专用编程模型,可以更好地编写和优化程序。
- GPU专注于高度并行的数值密集型计算(如神经网络训练),这些工作负载可以高度利用其优化的硬件资源;而CPU需要处理更加广泛的工作负载,难以专注优化。
机器学习使用GPU
在2010年前后,深度学习的应用还非常有限,大多数研究人员使用CPU来训练模型。由于CPU计算速度较慢,深度学习模型训练时间非常长,限制了深度学习技术的发展。
2012年的ImageNet大规模视觉识别挑战赛(ILSVRC)。当时,由多伦多大学的Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton组成的团队,使用了两个NVIDIA GTX 580 GPU,训练了一个名为AlexNet的6千万个参数和 65 万个神经元的深度卷积神经网络。用于将 ImageNet LSVRC-2010 比赛中的 120 万张高分辨率图像分类到 1000 个不同的类别中。在测试数据上,他们实现了 37.5% 的 top-1 错误率和 17.0% 的 top-5 错误率,这比以前的最先进技术要好得多。
相关的论文也在2012年,由Alex Krizhevsky,Ilya Sutskever 和 Geoffrey E. Hinton发表《ImageNet Classification with Deep Convolutional Neural Networks》。 https://proceedings.neurips.cc/paper_files/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf
此后,随着深度学习技术的不断发展和应用,GPU被越来越广泛地应用于深度学习模型的训练中,并逐渐成为深度学习模型训练的标配。
由于深度学习模型的复杂度和数据量不断增加,GPU的计算能力逐渐无法满足需求,因此出现了专门用于深度学习的加速器,如Google的TPU、Nvidia的Tesla V100等。这些加速器采用了更为高效的计算架构,能够更快速、更高效地训练深度学习模型。
再后面随着深度学习模型的规模不断增大,单个GPU或加速器已经无法满足需求,因此出现了分布式训练。在分布式训练中,多个GPU或加速器同时训练同一个模型,以提高训练速度和效率。同时,也有一些开源的分布式训练框架,如TensorFlow、PyTorch等,使得分布式训练变得更加容易实现和使用。
这也是NVIDIA(英伟达) 随后股价狂涨的原因。