Recommended way to launch nvidia persistence daemon on boot/login

What is the recommended way to have the nvidia persistence daemon run at log in?
At the moment I have a systemd unit file that does this and doesn’t actually enable persistence [see below]

but the idea of the daemon is that it runs in user space right? so should I instead simply launch it with a line in .bashrc ? or is there some way to not require me to type the sudo password again on logging in?
sudo nvidia-persistenced --user $USER

[Unit]
Description=NVIDIA Persistence Daemon
Wants=syslog.target

[Service]
Type=forking
PIDFile=/var/run/nvidia-persistenced/nvidia-persistenced.pid
Restart=always
ExecStart=/usr/bin/nvidia-persistenced --verbose
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced

[Install]
WantedBy=multi-user.target
$ ps -aux | grep nvidia
root       268  0.0  0.0      0     0 ?        S    09:30   0:00 [nvidia-modeset]
root      1210  0.0  0.0  17144  1592 ?        Ss   09:30   0:00 /usr/bin/nvidia-persistenced --user root --no-persistence-mode --verbose
root      1473  0.5  0.0      0     0 ?        S    09:30   1:07 [irq/156-nvidia]
root      1474  0.0  0.0      0     0 ?        S    09:30   0:00 [nvidia]
luke     29162  0.0  0.0  14524   948 pts/2    S+   12:55   0:00 grep --color=auto nvidia

according to the documentation:

[url]https://docs.nvidia.com/deploy/driver-persistence/index.html#usage[/url]

“it will typically require some sort of manual installation into the init system.”

The exact method to install a new script into the init system is distro-specific. You can google how to do it for your specific distro.

Regarding this statement:

"but the idea of the daemon is that it runs in user space right? "

Note the documentation:

“After doing a minimal amount of setup tasks that require super-user privileges, the daemon will drop super-user privileges and run as user ‘foo’.”

Thanks for quick reply. I neglected to explicitly mention that I am using systemd (Ubuntu 16.04). I have read that page and Googled for my distro which is what led to my current setup - one solution I read was to install nvidia-persistend package through apt - this didn’t work and stopped nvidia-smi from working so I removed it. Another solution was what I wrote above. As can be seen above, this gives me “/usr/bin/nvidia-persistenced --user root --no-persistence-mode --verbose” running as root, not as $USER. Is there some straight-forward way that you know of for Ubuntu 16.04?

In case somebody else wants to be able to automatically enable persistence mode on boot and cap GPU power. I found the following worked on Ubuntu 16.04 server with 2080Ti- (will probably work on other systemd linuxes and I guess with most recent GPUs)

sudo mkdir -p /usr/lib/systemd/system

echo '[Unit]
Description=set persistence mode and cap power usage of GPU
Wants=syslog.target
After=nvidia-persistenced.service

[Service]
Type=forking
Restart=always
ExecStart=/bin/sh -c "sudo nvidia-smi -pm 1 && sudo nvidia-smi -pl 249"
 
[Install]
WantedBy=multi-user.target' | sudo tee --append /usr/lib/systemd/system/nvidia-powerlimit.service > /dev/null

sudo systemctl enable nvidia-powerlimit
1 Like

a simple way to achieve this would be adding the line
nvidia-smi -pm 1
to the file /etc/rc.local, so it gets executed at system startup