benchmark 工具 -- glances
安装:
$ curl -L https://bit.ly/glances | sudo /bin/bash
$ sudo pip install https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz
第 2 个命令,pip 装的是 py3sensors。
用于监控 CPU 温度,测下自己配的 CPU 散热器够不够用。
glances 通过 lm-sensors 可以监控 CPU 的温度和风扇转速。
最新的 sensors 版本,需要用 py3sensors,
而 glances 安装的依旧是 PySensors。
所以,需要手动 pip 装一下。
效果图:
Projects -- TensorFlow models
使用 tensorflow 官方的 models 测 benchmark
$ git clone This email address is being protected from spambots. You need JavaScript enabled to view it.:tensorflow/models.git tf-models
测试1: 手写识别 mnist/convolutional.py
这是一个比较复杂的 mnist model
代码在 tutorials/image/ 目录下
GPU 版本
$ time python mnist/convolutional.py
...
Step 8300 (epoch 9.66), 4.5 ms
Minibatch loss: 1.615, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.8%
Step 8400 (epoch 9.77), 4.3 ms
Minibatch loss: 1.596, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.9%
Step 8500 (epoch 9.89), 4.4 ms
Minibatch loss: 1.614, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.9%
Test error: 0.8%
real 0m39.876s
user 0m46.436s
sys 0m6.140s
CPU 版本
Step 1000 (epoch 1.16), 126.1 ms
Minibatch loss: 2.859, learning rate: 0.009500
Minibatch error: 0.0%
Validation error: 2.0%
Step 1100 (epoch 1.28), 125.3 ms
Minibatch loss: 2.812, learning rate: 0.009500
Minibatch error: 0.0%
Validation error: 1.4%
Step 1200 (epoch 1.40), 125.4 ms
Minibatch loss: 2.911, learning rate: 0.009500
Minibatch error: 1.6%
Validation error: 1.6%
Step 1300 (epoch 1.51), 125.3 ms
Minibatch loss: 2.819, learning rate: 0.009500
Minibatch error: 1.6%
Validation error: 1.7%
GPU / CPU 运行阶段的系统信息截图
benchmark 对比
第二个截图,是 CPU 版本的。
CPU 版跑了 3 min,左下角的 sensors 显示,温度已经 90 度。
传说中轻松上 90 度的大火炉,7700k 名不虚传。
楼下师傅给我配的 65 块钱(jd 上 30 RMB) 的 CPU 散热器的确扛不住.
运行时间差 28.6 倍。GPU 版40 秒跑完,CPU 版预期 20 min。
比用 MacBook Pro 2015 实测时间快了一点点。
另外,由于 GPU 版的 CPU 使用量很低,
GPU 跑深度计算期间,不影响其他日常任务。
测试 2: 图片识别 cifar10/cifar10_train.py
代码中默认是 1000000 个 step。
GPU 用 9 min 跑了 10000 个 step,loss 0.8. 可接受。
2017-02-27 12:49:57.034305: step 9960, loss = 0.81 (2515.9 examples/sec; 0.051 sec/batch)
2017-02-27 12:49:57.557913: step 9970, loss = 0.91 (2493.2 examples/sec; 0.051 sec/batch)
2017-02-27 12:49:58.081191: step 9980, loss = 0.87 (2546.9 examples/sec; 0.050 sec/batch)
2017-02-27 12:49:58.597420: step 9990, loss = 0.78 (2611.9 examples/sec; 0.049 sec/batch)
2017-02-27 12:49:59.215067: step 10000, loss = 0.80 (867.3 examples/sec; 0.148 sec/batch)
CPU 测了 400 个 step,loss 3.5
2017-02-27 13:08:13.959561: step 330, loss = 3.53 (383.6 examples/sec; 0.334 sec/batch)
2017-02-27 13:08:17.246396: step 340, loss = 3.52 (397.9 examples/sec; 0.322 sec/batch)
2017-02-27 13:08:20.553411: step 350, loss = 3.48 (392.9 examples/sec; 0.326 sec/batch)
2017-02-27 13:08:23.820860: step 360, loss = 3.67 (399.6 examples/sec; 0.320 sec/batch)
2017-02-27 13:08:27.104339: step 370, loss = 3.49 (389.7 examples/sec; 0.328 sec/batch)
2017-02-27 13:08:30.370894: step 380, loss = 3.46 (398.6 examples/sec; 0.321 sec/batch)
GPU / CPU 运行阶段的系统信息截图
benchmark 对比
这一次,CPU 和 GPU 只差了 6 倍。
GPU 的显存已经 97%,而 proc 只有 51%。
且,GPU 版本运行期间,CPU 使用率也非常高。
我的理解,
GPU 的显存已经成为瓶颈,
无法充分发挥 GPU 的计算能力了。
benchmark 总结
GPU 的性能瓶颈,在于显存。
计算核心与频率,一般不是瓶颈。
所以,Titan X Pascal 的 12G 显存真的很诱惑。
GTX 1080 与 GTX 1070 的显存/位宽相同。
主要差在频率和计算单元数量上,
这似乎也可以解释,为什么实测的性能差别不会大了。
另外,选一个好的 CPU,还是正确的。
不是全在 GPU 里算。
尤其是显存成为瓶颈的时候。
训练 model 的时候,需要注意 batch size。
batch size 过大,显卡撑爆,计算能力下降非常明显。
如果再给我一个机会,
我选择买 GTX 1070.
省 2000 RMB 啊!