C++ 带c+的张量流+;每处理器gpu内存部分不工作

C++ 带c+的张量流+;每处理器gpu内存部分不工作,c++,tensorflow,gpu,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_option

我在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的值,这两个会话始终使用80%的gpu内存

我目前的tensorflow版本是1.13,但1.12版本也存在同样的问题


为什么不能正常工作?

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

我假设在会话初始化之前,有一个其他会话初始化,可能具有不同的选项或默认的
SessionOptions
,这就是为什么您的修改对它没有影响