DEV Community

Cover image for Install NVIDIA GPU driver on Linux (Ubuntu/Debian)
Batkhuu
Batkhuu

Posted on

Install NVIDIA GPU driver on Linux (Ubuntu/Debian)

Official pages


Install NVIDIA GPU driver

Disable automatic updates on Ubuntu/Debian

# 1. Disable auto-update and auto-upgrade:
echo 'APT::Periodic::Update-Package-Lists "0";' | sudo tee /etc/apt/apt.conf.d/20auto-upgrades
echo 'APT::Periodic::Unattended-Upgrade "0";' | sudo tee -a /etc/apt/apt.conf.d/20auto-upgrades
Enter fullscreen mode Exit fullscreen mode

Disable open-source nouveau driver

# 2. Write blacklist options for the nouveau driver (disable):
echo "blacklist nouveau" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf

# 3. Update kernel initramfs for blacklist (modprobe.d) options:
sudo update-initramfs -u
Enter fullscreen mode Exit fullscreen mode

Install essential packages

# 4. Clean apt package manager lists and caches:
sudo rm -vrf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/*
sudo apt-get clean -y

# 5. Updating, indexing, and caching apt package manager app lists:
sudo apt-get update --fix-missing -o Acquire::CompressionTypes::Order::=gz

# 6. Upgrade and reinstall OS base packages:
sudo apt-get upgrade -y

# 7. Remove old or unnecessary leftover packages:
sudo apt-get autoremove -y

# 8. IMPORTANT! Install dkms and base packages:
sudo apt-get install -y build-essential pkg-config libglvnd-dev mesa-utils wget dkms
Enter fullscreen mode Exit fullscreen mode

Download the appropriate Linux driver for the current NVIDIA GPU model

  • Search and download the latest verified stable NVIDIA GPU driver (NVIDIA-Linux-x86_64-***.run) installer file from this link: https://www.nvidia.com/Download/Find.aspx?lang=en-us
  • IMPORTANT! Download and use the .RUN file! It can install the NVIDIA driver with the DKMS module, which is really important!
  • IMPORTANT! Don't download or use the .DEB file! It will BREAK the kernel eventually, especially when the kernel header/version/module is upgraded, which is so FRUSTRATING! Therefore, sometimes conflict with other application dependencies (dependency hell)...
  • If you're using a command-line interface, just copy the download link and use wget to download. For example:
mkdir -v ~/Downloads
cd ~/Downloads

# 9. (Skip this, if you've already downloaded) Download appropriate Linux driver for current NVIDIA GPU model
wget https://us.download.nvidia.com/[GPU_MODEL_TYPE_URL]/NVIDIA-Linux-x86_64-[DRIVER_VERSION].run
# For example:
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/510.54/NVIDIA-Linux-x86_64-510.54.run
Enter fullscreen mode Exit fullscreen mode

Preparation steps before installing NVIDIA GPU driver

[IMPORTANT] Change GUI environment to console environment

  • Skip this step to 11, if you're not using a GUI environment and already using a console environment or SSH
  • TIP: From here you're going to enter the console environment, so you need to write down these below commands on some text file to read from command-line or note on somewhere!
  • You can change the GUI environment to a virtual console environment by pressing these keyboard buttons: Ctrl + Alt + F1/F3
  • Or by entering the Linux command:
# 10. IMPORTANT! Entering into virtual console environment:
sudo chvt 1
# Or:
sudo chvt 3
Enter fullscreen mode Exit fullscreen mode
  • Enter username and password to log in to a console environment

Stop GUI processes to prepare the installation of the NVIDIA GPU driver

# 11. Stop GUI service (lightdm/gdm/gdm3/kdm/slim/etc..):
sudo service lightdm stop
# Or:
sudo service gdm stop
# Or:
sudo service gdm3 stop

# 12. Initialize and refresh console environment without X11 (GUI) processes:
sudo init 3

# Change directory to NVIDIA-Linux-x86_64-***.run driver downloaded directory. For example:
cd ~/Downloads

# 13. Change permission of NVIDIA-Linux-x86_64-***.run driver installer file to executable:
chmod +x ./NVIDIA-Linux-x86_64-[DRIVER_VERSION].run
# For example:
chmod +x ./NVIDIA-Linux-x86_64-510.54.run
Enter fullscreen mode Exit fullscreen mode

Install NVIDIA driver.run file

  • IMPORTANT! (--dkms) Register Nvidia driver to the DKMS for future kernel upgrade.
  • IMPORTANT! (--no-x-check) Disable the X11 config checker to prevent triggering X11 (GUI) processes while installing the driver.
  • IMPORTANT! (--no-cc-version-check) Disable the C/C++ version checker to prevent install error occurs when the DKMS C/C++ version is not matching with the current installed C/C++ version!
# 14. IMPORTANT! Install nvidia driver with appropriate arguments:
sudo ./NVIDIA-Linux-x86_64-[DRIVER_VERSION].run --no-x-check --no-cc-version-check --dkms
# For example:
sudo ./NVIDIA-Linux-x86_64-510.54.run --no-x-check --no-cc-version-check --dkms
Enter fullscreen mode Exit fullscreen mode
  • Select 'Continue installation' on the warning message.
  • IMPORTANT! Select 'Yes' for the register of the DKMS kernel module.
  • Select 'No' for 32-bit compatibility installation OR select 'OK' when a 32-bit compatibility error appears.
  • IMPORTANT! Select 'No' when it asks to automatically update your X configuration file.
# 15. Remove downloaded file:
rm -vf ./NVIDIA-Linux-x86_64-[DRIVER_VERSION].run
# For example:
rm -vf ./NVIDIA-Linux-x86_64-510.54.run

# 16. Reboot system:
sudo shutdown -r now

# 17. Check nvidia driver is installed:
nvidia-smi
Enter fullscreen mode Exit fullscreen mode

Post-installation

[Only for ML/DL server] Setup nvidia-persistence mode daemon

Not recommended: GPU that is used by X11/Wayland processes (for GUI rendering).

# Install git to clone:
sudo apt-get install -y ssh git

# Download nvidia-persistenced source code from github:
git clone https://github.com/NVIDIA/nvidia-persistenced.git

# Install nvidia-persistenced service daemon:
cd nvidia-persistenced/init
sudo ./install.sh

# Remove downloaded files:
cd ../.. && rm -rf nvidia-persistenced

# Check nvidia-persistence mode is ON:
nvidia-smi
# Or check nvidia-persistenced.service is running:
systemctl status nvidia-persistenced.service
Enter fullscreen mode Exit fullscreen mode

πŸ‘ ✨

INSTALLATION COMPLETE


[OPTIONAL] Install the NVIDIA GPU monitoring tool

πŸŒŸπŸ“‘ nvitop

# Install python3 and pip3 packages:
sudo apt-get install -y python3 python3-pip

# Install nvitop into system python3 packages:
sudo pip3 install nvitop

# Check nvitop:
nvitop -m full
Enter fullscreen mode Exit fullscreen mode

πŸ“Š nvtop

# Install cmake, ncurses and git:
sudo apt-get install -y cmake libncurses5-dev libncursesw5-dev

# Download nvtop source code from github:
git clone https://github.com/Syllo/nvtop.git
mkdir -vp nvtop/build && cd nvtop/build

cmake ..
# If it errors with "Could NOT find NVML (missing: NVML_INCLUDE_DIRS)"
# try the following command instead, otherwise skip to the build with make:
#cmake .. -DNVML_RETRIEVE_HEADER_ONLINE=True

make
sudo make install

# Remove downloaded files:
cd ../.. && rm -rf nvtop

# Check nvtop:
nvtop
Enter fullscreen mode Exit fullscreen mode

Re-install or upgrade the NVIDIA driver to the latest version

Remove DKMS NVIDIA modules

Skip this step, if you didn't install the NVIDIA driver with DKMS.

# Check current dkms nvidia modules, versions, and kernels:
# [TIP]: Use module versions to remove.
dkms status | grep nvidia

# Remove old dkms nvidia module/version:
sudo dkms remove nvidia/[DRIVER_VERSION] --all
# For example:
sudo dkms remove nvidia/510.54 --all
Enter fullscreen mode Exit fullscreen mode

Disable the nvidia-persistenced service daemon

Skip this step, if you didn't setup the nvidia-persistenced daemon.

# Stop and disable nvidia-persistenced service daemon:
sudo systemctl stop nvidia-persistenced.service
sudo systemctl disable nvidia-persistenced.service
Enter fullscreen mode Exit fullscreen mode

Uninstall all nvidia-* packages

sudo apt-get remove --purge '^nvidia-.*'
# Or:
sudo nvidia-uninstall

# Reboot system:
sudo shutdown -r now
Enter fullscreen mode Exit fullscreen mode

Install the latest NVIDIA driver version

Install NVIDIA driver again (start from the beginning): #install-nvidia-gpu-driver

Top comments (0)