使用GPU训练神经网络的历史

发布时间 2023-04-20 10:43:33作者: 蝈蝈俊

我在一台没有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的算力差异在于:

  1. GPU采用无数简单的处理单元和内存体系结构,以支持超大规模的并行计算。
  2. GPU有面向其体系结构的专用编程模型,可以更好地编写和优化程序。
  3. GPU专注于高度并行的数值密集型计算(如神经网络训练),这些工作负载可以高度利用其优化的硬件资源;而CPU需要处理更加广泛的工作负载,难以专注优化。

机器学习使用GPU

使用GPU做机器学习,最早的论文是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

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 错误率,这比以前的最先进技术要好得多。

在看到GPU强大的训练能力后,后面用GPU训练神经网络变成了标配。

这也是NVIDIA(英伟达) 随后股价狂涨的原因。