numba和tensorflow一起给出了CUDA_ERROR_OUT_OF_MEMORY

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numba和tensorflow一起给出了CUDA_ERROR_OUT_OF_MEMORY相关的知识,希望对你有一定的参考价值。

我在python中使用了numba和tensorflow来计算3-d循环问题。

首先,我多次使用numba来准备输入数据,一切都很好。然后我使用tensorflow进行深度学习,一切都很好。

接下来,当我第二次回到上面的程序,即使用numba时,它给了我一个错误CUDA_ERROR_OUT_OF_MEMORY。

如果我杀死线程并重新启动内核,我可以运行它,但在第二次运行时仍然失败。

似乎问题在于张量流,但我不知道。我在代码的开头和结尾添加了numba.cuda.defer_cleanup()但它没有多大帮助。

有谁知道如何解决这个问题?

答案

您可以尝试调整TF在其初始分配中尝试采用的可见内存分数。例如:假设您有12GB的GPU内存并且想要分配~4GB:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

要么

config = tf.ConfigProto()
config.gpu_options.allow_growth = True 
sess = tf.Session(config=config,graph=detection_graph)

在第二种方法中,您将告诉TF允许GPU增长。这些选项可以帮助您摆脱困境

以上是关于numba和tensorflow一起给出了CUDA_ERROR_OUT_OF_MEMORY的主要内容,如果未能解决你的问题,请参考以下文章

为啥同时使用 numba.cuda 和 CuPy 从 GPU 传输数据这么慢?

可以在用户创建的 numba CUDA 设备函数中调用 numba.cuda.random 设备函数吗?

如何使用 Python 和 Numba 获取 GPU 中的 CUDA 内核数量?

cuda内核for循环中的Break语句给出了问题

在numba中cuda.local.array的正确用法是什么?

理解 CUDA、Numba、Cupy 等的扩展示例