带有C per_process_gpu_memory_fraction的TensorFlow不起作用

Tensorflow with c++ per_process_gpu_memory_fraction not working

本文关键字:fraction TensorFlow 不起作用 memory gpu per process 带有      更新时间:2023-10-16

我在使用两个会话的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);
    ...
}

此功能在初始化时两次调用,我需要的每个会话一次。无论我如何更改允许_ growth和memory_fraction的值,两个会话始终使用我的GPU内存的80%。

我当前的TensorFlow版本是1.13,但是1.12版本也存在同样的问题。

为什么这无法正常工作?

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

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