使用C ++ per_process_gpu_memory_fraction的Tensorflow不起作用

时间:2019-03-21 13:43:52

标签: c++ tensorflow gpu

我在使用两个会话的Windows上构建了Tensorflow。我想从我的gpu设置会话使用的内存量,但这似乎不起作用。我的代码看起来像这样:

void createSession(Session** sess, bool allow_growth, double memory_fraction)
{
    tensorflow::SessionOptions session_options;
    session_options.config.mutable_gpu_options()->set_allow_growth(allow_growth);
    session_options.config.mutable_gpu_options()->set_per_process_gpu_memory_fraction(memory_fraction);

    Status status = NewSession(session_options, sess);
    ...
    GraphDef graph_def;
    ...
    status = (*sess)->Create(graph_def);
    ...
}

此函数在初始化时被调用两次,对于我需要的每个会话一次。无论我如何更改allow_growth和memory_fraction的值,两个会话始终使用我的gpu内存的80%。

我当前的tensorflow版本是1.13,但是1.12版本存在相同的问题。

为什么这不能正常工作?

1 个答案:

答案 0 :(得分:3)

不幸的是,在Tensorflow中,每个进程每个GPU设备创建一次GPU内存分配器。因此,在初始化第一个会话之前,只能将此值设置一次。此后,它将为您创建的每个会话使用相同的金额。您无法使用per_process_gpu_memory_fraction()方法进行更改。

我假设在会话初始化之前,可能还有其他会话初始化,可能具有不同的选项或默认的SessionOptions,这就是为什么您的修改对此无效的原因。