GPU上的Keras-GPU利用率低

时间:2019-05-07 17:08:28

标签: tensorflow keras python-3.5

我正在使用带有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

1 个答案:

答案 0 :(得分:1)

尝试用以下代码包装脚本:

import tensorflow as tf

with tf.device('/device:GPU:0'):
    <your code>

查看Tensorflow guide on using GPUs以获得更多信息