Revision history for Rex-GPU
0.004 2026-10-01 16:14:46Z
- Not run on GPU hardware yet; checked against the commands sent to the
host.
[CDI]
- generate_cdi_specs checks with `nvidia-ctk cdi list` that
nvidia.com/gpu=all and management.nvidia.com/gpu=all resolve, and
writes only what is missing under /etc/cdi: nvidia.yaml, and
management.nvidia.yaml via --mode=management
--vendor=management.nvidia.com --class=gpu. Fixes hosts without
nvidia-cdi-refresh (DGX OS / GB10, toolkit 1.19), where /run/cdi is
empty after a reboot and the GPU Operator validator failed on
"unresolvable CDI devices management.nvidia.com/gpu=all". Also in the
"toolkit already present" case. Specs that resolve are left alone
(also nvidia-cdi-refresh's under /run/cdi); next to nvidia-cdi-refresh
no static nvidia.yaml is written. A CLI without the management mode,
or without `cdi list`, is a warning, not a die. An existing
/etc/cdi/nvidia.yaml is no longer rewritten on every run (k76).
0.003 2026-10-01 04:00:20Z
- None of the changes below has run on GPU hardware yet; they are
checked against the commands they send to the host.
[Driver]
- Grace Hopper GH200 (10de:2342, 10de:2348) gets the open kernel module
only, as Blackwell: Ubuntu -server-open, Debian 12/13 NVIDIA's CUDA
repository, RHEL cuda-open-dkms, openSUSE its open driver.
- Ubuntu: only the running kernel's linux-headers-$(uname -r) are
installed, no longer linux-headers-generic, which brought headers for
another kernel on HWE and vendor kernels (DGX Spark). A kernel
installed later needs its own headers for DKMS.
- Ubuntu: new opt-in setup Rex::GPU::NVIDIA::Setup::UbuntuDrivers
(experimental): `ubuntu-drivers list --gpgpu` names the driver
package, installed by apt-get and verified with dpkg; nothing named
dies before any driver install. The default stays apt-cache search.
[Detection]
- An AMD GPU's name is read from lspci as for NVIDIA, e.g.
"Navi 31 [Radeon RX 7900 XTX]", instead of "Unknown AMD GPU" for
every card. Detect-only as before: AMD stays compute => 0.
- New opt-in Rex::GPU::Detect::Sysfs (experimental): detection from
/sys/bus/pci/devices, without lspci and without installing pciutils;
same result shape including vgpu and nvswitch. No product names, so a
GPU the generation table does not cover is compute => undef, not 0.
Dies where sysfs cannot be read. Chosen with detect => or set
gpu_detect_class; lspci stays the default.
[API]
- Every function of Rex::GPU, Rex::GPU::Detect and Rex::GPU::NVIDIA
also works as a class method, and a subclass of Rex::GPU::NVIDIA or
Rex::GPU::Detect can replace any step (experimental): chosen with
gpu_setup(nvidia => ..., detect => ...) or set gpu_nvidia_class /
set gpu_detect_class; one that cannot be loaded dies before the host
is touched. Function calls, their arguments and the defaults are
unchanged.
[Container toolkit]
- install_container_toolkit(binaries_suffice => 1) counts the toolkit as
present when nvidia-container-runtime and nvidia-ctk are on the PATH and
nvidia-ctk runs, without asking the package manager (vendor images
such as DGX Spark); gpu_setup and the default are unchanged
0.002 2026-09-24 21:34:32Z
- None of the changes below has run on GPU hardware yet; they are
checked against the commands they send to the host.
[Detection]
- A GPU counts as compute by its PCI device ID generation, not its name:
every Maxwell or newer NVIDIA GPU (GeForce included) now gets a driver.
Kepler and older are compute => 0 with a warning.
- A virtual display (virtio, QXL, VMware, VirtualBox) no longer hides a
real GPU on passthrough hosts and cloud GPU VMs.
- New keys: nvswitch (HGX NVSwitch bridges) and per GPU vgpu, vgpu_type,
subsystem_vendor_id, subsystem_id (NVIDIA vGPU guests).
- pciutils is installed only when lspci is missing, also on Rocky, Alma
and CentOS Stream; detection dies if lspci is still missing.
[Driver]
- gpu_setup installs one driver that fits all compute GPUs (new option
gpus => [...]). It dies before any driver package is installed when
they cannot share one, for a Kepler GPU, or for a vGPU guest without a
working driver.
- The driver fits the GPU generation: Blackwell (B200/B300, RTX 50xx,
RTX PRO, GB10) gets the open kernel module, on Debian 12/13 from
NVIDIA's CUDA repository; Maxwell/Pascal/Volta stay on the proprietary
580 branch. GB10 (DGX Spark) needs 580 or newer.
- A host with a working driver (nvidia-smi lists a GPU, libcuda is
present) is left alone: no reinstall, no reboot.
- HGX hosts with NVSwitch get NVIDIA Fabric Manager; HGX B200/B300 also
get the NVLink fabric (nvlsm, ib_umad). An existing driver gets a
missing Fabric Manager from the host's own package sources.
- Ubuntu: the newest nvidia-driver-NNN-server package is picked after
apt-get update; no silent fallback to 570.
- Debian: contrib/non-free are enabled on every Debian archive entry,
deb822 .sources included. An own mirror counts when it is signed-by the
Debian archive keyring.
- RHEL family: Rocky, Alma and CentOS Stream work under their lsb_release
names; RHEL gets EPEL and CodeReady Builder; aarch64 uses NVIDIA's sbsa
repository; a CUDA repository that cannot be added dies early.
- reboot => 1 waits until the host answers a command again.
- Own driver setup: setup => 'My::Setup' or set gpu_nvidia_setup, plus
requirement => { kernel_module, min_branch, max_branch }. Setup classes
and Rex::GPU::NVIDIA::Requirement are experimental API; examples in
eg/custom-setup/ and eg/ubuntu-drivers/.
[Container toolkit, CDI, containerd]
- install_container_toolkit skips an installed toolkit, survives the
dpkg lock after a reboot, and dies on a failed key or repository
download instead of installing from a broken source.
- generate_cdi_specs leaves CDI to nvidia-cdi-refresh when the toolkit
ships it, so nvidia.com/gpu is no longer defined twice.
- configure_containerd adds the nvidia runtime to RKE2/K3s's own config
instead of replacing it (SystemdCgroup, sandbox image and registry
config were lost). A template written by 0.001 is removed with a
warning; restart rke2/k3s to regenerate the config.
- An unknown containerd_config dies before anything runs on the host.
[openSUSE (unverified, unsupported)]
- Leap 15.x gets the Leap 15 repository and G06 driver again (it got
Leap 16's). zypper waits for the zypp lock, repository failures die,
and every install is verified.
[Examples]
- eg/ keeps SSH host-key verification on and scans the new host into
known_hosts first.
0.001 2026-03-29 04:20:30Z
- Initial release
- GPU hardware detection via PCI class codes (NVIDIA, AMD)
- NVIDIA driver installation (Debian 12/13, Ubuntu 22.04/24.04, RHEL/Rocky 8/9/10, openSUSE Leap 15.6/16.0)
- NVIDIA Container Toolkit installation with automatic repo setup
- CDI spec generation via nvidia-ctk cdi generate
- Containerd runtime configuration (RKE2, K3s, standalone)
- Support for Ubuntu 24.04: auto-detect nvidia-driver-NNN-server, handle virtual nvidia-smi package
- DPkg::Lock::Timeout=120 on all apt-get calls for resilience on fresh-boot systems
- All package installs use apt-get/dnf directly with dpkg/rpm verification
(Rex::Pkg dies on non-zero from DKMS/grub/initramfs post-install scripts)
- Reboot support with reconnect polling via Rex::LibSSH
- Tested on Hetzner dedicated servers with NVIDIA RTX 4000 SFF Ada Generation
(Debian 13, Rocky Linux 10.1, Ubuntu 24.04 LTS)
- eg/Rexfile example for GPU detection and cluster deployment
- Requires Rex::LibSSH for deployment to SFTP-less hosts
Keyboard Shortcuts
Global
s
Focus search bar
?
Bring up this help dialog
GitHub
gp
Go to pull requests
gi
Go to GitHub issues (only if GitHub is preferred repository)