我想以非根用户的身份使用Docker中的CUDA容器,但遇到权限问题。下面是一个Dockerfile示例:
FROM nvidia/cudagl:11.2.2-runtime-ubuntu18.04
RUN useradd -ms /bin/bash testuser -G video,sudo
USER testuser
ENTRYPOINT "/bin/bash"运行nvidia-smi会产生以下错误:Failed to initialize NVML: Insufficient Permissions
如果相关,我的应用程序使用VirtualGL和Xvfb来用GPU呈现Chrome。与根用户一起工作非常好。
发布于 2022-11-24 03:24:30
在主机上检查vglusers组的gid。使用容器中的gid添加这个组,并将用户添加到这个组中。
因此,我对此进行了一些研究,我查看了容器中的nvidia设备:
root@56cef279b83f:/# cd /dev
root@56cef279b83f:/dev# ls -l | grep nvidia
crw-rw---- 1 root 1005 195, 0 Nov 23 23:13 nvidia0
crw-rw---- 1 root 1005 195, 255 Nov 23 23:13 nvidiactl
crw-rw---- 1 root 1005 195, 254 Nov 23 23:13 nvidia-modeset
crw-rw-rw- 1 root root 506, 0 Nov 23 23:13 nvidia-uvm
crw-rw-rw- 1 root root 506, 1 Nov 23 23:13 nvidia-uvm-toolsnvidia设备属于一个gid 1005的组。这很奇怪,因为容器中没有带有该ID的组。
我去查看主机上的设备,根据我的VGL设置,它们属于root或vglusers组。
(venv) jsim@goliath:/var/log$ cd /dev/
(venv) jsim@goliath:/dev$ ls -l | grep nvidia
crw-rw---- 1 root vglusers 195, 0 Nov 24 10:13 nvidia0
drwxr-xr-x 2 root root 80 Nov 24 10:31 nvidia-caps
crw-rw---- 1 root vglusers 195, 255 Nov 24 10:13 nvidiactl
crw-rw---- 1 root vglusers 195, 254 Nov 24 10:13 nvidia-modeset
crw-rw-rw- 1 root root 506, 0 Nov 24 10:13 nvidia-uvm
crw-rw-rw- 1 root root 506, 1 Nov 24 10:13 nvidia-uvm-tools事实证明,vglusers的gid为1005!
jsim@goliath:/dev$ cat /etc/group | grep vglusers
vglusers:x:1005:jsim因此,在我的Dockerfile中,我所要做的就是用gid 1005添加组vglusers,并将我的用户添加到这个组中。问题解决了。
RUN groupadd -g 1005 vglusers && \
useradd -ms /bin/bash testuser -u 1000 -g 1005 && \
usermod -a -G video,sudo testuserhttps://stackoverflow.com/questions/74554143
复制相似问题