Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
FluidDoc
提交
f295e064
F
FluidDoc
项目概览
PaddlePaddle
/
FluidDoc
通知
5
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
23
列表
看板
标记
里程碑
合并请求
111
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
FluidDoc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
23
Issue
23
列表
看板
标记
里程碑
合并请求
111
合并请求
111
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
f295e064
编写于
6月 22, 2018
作者:
D
dongzhihong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
"add benchmark doc"
上级
6bc7ca5f
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
68 addition
and
0 deletion
+68
-0
source/advanced_usage/benchmark.md
source/advanced_usage/benchmark.md
+68
-0
未找到文件。
source/advanced_usage/benchmark.md
0 → 100644
浏览文件 @
f295e064
## 概要
本文介绍如何给深度学习框架做benchmark. benchmark测试主要包含验证模型的精度和性能两方面, 下文通过搭建测试环境和测试指标等多方面对Fluid进行基准测试.
[
Fluid
](
https://github.com/PaddlePaddle/Paddle
)
是PaddlePaddle 从0.11.0 引入的新设计, 用来让用户像Pytorch和Tensorflow Eager Execution一样写程序.
验证深度学习框架,可分为训练和测试两个阶段。验证指标大同小异,例如训练关注的是训练集上的精度,大batch_size下的训练速度,而测试关注的是在测试集上的精度,小batch_size下的预测速度。本文只介绍训练阶段的指标验证。
### 环境搭建
下文中的对比实验都在相同的硬件条件和软件条件下进行. benchmark的结果强依赖于硬件。所以需要保证影响指标的硬件环境一致,这样benchmark才有意义。
对硬件方面,对GPU验证需要保证GPU的型号一致; 对cpu需要保证CPU型号一致,另对于厂内机器,需要额外关注内存插条顺序是最优的;
对软件方面,基础库Cuda大版本需要保持一致,例如Cuda9与Cuda8支持指令不同,运行速度有差异,在此软件环境下,源码编译paddle。paddle会针对cuda生成对应的sm_arch二进制
[
sm_arch
](
https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html
)
。cudnn对重卷积类任务影响巨大,需要版本
**完全一致**
。
本教程中的硬件环境为 Intel(R) Xeon(R) CPU E5-2660 v4 @ 2.00GHz. TITAN X (Pascal) 12G x 1
系统环境为 System: Ubuntu 16.04.3 LTS, Nvidia-Docker 17.05.0-ce, build 89658be. Nvidia-Driver 384.90.
采用的Fluid版本为
[
v.0.12.0
](
https://github.com/PaddlePaddle/Paddle/releases/tag/v.0.12.0
)
, 需要commit一致.
### 模型选择
benchmark需要兼顾大小模型,不同训练任务下的表现, 才能说明框架效果。其中mnist, VGG, Resnet属于CNN模型, stacked-lstm代表RNN模型.
[
benchmark
](
https://github.com/PaddlePaddle/Paddle/tree/develop/benchmark/fluid
)
### 测试过程
-
CPU
首先需要屏蔽GPU
`export CUDA_VISIBLE_DEVICES=`
;
在单机单卡的测试环境中,Fluid需要关闭OpenMP和MKL的多线程. 设置
`export OMP_NUM_THREADS=1;export MKL_NUM_THREADS=1;`
.
TensorFlow需要关闭多线程, 设置 intra_op_parallelism_threads=1, inter_op_parallelism_threads=1.
运行过程中可以通过
`nvidia-smi`
来校验是否有GPU被使用, 下文GPU同理.
```
bash
docker run
-it
--name
CASE_NAME
--security-opt
seccomp
=
unconfined
-v
$PWD
/benchmark:/benchmarkIMAGE_NAME /bin/bash
```
将其中的CASE_NAME和IMAGE_NAME换为对应的名字,运行对应的例子
-
GPU
再次确认cudnn和cuda版本一致。本教程使用了cudnn7, cuda8. nvidia/cuda:8.0-cudnn7-devel-ubuntu16.04
```
bash
nvidia-docker run
-it
--name
CASE_NAME
--security-opt
seccomp
=
unconfined
-v
$PWD
/benchmark:/benchmark
-v
/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu IMAGE_NAME /bin/bash
```
将其中的CASE_NAME和IMAGE_NAME换为对应的名字,运行对应的例子
### 测试结果
CPU测试结果
| Speed | Fluid CPU | TensorFlow CPU |
| ------------ | ---------------- | ---------------- |
| mnist | 46.198 s/pass | 94.106 s/pass |
| 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 | 3.044 s/pass | 3.852 s/pass |
| 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 |
注:mnist由于图像太小,采用计量单位为s
### Reference
-
PaddlePaddle Fluid
[
Paddle
](
https://github.com/PaddlePaddle/Paddle
)
-
TensorFlow
[
TensorFlow
](
https://github.com/tensorflow/tensorflow
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录