【问题标题】:Tensorflow with c++ per_process_gpu_memory_fraction not working带有c ++ per_process_gpu_memory_fraction的Tensorflow不起作用
【发布时间】:2019-08-12 09:22:51
【问题描述】:

我在使用两个会话的 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版本也存在同样的问题。

为什么这不能正常工作?

【问题讨论】:

    标签: c++ tensorflow gpu


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多