如何为所有用户启用nvidia-smi。我可以作为超级用户运行它,但作为普通用户,我会得到以下错误:
Failed to initialize NVML: Insufficient Permissions
如何为所有用户启用nvidia-smi。我可以作为超级用户运行它,但作为普通用户,我会得到以下错误:
Failed to initialize NVML: Insufficient Permissions
我曾经遇到这个问题,以下是我的解决方案,希望对你有帮助。
通过ll /dev/nvidia*
可以发现设备属于root
和vglusers
组。
如果你和我一样,现在需要把你的用户账号加入到vglusers
组中。
可以通过usermod -a -G vglusers username
(需要sudo权限)或编辑/etc/group
并在vglusers:x:****:user1,user2,...
行末添加你的用户名。
然后注销当前bash并重新登录。
注意事项:
video
而不是vglusers
;当你通过ll /dev/nvidia*
查看时会显示使用的名称。vncserver
,则必须杀死服务器并重新启动它,因为在你启动vncserver
时你没有权限。首先检查NVidia硬件的SELinux上下文:
$ ls -lZ /dev/nvidia*
crw-rw-rw-. 1 root root system_u:object_r:xserver_misc_device_t:s0 195, 0 Dec 17 09:44 /dev/nvidia0
crw-rw-rw-. 1 root root system_u:object_r:xserver_misc_device_t:s0 195, 255 Dec 17 09:44 /dev/nvidiactl
crw-rw-rw-. 1 root root system_u:object_r:xserver_misc_device_t:s0 243, 0 Dec 17 09:44 /dev/nvidia-fs0
crw-rw-rw-. 1 root root system_u:object_r:xserver_misc_device_t:s0 243, 1 Dec 17 09:44 /dev/nvidia-fs1
crw-rw-rw-. 1 root root system_u:object_r:xserver_misc_device_t:s0 243, 10 Dec 17 09:44 /dev/nvidia-fs10
...
正如您所看到的,安全上下文不允许容器访问设备,因此根据上述文档更改安全上下文:
$ chcon -t container_file_t /dev/nvidia*
$ ls -lZ /dev/nvidia*
crw-rw-rw-. 1 root root system_u:object_r:container_file_t:s0 195, 0 Dec 17 09:44 /dev/nvidia0
crw-rw-rw-. 1 root root system_u:object_r:container_file_t:s0 195, 255 Dec 17 09:44 /dev/nvidiactl
crw-rw-rw-. 1 root root system_u:object_r:container_file_t:s0 243, 0 Dec 17 09:44 /dev/nvidia-fs0
crw-rw-rw-. 1 root root system_u:object_r:container_file_t:s0 243, 1 Dec 17 09:44 /dev/nvidia-fs1
crw-rw-rw-. 1 root root system_u:object_r:container_file_t:s0 243, 10 Dec 17 09:44 /dev/nvidia-fs10
...
sudo vim /etc/nvidia-container-runtime/config.toml
编辑 #user = "root:video"
=> user = "root:vglusers"
,保存
可能运行 sudo nvidia-smi
和 sudo reboot -h
首先需要执行ll /dev/nvidia*
来确认nvidia设备的用户:组。
然后将该组添加到Dockerfile中。
echo "vglusers:x:1001:${USER} >> /etc/group
目前唯一令人困惑的是系统变量中是否存在内容为1001的变量。
请参考nvidia-docker github issue
修改/etc/nvidia-container-runtime/config.toml
取消注释user = "root:video"
将其修改为user = "root:root"
我做的另一件事是,在修改配置文件之前,删除了vglusers
组。
回答@Zealseeker的问题: 由于我的机器有多个用户,我已经将以下设备的权限更改为rw-rw-rw-(我有两张卡):
ll /dev/nvidia
crw-rw-rw- 1 root vglusers 195, 0 Oct 13 19:34 /dev/nvidia0
crw-rw-rw- 1 root vglusers 195, 1 Oct 13 19:34 /dev/nvidia1
crw-rw-rw- 1 root vglusers 195, 255 Oct 13 19:34 /dev/nvidiactl
...
这个想法基于第二台机器上的文件,那里没有更新 nvidia-470 驱动程序。