使所有用户都能运行nvidia-smi权限

9

如何为所有用户启用nvidia-smi。我可以作为超级用户运行它,但作为普通用户,我会得到以下错误:

Failed to initialize NVML: Insufficient Permissions
6个回答

7

我曾经遇到这个问题,以下是我的解决方案,希望对你有帮助。

通过ll /dev/nvidia*可以发现设备属于rootvglusers组。

如果你和我一样,现在需要把你的用户账号加入到vglusers组中。

可以通过usermod -a -G vglusers username(需要sudo权限)或编辑/etc/group并在vglusers:x:****:user1,user2,...行末添加你的用户名。

然后注销当前bash并重新登录。

注意事项:

  • 组名可能是video而不是vglusers;当你通过ll /dev/nvidia*查看时会显示使用的名称。
  • 如果你正在使用vncserver,则必须杀死服务器并重新启动它,因为在你启动vncserver时你没有权限。

2
如果您尝试在Docker容器内运行命令时出现问题,并且激活了SELinux(例如使用RHEL),则可能需要执行此操作

首先检查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
...

这应该允许您的容器访问硬件(至少对我们来说,这是解决问题的办法)。

0
你安装过VirtualGL吗? 我曾经遇到同样的问题,但是我安装了VirtualGL后问题就解决了。 运行VirtualGL安装文件并选择“为使用VirtualGL取消配置服务器”。然后一切都正常工作。
重要提示:您的系统使用modprobe.d来设置设备权限。您必须在停止显示管理器的情况下执行rmmod nvidia,以使新的设备权限设置生效。

0

电脑

sudo vim /etc/nvidia-container-runtime/config.toml

编辑 #user = "root:video" => user = "root:vglusers",保存 可能运行 sudo nvidia-smisudo reboot -h


nvidia-docker

首先需要执行ll /dev/nvidia*来确认nvidia设备的用户:组。

然后将该组添加到Dockerfile中。

echo "vglusers:x:1001:${USER} >> /etc/group

目前唯一令人困惑的是系统变量中是否存在内容为1001的变量。


0

请参考nvidia-docker github issue
修改/etc/nvidia-container-runtime/config.toml
取消注释user = "root:video"
将其修改为user = "root:root"

我做的另一件事是,在修改配置文件之前,删除了vglusers组。


0

回答@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 驱动程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接