检查 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
。所以考虑这个问题语言不变。)
有nvmlDeviceGetComputeRunningProcesses
和nvmlDeviceGetGraphicsRunningProcesses
。 (Documentation。)
这是一个 C API,但如果我不关心额外的依赖性,我可以使用 pynvml
。
Example usage (via).
当 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
。所以考虑这个问题语言不变。)
有nvmlDeviceGetComputeRunningProcesses
和nvmlDeviceGetGraphicsRunningProcesses
。 (Documentation。)
这是一个 C API,但如果我不关心额外的依赖性,我可以使用 pynvml
。
Example usage (via).