zoukankan      html  css  js  c++  java
  • tensorflow 运行效率 GPU memory leak 问题解决

    问题描述:

      Tensorflow 训练时运行越来越慢,重启后又变好。

      用的是Tensorflow-GPU 1.2版本,在GPU上跑,大概就是才开始训练的时候每个batch的时间很低,然后随着训练的推进,每个batch的耗时越来越长,但是当我重启后,又一切正常了?

    问题查找:

      一开始查到的原因是batch_size 和 batch_num的问题,通过python yield 数据生成器解决,确保内存每次处理的数据确定是batch_size大小,但是发现运行效率还是不高,所以查阅google的一些资料找到如下解决办法。

    问题解决:

      因为在运行时的session里定义了tf的op导致的。这样每一次迭代都会在graph里增加新的节点,导致memory leak,程序越来越慢,最后强行退出。至于在运行时程序有没有增加节点,可以在session里定义graph.finalize()锁定graph,如果跑的时候报错就证明程序在动态添加节点导致的越来越慢。

          修改前代码如下:

    def one_hot(labels):
        labels_num = [strnum_convert(i) for i in labels ]
        batch_size = tf.size(labels_num)
        labels = tf.expand_dims(labels_num, 1)
        indices = tf.expand_dims(tf.range(0, batch_size, 1), 1)
        concated = tf.concat([indices, labels],1)
        onehot_labels = tf.sparse_to_dense(concated, tf.stack([batch_size, 8]), 1, 0)
        #all_hot_labels = tf.reshape(onehot_labels,(1,612))
        return onehot_labels
    

    修改后代码如下:

    def one_hot(labels):
        one_hot_label = np.array([int(i == int(labels)) for i in range(8)])   
    ... ...
    return one_hot_label

         大家可以看到罪魁祸首就是就是这个tf版本的one_hot操作,修改成numpy版本完美解决运行效率问题。

    思考:

            方法二:

      上面问题的原因是GPU memory leak,我们也可以用的是一种曲线救国的方法;每隔1000个batch,当速度明显变慢的时候,就reset graph,然后才重新build模型,再load之前储存的参数tf.reset_default_graph()self.build_model();

      方法三:

            我们在用tensorflow进行数据集制作的时候,发现当我运行eval()函数的时候,程序会越跑越跑慢,eval()生成的数值没有删除,然后会越占越多内存,解决办法是使用del命令就行,一般写成。

    data=Var.eval()  
    #save data to file
    del data
  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/Libo-Master/p/8043164.html
Copyright © 2011-2022 走看看