我在Python上使用tensorflow训练了一个没有任何问题的模型。我现在正在尝试将此模型的推理集成到预先存在的支持 OpenGL 的软件中。但是,我在 cuInit 期间(也就是说,甚至早于加载模型,就在 session 创建时)收到了 CUDA_ERROR_OUT_OF_MEMORY
。 OpenGL 似乎确实占用了一些 MiB 内存(大约 300 MB),如 gpustat
或 nvidia-smi
所示。
当 TF 和 OpenGL 都试图访问/分配 GPU 内存时,是否可能会发生冲突?以前有人遇到过这个问题吗?我在谷歌搜索中发现的大多数引用文献都是在模型加载时,而不是在 session /CUDA 初始化时。这是否与 OpenGL 完全无关,我只是找错了树?一个简单的 TF C++ 推理示例即可运行。如有任何帮助,我们将不胜感激。
为了完整性,这里是 tensorflow 日志输出:
2018-01-08 12:11:38.321136: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-01-08 12:11:38.379100: E tensorflow/stream_executor/cuda/cuda_driver.cc:406] failed call to cuInit: CUDA_ERROR_OUT_OF_MEMORY
2018-01-08 12:11:38.379388: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:158] retrieving CUDA diagnostic information for host: rosenblatt
2018-01-08 12:11:38.379413: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:165] hostname: rosenblatt
2018-01-08 12:11:38.379508: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:189] libcuda reported version is: 384.98.0
2018-01-08 12:11:38.380425: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:369] driver version file contents: """NVRM version: NVIDIA UNIX x86_64 Kernel Module 384.98 Thu Oct 26 15:16:01 PDT 2017 GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)"""
2018-01-08 12:11:38.380481: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:193] kernel reported version is: 384.98.0
2018-01-08 12:11:38.380497: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:300] kernel version seems to match DSO: 384.98.0
编辑:删除所有对 OpenGL 的引用会导致同样的问题,因此它与库之间的冲突无关。
最佳答案
好的,问题是在二进制文件的调试版本中使用了 sanitizer 。发布版本或没有 sanitizer 的调试版本按预期工作。
关于c++ - 使用tensorflow C++的OpenGL程序对cuInit的调用失败: CUDA_ERROR_OUT_OF_MEMORY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48154126/