会话关闭后,Tensorflow不会释放内存

时间:2018-06-29 08:15:26

标签: session tensorflow

我有两个模型。

当我分别运行模型A和模型B时,它们都可以进行训练和测试。 为了更有效地训练具有相同数据集的两个模型, 我把他们的运行代码放在一起。

const observables = [];
for (let i = 0; i < this.originalData.length; i++) {
      observables.push( this.dashboardService.getDetails(this.id1[i], this.id2[i])
       };

forkJoin(...observables).subscribe(dataGroup => {
    console.log(dataGroup);
});

在B.training()处发生资源耗尽错误!

因此,当我在A.training()之后执行sess.close()时,似乎并没有释放内存。这个“ sess”是A和B分别具有的一个属性。 -意思是它被用作self.sess

这是一个错误吗?有解决办法吗?

我用谷歌搜索了一些参数,但是只有关闭会话不会释放gpu内存。如何释放gpu内存以便下一个型号可以使用它?

1 个答案:

答案 0 :(得分:3)

Tensorflow不喜欢在同一线程中调用多个会话。

一种解决方法是将A.training()和B.training()置于不同的进程中。 这是一个快速演练:

from multiprocessing import Process

def train_func():
        train(
            learning_rate = 0.001
            ...
        )

    p = Process(target=train_func, args=tuple())
    p.start()
    p.join()