AI 至关重要:通过内存和存储触达数据智能的核心
当我在探索 AI 和机器学习系统的基础架构时,发现了一个奇怪的现象,那就是,很少能看到有关底层存储或内存的性能数据。大多数讨论都围绕各种可用的计算资源(GPU、CPU、FPGA、TPU 等)而展开。
起初我对这一现象有些担心,因为我的主要工作就是通过提供相关的解决方案工程验证和信息来支持公司的存储产品。然而,当我自己开始做实验时,我发现,非计算基础架构的性能数据之所以很少,并不是因为没有必要讨论,而是人们觉得它根本不是问题,不值得讨论。
这里有一些数据可以让大家了解一点背景信息。
这张图显示了不同 AI 训练系统在使用特定数据集训练特定模型时的性能。(具体而言,这里训练的是 ResNet-50 图像分类模型,使用的是 Imagenet 数据集,包含 120 万张图像、大小约为 145GB。)
回到 2014 年,当时 AI 训练系统中的存储设备只需提供大约 50MB/s 的磁盘吞吐量就能满足 8 个顶级(就当时的水平而言)GPU 的需求。尽管我非常希望所有工作负载都使用 SSD,但是说只有闪存才能满足该用例的需求会有点牵强。毕竟,50MB/s 并不是什么难事。
从 K80 GPU 到下一代的 P100,我们看到对存储的需求从 50MB/s 显著增长到 150MB/s。虽然增长幅度很大,但它依然没有引起关注:150MB/s 虽然对基于 HDD 的系统来说可能并非易事,但尚不足以给基础架构带来任何真正的挑战。
然而,最新一代(以及进一步的软件优化)GPU 对吞吐量的要求已经与前几代不可同日而语。同样的 ResNet-50 模型,同样的数据集,需要将近 1GB/s 的存储吞吐量才能让新一代 GPU 以最高效率运行。基于 HDD 的系统很难满足这些需求。
因此,人们之前在讨论 AI 系统时不去谈论存储性能的做法就说得通了,因为一直以来我们都没有必要这么做,直到最近,情况才发生了变化。此外,如果这种趋势持续下去(我们没有理由认为它不会持续下去),那么未来将取决于我们能否构建满足下一代 GPU 需求的存储系统。
好了,我们都知道存储性能很重要,但它有多重要呢? 如果存储(和内存)与我们的 AI 系统不匹配,会产生什么样的实际影响?
为解答这些问题,我另外开展了一些实验,试图获得一些启示。下面的数据是使用与上文相同的模型和数据集(Resnet-50 模型和 Imagenet 数据集)得到的结果。实验使用的硬件是搭载了 8 个 Nvidia® V100 GPU 的双路英特尔®至强 8180M 服务器。每个 GPU 的内存为 32GB,系统的内存为 3TB,我用的存储系统是采用 RAID10 配置的 8 个 3.2TB 美光 9200 NVMe™ 固态硬盘。
我测试了内存容量和磁盘吞吐量这两个变量的影响。变量的调整通过更改相应的 docker 容器参数(mem_limit 和 device_read_bps)来实现。
内存容量方面,我测试了容器可以使用全部内存 (3TB) 和只能使用部分内存(在系统稳定运行时,文件系统缓存只能容纳数据集中的一半数据 [128GB])时的情况。
存储方面,我测试了允许容器无限制访问 NVMe 存储和将存储吞吐量限制为 500MB/s 时的情况。之所以选择这个数字,是因为它大致等于所观察到的峰值吞吐量 (1.2GB/s) 的一半,并且与各个云服务提供商为 GPU 实例提供的磁盘的性能相当。
结果应该不会令人意外。如果 AI 系统中的存储无法跟上 GPU 的速度,并且没有足够的内存来缓存数据集,那么系统性能就会大幅降低。幸运的是,这个问题是可以解决的。虽然您可以通过部署大量内存和高速磁盘来充分发挥 AI 系统的效率,但仅仅安装高速磁盘或仅仅安装大容量内存也能让您在很大程度上做到这一点。
本文要讨论的最后一组实验是关于 GPU 内存对训练性能的影响。这些测试在与上文相同的硬件(8 个 v100 GPU)上运行,但我调整了批量大小(每次发送给 GPU 处理的图像数量)和算法的“复杂度”(ResNet 模型中的层数)。
每条线表示特定模型的训练吞吐量,以每秒处理的图像数量为单位。一旦批量大小变得太大,就没有足够的内存可用,此时应用就会崩溃(上图中线条结束的位置)。
从这张图中我们可以得出几点结论。第一个也是最明显的结论是,吞吐量会随着批量大小的增加而增加。虽然这张图描述的是 AI 训练,但 AI 推理也是同样的情况。批量越大,吞吐量就越大。
下一个结论是,最大批量大小取决于模型的复杂度。随着模型越来越大,越来越复杂,模型权重会占用更多的 GPU 内存空间,留给数据的空间就会减少。根据具体用例的不同,模型复杂度可能会被提高到根本无法执行训练的程度,甚至只能将模型训练的批量大小限制为 1。这一点在将模型部署到智能边缘或 IoT 设备时尤其明显,因为这些设备的内存容量通常比我在这里使用的 GPU 要小得多。
总而言之,在设计 AI 系统时,您最好考虑以下三个主要因素:
- 存储性能
- 系统内存密度
- GPU/加速器内存密度
- 存储性能和系统内存密度对最大限度发挥系统性能非常关键,而 GPU/加速器内存对性能以及支持未来的模型开发非常重要。
更多详细参考资料:详细了解如何根据特定 AI 和机器学习模型部署内存和存储。观看网络研讨会点播视频:AI 至关重要:通过内存和存储触达数据智能的核心,在视频中,Forrester® 的 Chris Gardner、美光计算和网络业务部门的 Eric Booth 以及我本人围绕这一主题展开了讨论。