c++ - Tensorflow C++ 设置 GPU 内存分数并允许增长

标签 c++ tensorflow gpu

我想设置 GPU 内存分数allow growth 选项,如 here 所述对于 python,但在 C++ 中。这是这样做的正确方法吗?我特别不确定 set_allocated_gpu_options 行(在这种情况下,“分配”是什么意思,尚未分配任何内容)。

tensorflow::Session *session = nullptr;
tensorflow::SessionOptions sessionOptions;
tensorflow::GPUOptions gpuOptions;
gpuOptions.set_per_process_gpu_memory_fraction(0.2);
gpuOptions.set_allow_growth(true);
sessionOptions.config.set_allocated_gpu_options(&gpuOptions);
tensorflow::Status status = tensorflow::NewSession(sessionOptions, &session);

最佳答案

我必须做完全相同的事情,这就是我在项目中的做法:

auto options = tensorflow::SessionOptions();
options.config.mutable_gpu_options()->set_per_process_gpu_memory_fraction(0.2);
options.config.mutable_gpu_options()->set_allow_growth(true);
tensorflow::Status status = tensorflow::NewSession(options, &session);

set_allocated 部分与 protobuf 的内存管理有关。如果您设置选项,它会期待一个动态分配的对象,并且它会取得它的所有权(并在适当的时候删除它)。您的代码将无法运行,因为您将地址传递给局部变量,该变量将在您退出代码块时被销毁。

相反,如果您通过 mutable_gpu_options() 访问 GpuOptions 的现有实例,您将获得一个指向可用于直接编辑该实例的对象的指针(即,不需要分配你自己的)

关于c++ - Tensorflow C++ 设置 GPU 内存分数并允许增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53814261/

相关文章:

c++ - 模板特化和完美转发

c++ - C++中解决对象间的依赖关系

python - Pytorch 运行时错误 : size mismatch, m1 : [1 x 7744], m2:[400 x 120]

cuda - CUDA编译中如何分配寄存器

java - 如何在 Windows 上编译具有 GPU 支持的 Tensorflow Java API?

c++ - 如何将使用 malloc() 的 C 语句转换为 C++?

c++ - 具有不同类型元素和使用类的二维数组

python - 属性错误: module 'tensorflow' has no attribute 'lite' in Keras model to Tensorflow Lite convertion - Python

python - 将 4 channel RGB-D 图像输入 LSTM

c++ - Vulkan.hpp Supbass 附件违反验证层