GPU和CPU进行深度学习的性能,虽然之前已经有过对比(《机器学习—Nvidia GPU平台选型》),但对于具体型号来说,相差到底有多大?此文笔者介绍自己电脑的测试过程。

个人电脑配置信息如下:

1. 测试方法

通过对CPU和GPU下机器学习性能进行单独测试,例程采用TensorLayer实现。

(1)下载TensorLayer包,地址:https://github.com/zsdonghao/tensorlayer/

(2)打开Winpython安装目录下的WinPython Control Panel.exe,添加TensorLayer包到winpython中:

(3)打开winpython下Spyder IDE进行编程

2. 运行例程 

通过一个简单的例程MNIST,对两种平台运算的时间进行对比。详细内容访问官网地址。

例程源码:

import tensorflow as tf
import tensorlayer as tl

sess = tf.InteractiveSession()

# 准备数据
X_train, y_train, X_val, y_val, X_test, y_test = \
                                tl.files.load_mnist_dataset(shape=(-1,784))

# 定义 placeholder
x = tf.placeholder(tf.float32, shape=[None, 784], name='x')
y_ = tf.placeholder(tf.int64, shape=[None, ], name='y_')

# 定义模型
network = tl.layers.InputLayer(x, name='input_layer')
network = tl.layers.DropoutLayer(network, keep=0.8, name='drop1')
network = tl.layers.DenseLayer(network, n_units=800,
                                act = tf.nn.relu, name='relu1')
network = tl.layers.DropoutLayer(network, keep=0.5, name='drop2')
network = tl.layers.DenseLayer(network, n_units=800,
                                act = tf.nn.relu, name='relu2')
network = tl.layers.DropoutLayer(network, keep=0.5, name='drop3')
network = tl.layers.DenseLayer(network, n_units=10,
                                act = tf.identity,
                                name='output_layer')
# 定义损失函数和衡量指标
# tl.cost.cross_entropy 在内部使用 tf.nn.sparse_softmax_cross_entropy_with_logits() 实现 softmax
y = network.outputs
cost = tl.cost.cross_entropy(y, y_, name = 'cost')
correct_prediction = tf.equal(tf.argmax(y, 1), y_)
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
y_op = tf.argmax(tf.nn.softmax(y), 1)

# 定义 optimizer
train_params = network.all_params
train_op = tf.train.AdamOptimizer(learning_rate=0.0001, beta1=0.9, beta2=0.999,
                            epsilon=1e-08, use_locking=False).minimize(cost, var_list=train_params)

# 初始化 session 中的所有参数
tl.layers.initialize_global_variables(sess)

# 列出模型信息
network.print_params()
network.print_layers()

# 训练模型
tl.utils.fit(sess, network, train_op, cost, X_train, y_train, x, y_,
            acc=acc, batch_size=500, n_epoch=500, print_freq=5,
            X_val=X_val, y_val=y_val, eval_train=False)

# 评估模型
tl.utils.test(sess, network, acc, X_test, y_test, x, y_, batch_size=None, cost=cost)

# 把模型保存成 .npz 文件
tl.files.save_npz(network.all_params , name='model.npz')
sess.close()

3. 时间对比

(1)在i5-3470上运行,系统信息和运算消耗的时间,如下图:

(2)在GTX1060上运行,系统信息和运算消耗的时间,如下图:

通过对比发现:

GPU GTX1060进行深度学习的性能是CPU I5-3470的10倍左右。

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。

标签:机器学习