检查 GPU 是否共享

Check if GPU is shared

当 GPU 与其他进程(例如 Xorg 或其他 CUDA 进程)共享时,CUDA 进程最好不要消耗所有剩余内存,而是动态增加其使用量。

(您可能会因此间接得到各种错误,例如 Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR。但这个问题与此无关。)

(在 TensorFlow 中,您可以在 GPU 选项中使用 allow_growth=True 来完成此操作。但本题与此无关。)

有没有一种简单的方法可以检查GPU当前是否被其他进程使用? (我不是在问它是否被配置为用于独占访问。)

我可以解析输出 nvidia-smi 并寻找其他进程。但这似乎有点老套,可能不太可靠,也不够简单。

(我的软件使用的是 TensorFlow,所以如果 TensorFlow 提供了这样的功能,那很好。但如果没有,我不在乎这是 C API 还是 Python 函数。不过,我宁愿避免其他外部依赖项,除了我正在使用的那些,例如 CUDA 本身或 TensorFlow。我不害怕使用 ctypes。所以考虑这个问题语言不变。)

nvmlDeviceGetComputeRunningProcessesnvmlDeviceGetGraphicsRunningProcesses。 (Documentation。) 这是一个 C API,但如果我不关心额外的依赖性,我可以使用 pynvmlExample usage (via).