我在使用两个会话的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版本存在相同的问题。
为什么这不能正常工作?
答案 0 :(得分:3)
不幸的是,在Tensorflow中,每个进程每个GPU设备创建一次GPU内存分配器。因此,在初始化第一个会话之前,只能将此值设置一次。此后,它将为您创建的每个会话使用相同的金额。您无法使用per_process_gpu_memory_fraction()
方法进行更改。
我假设在会话初始化之前,可能还有其他会话初始化,可能具有不同的选项或默认的SessionOptions
,这就是为什么您的修改对此无效的原因。