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 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 解释了该错误消息的含义:
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 上启动时不会引发错误,我想知道其他问题是否也会引发相同的错误。
所以我的问题是:
- 在不利的环境下运行正确编写的内核是否也会导致上述错误?
- 会不会是NVIDIA驱动、CUDA版本、PyCUDA版本、GPU型号组合错误导致的?
- 关于驱动程序版本、CUDA 版本、PyCUDA 版本和 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 打开一个终端,然后 运行 你的程序通过这个打开。
我有一个 Python 3 program that involves the execution of a 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 解释了该错误消息的含义:
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 上启动时不会引发错误,我想知道其他问题是否也会引发相同的错误。
所以我的问题是:
- 在不利的环境下运行正确编写的内核是否也会导致上述错误?
- 会不会是NVIDIA驱动、CUDA版本、PyCUDA版本、GPU型号组合错误导致的?
- 关于驱动程序版本、CUDA 版本、PyCUDA 版本和 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 打开一个终端,然后 运行 你的程序通过这个打开。