深度学习之全面了解 GPU

在这篇文章中,我们将和大家一起探讨 GPU 这个主题,解释相关背景知识,并就我们从 MathWorks 社区收集的一些问题进行解答。

本文的主题是使用 GPU 进行深度学习。我将概括介绍这一主题,然后探讨以下三个问题:

1. 人们常说 GPU 可以“加快训练”,但究竟可以加快多少?

2. 我是否必须购买(真正)快速的 GPU,才能在 MATLAB 中训练神经网络?

3. 如果不使用 GPU 进行深度学习,我还可以有哪些选择?

对包含数千乃至数百万数据样本的大量数据以及复杂的网络架构进行处理时,GPU 可以显著缩短训练模型的处理时间。若非得益于此,当今的众多深度学习解决方案都无法实现。

图片

    ◆  

引言

GPU 的确很出色,但 GPU 究竟是什么呢?

GPU 即图形处理单元 (Graphics Processing Units),顾名思义,它的设计初衷是用来处理图形。

GPU 可以并行执行多个计算,因此非常擅长处理大量简单任务,比如像素操作等。

GPU 的主要使用场合是图像分类,但其快速计算也适用于信号数据处理。

在很多情况下,“图像”都是采用数据预处理方法基于信号生成的,这些方法将信号转换为其三维时频表示(这些图像随后即用于深度学习训练,训练时会直接从时频图(图像)而不是原始信号中学习特征。

为了进一步提速,我们还可以使用 GPU Coder 创建 CUDA 代码,以在 NVIDIA GPU 上直接运行。

不同于包含四个或八个强劲内核的 CPU,GPU 往往包含数百个并行工作的较小内核。每个 GPU 内核都可以执行一些简单的计算,但内核本身算不上十分智能。GPU 强大的计算能力来自暴力破解,即动用全部内核执行卷积、ReLU 和池化等深度学习计算。

如果您想了解更多信息,请点击“阅读原文”,参见 MATLAB 如何支持 GPU 计算,但接下来是我们的问答环节

    ◆  

Q1

我看到各种有关 GPU 可以加快深度学习训练的宣传,细节却语焉不详。如果无法确保真正实现提速,我并不想浪费时间来考虑购置 GPU。那么,我应该对提速效果抱有何种程度的合理预期?

实话实说,这真的取决于实际情况。具体能实现多大提速,部分取决于以下因素:

  • 输入数据量足够大:数据集越复杂,GPU 对训练的提速效果越明显

  • 网络结构的复杂程度:执行的卷积和计算越多,所需的时间就越长

  • 硬件:最初的配置和之后的发展

GPU 未能加快训练的情形较为罕见,但在某些情况下,使用 GPU 可能有杀鸡用牛刀之嫌,例如处理一维输入数据、向量数据或少量输入数据。

以分类示例这个简单的深度学习为例,该示例使用小尺寸 (28x28px) 的图像,并且只有几层网络。(https://ww2.mathworks.cn/help/deeplearning/ug/create-simple-deep-learning-network-for-classification.html)

使用 CPU 训练该数据集只需几分钟即可完成,这种情况下,GPU 根本发挥不出多大的作用。

造成这种情况的原因显而易见:若输入数据量较小且不需要网络执行太多计算(使用较少的网络层),就无法体现出 GPU 在并行和加速方面的优势。

我建议您最好能借用一个 GPU 或注册一些基于云的 GPU 资源,然后测量一下训练时间的差异。相比“预期”或“预测”优势,实际测量结果或许更有说服力!

最后一点,和 CPU 一样,GPU 总是一代比一代更快。您可以上 NVIDIA 官网,查看相关性能数据。

Q2

我是 MATLAB 用户,想要训练神经网络。是否需要购买快速的 GPU?

我想从这个问题中挑出两个词:“需要”和“快速”。

“需要”意味着必要性,这个问题只能由您自己来回答。您是否受命于上级,需要在非常有限的时间内将某个神经网络投入生产?

如果是,则答案是肯定的——当然需要!

如果没有快速 GPU,您的训练能否开展?倒也未必不能。

可见,这还是取决于您。

那么,您是否需要“快速”的 GPU 呢?

正如上一个问题,这同样取决于您的实际需求,但我们在此忽略技术细节,只是假设您有一定的时间压力,从而将此问题转化为“我如何确定我需要什么样的 GPU?”

和一般的计算机硬件一样,GPU 也会更新换代,因此您会希望训练模型所用的 GPU 与同行当前所用的保持一致。

与上一个问题类似,以下因素可能会导致结果有所不同:

  • 您有多少数据?

  • 有多少训练类?

  • 是什么样的网络结构?

连笔记本电脑都有 GPU,但这并不意味着它能够应对深度学习的计算需求。

前不久,我的耐心上限遭遇挑战。我尝试运行一个深度学习模型,但速度极慢。我碰到了一位开发者朋友,觉得可以向他请教问题所在。我们逐一排查了网络的复杂度(基于 ResNet-Inception)、图像的数量(数十万)和类的个数(约 2000 类)。但我们还是不明白为什么几个小时都没法跑完训练。

随后我们把目光投向硬件。

我提到我用的是 2014 年版的 Tesla K40,他毫不客气地笑出了声。太尴尬了,感觉有被冒犯到。

不过,尽情嘲讽完我的硬件之后,他慷慨分享了自己的 Titan X。处理速度毫无悬念地提高了,而我们的友谊也重归于好。

这个故事告诉我们,硬件发展日新月异,与你分享 Titan X 的朋友才是真朋友。

这里还有一个更为详实的案例:我的同事 Heather Gorr 运行了文档中的这个视频分类示例,她使用相同的数据和网络,但采用不同的硬件配置,最终的处理时间差异明显。这篇文章详细介绍了整个过程:https://blogs.mathworks.com/deep-learning/2020/01/30/activity-classification-demo/

图片

图片

图片

注:两次测试均启用了训练图,以便监控和截图。类的个数并非造成差异的关键,关键在于类的个数越少,所用的输入样本量越小。要想让训练时间真正发生变化,您所能做的就是改变每个类中的数据量。

下表是我整理的一些土豪级和平民级 GPU,包含部分标准参数:

图片

注:价格截至 2020 年 4 月 2 日,之后可能变动。

硬件过时就会降价,虽然刚才还在吐槽我的 Tesla K40,但它毕竟只要 500 美元。

如果您的资金并不充裕,就不要跟风最新顶配。每一年,GPU 制造商都在不断推出更新、更快的 GPU,于是,老型号吸引力随之减退,也不再那么昂贵。

实际上,不妨看一下 RTX 2080。作为一块不错的 GPU,它只需不到 1000 美元。

Q3

我没有 GPU 可用。我该怎么办?

放心,您还有其他选择。

首先:可以使用云资源。

例如,使用 NVIDIA GPU Cloud (NGC) 和云实例,您可以在云端取用 4 个、8 个甚至更多 GPU 以并行运行多个迭代,还可以在多个 GPU 之间分布训练。这应该有助于加快处理速度,而且,云上的 GPU 不会像买来的一样随着时间推移而过时。云≠免费,因此即便前期成本相对较小,也仍需付费。

其次:针对 CPU 进行优化

您可以运行多核 CPU 训练。您仍可以将多个 CPU 内核当成一个低效的 GPU 使用,总好过什么都没。

除此之外,您还可以更换算法。您可以不做训练,而是通过网络执行“激活”。您可以跟随这个示例了解如何执行激活:https://ww2.mathworks.cn/help/vision/ug/image-category-classification-using-deep-learning.html

图片

迁移学习比从头开始训练花费的时间要少。您可以利用从先前训练中学习到的特征,重点关注网络中的后期特征,从而了解新数据集的独特特征。

最后:借用 GPU,然后使用 CPU 进行测试

假设您已经成功地训练了网络,使用 CPU 就能很好地进行推断。与 GPU 相比,速度差异更为可控,而且我们还改进了这些网络基于 CPU 的推断性能。

   免费分享一些我整理的人工智能学习资料给大家,整理了很久,非常全面。包括一些人工智能基础入门视频+AI常用框架实战视频、图像识别、OpenCV、NLP、YOLO、机器学习、pytorch、计算机视觉、深度学习与神经网络等视频、课件源码、国内外知名精华资源、AI热门论文等。

下面是部分截图,加我免费领取

目录

一、人工智能免费视频课程和项目

二、人工智能必读书籍

最后,我想说的是,自学人工智能并不是一件难事。只要我们有一个正确的学习方法和学习态度,并且坚持不懈地学习下去,就一定能够掌握这个领域的知识和技术。让我们一起抓住机遇,迎接未来!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以点击链接领取 

二维码详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值