【评测】谷歌TPU二代来了,英伟达Tesla V100尚能战否?
雷锋网按: 谷歌去年年中推出的 TPUv1 一度让英伟达感受到威胁将近,而现在的谷歌 TPU 二代 TPUv2 则着着实实得将这份威胁变成了现实,去年的评测中英伟达 Tesla V100 尚能不惧谷歌 TPUv1 的挑战,但是现在谷歌 TPU 二代来了,英伟达 Tesla V100 尚能战否?
以下为 RiseML 对谷歌 TPUv2 和英伟达 Tesla V100 的对比评测,雷锋网 (公众号:雷锋网) (公众号:雷锋网) AI 科技评论将其内容编译如下。
谷歌在 2017 年为加速深度学习开发了一款的定制芯片,张量处理单元 v2 (TPUv2)。TPUv2 是谷歌在 2016 年首次公开的深度学习加速云端芯片 TPUv1 的二代产品,被认为有着替代英伟达 GPU 的潜在实力。RiseML 此前撰写过一篇谷歌 TPUv2 的初体验,并随后收到了大家「将谷歌 TPUv2 与英伟达 V100 GPU 进行对比评测」的大量迫切要求。
但是将这两款深度学习加速芯片进行公平而又有意义的对比评测并非易事。同时由于这两款产品的对业界未来发展的重要程度和当前深度详细评测的缺失,这让我们深感需要自行对这两款重磅云端芯片进行深度评测。我们在评测过程中也尽可能地站在芯片对立双方倾听不同意见,因此我们也同时与谷歌和英伟达的工程师建立联系并让他们在本次评测文草稿阶段留下各自的意见。以上措施使得我们做出了针对 TPUv2 和 V100 这两款云端芯片的最全面深度对比评测。
实验设置
我们用四个 TPUv2 芯片(来自一个 Cloud TPU 设备)对比四个英伟达 V100 GPU,两者都具备 64GB 内存,因而可以训练相同的模型和使用同样的批量大小。该实验中,我们还采用了相同的训练模式:四个 TPUv2 芯片组成的一个 Cloud TPU 来运行一种同步数据并行分布式训练,英伟达一侧也是同样利用四个 V100 CPU。
模型方面,我们决定使用图像分类的实际标准和参考点在 ImageNet 上训练 ResNet-50 模型。虽然 ResNet-50 是可公开使用的参考实例模型,但是现在还没有能够单一的模型实现支持在 Cloud TPU 和多个 GPU 上进行模型训练。
对于 V100,英伟达建议使用 MXNet 或者 TensorFlow 的实现,可以在 Nvidia GPU Cloud 平台上的 Docker images 中使用它们。然而,我们发现 MXNet 或者 TensorFlow 实现直接拿来使用的话,在多 GPU 和对应的大训练批量下并不能很好地收敛。这就需要加以调整,尤其是在学习率的设置方面。
作为替代,我们使用了来自 TensorFlow 的 基准库(benchmark repository),并在 tensorflow/tensorflow:1.7.0-gpu, CUDA 9.0, CuDNN 7.1.2 下在 Docker image 中运行它。它明显快过英伟达官方推荐的 TensorFlow 实现,而且只比 MXNet 实现慢 3%。不过它在批量下收敛得很好。这就有助于我们在同样平台(TensorFlow 1.7.0)下使用相同框架,来对两个实现进行比较。
云端 TPU 这边,谷歌官方推荐使用来自 TensorFlow 1.7.0 TPU repository 的 bfloat16 实现。TPU 和 GPU 实现利用各个架构的混合精度训练计算以及使用半精度存储最大张量。
针对 V100 的实验,我们在 AWS 上使用了四个 V100 GPU(每个 16 GB 内存)的 p3.8xlarge 实例(Xeon E5-2686@2.30GHz 16 核,244 GB 内存,Ubuntu 16.04)。针对 TPU 实验,我们使用了一个小型 n1-standard-4 实例作为主机(Xeon@2.3GHz 双核,15GB 内存,Debian 9),并为其配置了由四个 TPUv2 芯片(每个 16 GB 的内存)组成的云端 TPU(v2-8)。
我们进行了两种不同的对比实验,首先,我们在人工合成自然场景(未增强数据)下,观察了两者在每秒图像处理上的原始表现,具体来说是数据吞吐速度(每秒处理的图像数目)。这项对比与是否收敛无关,而且确保 I / O 中无瓶颈或无增强数据影响结果。第二次对比实验,我们观察了两者在 ImageNet 上的准确性和收敛性。
数据吞吐速度结果
我们在人工合成自然场景(未增强数据)下,以每秒图像处理的形式观测了数据吞吐速度,也就是,在不同批量大小下,训练数据也是在运行过程中创造的。同时需要注意,TPU 的官方推荐批量大小是 1024,但是基于大家的实验要求,我们还在其他批量大小下进行了两者的性能测试。
在生成的数据和没有数据增强的设置下,在各种批量大小下测试两者的每秒图像处理性能表现。批量大小为「global」总计的,即 1024 意味着在每个步骤中每个 GPU / TPU 芯片上的批量大小为 256
当批量大小为 1024,两者在数据吞吐速度中并无实际区别!谷歌 TPU 有约 2% 的轻微领先优势。大小越小,两者的性能表现会越降低,这时 GPU 就表现地稍好一点。但如上所述,目前这些批量大小对于 TPU 来说并不是一个推荐设置。
根据英伟达的官方建议,我们还在 MXNet 上使用 GPU 做了一个实验,使用的是 Nvidia GPU Cloud 上提供的 Docker image (mxnet:18.03-py3) 内的 ResNet-50 实现。在批量大小为 768 时(1024 太大),GPU 能每秒处理 3280 张图像。这比上面 TPU 最好的性能表现还要快 3%。但是,就像上面那样,在批量大小同为 168 时,多 GPU 上 MXNet 收敛得并不好,这也是我们为什么关注两者在 TensorFlow 实现上的表现情况,包括下面提及的也是一样。
云端成本
现在 Google Cloud 已经开放了云端 TPU(四个 TPUv2 芯片)。只有在被要求计算时,云端 TPU 才会连接到 VM 实例。云端测试方面,我们考虑使用 AWS 来测试英伟达 V100(因为 Google Cloud 当前仍不支持 V100)。基于上面的测试结果,我们总结出了两者在各自平台和 provider 上的每秒处理图像数量上的花费成本(美元)。
每秒图像处理上的成本(美元)
在上表所示的成本下,云端 TPU 显然是个赢者。然而,当你考虑长期租用或者购买硬件(云 TPU 现在还没有办法买到),情况可能会不同。以上情况还包括当租用 12 个月时的情况(在 AWS 上的 p3.8xlarge 保留实例的价格(无预付款))。这种租用情况将明显得将价格降低至每 1 美元处理 375 张图像的成本。
GPU 这边有一个更有意思的购买选项可以考虑,例如 Cirrascale 就提供了四个 V100 GPU 服务器的月租服务,月租金 7500 美元(约 10.3 美元/小时)。但是由于硬件会因 AWS 上的硬件配置(CPU 种类,内存以及 NVLink 支持等等)的不同而改变,而以 benchmarks 为基准的对比评测要求的是直接的对比(非云端租用)。
正确率和收敛
除报告两者的原始性能之外,我们还想验证计算(computation)是「有意义」的,也就是指,实现收敛至好的结果。因为我们比较的是两种不同的实现,所以一些误差是在预料之中的。因此,这是一项不仅仅是关于硬件速度,还会涉及到实现质量的对比评测。TPU 的 ResNet-50 实现中加入了非常高计算强度的图像预处理过程,这实际上牺牲了一部分数据吞吐速度。谷歌给出的实现中就是这样设计的,稍后我们也会看到这种做法确实获得了回报。
我们在 ImageNet 数据集上训练模型,训练任务是将一张图像分类至如蜂鸟,墨西哥卷饼或披萨的 1000 个类别。这个数据集由训练用的 130 万张图像(约 142 GB)以及 5 万张用于验证的图像(约 7 GB)组成。
我们在批量大小为 1024 的情况下,对模型进行了 90 个时期的训练,并将数据验证的结果进行了比较。我们发现,TPU 实现始终保持每秒处理 2796 张图像的进程,同时 GPU 实现保持每秒处理 2839 张。这也是根据上面数据吞吐速度结果所得的区别,我们是在未进行数据增强和使用生成的数据的情况下,对 TPU 和 GPU 进行的原始速度比较。
两个实现在进行了 90 个时期训练后的首位准确率(即只考虑每张图像具有最高可信度的预测情况下)
如上图所示,TPU 实现 进行了 90 个时期训练后的首位准确率比 GPU 多 0.7%。这在数值上可能看起来是很小的差别,但是在两者已经非常高的水平上进行提升是极度困难的,以及在两者在实际应用场景中,即便是如此小差距的提升也将最终导致在表现产生天壤之别。
让我们来看一下在不同的训练时期模型学习识别图像的首位准确率。
设置了验证的两个 实现的首位准确率
上表中放大图部分首位准确率的剧烈变化,与 TPU 和 GPU 这两个 实现上模型的学习速率是相吻合的。TPU 实现上的收敛过程要好于 GPU,并在 86 个时期的模型训练后,最终达到 76.4% 的首位准确率,但是作为对比,TPU 实现则只需 64 个模型训练时期就能达到相同的首位准确率。TPU 在收敛上的提升貌似归功于更好的预处理和数据增强,但还需要更多的实验来确认这一点。
基于云端的解决方案成本
最后,在需要达到一定的精确度的情况下,时间和金钱成本最为关键。我们假设精确度 75.7%(GPU 实现可实现的最高精确度)为可接受的解决方案,我们就可以计算出,基于要求的模型训练时期和模型图像每秒处理的训练速度,达到该精确度的所需成本。这还包括计算模型在某个训练时期节点上花费的时间和模型初始训练所需的时间。
首位准确率达到 75.7% 的金钱成本(保留 12 个月的使用周期)
正如上表所示,云端 TPU 允许用户在 9 个小时内并且花费 55 美元,就能在 ImageNet 上从零开始训练模型精确度至 75.7%,花费 73 美元能将模型收敛训练至 76.4%。虽然V100 与 TPU 的运行速度同样,但V100 花费价格过高以及其收敛实现更慢,所以采用 TPU是明显更具性价比的解决方案。
需要再一次说明的是,我们本次所做的对比评测的结果取决于实现的质量以及云端服务器的标价。
另外一项两者的有趣对比将会是基于两者在能量功耗上的比较。然而,我们现在还无法得知任何公开的 TPUv2 能量功耗信息。
总结
基于我们的实验标准,我们总结出,在 ResNet-50 上四个 TPUv2 芯片(即一个云端 TPU)和四个 GPU 的原始运行速度一样快(2% 的实验误差范围内)。我们也期待将来能通过对软件(TensorFlow 或 CUDA)优化来提升两者在平台上的运行性能和改善实验误差。
在特定问题实例上达到特定的精确度的两者实际运用中,时间和云端成本最为关键。以目前的云端 TPU 定价,配合高水平的 ResNet-50 实现,在 ImageNet 上达到了令人钦佩的准确率对时间和金钱成本(仅花费 73 美元就能训练模型达到 76.4%的精确度)。
将来,我们还将采用来自其他领域的不同网络架构作为模型的基准以进行更深度的评测。还有一个有趣的实验点是,对于给定的硬件平台,想要高效地利用硬件资源需要花费多少精力。举例来说,混合精度的计算可以带来明显的性能提升,然而在 GPU 和 TPU 上的实现和模型表现却是迥异的。
最后,感谢弗莱堡大学的 Hannah Bast、卡耐基梅隆大学的 David Andersen、Tim Dettmers 和 Mathias Meyer 对本次对比评测草稿文的研读与矫正。
via RiseML Blog ,雷锋网 AI 科技评论编译。
。