【发布时间】:2019-09-25 09:41:14
【问题描述】:
我正在使用 K80 GPU 的 GCP 虚拟机上使用 Keras 2.2.4 和 python 3.5.3 和 Tensorflow 训练模型。
GPU 利用率在 25% 到 50% 之间波动,而使用 python 的 CPU 进程占用 98%
我假设 python 太慢了,无法为 K80 提供数据。
代码如下。
每个时期都有多天的数据。
每天有大约 20K 个样本 - 每个样本的数量都有所不同。
批量大小由变量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
【问题讨论】:
-
在
Ubuntu 16.04上遇到了类似的问题。更新 nvidia 驱动后,利用率约为 90%。
标签: tensorflow keras python-3.5