我有一个Python 3 program,涉及执行cuda kernel。
当我在以下配置中启动代码时,代码运行正常
然而,当在同一台机器上使用GeForce GTX 970时,我收到此错误:
cuMemFree failed: the launch timed out and was terminated
PyCUDA WARNING: a clean-up operation failed (dead context maybe?)
请注意,当我使用相当少的线程调用内核时(即每个块的常量线程具有较小的网格维度),不会发生此错误。
In this post,Andreas解释了该错误消息的含义:
这意味着当PyCUDA还在谈论时,你的情境就消失了 它。如果执行某些无效操作,这种情况最常发生 (例如访问内核中的越界内存)。
换句话说,它似乎表明我写的内核出了问题。但是,由于代码在其他GPU上启动时不会引发错误,我想知道其他问题是否也会引发同样的错误。
所以我的问题是:
我可以理解,这里的许多人对没有代码和最小例子的问题过敏。我试图写一个简单的例子来重现错误,但我不能。想要加倍输入参数的内核可以很好地运行到内存错误的极限......所以我希望在搜索错误时只需要一些建议看看的方向。
答案 0 :(得分:1)
这是导致我回答的问题的talonmies评论。
问题在于其中一张卡(GTX 970)同时用于系统的图形输出。正如here和here所解释的那样,这意味着有一个“监视器”阻止CUDA内核运行的时间长于它们停止前的最长时间。
我的解决方案是通过sudo service lightdm stop
停止X服务器。然后,程序在两张卡上运行都没有错误。
答案 1 :(得分:0)
添加到上面 Amos 的回答中,对于 Linx 18.04,我必须使用 sudo service gdm stop。此外,如果这仍然不起作用(对我来说不是),请尝试使用 ctrl+alt+f3 打开终端并通过它运行您的程序。