2万元「煤气灶」Titan RTX做深度学习?机器之心为读者们做了个评测 2019-04-18

 Synced Lab 原创

分析师:AnguliaChao, Hecate

策划:H4O, Mos, 之乎

2018 年 12 月,英伟达在加拿大蒙特利尔 NeurIPS 大会上发布最新款产品 Titan RTX,作为 2017 年 Titan V 的「继承者」,Titan RTX 价格更低,显存更大,性能更强,且使用图灵架构,具备强大的光线追踪能力。因此,Titan RTX 的发布对 AI 社区而言,是不是做深度学习的一个不错选择呢?

在英伟达的支持下,机器之心评估了 TensorFlow、PyTorch 和 MXNet 三种框架在 Titan RTX 上的性能,从而为开发者提供组合机器学习任务、框架和硬件的正确洞见。

1. 引言

毫无疑问,GPU 对于机器学习从业者来说一直扮演着非常重要的角色,尤其是在需要大量并行计算能力的深度学习领域。由于英伟达 CUDA 架构 [1] 的出现,开发者得以利用 GPU 的并行计算能力,不需付出额外的努力就能实现通用计算。自 2007 年初首次推出 CUDA 以来,英伟达一直在改变 GPU 市场的格局以及深度学习等 GPU 驱动的应用。

继 2018 年秋发布最新的图灵架构并推出 GeForce 20 系列以后,英伟达最终于 2018 年末发布了 Titan RTX。表 1.1 展示了 20 系列 GPU 及 10 系列代表性 GPU 1080 Ti 之间的主要差别。除了晶体管体积、CUDA Core、内存容量、内存带宽上的升级之外,20 系列还增加了 Tensor Core 和光线追踪(RT)核两个主要新部件。Tensor Core 使得 Titan RTX 可以实现高速浮点运算以及大型矩阵运算。Tensor Core 用深度学习超级采样(DLSS)代替抗锯齿(anti-aliasing)。RT Core 用于生成反射和阴影。

表 1.1:英伟达 Titan RTX 及其他主流英伟达 GPU 之间的参数差别。

强大的 GPU 促进了整个机器学习和深度学习社区的繁荣。由 GPU 支持的流行框架已经发布并迭代更新。TensorFlow、PyTorch 和 MXNet 是具备 GPU 支持的、使用最广泛的三种框架。虽然这些框架被设计为通用机器学习平台,但是它们的设计、架构和实现的内在差异导致了 GPU 上机器学习性能的潜在差异。例如,在 VGG16 训练测试中,TensorFlow 的训练速度比 MXNet 快了 49%,PyTorch 比 MXNet 快了 24%。这种差异对于机器学习从业者来说非常重要,他们在选择带有特定类型 GPU 的适当框架时必须考虑时间和金钱成本。

我们的目标是评估 TensorFlow、PyTorch 和 MXNet 在 Titan RTX 上实现的性能。此外,通过运行各种混合精度和单精度标准模型的训练阶段和推理阶段,我们不仅收集了训练/推理的进度数据,还记录了 GPU 利用率、内存利用率等实时的操作系统(OS)指标。这些操作系统级别的指标进一步帮助区分各个框架利用底层硬件的能力。

安装了 Titan RTX 测试台上的实验表明,在 ImageNet 和 COCO2017 这样相对较大的数据集上,TensorFlow 和 PyTorch 的训练速度可能比 MXNet 略快。但在相对较小的图像上,MXNet 有最好的训练表现。这一转变相当有趣,可能表明 TensorFlow 和 PyTorch 在数据密集型任务的优化上较有潜力,而 MXNet 在一般的机器学习处理上较好。

另一个有趣的点在于,混合精度在深度学习中表现非常好,在我们选择的所有实验中,我们不牺牲准确率就能提高训练速度。这表明,混合精度有成为深度学习训练主流的潜质。

2. 背景

2.1. RTX GPU 系列

我们从英伟达拿到的 GPU 是一个图灵架构的 Titan RTX。与现有的 PC GPU 相比,Titan RTX 是针对 PC 用户的最快的显卡。GPU 的高计算效率驱使开发者们在设计分布式机器学习框架时引入 GPU。

谷歌大脑于 2015 年冬发布了其第二代机器学习框架 TensorFlow。Facebook 于 2015 年秋发布了 PyTorch。由于 PyTorch 的纯 Python 式开发风格,其一经面世就受到了 Python 社区的热烈欢迎。Apache MXNet 已经由最初的学术版 [2] 发展为今天的 Apache 孵化项目。亚马逊已将 MXNet 选为其 AWS 上的深度学习框架。这三种机器学习框架在业界和学界得到广泛使用。我们的评估将基于这三个框架来涵盖大多数机器学习从业者。

GPU 评估领域有着丰富的文献资料。多数评估报告旨在指出不同 GPU 在标准机器学习模型上的性能差异。TensorFlow 拥有内建的性能测试基准,包含两块建立在 Tesla 架构上的 GPU——英伟达 P 100 和英伟达 K80[3]。MLPerf (https://mlperf.org/results/) 系统地评估了一系列平台,包括谷歌 TPU、英特尔 CPU、英伟达 GPU 等。

截至本报告撰写之前,MLPerf 还未将最近的英伟达 GPU(如 Titan RTX)包含在内。AI 基础设施公司 Lambda 就 2080 Ti TensorFlow GPU 基准发布过一篇博客(https://lambdalabs.com/blog/best-gpu-tensorflow-2080-ti-vs-v100-vs-titan-v-vs-1080-ti-benchmark/)。

在该博客中,评测人员在英伟达 2080 Ti、V100、1080 Ti 等 GPU 上运行 TensorFlow 模型。与现有评估不同,我们的目标是评估主流的机器学习框架如何利用最新的 Titan RTX 进行机器学习训练和推理。在 Titan RTX 内部,图灵架构下 Tensor Core 提供多种训练和推理精度,从单精度 FP 32 到半精度 FP 16 和混合精度,性能大幅提升。

2.2 混合精度

我们可以通过扩展神经网络体积获取更好的模型,但训练模型所需的内存和算力也会随之增加。因此,混合精度被作为一种方法引入,它可以让神经网络在训练过程中利用半精度浮点数而不改变模型准确率或修改超参数。

在训练中应用混合精度时,权重、梯度储存在 FP16 中,降低存储和矩阵运算的内存压力。主要权重维持在 FP32 中,并用每层前向、后向通过的 FP16 结果更新。

图 2.2.1:混合精度训练流程。

我们在 FP32 中进行试验,即激活函数、权重、梯度及所有的运算都存储在单精度中。对选定的部分任务进行混合精度比较分析。

3. 评估

这一部分将展示我们的测试平台配置——一台包含现成组件的台式机。此外,我们还将描述基准模型和收集到的指标。我们写出了尽可能多的细节,以确保该评估过程能够复现。

3.1 测试平台

我们在一个测试平台计算机(多数主流 PC 的代表)上安装了 Titan RTX。我们相信这一测试平台足够有代表性,多数读者都可以负担得起。此外,还可以根据我们的测试平台粗略推断其在使用 SSD 和 DDR4 内存的高端机器上的性能。RTX 最有名的应用在游戏、娱乐领域。我们的读者可能只是将 RTX 添加到自己的家庭工作站中,用于工作、学习和游戏。这份报告的目的之一就是为读者提供一份这种配置的性能水平参考。

配置参数见表 3.1.1。

表 3.1.1:测试平台配置

为了确保我们的评估保持一致,我们从 NVIDIA GPU Cloud(NGC)中相应地提取了最新的 TensorFlow、PyTorch 及 MXNet 镜像,同时这还可以帮助我们轻松地设置环境。我们安装的框架版本和驱动如表 3.1.1 所示。我们对所有的框架使用默认 FP32 精度。我们将在以下的评估中尝试混合精度。

表 3.1.2:框架、驱动版本。

3.2 基准和指标

MLPerf(https://mlperf.org)等第三方平台已经在多个 GPU 中得出了详细的训练性能结果数据(参见:https://mlperf.org/results/),但 MLPerf 并没有涵盖本报告中提供的性能结果。我们将只在 Titan RTX GPU 上进行一系列实验。在实验的第一部分,我们将探索该 GPU 在不同规模、精度、类型的计算机视觉、自然语言处理任务中的推理和训练速度。对于 ML 从业者来说,本技术报告将直观地展示常用模型中 Titan RTX 的性能,帮助您更好地比较并决定要选择的理想设备。

为了给读者一个关于结果的直观印象,我们遵循了每个网络的官方设置,如 VGG 的批大小是 128,Faster-RCNN 的项目内部有两个固有的网络,RPN 网络分支将生成多个建议(我们的设置是 256),这样批大小看起来就不会小。考虑到不同框架之间的实现细节,批大小为 1 是最稳定的,读者复现起来也更容易,因此我们选择这个值。

以 Titan RTX GPU 为中心,我们将评估实验扩展到了 TensorFlow、PyTorch 和 MXNet 等不同的流行框架上,用到了 COCO2017、CIFAR-10、ImageNet 2012、WMT16 English-German、MovieLens-1M 和 text8 等数据集。

在任务选择上,我们选择了不同规模数据集上的两个分类任务和一个检测任务:CIFAR-10 上的 ResNet-50 分类任务、ImageNet 2012 上的 VGG 16 分类任务以及 COCO 2017 上的 Faster-RCNN 检测任务。在 NLP 方面,我们为三个流行的任务选择了最主要的模型,包括用于机器翻译的 Google Neural Machine Translation,用于推荐系统的 Neural Collaborative Filtering 以及用于词嵌入的 Word2Vec。每个实验都遵循其原始 repo 中的官方设置。

评估指标包括 GPU 的利用率、内存利用率、GPU 内存占用,CPU 利用率、内存利用率、CPU 内存占用和训练/推理速度等。这样可以让读者对每一个任务都有一个综合的印象。

这些利用率指标是平均值。以 5 秒为间隔记录数据,实验后根据记录数据计算平均利用率。最后,由于 Titan RTX 最近才支持混合精度,我们在混合精度和单精度(FP32)下评估不同的模型。我们还将呈现混合精度和单精度下的训练、推理差别。

表 3.2.1:评估中用的基准。

4. 在计算机视觉任务上的结果

在这一部分,我们以单精度运行所有的计算机视觉(CV)任务。以下为所有的设置步骤和实验环境,我们将 CV 任务的结果细节呈现如下:

4.1 实验 1:在 CIFAR-10 数据集上进行 RESNET-50 推理、训练

设置:

  • 实验:ResNet-50 推理

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:64(推理)

表 4.1.1:以单精度进行 ResNet-50 推理的性能和资源利用率

设置:

  • 实验:ResNet-50 训练

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:128(训练)

表 4.1.2:单精度的 ResNet-50 训练性能和资源利用率

4.2 实验 2:在 ImageNet 上进行 VGG 16 推理、训练

设置:

  • 实验:VGG 16 推理

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:64(推理)

表 4.2.1:VGG16 推理性能和资源利用率

设置:

  • 实验:VGG-16 训练

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:128(训练)

表 4.2.2:单精度 VGG16 训练性能和资源利用率

4.3 实验 3:Faster-RCNN、COCO 2017

Faster-RCNN 实验的 batch 大小设为 1。由于算法的限制,只将 Faster-RCNN 的 batch 大小设为 1——如果做一些修改,它可以增加到 4,但我们决定保持原来的实现。其他实验的 batch 大小都为 64 或 128。

设置:

  • 实验:Faster-RCNN 推理

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:1(推理)

表 4.3.1:Faster-RCNN 推理性能和资源利用率

设置:

  • 实验:Faster-RCNN 训练

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:1(训练)

表 4.3.2:单精度 Faster-RCNN 训练性能和资源利用率

4.4 结果分析

我们将评估数据可视化,以便在不同的框架和任务之间进行直观的比较。我们从中发现了几个有趣的结果,例如,图 4.4.1 和图 4.4.2 展示了不同 CV 模型的推理速度和训练速度。

图 4.4.1:所有的推理速度

在 ResNet50 的测试中,TensorFlow 获得了最佳推理速度,MXNet 在 VGG-16 推理测试中速度是最快的,PyTorch 在 Faster-RCNN 的测试上是最快的。

图 4.4.2:所有的训练速度

在 ResNet-50 测试中 MXNet 训练速度最快,TensorFlow 在 VGG-16 上有最快的速度,PyTorch 在 Faster-RCNN 上训练速度最快。

为了总结 GPU/CPU 使用和内存使用情况,我们根据不同框架与实验绘制了以下图表。

图 4.4.3:推理阶段的 GPU 利用率

在 VGG-16 推理上,三个框架都完全使用了 GPU;因为代码优化问题,PyTorch 在 FRCNN 推理上使用最少的 GPU。平均而言,TensorFlow 在所有推理任务上使用了最多的 GPU。

图 4.4.4:推理阶段的 GPU 内存利用率

在 ResNet-50 推理中,MXNet 占用最少的 GPU 内存;TensorFlow 在 VGG 16 推理中占用的内存最少;PyTorch 在 Faster-RCNN 中占用的内存最少。平均而言,TensorFlow 和 PyTorch 占用的内存比例类似,MXNet 在推理中占用的内存最少。

图 4.4.5:推理阶段的 CPU 利用率

平均下来,TensorFlow 使用最少的 CPU,PyTorch 在推理任务中使用的最多。

图 4.4.6:推理阶段的 CPU 内存利用率

在推理任务中,TensorFlow 平均占用最多的 CPU 内存,PyTorch 和 MXNet 占用的内存值类似。

图 4.4.7:训练阶段的 GPU 利用率

在训练阶段,PyTorch 使用了最多的 GPU 资源,TensorFlow 最少。

图 4.4.8:训练阶段的 GPU 内存利用率

在训练阶段,PyTorch 使用了最多的 GPU 内存资源,TensorFlow 最少。

图 4.4.9:训练阶段的 CPU 利用率

在训练任务上,MXNet 使用最少的 CPU 资源,TensorFlow 平均使用最多。

图 4.4.10:训练阶段的内存利用率

在训练上,PyTorch 使用的 CPU 内存最多,MXNet 和 TensorFlow 平均使用的内存类似。

注意,所有实验使用的 repositories 都来自 GitHub 开源代码,代码使用者在使用时可能会对代码进行优化,所以最终结果上可能有所差别。

从上表中,我们观察到了一些有趣的点。在 ResNet-50 上进行训练时,MXNet 是最快的框架。执行 VGG-16 任务时,三个框架都充分利用了 GPU,但 TensorFlow 的样本训练速度最快,MXNet 速度最慢。在检测实验中,PyTorch 版的 Faster-RCNN 性能远远超过其他两个框架(但 PyTorch 版本的代码需要一些额外的优化工作)。这些发现告诉我们,即使是在同一台计算设备上,不同类型的任务或不同框架都可能导致性能差异,数据集、代码优化方法也有影响。

5. 在 NLP 任务上的结果

在这一部分,我们以单精度运行所有 NLP 任务。以下为所有的设置步骤和实验环境,我们把所有的结果陈列如下:

5.1 实验 4:谷歌神经机器翻译(NMT)

设置:

  • 实验:谷歌 NMT 训练

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:128(训练)

  • 数据集:WMT16 English-German

表 5.1.1:谷歌 NMT 训练性能和资源利用率(单精度)

表 5.1.2:谷歌 NMT 训练性能和资源利用率(混合精度)。

设置:

  • 实验:NMT 推理

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:128(推理)

  • 数据集:newstest2014

表 5.1.3:NMT 推理性能和资源利用率。

5.2 实验 5:推荐系统-神经网络协同过滤 (NCF)

设置:

  • 实验:神经网络协同过滤训练

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:256(训练)

  • 数据集:MovieLens-1M

表 5.2.1:神经网络协同过滤训练性能和资源利用率(单精度)

表 5.2.2:神经网络协同过滤训练性能和资源利用率(混合精度)

设置:

  • 实验:NCF 推理

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:100(推理)

  • 数据集:MovieLens-1M test

表 5.2.3:神经网络协同过滤推理性能和资源利用率。

5.3 实验 6:词嵌入-Word2Vec

设置:

  • 实验:Word2Vec 的 Skip-Gram 模型训练

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:256(训练)

  • 数据集:text8

表 5.3.1:Word2Vec 训练性能和资源利用率(单精度)

5.4 结果分析

图 5.4.1:不同 NLP 模型在单精度下的训练速度。

在 GNMT 的测试中,MXNet 训练速度最快,PyTorch 在神经网络协同过滤训练中速度是最快的,TensorFlow 在 Word2Vec 训练中是最快的。

图 5.4.2:用于神经机器翻译的不同框架推理速度。

TensorFlow 和 MXNet 的训练速度在 GNMT 和 NCF 任务中非常接近,而 PyTorch 表现更佳。

为了总结 GPU/CPU 使用和内存使用情况,我们根据不同框架与实验绘制了以下图表。

图 5.4.3: 训练阶段的 GPU 利用率。

TensorFlow 在 Word2Vec 训练中的 GPU 利用率比其他框架高得多。PyTorch 在 GNMT 训练中的 GPU 使用率最高,而在 NCF 训练中最低。

图 5.4.4:推理的 GPU 利用率

对于 GNMT 任务,PyTorch 的 GPU 利用率最高,其推理速度优于其他框架。对于 NCF 任务,尽管所有三个框架之间没有显著差异,但 PyTorch 仍然是一个更好的选择,因为当 GPU 是主要关注点时,它具有更高的推理速度。

图 5.4.5:GPU 内存利用时训练。

MXNet 在 GNMT 和 Word2Vec 训练中拥有最高的 GPU 内存利用时,而在 NCF 训练中,PyTorch 和 MXNet 的内存利用几乎可以忽略不计。总的来说,MXNet 在所有任务中使用的 GPU 内存利用时最少。

图 5.4.6:推理的 GPU 内存利用时。

在读取或写入设备内存期间,TensorFlow 在过去的采样周期中有更高的时间百分比,但是对于 PyTorch 和 MXNet 来说,GPU 不是进行 GNMT 和 NCF 任务推断的必要条件,特别是对于 NCF 任务来说(当时间百分比低于 0.50% 时,四舍五入到 0.00%)。

图 5.4.7:训练阶段的 CPU 使用。

平均而言,在训练阶段,所有框架的 CPU 利用率较为平均。

图 5.4.8:推理的 CPU 利用率。

图 5.4.9:训练阶段的内存使用。

平均来说,TensorFlow 在所有训练任务中占用的内存最少,PyTorch 在 NCF 和 Word2Vec 任务中占用的内存最高。

图 5.4.10:推理的内存利用率。

这三个框架没有太大的不同。

由于厂商采用不同的优化方法,即使在相同的硬件平台上训练相同的神经网络,每个框架也表现出不同的运行性能。众所周知,NMT 任务在训练和翻译推理方面的计算开销都很大,对于这些任务,MXNet 实现了最佳性能,GPU 利用率较低,但 CPU 利用率较高。对于推荐任务,各种框架在训练步骤上没有明显的变化,但是在推理步骤上,PyTorch 表现突出。对于 Word2Vec 任务,TensorFlow 的表现优于其他框架,相应地,它的 GPU 利用率更高。

6. 在混合精度和单精度上的结果

在以混合精度和单精度执行训练和推理时,我们比较了三种框架的性能和效率。我们对 Titan RTX 的评估表明,混合精度下的训练和推理都优于单精度下的训练和推理。这一观察结果表明,我们有必要将混合精度支持加入到 GPU 中以执行 ML 任务。

6.1 ResNet-50

为了评估每个框架在混合精度上的性能以及混合精度和单精度之间的性能差距,我们分别在混合精度和单精度的三个框架上运行 ResNet-50。这三个框架的 ResNet-50 代码库由英伟达(https://github.com/NVIDIA/DeepLearningExamples)提供。应该注意的是,在我们的评估中,我们发现 PyTorch 没有充分利用 GPU,并且在三个框架中实现了最慢的图像处理速度。英伟达在 PyTorch 中实现的 ResNet-50 可能没有得到充分优化。此外,当 batch 大小为 256 时,MXNet 在单精度上耗光了内存,然后我们将 batch 大小切换到 208。

图 6.1.1 和图 6.1.2 分别显示了训练和推理期间每秒处理的图像。除 PyTorch 外,混合精度的速度几乎是单精度的两倍。

图 6.1.1:ResNet-50 训练速度。

图 6.1.2:ResNet-50 推理速度。

如图 6.1.3 所示,虽然混合精度的训练速度更快,但它消耗的 GPU 比单精度的低。半精度计算降低了计算复杂度,减轻了存储压力。

图 6.1.3:ResNet-50 训练时的 GPU 利用率。

图 6.1.4 显示了不同框架在训练 ResNet-50 时使用的 GPU 时间。

图 6.1.4:ResNet-50 训练时的 GPU 利用时。

TensorFlow 消耗的 CPU 比其他两个框架多得多,在图 6.1.5 中,混合精度的 TensorFlow 利用 CPU 的比例约为 66%。由于大多数工作负载都分配给了 GPU,因此 CPU 利用率很低。

图 6.1.5:ResNet-50 训练时的 CPU 利用率。

如图 6.1.6 所示,三个框架消耗的内存相当。

图 6.1.6:ResNet-50 训练时的内存利用率。

与图 6.1.3 中显示的训练时的 GPU 利用率相似,以混合精度进行推理时框架消耗的 GPU 较少(见图 6.1.7)。

图 6.1.7:ResNet-50 在推理时的 GPU 利用率。

如图 6.1.8 所示,以单精度进行推理比混合精度利用的 GPU 内存利用时更多。

图 6.1.8:推理时的内存利用时。

与图 6.1.5 中的训练类似,推理时的 CPU 利用也很低(见图 6.1.9)。

图 6.1.9:推理时的 CPU 利用率。

图 6.1.10 表明,推理消耗的内存少于训练。尽管我们只有 16GB 内存,但在执行 ResNet-50 的训练和推理时,它仍然不是 Titan RTX 的瓶颈。

图 6.1.10:推理时的内存利用率。

6.2. NLP 任务

为了评估每个框架在混合精度上的性能以及混合精度和单精度之间的性能差距,我们分别在 TensorFlow 和 PyTorch 框架上以混合精度和单精度运行了谷歌神经机器翻译(GNMT)系统。

表 6.2.1:GNMT 任务混合精度训练与单精度训练的比较。

图 6.2.1:GNMT 任务混合精度与 f32 精度之间的训练速度对比(步/秒)。

混合精度能比单精度获得更好的性能,特别是在 PyTorch 框架下,从中我们可以看出明显的区别。

图 6.2.2:GNMT 任务混合精度和 f32 精度之间的 GPU 利用率对比。

图 6.2.3:GNMT 任务的混合精度和 f32 精度之间的 GPU 内存利用时对比。

在 TensorFlow 框架下,混合精度的 GPU 利用率和内存利用时较低,但速度更快。对于 PyTorch 来说,虽然 GPU 利用率和内存利用时更高,但相应的性能也显著提高。

图 6.2.4:GNMT 任务混合精度和 f32 精度的 CPU 利用率对比。

图 6.2.5:GNMT 任务混合精度和 f32 精度的内存利用率对比。

TensorFlow 和 PyTorch 在本实验的 CPU 上具有较小的差异,但混合精度略高。

表 6.2.2:NCF 任务混合精度训练与单精度训练的比较。

图 6.2.6:NCF 任务混合精度与单精度训练速度比较(步/秒)。

与 GNMT 任务的性能相似,NCF 任务的训练速度在混合精度下得到提高。

图 6.2.7:NCF 任务混合精度与单精度训练速度对比。

图 6.2.8:NCF 任务混合精度与单精度 GPU 内存使用时对比。

在混合精度下,NCF 训练消耗的 GPU 利用和内存利用时更高。

图 6.2.9:NCF 任务混合精度与单精度 GPU 内存利用时对比。

图 6.2.10:NCF 任务混合精度与单精度 GPU 内存利用时对比。

单精度比混合精度具有更高的 CPU 利用率和内存利用率。

综上所述,在不损失模型准确率且内存占用不明显的情况下,以混合精度训练模型比以单精度训练模型速度更快。

6.3 总结

对于 CV 模型来说,Titan RTX 支持的半精度大大加快了训练和推理中的图像处理。一般来说,半精度训练和推理消耗的 GPU 利用较少。此外,对于自然语言处理任务,我们已经证明,深度学习模型在以混合精度进行训练时可以加快训练速度,同时不损失准确率。总的来说,我们的实验表明,在训练过程中使用半精度存储作为正则化方法是非常可取的,我们相信混合精度可以成为一种重要的技术,使我们能够减少算术运算,从而降低对 GPU 的要求。

7. 总结

在此报告中,我们在最新的 Titan RTX GPU 上评估了三个主流的机器学习框架。我们测试台上的评估结果表明,Titan RTX 能为 CV 模型、NLP 模型的训练与推理带来极大的增长,特别是有了混合精度的支持。我们还观察了不同框架利用 GPU 做不同模型时的表现差别。在机器学习开发者决定机器学习任务、框架和硬件的正确组合时,这样的性能差别就显得极为重要。

该报告仅仅揭示了软件与硬件组合的一小部分。还有大量的空间亟待我们去探索和验证,比如 NVIDIA 的 TensorRT,SAP 机器学习组的工程师在 Tesla V100 GPU 集群式使用 TensorRT 进行推断,能带来将近 45 倍的速度提升。未来,我们将进一步推动在更多模型、框架与硬件上的评估。

致谢

非常感谢英伟达在不限制写作的情况下为我们提供了一块 Titan RTX GPU。我们在此 GPU 上完成的系列测评完全遵循中立、公平的原则。最后,感谢来自机器之心全球办公室的同事们以及我们多伦多大学的朋友 Jack Luo 的支持。

附录:分析师手记

参照以上提及的所有结果,Titan RTX 在各种计算机视觉任务的训练与推理上都能做的很好,即使在图像 batch 很大的情况下也不例外。因为 Titan RTX 相比于其他 RTX 20x 系列有更大的 GPU 内存,一般的训练任务可以完全放到内存内,与多卡训练相比,这极大的减少了时间成本。此外,全新的图灵架构使得对 GPU 的可控性更强,在某种程度上可以减少 CPU 占用。强大的 Tensor Core 加快了一般计算机视觉任务的速度。关于显式的实验结果,我们发现 TensorFlow 和 PyTorch 在数据密集型 CV 任务上表现较好,MxNet 在一般的小型数据集训练任务上表现较好。就资源利用而言,PyTorch 可以更加合理地利用 GPU。对于自然语言处理任务,没有一个框架能够超越其他框架,但我们发现,对于某些任务,TensorFlow 的扩展性比其他框架差,例如谷歌神经机器翻译系统,这可能是由于 TensorFlow 在 CPU 端计算梯度聚合并更新模型。

除了不同框架在 Titan RTX GPU 上的表现,让我们对比下先前发布过的主流 GPU 的更多硬件特征。快速浏览表 1.1 中的规格,我们能够发现 Titan RTX 作为一块为 PC 端深度学习设计的 GPU,相比于其他三款 Geforce 系列 GPU,拥有最多的 CUDA Core、最大的内存带宽和总线带宽,这为深度学习带来了最强大的矩阵计算加速。在三个主要参数上,RTX 2080 Ti 的配置相对更接近 Titan RTX,且都部署了最新的图灵架构。在 GPU 市场中,GTX 1080 Ti 是款非常经典的 GPU,但基于旧版 Pascal 架构的 GTX 1080 Ti 完全被 RTX 2080 Ti 超越。(对比细节见参考文献链接 20、21)。

RTX 2080 作为一款以游戏为主要战场的 Geforce 系列 GPU,由于相对有限的显存大小以及缺乏其他吸引眼球的关键特征,它显然并不如 Titan RTX 适合进行深度学习任务。在我看来,虽然 RTX 2080 Ti 能够满足部分常见计算机视觉任务上的内存容量和加速需求,但对大型 batch 训练和数据密集型任务而言,我还是会选择拥有 24GB GDDR6 内存大小的 Titan RTX,这可能会节省我多卡配置的空间,减少多卡通信时间,让我在深度学习任务上相对轻松地训练一个相对大型的数据集。如果你是要做数据中心级别的大规模深度学习任务,相较于 Titan RTX,Tesla 系列是更合适的选择。

与单精度相比,混合精度有其明显的优势,只是它需要硬件的支持,而且大多数现有模型不提供用于训练或部署的混合精度选项。我们期待在用官方 API 构建模型时,使得已有机器学习框架将混合精度作为一个内置特性来实现。

参考文献

  • [1] http://developer.download.nvidia.com/compute/cuda/docs/CUDA_Architecture_Overview.pdf

  • [2] MXNet: A Flexible and Efficient Machine Learning Library for Heterogeneous Distributed Systems, https://github.com/dmlc/web-data/raw/master/mxnet/paper/mxnet-learningsys.pdf 

  • [3] TensorFlow Benchmark, https://www.tensorflow.org/guide/performance/benchmarks

  • [4] TensorFlow Train Res50 (/workspace/models/official/resnet)

  • Cifar10:https://github.com/tensorflow/models/tree/master/official/resnet

  • [5] TensorFlow Train VGG16

  • Imagenet:https://github.com/tensorflow/models/tree/master/research/slim

  • [6] TensorFlow Inference Res50/VGG16

  • Imagenet/cifar10:https://github.com/tensorflow/benchmarks/tree/master/scripts/tf_cnn_benchmarks

  • [7] TensorFlow FasterRCNN COCO:https://github.com/tensorpack/tensorpack(python3 xx.py)

  • [8] PyTorch Train Res50 Cifar10:https://github.com/kuangliu/pytorch-cifar

  • [9] PyTorch Train VGG16

  • https://github.com/pytorch/examples/tree/master/imagenet 

  • Imagenet:https://github.com/pytorch/examples/tree/master/imagenet

  • https://github.com/ryujaehun/pytorch-gpu-benchmark/blob/master/benchmark_models.py

  • https://gist.github.com/tdeboissiere/12a5e814e9eff3d2cb2c29ff100a09f0 

  • [10] PyTorch Inference Res50

  • Cifar10 _https://github.com/kuangliu/pytorch-cifar_

  • [11] PyTorch Inference VGG16

  • Imagenet:https://github.com/pytorch/examples/tree/master/imagenet

  • [12] PyTorch FasterRCNN

  • https://github.com/ruotianluo/pytorch-faster-rcnn

  • [13] MXNet Train Res50

  • https://github.com/tornadomeet/ResNet 

  • Cifar10:https://github.com/apache/incubator-mxnet/tree/master/example/image-classification

  • https://mxnet.incubator.apache.org/api/python/gluon/model_zoo.html

  • [14] MXNet Train VGG16

  • Imagenet:https://mxnet.incubator.apache.org/api/python/gluon/model_zoo.html

  • [15] MXNext Inference Res50

  • https://www.leadergpu.com/articles/432-mxnet-benchmark

  • https://github.com/apache/incubator-mxnet/tree/master/example/image-classification

  • [16] MXNet Inference VGG16

  • https://mxnet.apache.org/model_zoo/index.html

  • [17] MXNet FasterRCNN

  • https://github.com/ijkguo/mx-rcnn 

  • [18] https://www.tomshardware.com/news/nvidia-titan-rtx-specs-pricing,38184.html

  • [19] https://www.hardwarezone.com.sg/feature-nvidia-geforce-rtx-2080-and-2080-ti-review-guess-who-has-fastest-cards-again/test-setup-gaming-performance

  • [20]https://lambdalabs.com/blog/2080-ti-deep-learning-benchmarks/

  • [21]https://gpu.userbenchmark.com/Compare/Nvidia-RTX-2080-Ti-vs-Nvidia-GTX-1080-Ti/4027

本文为机器之心Synced Lab原创,转载请联系本公众号获得授权

✄————————————————

加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告 & 商务合作:bd@jiqizhixin.com

    已同步到看一看

    发送中