为什么GPU比CPU更适合做机器学习训练?

数码好在云体验 2024-03-25 09:06:49

本文介绍GPU的架构,以及GPU为什么适用于AI工作负载,为什么GPU比CPU会更擅长训练机器学习模型,以及如何选择GPU的配置。

GPU的核心优势:并行处理

GPU最大的特点就是并行处理能力强,之所以这么强,离不开它的处理器架构。

深度学习依赖矩阵运算,这种计算通过GPU提供的并行计算能力得以有效执行。

比如,模型需要拿到输入数据的,比如数据的是一张图片,就需要通过关联矩阵识别图片中的特定对象。矩阵会总结一个数据集,识别出模式,最后会返回一个结果。如果识别出对象,模型就将其标记为“True”;否则,标记为“False”。

图 1. 简化的深度学习训练过程

常见的深度学习模型大约都有数十亿个参数,每个参数都对用于矩阵计算中的权重大小作出贡献。每次进行"True"、"False"识别时,都要利用这数十亿个参数执行数十亿次的矩阵计算。

值得注意的是,这些矩阵计算是并行执行的。恰好,GPU由于其并行处理能力,非常适合进行此类操作。这种能力是通过将更多晶体管专用于数据处理来实现的。

核心架构:张量核心

英伟达的张量核心(Tensor cores)是硬件为深度学习以及AI优化的典型产物。张量核心是一种特殊的处理器,它专门为深度学习所需的数学计算而设计,此前的核心还被用于视频渲染和3D图形处理。

这里的“张量”指的是张量计算,即矩阵计算。张量其实就是一种数学概念,如果一个张量有两个维度,那么它就是一个矩阵

上图展示的是Volta架构的显卡的矩阵运算(图:英伟达)

从2017年开始,英伟达在Volta架构的显卡中加入Tensor Core张量核心。比如,Tesla V100有640个张量核心,是英伟达专门为人工智能打造的显卡之一。这些有了张量核心的芯片对深度学习行业发展有推动作用。

多GPU集群

推动机器学习训练发展的另外一个重大创新是多GPU集群。其实就是通过让多个GPU一起干活儿,大幅提高吞吐量。这在训练具有数十亿乃至数万亿参数的大模型时特别有用。

这种场景下,最有效的方法是使用NVLink和InfiniBand等网络技术来横向连接多个GPU。这些高速接口允许GPU绕开CPU这个中间商,直接交换数据,这能大幅提高数据交互的效率。

上图展示的是通过NVLink连接多个H100的示意图(图:英伟达)

NVLink是英伟达开发的高速互联技术,用于GPU与GPU,GPU与CPU之间连接的技术,为了提高连接的灵活性和复杂性,还开发了NVLink Switch系统,通过这套交换机系统,在一个集群里,用户可以最多连接256块显卡,获得超强的带宽。

当一个集群里有这么多显卡的时候,训练大型模型的时间就能大大缩短。尽管市场上也有很多同样专注于AI场景的显卡厂商,但英伟达是不折不扣的领导者。

GPU与CPU的对比

CPU通常是按顺序执行任务,遵循先进先出(FIFO)的原则。这意味着CPU处理任务是串行的,即一个任务完成后才开始下一个任务。由于CPU通常只用一个核心来执行一个接着一个的任务,所以它们更适合处理串行任务。

此外,CPU支持的指令种类比GPU多,能执行更多种类的任务,并且与计算机的更多组件如ROM(只读存储器)、RAM(随机存取存储器)、BIOS(基本输入输出系统)和输入/输出端口等进行交互。

GPU则主要进行并行处理,通过将任务分配给多个核心来处理任务。GPU可以看作是一种高级计算器:它只能接收有限的指令集,并且只能执行与图形和人工智能相关的任务,比如矩阵乘法。

在面对并行计算时,这实际上是一个优势,因为它允许有更多的核心专门用于这些操作,可以通过大量并行操作来提高任务执行的效率。

不难发现,一般的消费级显卡有几百到几千甚至上万个核心,这些核心可以快速并行执行简单的操作。而常见的消费级CPU则有2到16个核心,这些核心主要用来执行复杂的顺序操作。

简单来说,对于深度学习、机器学习负载,GPU更适合,因为它提供了更多的核心来更快地执行必要的计算。

常见的CPU是2到16核,而GPU的Core经常好几千(4090有16384个CUDA核心)

GPU的并行处理能力,主要是通过将更多的晶体管用于数据处理来实现的。与依赖于数据缓存和复杂流程控制的CPU不同,GPU的并行计算能力可以大幅降低数据访问延迟,提高计算效率。

CPU运行时,经常需要去缓存中找数据,如果缓存中没有,就得从内存中去找,这样就造成了延迟,会减慢程序的执行速度。

而GPU有许多核心来同时执行计算,当一部分核心在等待数据从内存中读取时,其他核心可以继续执行其他计算任务,这样就减少了总体延迟。

此外,GPU用的是显存,比如,GDDR5还有GDDR6,这些也都比CPU常用的DRAM,比如DDR3和DDR4要更快。

为什么GPU比CPU更适合做机器学习训练

深度学习任务通常需要在内存和处理核心之间传输大量数据,这就要求有一个高效的内存架构来支持这种高速数据传输。

显卡有一种特别优化的内存架构,能够提供比CPU更高的内存带宽。即使显卡的内存容量技术上与CPU相同或更少,它们仍能实现更高的数据传输速率。

GPU常使用高带宽内存(HBM),这种内存专为提供高速数据传输而设计。例如,一块只有32GB HBM的显卡可以达到极高的内存带宽,还有14 TFLOPS(每秒万亿次浮点运算)的计算能力。

相比之下,CPU即使有数百GB的内存,也只能提供很低的带宽和很低的计算能力。当然,为了解决这一问题,英特尔也推出了支持HBM内存的至强CPU MAX系列,这一产品主要用于高性能计算领域,而非通用计算领域。

考虑到显卡其实比较贵,对于一些轻度使用的用户,或者明确知道自己要用GPU做什么的时候,除了直接下手买,也可以考虑使用云上的GPU资源。

至少在机器学习场景,GPU经常是更合适的选择,要处理的规模越大,GPU的优势就越明显。

也有人会说,这些也都不一定。

有些AMD的处理器,比如AMD的EPYC 9004系列,在某些人工智能(AI)工作负载上比消费级GPU还要快。

某些算法优化可以使深度学习模型在CPU上训练得更好。例如,赖斯大学的工程学院开发了一种算法,使得CPU在某些AI任务上比GPU快15倍。

在深度学习模型的精度要求不高时,可以使用量化和量化感知训练技术来训练DL模型,将它们四舍五入为整数。CPU在处理整数时比GPU快,此时的速度会更快,但结果可能不那么精确。

不过,使用CPU进行深度学习训练仍是非主流的做法,大多数深度学习模型都是为并行计算设计的,就是面向GPU硬件而设计的。大部分人还是会直接选择GPU。

0 阅读:1

数码好在云体验

简介:感谢大家的关注