停止张量流并清除克

时间:2017-04-09 02:20:50

标签: tensorflow gpu nvidia

我的GPU风扇出了问题。所以运行张力流一段时间后GPU的温度会太高。在gpu过热之前,我无法完成训练。所以我编写了一个脚本来检测温度并尝试暂停程序让gpu降温。代码是这样的(阈值设置为45用于测试):

        for batch in batches:
            temp = int(os.popen("nvidia-smi | awk '{if(NR == 12)print $3}' | cut -c 1,2").readline().strip())
            x_batch,y_batch,user_batch,item_batch = zip(*batch)
            train_step(x_batch, y_batch, user_batch, item_batch)
            current_step = tf.train.global_step(sess, self.global_step)
            if temp>=45:
                path = saver.save(sess, checkpoint_prefix, global_step=current_step)
                print("temperature of GPU is over 45! Saved model checkpoint to {}\n".format(path))
                sess.close()
                return (-1,path,batches)

我将tensorflow的代码包装在一个文件中,并在另一个文件中调用它:

result = 1000
restore = False
path = None
batches = None
while result != 1:
    result, path, batches = main(FLAGS,restore, path, batches)
    if result == -1:
        import gc
        gc.collect()
        time.sleep(300)
        restore = True

现在,程序可以在温度过高时暂停,但是gpu仍然被占用并且不会冷却。所以我想知道如何停止张量流并清除vgram。

程序在温度过高时暂停:

但是gpu仍然被占用并且无法降温:

2 个答案:

答案 0 :(得分:0)

TensorFlow仅在程序退出后释放所有GPU内存,这就是为什么您看不到内存未被释放的原因。不过,我认为暂停会有所帮助,这会阻止你的GPU全速工作(仅使用149W中的73个,如图所示);如果它不立即冷却,可能会暂停更长时间。

答案 1 :(得分:0)

最后,通过添加风扇来冷却GPU来解决这个问题......