gpt4 book ai didi

performance - 训练某些网络时,Keras(Tensorflow 后端)在 GPU 上比在 CPU 上慢

转载 作者:行者123 更新时间:2023-12-04 01:06:50 25 4
gpt4 key购买 nike

我很难理解为什么 GPU 和 CPU 速度与小型网络相似(CPU 有时更快),而 GPU 与大型网络的速度更快。问题底部的代码在 i7-6700k 上运行时间为 103.7 秒,但使用 tensorflow-gpu 时,代码运行时间为 29.5 秒。

然而,当我训练一个有 100 个隐藏神经元的网络时,而不是像下面的例子中的 1000 个,我在使用 GPU 时获得了大约 20 秒,在使用 CPU 时获得了大约 15 秒。

我在另一个堆栈溢出答案中读到 CPU->GPU 传输需要很长时间,我假设这是引用在 GPU 上加载数据示例。

有人可以解释为什么会发生这种情况,并可能引用我可以对代码进行的一些更改以最大限度地提高速度吗?

import numpy as np
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.utils import np_utils
from keras.layers.core import Dense, Activation, Flatten, Dropout
from sklearn.preprocessing import normalize

## Importing the MNIST dataset using Keras
from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# reshape for vector input
N, x, y = X_train.shape
X_train = normalize(np.reshape(X_train, (N, x * y)))

N, x, y = X_test.shape
X_test = normalize(np.reshape(X_test, (N, x * y)))

# one-hot encoding
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)

model = Sequential()
model.add(Dense(output_dim=750, input_dim=784))
model.add(Activation('relu'))
model.add(Dropout(0.2))

model.add(Dense(150))
model.add(Activation('relu'))
model.add(Dropout(0.2))

model.add(Dense(50))
model.add(Activation('relu'))
model.add(Dropout(0.2))

model.add(Dense(50))
model.add(Activation('relu'))
model.add(Dropout(0.2))

model.add(Dense(10))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='Nadam', metrics=['accuracy'])

fit = model.fit(X_train, y_train, batch_size=128, nb_epoch=10, verbose=0)

## Printing the accuracy of our model, according to the loss function specified in model.compile above
score = model.evaluate(X_test, y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])

最佳答案

在小型网络的情况下,批量加载可能是这里的罪魁祸首。

Keras 在每次迭代开始时将每个 minibatch 从 RAM 加载到 GPU,从而在小型网络中造成瓶颈(前向/后向计算非常快)。
您可以尝试使用 model.fit_generator而不是普通 fit ,以便加载小批量的 CPU 线程并行工作。

不幸的是,我不知道在 GPU 上为 Keras 预加载整个数据集(参见 my issue)

如果您使用的是 Tensorflow 后端,则可以使用 Google 时间线分析工具查看导致速度变慢的原因。如需引用,请参阅 this issue

关于performance - 训练某些网络时,Keras(Tensorflow 后端)在 GPU 上比在 CPU 上慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com