我已经用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()也会使用原始的分数值。
一些环境信息:
答案 0 :(得分:0)
这很不幸,但是在当前的TensorFlow(1.11)中,GPU内存分配器仅创建一次(针对每个GPU设备),这是该过程中第一次创建会话。在以下会话中更改per_process_gpu_memory_fraction
无效。
关于您的库,我建议不要在其中创建会话。要求用户为您提供他们希望配置的会话。或者,您可以只创建一个图形并返回要运行的操作。然后,用户可以根据需要运行它们。