GPUとCPUの速度が小さい(CPUは時には高速です)GPUとCPUの速度が似ている理由を正確に理解できません。より大きなサイズのネットワーク。質問の一番下のコードはi7-6700kの103.7sで実行されますが、tensorflow-gpuを使用するとコードは29.5秒で実行されます。Keras(Tensorflowバックエンド)は、特定のネットワークを訓練するときにCPUよりGPUの方が遅い
しかし、以下の例のように1000の代わりに100個の隠れたニューロンを持つネットワークをトレーニングすると、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])
どのGPUをお使いですか?最上位のGPUを完全に飽和させるには、数万スレッドが必要です。各スレッドが1つのニューロンの計算を処理すると仮定すると、100個のニューロンを有するシステムはGPUを十分に活用しないであろう。逆に、ニューロンの数を10Kに増やす場合、GPUとCPUの相対的な優位性はさらに高まる可能性があります。 – njuffa
おっと、答えにそれを完全に忘れてしまった。私はGTX 1070を持っています。それは意味をなさない –
私は実際にGTX 1070 GPUで同じ動作に気づいた。私はCPU(i7-7700)とGPU上で私のモデル(使用しているものと似た寸法を持っている)を走らせることと違いは見られません。違いを評価するためにネットワークの容量を増やそうとする必要がある – mspadaccino