CUDA Configuration on Ubuntu 24.04 LTS (Kernel 6.17 HWE) with RTX 2000 Ada

Hello everyone,
I am considering installing an RTX 2000 Ada Generation with 16GB of VRAM on a workstation running Ubuntu 24.04.4 LTS. Running uname -r reports kernel version 6.17.0-14-generic.

From my checks, the 550 driver branch does not compile correctly on kernel 6.16+. I would like to validate with you the following command sequence to enable the compute stack (CUDA) while maintaining system stability.

These are commands that seems need to be runned

# Cleanup and Repository Setup
sudo apt purge nvidia* libnvidia* -y
sudo apt autoremove -y
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update

# Driver installation (590 branch for Kernel 6.17)
sudo apt install nvidia-driver-590 dkms linux-headers-$(uname -r) -y

# CUDA Stack
sudo apt install nvidia-cuda-toolkit -y

# Swappiness tuning to better manage RAM offloading
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# verification
nvidia-smi
nvcc --version

So the questions are

  1. Do these steps look correct to you?
  2. Driver 590 Stability on Kernel 6.17: Has anyone experienced β€œGPU falling off the bus” issues with Ada Lovelace cards on this specific HWE kernel? Were you able to resolve them?
  3. Wayland vs X11: For purely CUDA/compute workflows, are there any known drawbacks to using Noble’s default Wayland session with kernel 6.17?
  4. DKMS: Can anyone confirm that the DKMS module properly handles 6.17 kernel micro-updates without requiring manual driver reinstallation?

Thanks for any technical feedback.

This is a shame on NVIDIA.

NVIDIA should provide a web page to let users query and select the range of supported versions of OS/Kernel/CUDA/Driver step by step for their cards.

The support matrix is out of date and no enough info to help users making the final decision.

E.g. for one of my cards K1200, what’s the latest version of Kernel/CUDA/Driver supported in Ubuntu 24.04.4 ? You cannot get this info from one or two offical documents.

So, I’ve to try them one by one. And this occurred about two or three days of my holiday.

Here are what I tried on Ubuntu 24.04.4:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
sudo apt install dkms python3-pip python-is-python3
sudo apt install cuda-toolkit-12-9
sudo apt install cuda-drivers-580
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu129
python -c β€œimport torch; print(f’CUDA Available: {torch.cuda.is_available()}')”

For your questions:

  1. the Driver590, maybe I forget to reboot, the nvidia-smi report [NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver].
  2. Wayland vs X11, if what I remembed is correct, it’s Wayland by default, when I removed K1200 card before installing Ubuntu 24.04.4 to avoid instaling NVIDIA driver automatically. But after above steps finished, the desktop session becomes X11.
  3. DKMS. I make all packages updated before installing CUDA. So no kernel micro-updates tried.

Although torch.cuda.is_available() returned True, the nvidia-smi reported wrong CUDA version 13.0:

nvidia-smi 
Tue Feb 24 23:52:20 2026       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.126.20             Driver Version: 580.126.20     CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  Quadro K1200                   On  |   00000000:01:00.0 Off |                  N/A |
| 37%   27C    P8              1W /   35W |       7MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            2489      G   /usr/lib/xorg/Xorg                        2MiB |
+-----------------------------------------------------------------------------------------+

While it doesn’t cover OS or kernel, this matrix tells you your CC5.0 K1200’s last supported Cuda version is !2.X and last supported driver is 580.

Taking a look at the Linux Installation Guide for Cuda 12.9.1 shows you the supported kernel for Ubuntu 24.04 is 6.8.0-41.

The Cuda version reported in nvidia-smi is the version up to which the driver supports.

This is an unofficial PPA maintained by 1 guy who clearly states:

This PPA is currently in testing, you should be experienced with packaging before you dive in here

Using the official NV’s apt repos similarly as advised by @Keelung is much more recommended. Here are the official docs:
driver: Driver Installation Guide β€” NVIDIA Driver Installation Guide
CUDA toolkit: CUDA Installation Guide for Linux β€” Installation Guide for Linux 13.1 documentation

Thank you for the answers. In the meantime, I’m trying to develop a suite written in Bash that guides me through installing the GPU drivers and the CUDA Toolkit (simply because it’s a procedure that can be fairly easily automated and I don’t want to keep scattered notes around). However, the driver and CUDA Toolkit versions still have to be entered manually by the user.

Since I’m not particularly productive with Bash (I’m a backend PHP developer, so I write complex Bash scripts very rarely), the suite is spec-driven developed, and I also had the AI generate a test suite that allows me to mock and stub the environment so that the script believes there is actually an NVIDIA GPU to install.

However, not installing the CUDA Toolkit from the NVIDIA repository and the drivers from the repository I had initially specified was one of the first recommendations the AI gave me during the requirements gathering phase, because it can easily lead to dependency hell.

These are the scripts output so far (I’ve asked to make them really verbose by default to let the user always be informed of what is going on)

[INFO] Target: NVIDIA driver 590 on kernel 6.8.0-51-generic.
[INFO] Each step will be skipped if the desired state is already present.

──────────────────────────────────────────────
β–Ί Pre-flight 1/2 – Verify NVIDIA GPU presence
──────────────────────────────────────────────
[OK] NVIDIA GPU detected:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3090] [10de:2204] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
[INFO] GPU PCI device ID: 0x2204 (8708 decimal)

──────────────────────────────────────────────
β–Ί Pre-flight 2/2 – Verify gcc version matches kernel build compiler
──────────────────────────────────────────────
[OK] gcc version matches kernel build compiler (13.3).

──────────────────────────────────────────────
β–Ί Step 1/8 – Update APT repositories
──────────────────────────────────────────────
[INFO] Executing: sudo apt update

──────────────────────────────────────────────
β–Ί Step 2/8 – Install prerequisites (build-essential, dkms, mokutil, linux-headers)
──────────────────────────────────────────────
[INFO] Executing: sudo apt install -y build-essential dkms mokutil linux-headers-6.8.0-51-generic

──────────────────────────────────────────────
β–Ί Checkpoint 1 – Verify kernel headers
──────────────────────────────────────────────
[INFO] Checkpoint: linux-headers-6.8.0-51-generic installed
[OK] Checkpoint β€˜linux-headers-6.8.0-51-generic installed’ passed.

──────────────────────────────────────────────
β–Ί Step 3/8 – Blacklist nouveau driver
──────────────────────────────────────────────
[SKIP] nouveau already blacklisted in /tmp/tmp.jbnWH3IEGr/etc/modprobe.d/blacklist-nouveau.conf – skipping.

──────────────────────────────────────────────
β–Ί Repository setup – NVIDIA official APT repo (cuda-keyring)
──────────────────────────────────────────────
[INFO] Detected distribution identifier: ubuntu2404
[INFO] Downloading NVIDIA keyring: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
[INFO] Executing: wget -q --show-progress https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb -O /tmp/cuda-keyring_1.1-1_all.deb
[INFO] Executing: sudo dpkg -i /tmp/cuda-keyring_1.1-1_all.deb
[INFO] Executing: sudo apt update
[OK] NVIDIA official repository configured.

──────────────────────────────────────────────
β–Ί Step 5/8 – Remove conflicting NVIDIA packages (preserving CUDA Toolkit)
──────────────────────────────────────────────
[INFO] No existing NVIDIA driver found – proceeding with fresh installation.
[INFO] Purging nvidia* and libnvidia* (cuda* intentionally excluded)…
[INFO] Executing: sudo apt autoremove -y

──────────────────────────────────────────────
β–Ί Step 6/8 – Install nvidia driver 590
──────────────────────────────────────────────
[INFO] Ampere or newer GPU detected – installing open kernel modules (nvidia-open).
[INFO] Executing: sudo apt install -y nvidia-open-590 nvidia-dkms-590

──────────────────────────────────────────────
β–Ί Checkpoint 2 – Verify DKMS module status (expected: β€˜installed’)
──────────────────────────────────────────────
[OK] DKMS status: OK
nvidia/570.86.16, 6.8.0-51-generic, x86_64: installed

──────────────────────────────────────────────
β–Ί Step 7/8 – Sign nvidia.ko with MOK key
──────────────────────────────────────────────
[INFO] Found module at: /tmp/tmp.jbnWH3IEGr/lib/modules/6.8.0-51-generic/updates/dkms/nvidia.ko.zst
[INFO] Module is ZST-compressed – decompressing before signing…
[INFO] Executing: sudo zstd -d --rm /tmp/tmp.jbnWH3IEGr/lib/modules/6.8.0-51-generic/updates/dkms/nvidia.ko.zst -o /tmp/tmp.jbnWH3IEGr/lib/modules/6.8.0-51-generic/updates/dkms/nvidia.ko
[INFO] Executing: sudo kmodsign sha512 /tmp/tmp.jbnWH3IEGr/var/lib/shim-signed/mok/MOK.priv /tmp/tmp.jbnWH3IEGr/var/lib/shim-signed/mok/MOK.der /tmp/tmp.jbnWH3IEGr/lib/modules/6.8.0-51-generic/updates/dkms/nvidia.ko
[OK] Module signed.
[INFO] Recompressing signed module back to ZST (default compression level)…
[INFO] Executing: sudo zstd --rm /tmp/tmp.jbnWH3IEGr/lib/modules/6.8.0-51-generic/updates/dkms/nvidia.ko -o /tmp/tmp.jbnWH3IEGr/lib/modules/6.8.0-51-generic/updates/dkms/nvidia.ko.zst

──────────────────────────────────────────────
β–Ί Step 8/8 – Register MOK key with firmware (mokutil)
──────────────────────────────────────────────
[SKIP] You will be prompted to set a one-time password.
[SKIP] Enter this password in the MOK Manager screen that appears on next boot.
[INFO] Executing: sudo mokutil --import /tmp/tmp.jbnWH3IEGr/var/lib/shim-signed/mok/MOK.der
input password:

input password again:

[OK] NVIDIA driver 590 installed and kernel module signed.
[INFO] After rebooting, run: ./ubuntu-installer check-driver to verify the installation.

╔══════════════════════════════════════════════════════╗
β•‘ A system reboot is required to complete the setup. β•‘
β•‘ Run: sudo reboot β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

[INFO] Target: CUDA Toolkit 12.8.
[INFO] Each step will be skipped if the desired state is already present.

──────────────────────────────────────────────
β–Ί Repository setup – NVIDIA official APT repo (cuda-keyring)
──────────────────────────────────────────────
[INFO] Detected distribution identifier: ubuntu2404
[INFO] Downloading NVIDIA keyring: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
[INFO] Executing: wget -q --show-progress https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb -O /tmp/cuda-keyring_1.1-1_all.deb
[INFO] Executing: sudo dpkg -i /tmp/cuda-keyring_1.1-1_all.deb
[INFO] Executing: sudo apt update
[OK] NVIDIA official repository configured.

──────────────────────────────────────────────
β–Ί Step 2/7 – Install cuda-toolkit-12-8
──────────────────────────────────────────────
[INFO] Executing: sudo apt install -y cuda-toolkit-12-8

──────────────────────────────────────────────
β–Ί Checkpoint 3 – Verify nvcc binary
──────────────────────────────────────────────
[INFO] Checkpoint: nvcc binary at /tmp/tmp.jbnWH3IEGr/usr/local/cuda-12.8/bin/nvcc
[OK] Checkpoint β€˜nvcc binary at /tmp/tmp.jbnWH3IEGr/usr/local/cuda-12.8/bin/nvcc’ passed.

──────────────────────────────────────────────
β–Ί Step 3/7 – Configure PATH and LD_LIBRARY_PATH (system-wide)
──────────────────────────────────────────────
[SKIP] /tmp/tmp.jbnWH3IEGr/etc/profile.d/cuda.sh already configured for CUDA 12.8 – skipping.

──────────────────────────────────────────────
β–Ί Step 4/7 – Enable nvidia-persistenced
──────────────────────────────────────────────
[INFO] Executing: sudo systemctl enable nvidia-persistenced
[INFO] Executing: sudo systemctl start nvidia-persistenced

──────────────────────────────────────────────
β–Ί Step 5/7 – Enable GPU System Processor (GSP) firmware
──────────────────────────────────────────────
[INFO] Detected Ampere or newer GPU (device ID: 2204) – applying GSP firmware options.
[SKIP] /tmp/tmp.jbnWH3IEGr/etc/modprobe.d/nvidia-gsp.conf already contains all GSP options – skipping.

──────────────────────────────────────────────
β–Ί Step 6/7 – Apply kernel tuning parameters (vm.swappiness, vm.max_map_count)
──────────────────────────────────────────────
[SKIP] vm.swappiness=10 already in /tmp/tmp.jbnWH3IEGr/etc/sysctl.conf – skipping.
[SKIP] vm.max_map_count already set in /tmp/tmp.jbnWH3IEGr/etc/sysctl.conf (current live value: 65530) – skipping.
[INFO] Executing: sudo sysctl -p

──────────────────────────────────────────────
β–Ί Step 7/7 – CUDA Toolkit 12.8 installation complete
──────────────────────────────────────────────
[OK] CUDA Toolkit 12.8 installed and configured.
[INFO] After rebooting, run: ./ubuntu-installer check-cuda to verify the installation.

╔══════════════════════════════════════════════════════╗
β•‘ A system reboot is required to complete the setup. β•‘
β•‘ Run: sudo reboot β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

you are making your own life unnecessarily miserable… I highly advise you to actually do take a look at the docs I linked: once you decide for one of the possible installation methods, there are literally like 5 commands: you don’t need advanced bash scripting nor any other voodoo degree to handle it…
For example for the full network installation without version-pinning it’d be sth like:

  1. set -e
  2. wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
  3. apt install linux-headers-$(uname -r)
  4. dpkg -i cuda-keyring_1.1-1_all.deb
  5. apt update
  6. apt install "nvidia-open=${DRIVER_VERSION}"
  7. apt install "cuda-toolkit=${TOOLKIT_VERSION}"

You were right, my RTX 2000E arrived today and it was really that easy. I was anxious for nothing.