【发布时间】:2018-10-02 00:17:01
【问题描述】:
我在 Paperspace 云基础架构上创建了虚拟笔记本,后端使用了 Tensorflow GPU P5000 虚拟实例。 当我开始训练我的网络时,它的运行速度比我使用纯 CPU 运行时引擎的 MacBook Pro 慢 2 倍。 如何确保 Keras NN 在训练过程中使用 GPU 而不是 CPU?
请在下面找到我的代码:
from tensorflow.contrib.keras.api.keras.models import Sequential
from tensorflow.contrib.keras.api.keras.layers import Dense
from tensorflow.contrib.keras.api.keras.layers import Dropout
from tensorflow.contrib.keras.api.keras import utils as np_utils
import numpy as np
import pandas as pd
# Read data
pddata= pd.read_csv('data/data.csv', delimiter=';')
# Helper function (prepare & test data)
def split_to_train_test (data):
trainLenght = len(data) - len(data)//10
trainData = data.loc[:trainLenght].sample(frac=1).reset_index(drop=True)
testData = data.loc[trainLenght+1:].sample(frac=1).reset_index(drop=True)
trainLabels = trainData.loc[:,"Label"].as_matrix()
testLabels = testData.loc[:,"Label"].as_matrix()
trainData = trainData.loc[:,"Feature 0":].as_matrix()
testData = testData.loc[:,"Feature 0":].as_matrix()
return (trainData, testData, trainLabels, testLabels)
# prepare train & test data
(X_train, X_test, y_train, y_test) = split_to_train_test (pddata)
# Convert labels to one-hot notation
Y_train = np_utils.to_categorical(y_train, 3)
Y_test = np_utils.to_categorical(y_test, 3)
# Define model in Keras
def create_model(init):
model = Sequential()
model.add(Dense(101, input_shape=(101,), kernel_initializer=init, activation='tanh'))
model.add(Dense(101, kernel_initializer=init, activation='tanh'))
model.add(Dense(101, kernel_initializer=init, activation='tanh'))
model.add(Dense(101, kernel_initializer=init, activation='tanh'))
model.add(Dense(3, kernel_initializer=init, activation='softmax'))
return model
# Train the model
uniform_model = create_model("glorot_normal")
uniform_model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
uniform_model.fit(X_train, Y_train, batch_size=1, epochs=300, verbose=1, validation_data=(X_test, Y_test))
【问题讨论】:
-
不确定是否是最好的方法,但创建一个巨大的批次并用它进行训练。如果它带来 OOM 错误,它是 GPU,如果它冻结你的机器,它是 CPU
-
您可以尝试的另一件事是在声明您的模型之前强制使用:
with tf.device('/gpu:0'):的 GPU 设备。 -
相同的行为 - 执行速度较慢,当我创建 batch_size=32 甚至 64 时。在纯 CPU 上,比具有相同设置的 MacBook Pro 低两倍
-
更改代码以使用
with tf.device('/gpu:0'):运行,但与我的 MacBook pro 相比,执行时间仍然很慢...
标签: tensorflow keras gpu