提交 69eaa568 编写于 作者: D dzhwinter

"reformat table"

上级 779a27e9
......@@ -3,35 +3,35 @@
#################
本文介绍如何给深度学习框架做基准测试。基准测试主要包含验证模型的精度和性能两方面,下文包含搭建测试环境,选择基准测试模型,验证测试结果等几方面内容。
验证深度学习框架,可分为训练和测试两个阶段, 验证指标略有不同,本文只介绍训练阶段的指标验证。训练阶段关注的是模型训练集上的精度,训练集是完备的,因此关注大batch\_size下的训练速度,关注吞吐量,例如图像模型常用的batch\_size=128, 多卡情况下会加大; 预测阶段关注的是在测试集上的精度,线上服务测试数据不能提前收集,因此关注小batch\_size下的预测速度,关注延迟,例如预测服务常用的batch\_size=1, 4等。
验证深度学习框架,可分为训练和测试两个阶段, 验证指标略有不同,本文只介绍训练阶段的指标验证。训练阶段关注的是模型训练集上的精度,训练集是完备的,因此关注大batch\_size下的训练速度,关注吞吐量,例如图像模型常用的batch\_size=128, 多卡情况下会加大;预测阶段关注的是在测试集上的精度,线上服务测试数据不能提前收集,因此关注小batch\_size下的预测速度,关注延迟,例如预测服务常用的batch\_size=1, 4等。
`Fluid <https://github.com/PaddlePaddle/Paddle>`__ 是PaddlePaddle从0.11.0版本开始引入的设计,本文的基准测试在该版本上完成。
环境搭建
########
基准测试中模型精度和硬件、框架无关,由模型结构和数据共同决定;性能方面由测试硬件和框架性能决定。框架基准测试为了对比框架之间的差异,控制硬件环境,系统库等版本一致。下文中的对比实验都在相同的硬件条件和系统环境条件下进行.
不同架构的GPU卡性能差异巨大,在验证模型在GPU上训练性能时,可使用NVIDIA提供的工具`nvidia-smi`检验当前使用的GPU型号,如果测试多卡训练性能,需确认硬件连接是`NVlink <https://zh.wikipedia.org/zh/NVLink>`__ 或 `PCIe <https://zh.wikipedia.org/zh-hans/PCI_Express>`__。同样地,CPU型号会极大影响模型在CPU上的训练性能。可读取`/proc/cpuinfo`中的参数,确认当前正在使用的
CPU型号。
下载GPU对应的Cuda Tool Kit`Cuda <https://developer.nvidia.com/cuda-toolkit>`__ 和 Cudnn,或者使用NVIDIA官方发布的nvidia-docker镜像 `nvidia-docker <https://github.com/NVIDIA/nvidia-docker>`__。 Cuda Tool Kit包含了GPU代码使用到的基础库,影响在此基础上编译出的Fluid二进制运行性能。
不同架构的GPU卡性能差异巨大,在验证模型在GPU上训练性能时,可使用NVIDIA提供的工具:code `nvidia-smi`检验当前使用的GPU型号,如果测试多卡训练性能,需确认硬件连接是`nvlink <https://zh.wikipedia.org/zh/NVLink>`__ 或 `PCIe <https://zh.wikipedia.org/zh-hans/PCI_Express>`__。 同样地,CPU型号会极大影响模型在CPU上的训练性能。可读取`/proc/cpuinfo`中的参数,确认当前正在使用的CPU型号。
下载GPU对应的Cuda Tool Kit和 Cudnn,或者使用NVIDIA官方发布的nvidia-docker镜像 `nvidia-docker <https://github.com/NVIDIA/nvidia-docker>`__, 镜像内包含了Cuda和Cudnn,本文采用这种方式。 Cuda Tool Kit包含了GPU代码使用到的基础库,影响在此基础上编译出的Fluid二进制运行性能。
准备好Cuda环境后,从github上的下载Paddle并源码编译,会生成对应的最适合当前GPU的sm\_arch二进制\ `sm\_arch <https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html>`__\ 。另外,cudnn对卷积类任务影响巨大,在基准测试中需要小版本一致,例如Cudnn7.0.2与Cudnn7.1.4在Resnet上有5%以上差异。
选择基准模型
############
对框架做基准测试,需要覆盖不同训练任务和不同大小的模型。本文中选取了图像和NLP的典型模型。
+------------+------------+-----------+------------+
| 任务种类 | 模型名称 | 网络结构 | 数据集|
+============+============+===========+============+
| 图像分类 | mnist | Lenet | mnist|
+------------+------------+-----------+------------+
| 图像分类| VGG | VGG-16 | Flowers102|
+------------+------------+-----------+------------+
| 图像分类| Resnet | Resnet-50 | Flowers102|
+------------+------------+-----------+------------+
| 文本分类| Stacked-LSTM | Stacked-LSTM | IMDB |
+------------+------------+-----------+------------+
| 机器翻译| seq-seq | Stacked-LSTM | wmt14 |
+------------+------------+-----------+------------+
对框架做基准测试,需要覆盖不同训练任务和不同大小的模型,本文中选取了图像和NLP的最为常用的5个模型。
============ ============ ================= ============
任务种类 模型名称 网络结构 数据集
============ ============ ================= ============
图像分类 mnist Lenet mnist
图像分类 VGG VGG-16 Flowers102
图像分类 Resnet Resnet-50 Flowers102
文本分类 Stacked-LSTM Stacked-LSTM IMDB
机器翻译 seq-seq Stacked-LSTM wmt14
============ ============ ================= ============
其中mnist, VGG, Resnet属于CNN模型, stacked-lstm, seq2seq代表RNN模型。
`benchmark <https://github.com/PaddlePaddle/Paddle/tree/develop/benchmark/fluid>`__
......@@ -87,32 +87,24 @@ TensorFlow版本为\ `v.1.4.0-rc1 <https://github.com/tensorflow/tensorflow/tree
- CPU 单机单线程测试结果
+----------------+--------------------+-------------------+
| Speed | Fluid CPU | TensorFlow CPU |
+================+====================+===================+
| mnist | 1298.75 samples/s | 637.57 samples/s |
+----------------+--------------------+-------------------+
| VGG-16 | 0.4147 images/s | 0.1229 images/s |
+----------------+--------------------+-------------------+
| Resnet-50 | 1.6935 images/s | 0.3657 images/s |
+----------------+--------------------+-------------------+
| Stacked-LSTM | 472.3225 words/s | 48.2293words/s |
+----------------+--------------------+-------------------+
| Seq2Seq | 217.1655 words/s | 28.6164 words/s |
+----------------+--------------------+-------------------+
================ ==================== ===================
Speed Fluid CPU TensorFlow CPU
================ ==================== ===================
mnist 1298.75 samples/s 637.57 samples/s
VGG-16 0.4147 images/s 0.1229 images/s
Resnet-50 1.6935 images/s 0.3657 images/s
Stacked-LSTM 472.3225 words/s 48.2293words/s
Seq2Seq 217.1655 words/s 28.6164 words/s
================ ==================== ===================
- GPU 单机单卡测试结果
+----------------+----------------+---------------------+
| Speed | Fluid GPU | TensorFlow GPU |
+================+================+=====================+
| mnist | 19710.90 samples/s | 15576.3 samples/s |
+----------------+----------------+---------------------+
| VGG-16 | 59.83327 | 40.9967 images/s |
+----------------+----------------+---------------------+
| Resnet-50 | 105.84412 | 97.8923 images/s |
+----------------+----------------+---------------------+
| Stacked-LSTM | 1319.99315 | 1608.2526 words/s |
+----------------+----------------+---------------------+
| Seq2Seq | 7147.89081 | 6845.1161 words/s |
+----------------+----------------+---------------------+
=============== ===================== =================
Speed Fluid GPU TensorFlow GPU
=============== ===================== =================
mnist 19710.90 samples/s 15576.3 samples/s
VGG-16 59.83327 images/s 40.9967 images/s
Resnet-50 105.84412 97.8923 images/s
Stacked-LSTM 1319.99315 1608.2526 words/s
Seq2Seq 7147.89081 6845.1161 words/s
=============== ===================== =================
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册