PyCUDA清理错误,CUDA启动超时错误,仅在某些机器上

时间:2018-01-18 08:53:38

标签: python cuda pycuda

我有一个Python 3 program,涉及执行cuda kernel

当我在以下配置中启动代码时,代码运行正常

  • GeForce GTX 1080 Ti GPU
  • Ubuntu 16.04
  • CUDA版本8.0.61
  • NVIDIA驱动程序版本384.111
  • Python版本3.5.2
  • PyCUDA版本(2017,1,1)。

然而,当在同一台机器上使用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上启动时不会引发错误,我想知道其他问题是否也会引发同样的错误。

所以我的问题是:

  • 在不利的环境中运行正确编写的内核时,是否也会导致上述错误?
  • 是否可能是由NVIDIA驱动程序,CUDA版本,PyCUDA版本和GPU型号的错误组合造成的?
  • 对于驱动程序版本,CUDA版本,PyCUDA版本和GPU模型,我一般有什么考虑,以确保功能正常?

我可以理解,这里的许多人对没有代码和最小例子的问题过敏。我试图写一个简单的例子来重现错误,但我不能。想要加倍输入参数的内核可以很好地运行到内存错误的极限......所以我希望在搜索错误时只需要一些建议看看的方向。

2 个答案:

答案 0 :(得分:1)

这是导致我回答的问题的talonmies评论。

问题在于其中一张卡(GTX 970)同时用于系统的图形输出。正如herehere所解释的那样,这意味着有一个“监视器”阻止CUDA内核运行的时间长于它们停止前的最长时间。

我的解决方案是通过sudo service lightdm stop停止X服务器。然后,程序在两张卡上运行都没有错误。

答案 1 :(得分:0)

添加到上面 Amos 的回答中,对于 Linx 18.04,我必须使用 sudo service gdm stop。此外,如果这仍然不起作用(对我来说不是),请尝试使用 ctrl+alt+f3 打开终端并通过它运行您的程序。