单机 GPU 云服务器的深度学习训练和预测模型分析
得益于 GPU 强大的计算能力,深度学习近年来在图像处理、语音识别、自然语言处理等领域取得了重大突 GPU 服务器几乎成了深度学习加速的标配。
阿里云 GPU 云服务器在公有云上提供的弹性 GPU 服务,可以帮助用户快速用上 GPU 加速服务,并大大简化部署和运维的复杂度。如何提供一个合适的实例规格,从而以最高的性价比提供给深度学习客户,是我们需要考虑的一个问题,本文试图从 CPU、内存、磁盘这三个角度对单机 GPU 云服务器的深度学习训练和预测的性能模型做了初步的分析,希望能对实例规格的选择提供一个科学的设计模型。
下面是我们使用主流的几个开源深度学习框架在 NVIDIA GPU 上做的一些深度学习的测试。涉及 NVCaffe、MXNet 主流深度学习框架,测试了多个经典 CNN 网络在图像分类领域的训练和推理以及 RNN 网络在自然语言处理领域的训练。
我们使用 NVCaffe、MXNet 主流深度学习框架测试了图像分类领域和自然语言处理领域的训练模型。
图像分类
我们使用 NVCaffe、MXNet 测试了图像分类领域的 CNN 网络的单 GPU 模型训练。
NVCaffe 和 MXNet 测试使用 ImageNet ILSVRC2012 数据集,训练图片 1281167 张,包含 1000 个分类,每个分类包含 1000 张左右的图片。
CPU+Memory
NVCaffe
NVCaffe 是 NVIDIA 基于 BVLC-Caffe 针对 NVIDIA GPU 尤其是多 GPU 加速的开源深度学习框架。LMDB 格式的 ImageNet 训练集大小为 240GB ,验证集大小为 9.4GB。
我们使用 NVcaffe 对 AlexNet、GoogLeNet、ResNet50、Vgg16 四种经典卷积神经网络做了图像分类任务的模型训练测试。分别对比了不同 vCPU 和 Memory 配置下的训练性能。性能数据单位是 Images/Second(每秒处理的图像张数)。图中标注为 10000 指的是迭代次数 10000 次,其它都是测试迭代次数为 1000 次。
MXNet
MXNet 的数据集使用 RecordIO 格式,ImageNet 训练集 93GB ,验证集 3.7GB。
我们使用网络 Inception-v3(GoogLeNet 的升级版)做了图像分类的训练测试。分别对比了不同 vCPU 和 Memory 配置下的训练性能。数据单位是 Samples/Second(每秒处理的图像张数)。
磁盘 IO
我们在阿里云 GN5(P100)实例上使用 NVCaffe 测试了 GoogLeNet 网络模型在 NVMe SSD 本地盘、SSD 云盘和高效云盘上的训练性能,测试结果如下(性能数据单位是 Images/Second):
自然语言处理
我们使用 MXNet 测试了 RNN 网络的 LSTM 模型的训练,使用 PennTreeBank 自然语言数据集。PennTreeBank 数据集的文本语料库包含近 100 万个单词,单词表被限定在 10000 个单词。分别对比了不同 vCPU 和 Memory 配置下的训练性能:
推理测试
图像分类
我们使用 NVCaffe 测试了图像分类领域的 CNN 网络的模型推理。
测试使用 ImageNet ILSVRC2012 数据集,验证测试图片 50000 张。
CPU+Memory
我们使用 NVcaffe 对 AlexNet、GoogLeNet、ResNet50、VGG16 四种经典卷积神经网络做了图像分类的推理测试。分别对比了不同 vCPU 和 Memory 配置下的训练性能。数据单位是 Images/Second(每秒处理的图像张数)。
磁盘 IO
我们使用 NVCaffe 测试了 GoogLeNet 网络在 NVMe SSD 本地盘、SSD 云盘和高效云盘上的图像分类推理性能,测试结果如下(数据单位是 Images/Second):
数据预处理测试
在训练模型之前,往往要对训练数据集做数据预处理,统一数据格式,并做一定的归一化处理。
我们使用 NVCaffe 对 ImageNet ILSVRC2012 数据集做了数据预处理的测试,分别对比了 NVMe SSD 本地盘、SSD 云盘和高效云盘的数据预处理时间,数据单位是秒,数据如下:
数据分析
训练
图像分类
从 NVCaffe 和 MXNet 的测试结果来看,图像分类场景单纯的训练阶段对 CPU 要求不高,单 GPU 只需要 4vCPU 就可以。而内存需求则取决于深度学习框架、神经网络类型和训练数据集的大小:测试中发现 NVCaffe 随着迭代次数的增多,内存是不断增大的,但是内存需求增大到一定程度,对性能就不会有什么提升了,其中 NVCaffe AlexNet 网络的训练,相比其它网络对于内存的消耗要大得多。相比之下 MXNet 的内存占用则要小的多(这也是 MXNet 的一大优势),93G 预处理过的训练数据集训练过程中内存占用不到 5G。
对于磁盘 IO 性能,测试显示训练阶段 NVMe SSD 本地盘、SSD 云盘性能基本接近,高效云盘上的性能略差 1%。因此训练阶段对 IO 性能的要求不高。
自然语言处理
从 MXNet 的测试结果来看,对于 PennTreeBank 这样规模的数据集,2vCPU 1GB Mem 就能满足训练需求。由于自然语言处理的原始数据不像图像分类一样是大量高清图片,自然语言处理的原始数据以文本文件为主,因此自然语言处理对内存和显存的要求都不高,从我们的测试来看,4vCPU 30GB 1GPU 规格基本满足训练阶段需求。
推理
图像分类
从 NVCaffe 的图像分类推理测试来看,除 AlexNet 2vCPU 刚刚够用外,其它网络 2vCPU 对性能没有影响,而 9.4GB 的验证数据集推理过程中内存占用大概是 7GB 左右,因此对大部分模型来看,2vCPU 30GB 1GPU 规格基本满足图像分类推理的性能需求。
对于磁盘 IO 性能,推理性能 NVMe SSD 本地盘、SSD 云盘很接近,但高效云盘差 15%。因此推理阶段至少应该使用 SSD 云盘保证性能。
自然语言处理
对于自然语言处理,参考训练性能需求,我们应该可以推测 2vCPU 30GB 1GPU 规格应该也能满足需求。
从 MXNet 的测试结果来看,对于 PennTreeBank 这样规模的数据集,2vCPU 1GB Mem 就能满足训练需求。
由于自然语言处理的原始数据不像图像分类一样是大量高清图片,自然语言处理的原始数据以文本文件为主,因此自然语言处理对内存和显存的要求都不高,从我们的测试来看,4vCPU 30GB 1GPU 规格基本满足训练阶段需求。
推理
图像分类
从 NVCaffe 的图像分类推理测试来看,除 AlexNet 2vCPU 刚刚够用外,其它网络 2vCPU 对性能没有影响,而 9.4GB 的验证数据集推理过程中内存占用大概是 7GB 左右,因此对大部分模型来看,2vCPU 30GB 1GPU 规格基本满足图像分类推理的性能需求。
对于磁盘 IO 性能,推理性能 NVMe SSD 本地盘、SSD 云盘很接近,但高效云盘差 15%。因此推理阶段至少应该使用 SSD 云盘保证性能。
自然语言处理
对于自然语言处理,参考训练性能需求,我们应该可以推测 2vCPU 30GB 1GPU 规格应该也能满足需求。
数据预处理
从 NVCaffe 对 ImageNet ILSVRC2012 数据集做数据预处理的测试来看,数据预处理阶段是 IO 密集型,NVMe SSD 本地盘比 SSD 云盘快 25%,而 SSD 云盘比高效云盘快 10%。
总结:
深度学习框架众多,神经网络类型也是种类繁多,我们选取了主流的框架和神经网络类型,尝试对单机 GPU 云服务器的深度学习性能模型做了初步的分析,结论是:
深度学习训练阶段是 GPU 运算密集型,对于 CPU 占用不大,而内存的需求取决于深度学习框架、神经网络类型和训练数据集的大小;对磁盘 IO 性能不敏感,云盘基本能够满足需求。
深度学习推理阶段对于 CPU 的占用更小,但是对于磁盘 IO 性能相对较敏感,因为推理阶段对于延迟有一定的要求,更高的磁盘 IO 性能对于降低数据读取的延时进而降低整体延迟有很大的帮助。
深度学习数据预处理阶段是 IO 密集型阶段,更高的磁盘 IO 性能能够大大缩短数据预处理的时间。
评论