设计工具
应用程序

为有效的AI模型训练构建系统

韦斯Vaske | 2019年6月

如何构建更有效的AI模型训练系统

2018年12月, MLPerf的第一个基准测试结果是由英特尔提交的, 谷歌和英伟达. 结果衡量了不同机器学习算法在提交者的各种硬件上的性能,即训练到准确度阈值的时间. 然而, 即使在这些提交的材料中提供了丰富的信息, 官方流程在描述主要计算资源之外的系统方面有些欠缺.

考虑到这一点, 我一直在我们的美光存储客户实验室运行相同的基准测试,以更好地理解深度学习训练对系统资源的压力. 在微米, 我们正在追求内存和存储创新,以提供移动方面的巨大改进, 访问和分析数据. 这篇文章将概述我的发现,我们将很快发布更多的结果.

我用来做这些测试的系统是 超微型计算机sys - 4029 - gp - tvrt server. 它是一个8 gpu服务器,gpu计算性能几乎与NVIDIA DGX-1相同. 主要规格有:

  • 2个Intel Xeon Platinum 8180M cpu
    • 28芯@ 2.5 GHz
  • 3TB微米DRAM
    • 24x 128GB DDR4 2666mhz dimm
  • 8x NVIDIA V100 gpu
  • 8x 7.68TB 美光9300 Pro NVMe 用于数据集的RAID-10中的驱动器

操作系统是Ubuntu 18.04.中定义的docker容器执行了所有更新和测试 NVIDIA提交的代码 对于他们的v0.5.0提交.

我想回答的第一个问题是MLPerf提交的文件是否可重复. 由于MLPerf仍在大力开发中, 在这个过程中,表明结果可以被复制是重要的一步.

MLPref结果

我自己的测试结果证实了NVIDIA提交的结果. 这并不令人惊讶或具有突破性,但它很重要.

在我们深入研究实际结果之前, 让我简单介绍一下我对这些应用程序进行基准测试的一个过程. 由于可用于基准测试的数据集较小, 我限制了容器在训练期间可以访问的内存量,以确保完整的数据集不适合文件系统缓存. 如果我没有限制我的记忆, 应用程序将在第一个训练epoch期间将数据集读入内存, 然后,所有后续epoch都将从文件系统缓存中获取数据,而不是从磁盘进行任何读取.

虽然这是运行应用程序的理想方式——有足够的内存来容纳整个数据集——但这是相当不现实的. 基准测试使用的最大数据集是用于图像分类基准测试的ImageNet数据集,其大小为136GB. 这里是美光, 我们有几个tb大小的训练数据集, 我们从客户那里听到他们看到了同样的事情:生产数据集比这些基准测试中使用的数据集要大得多.

虽然我不能更改这些基准测试使用的数据集, 我可以改变系统的配置方式,使结果更能代表我们在现实世界中看到的东西.

让我们看看限制容器内存是否有效. 在不限制内存的情况下,我看到的平均磁盘吞吐量几乎可以忽略不计. 然而, 一旦我将每个容器限制为一定数量的内存量,这样只有一小部分数据集可以放入内存. 我看到了截然不同的磁盘利用率:(请注意,这两个图表中垂直轴的比例是不同的)

平均磁盘吞吐量无限内存与有限内存图

用于图像分类, 在限制容器的内存量之后,我们看到磁盘利用率提高了61倍. (这很有意义,因为训练过程长达62个epoch,无限内存配置只需要在第一个epoch从磁盘读取.)

Okay, 因此,我们知道限制容器可用的内存将改变磁盘利用率, 但这对我们训练过程的表现有什么影响呢? 事实证明, 只要你有足够快的存储,对应用程序的影响可以忽略不计:

MLRef结果

这个结果比最初看起来要重要得多. 我们已经证明了, 只要你的储存能在训练过程中跟上, 即使您的数据集太大而无法容纳本地内存,您也可以充分利用gpu(取决于您的软件堆栈).

现在我们已经讨论了存储,让我们看看系统的其余部分:

CPU利用率

这里列出的CPU利用率是非规范化的. 这意味着500%大致相当于5个核心被100%利用(或10个核心被50%利用)。.

运行这些以gpu为中心的应用程序仍然会对训练服务器中的cpu造成压力. 取决于您的应用程序, 该数据可能建议您可以节省cpu,也可能表明您需要投资于高端cpu. 无论如何,一定要了解你的工作量,以最好地构建你的AI训练服务器.

GPU核心内存利用率图

在GPU利用率方面, 我们看到普遍较高的GPU处理器利用率, 但是内存利用率可能相当低, 取决于基准. 不过,我建议对GPU内存利用率数据持保留态度. 我预计内存利用率在很大程度上受到数据集总大小的影响. 虽然我能够限制容器可用的总内存, 我无法限制GPU内存.

这些算法在训练中使用的参数是为了在最快的时间内达到精度而调整的. 其中一个主要的可调参数——批处理大小——高度依赖于可用的GPU内存以及总的数据集大小. 这意味着小数据集可以用小批量大小训练更快,而不会充分利用GPU内存, 我希望我们能在这里看到这种效果.

我们已经探索了在单个服务器上隔离运行AI应用程序的系统需求, and, 虽然结果很有趣,并为我们提供了可以用于构建系统的信息, 这并不能说明全部情况. 在我的测试中,我将所有MLPerf数据集加载到AI训练服务器的本地存储中——总共大约400GB——然后按顺序运行每个训练工作负载.

在生产系统中, 然而, 我们在训练服务器中很少有足够的存储容量来容纳所有的训练数据集. AI服务器中的本地存储经常被用作缓存——数据集将被加载到缓存中, 一个模型将被训练, 数据集将从缓存中刷新. 另外, 对于一系列正在训练的模型, 下一个模型的数据集应该在前一个模型训练时加载.

顺序与并行的数据摘要

让我们探索一下运行同步数据摄取时对基准测试结果的影响. 对于以下数据, 我降低了MLPerf基准的准确性要求,这样每个训练过程都会更快地完成. 这允许使用不同的数据摄取参数进行更多的测试迭代. 另外,我将比较 美光5200 Pro SATA SSD to the 美光9300 Pro NVMe固态硬盘 (我在RAID-10配置中每个驱动器使用8个).

首先,当我们不同时运行数据摄取时,NVMe与SATA相比如何?

基准测试结果时间

当工作负载隔离执行时,SATA和NVMe驱动器对AI训练工作负载的性能非常相似. 结果并不令人惊讶, 考虑到我们上面看到的磁盘吞吐量数字,很容易看出8x 5200 SATA驱动器能够提供足够的性能来处理我们最密集的训练工作负载(图像分类在1.2 gb / s).

现在让我们看看在模型训练时,我们摄取数据的速度有多快. 对于下面的图表,我使用工具FIO来生成文件写入,使用具有多个作业的“sync”IO引擎.

数据摄取率

This result is now significantly different; NVMe supports drastically higher data ingest rates while the AI model is being trained. 这清楚地表明NVMe将支持上面描述的并行数据摄取+模型训练过程. 然而, 我们需要验证这种大量摄入不会影响训练过程的表现.

运行时图

从这张图表中我们可以看到一些有趣的事情:

图像分类, 虽然是最高的磁盘利用率基准, 对SATA或NVMe上的同步数据摄取不敏感.
单级检测器显示,数据摄取对SATA的性能造成了很大的影响——大约30%.
相反, 对象检测基准测试在NVMe上的性能下降了大约7%,而SATA保持了性能.
这种行为的原因目前尚不清楚, 但这并没有阻止我们探索如何减轻性能损失. 尝试减少性能损失的两种简单方法是:将摄取作为更大的块大小(1MB vs 128k),并限制摄取吞吐率.

让我们看看这些选项在这里提到的两种情况下是如何工作的. 对于SATA上的单级检测器,我们有以下结果:

损失减轻图

通过增加数据摄取的块大小, 我们可以通过数据摄取来减少几乎所有的性能损失.

现在目标检测基准:

目标检测缓解图
沙巴体育安卓版下载这个不断变化的生态系统的信息.

\r\n"}}' id="text-ba7ce4c942">

这里的情况略有不同. 我们通过增加块大小减轻了一些性能损失,但需要降低摄取速率以获得完整的应用程序性能.

那么,我们学到了什么?

  • 训练人工智能模型不仅仅强调gpu, 它还强调存储, 系统内存, 和CPU资源. 当你在设计AI系统时,一定要考虑到这些因素.
  • The 美光9300 PRO NVMe固态硬盘 支持比企业SATA ssd更高的数据摄取,这有助于实现并行数据科学管道
  • 大量的数据摄取会对训练模型的时间产生负面影响,并且不仅仅与训练模型的读取吞吐量相关.
  • 增加数据摄取的块大小或限制写吞吐率可以减轻同时进行数据摄取所造成的性能损失.

我们将继续探索人工智能和数据科学应用程序的性能,以及如何最好地为您的工作负载构建解决方案. 我们将在这里发布更多沙巴体育安卓版下载这个不断变化的生态系统的信息.

手提电脑走路的人

SMTS系统性能工程师

韦斯Vaske

韦斯Vaske是美光公司的首席存储解决方案工程师.

" class="hidden">易车会