【问题标题】:Keras on GPU - low GPU utilisationGPU 上的 Keras - GPU 利用率低
【发布时间】: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


【解决方案1】:

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

import tensorflow as tf

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

查看Tensorflow guide on using GPUs了解更多信息

【讨论】:

    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2013-05-13
    • 1970-01-01
    • 2018-07-04
    • 2020-11-27
    相关资源
    最近更新 更多