我正在使用带有K80 GPU的GCP虚拟机上使用Keras 2.2.4,python 3.5.3和Tensorflow训练模型。
GPU利用率在25%到50%之间波动,而使用python的CPU进程占98%
我假设,python太慢了,无法为K80提供数据。
下面的代码。
每个时期都有几天的数据。
每天大约有2万个样本-每个样本的数量有所不同。
批次大小由变量window_size=900
固定
因此,我每天要喂19K批饲料。批次0从样本0开始并获取900个样本,批次1从样本1开始并获取900个样本,依此类推,直到一天结束。
所以我有3个循环-时代,天数,批次。 我觉得为了清晰起见,应该保留时代和天循环。我认为这不是问题
我认为应该研究最内在的循环。
内部循环的实现是幼稚的。有什么技巧可以更快地处理数组吗?
# d is tuple from groupby - d[0] = date, d[1] = values
for epoch in epochs:
print('epoch: ', epoch)
for d in days :
print(' day: ', d[0])
# get arrays for the day
features = np.asarray(d[1])[:,2:9].astype(dtype = 'float32')
print(len(features), len(features[0]), features[1].dtype)
labels = np.asarray(d[1])[:, 9:].astype(dtype = 'int8')
print(len(labels), len(labels[0]), labels[1].dtype)
for batch in range(len(features) - window_size):
# # # can these be optimised?
fb = features[batch:batch+window_size,:]
lb = labels[batch:batch+window_size,:]
fb = fb.reshape(1, fb.shape[0], fb.shape[1])
lb = lb.reshape(1, lb.shape[0], lb.shape[1])
# # #
model.train_on_batch(fb, lb)
#for batches
#model.reset_states()
#for days
#for epoch
答案 0 :(得分:1)
尝试用以下代码包装脚本:
import tensorflow as tf
with tf.device('/device:GPU:0'):
<your code>
查看Tensorflow guide on using GPUs以获得更多信息