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

PyCUDA clean-up error, CUDA launch timed out error, on some machines only

我有一个 Python 3 program that involves the execution of a 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 解释了该错误消息的含义:

This means your context went away while PyCUDA was still talking to it. This will happen most often if you perform some invalid operation (such as access out-of-bounds memory in a kernel).

也就是说,好像是我写的内核有问题。但是,由于代码在其他 GPU 上启动时不会引发错误,我想知道其他问题是否也会引发相同的错误。

所以我的问题是:

我能理解这里的很多人对没有代码和最少示例的问题过敏。我试图编写一个可以重现错误的简单示例,但我做不到。想要将输入参数加倍的内核 运行 可以达到内存错误的限制...所以我希望得到一些建议 看什么方向 什么时候搜索错误。

正是 talonmies 对问题的评论让我找到了答案。

问题是其中一张卡(GTX 970)同时用于系统的图形输出。正如 here and here 所解释的,这意味着有一个 "watchdog" 阻止 CUDA 内核 运行 比停止前的某个最长时间更长。

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

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