Looks like I was able to answer my own question. I hope this helps someone in the future.
The solution
You need to use open NVIDIA drivers. To do this, pick the version you want to use from the NVIDIA website, then to install it properly, run the following:
sudo ./NVIDIA-Linux-x86_64-525.116.04.run -m=kernel-open
sudo update-initramfs -u
sudo reboot
The critical part is the -m=kernel-open part.
I used 525.116.04 but I have confidence it will work for ANY supported version.
I’m also going to include my purge all NVIDIA drivers script here for anyone who wants to ensure they do this with a clean install on Ubuntu:
purge-nvidia.sh (run this BEFORE any new driver install)
sudo nvidia-uninstall
sudo apt purge -y '^nvidia-*' '^libnvidia-*'
sudo rm -r /var/lib/dkms/nvidia
sudo apt -y autoremove
sudo update-initramfs -c -k `uname -r`
sudo update-grub2
read -p "Press any key to reboot... " -n1 -s
sudo reboot
My now working nvidia-smi
fetch@fetch:~$ nvidia-smi
Sun May 14 10:14:10 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.116.04 Driver Version: 525.116.04 CUDA Version: 12.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 NVIDIA GeForce ... Off | 00000000:0B:00.0 Off | N/A |
| 52% 52C P2 N/A / 75W | 582MiB / 4096MiB | 5% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 4911 C ...diaserver/Plex Transcoder 578MiB |
+-----------------------------------------------------------------------------+