在LXC容器中执行Cuda脚本会导致“cuda错误:未检测到支持CUDA的设备”

我按照以下说明在LXC容器内设置了Cuda。

当我尝试在容器内执行示例./deviceQuery脚本时返回错误:

$ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) cudaGetDeviceCount returned 38 -> no CUDA-capable device is detected Result = FAIL 

Cuda被识别并安装在容器内部

 $ nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2015 NVIDIA Corporation Built on Tue_Aug_11_14:27:32_CDT_2015 Cuda compilation tools, release 7.5, V7.5.17 

nVidia设备安装在“主机和LXC容器内:

 $ ls -l /dev/nvidia* crw-rw-rw- 1 root root 195, 0 Dec 20 23:31 /dev/nvidia0 crw-rw-rw- 1 root root 195, 255 Dec 20 23:31 /dev/nvidiactl crw-rw-rw- 1 root root 246, 0 Dec 20 23:31 /dev/nvidia-uvm 

当我在容器中运行sudo nvidia-smi ,出现以下错误:

 Failed to initialize NVML: Unknown Error 

如何在容器内执行Cuda脚本?

看起来这个问题已经被SuperUser问过了 ,但是如果它已经存在于ServerFault中,我只能将它标记为重复的。 我会在这里复制我的答案,希望能帮助那些首先遇到这个问题的人。

我有这个问题,这是我在这里写的。

您遇到的问题可能是由于使用与主机不匹配的LXC模板造成的。 我正在使用基于Debian 8.6的Proxmox 4.4。 我的容器基于Ubuntu 16.04。 就像你一样,我看到容器中的所有节点都以root身份作为所有者和组,而不是nobody:nogroup

我偶然发现的一个论坛post启发了我build立一个基于与我的主机Debian 8.6相匹配的模板的新容器。 一旦我这样做了/dev节点归个人所有nobody:nogroupnvidia-smi正确地识别了我的GPU。

如果你的不匹配,我强烈build议你尝试使它们匹配 – 我知道的唯一方法是重build它。