我的机器有以下规格:
CPU:Xeon E5-1620 v4
GPU:Titan X(Pascal)
Ubuntu 16.04
Nvidia车手375.26
CUDA取得8.0
cuDNN 5.1
我已经使用Tensorflow作为支持参考的以下Keras示例进行了基准测试:
SCRIPT NAME GPU CPU
stated_lstm.py 5sec 5sec
babi_rnn.py 10sec 12sec
imdb_bidirectional_lstm.py 240sec 116sec
imbd_lstm.py 113sec 106sec
Run Code Online (Sandbox Code Playgroud)
我的gpu显然在非lstm模型中执行我的cpu.
SCRIPT NAME GPU CPU
cifar10_cnn.py 12sec 123sec
imdb_cnn.py 5sec 119sec
mnist_cnn.py 3sec 47sec
Run Code Online (Sandbox Code Playgroud)
还有其他人经历过这个吗?
我有一个特定的情况,网络相对较小,对于收敛和泛化问题,我应该保持小批量(例如256),这导致每个时期处理数百个批次.
不幸的是,在这种情况下,批量加载和损失计算成为瓶颈(正如timeline工具告诉我的那样).
在tensorflow中,您可以编写类似这样的内容来加载gpu上的数据:
with tf.device('/gpu:0'):
train_data = tf.constant(train_data_numpy)
Run Code Online (Sandbox Code Playgroud)
但如果我传递train_data给Keras Model.predict或Model.fit函数,我会收到以下错误:
keras/engine/training.pyc in predict(self, x, batch_size, verbose)
1515 f = self.predict_function
1516 return self._predict_loop(f, ins,
-> 1517 batch_size=batch_size, verbose=verbose)
1518
1519 def train_on_batch(self, x, y,
keras/engine/training.pyc in _predict_loop(self, f, ins, batch_size, verbose)
1129 if verbose == 1:
1130 progbar = Progbar(target=samples)
-> 1131 batches = _make_batches(samples, batch_size)
1132 index_array = np.arange(samples)
1133 for batch_index, (batch_start, batch_end) in enumerate(batches):
keras/engine/training.pyc in _make_batches(size, batch_size)
368 A …Run Code Online (Sandbox Code Playgroud) 我正在使用带有Tensorflow后端的Keras并且查看nvidia-smi不足以了解当前网络架构需要多少内存,因为Tensorflow似乎只是分配了所有可用的内存.
那么问题是如何找出真正的GPU内存使用情况?