为什么使用GPU而不是CPU的tensorflow较慢?

时间:2019-07-19 15:47:57

标签: python tensorflow keras

这是一个非常简单的神经网络:

n_pts = 500000
np.random.seed(0)
Xa = np.array([np.random.normal(13, 2, n_pts),
           np.random.normal(12, 2, n_pts)]).T
Xb = np.array([np.random.normal(8, 2, n_pts),
           np.random.normal(6, 2, n_pts)]).T

X = np.vstack((Xa, Xb))
y = np.matrix(np.append(np.zeros(n_pts), np.ones(n_pts))).T


# Create a new Keras model
model = Sequential()
model.add(Dense(units=1, input_shape=(2,), activation='sigmoid'))
adam = Adam(lr=0.1)
model.compile(adam, loss='binary_crossentropy', metrics=['accuracy'])
h = model.fit(x=X, y=y, verbose=1, batch_size=100000, epochs=15, shuffle='true')

我将批处理大小增加到100k,但是cpu比gpu快(9秒钟vs 12(高批处理大小,12秒钟,而小批处理大小则快4倍)) CPU是Intel i7-8850H,GPU是Nvidia Quadro p600 4gb。 我安装了tensorflow 1.14.0。 使用像这样的更复杂的网络:

model = Sequential()
model.add(Convolution2D(24, 5, 5, subsample=(2, 2), input_shape=(66, 200, 
3), activation='elu'))
model.add(Convolution2D(36, 5, 5, subsample=(2, 2), activation='elu'))
model.add(Convolution2D(48, 5, 5, subsample=(2, 2), activation='elu'))
model.add(Convolution2D(64, 3, 3, activation='elu'))

model.add(Convolution2D(64, 3, 3, activation='elu'))
# model.add(Dropout(0.5))

model.add(Flatten())

model.add(Dense(100, activation = 'elu'))
#   model.add(Dropout(0.5))

 model.add(Dense(50, activation = 'elu'))
#   model.add(Dropout(0.5))

model.add(Dense(10, activation = 'elu'))
#   model.add(Dropout(0.5))

model.add(Dense(1))

optimizer = Adam(lr=1e-3)
model.compile(loss='mse', optimizer=optimizer)

GPU是否会比CPU更快? 要利用gpu功能需要做什么?

1 个答案:

答案 0 :(得分:0)

GPU在大规模并行工作负载下运行效果最佳,但您的简单模型无法实现这一目标。数据需要在CPU和GPU之间传输,因此,如果此开销大于实际计算量,则CPU很有可能会更快,因为不会发生传输开销。

只有更大的模型才能从GPU加速中获利。