如何使用C ++在Tensorflow中更改per_process_gpu_memory_fraction?

时间:2018-09-27 01:15:40

标签: c++ tensorflow memory-management gpu

我已经用c ++语言开发了两个基于tf的应用程序,这些应用程序用作库。在调用者可执行程序中,先调用library1,然后再调用library2。在library1初始化中,gpu内存分数设置为0.5,运行一些推断,并关闭会话。然后调用library2,将gpu内存比例设置为0.8,但该设置无法正常工作,gpu内存分配未更改。这两个库具有相同的初始化代码,但网分数不同

int XXXLib::init(double per_process_gpu_memory_fraction)
{
    SessionOptions options;
    ConfigProto* config = &options.config;
    GPUOptions* gpu_options = config->mutable_gpu_options();

    // for library1, fraction = 0.5; for library2, fraction = 0.8
    gpu_options->set_per_process_gpu_memory_fraction(per_process_gpu_memory_fraction);
    Status status = NewSession(options, &_session);
}

似乎在调用set_per_process_gpu_memory_fraction()时,此过程中的gpu内存是固定的,即使新的另一个Newsession()也会使用原始的分数值。

  1. 不同的应用程序(库)应使用不同的会话吗?
  2. gpu内存分数与会话或进程有关?
  3. 如何在不同的会话但相同的过程中更改分数?

一些环境信息:

  • 我写过自定义代码吗?否
  • OS平台和发行版? Win10 Pro
  • TensorFlow安装于何处?源代码
  • TensorFlow版本? 1.9
  • CUDA / cuDNN版本? CUDA9.0,cudnn 7.05
  • GPU模型和内存?具有8GB内存的GTX1080

1 个答案:

答案 0 :(得分:0)

这很不幸,但是在当前的TensorFlow(1.11)中,GPU内存分配器仅创建一次(针对每个GPU设备),这是该过程中第一次创建会话。在以下会话中更改per_process_gpu_memory_fraction无效。

关于您的库,我建议不要在其中创建会话。要求用户为您提供他们希望配置的会话。或者,您可以只创建一个图形并返回要运行的操作。然后,用户可以根据需要运行它们。