Siam AI · GPU Infrastructure

NVIDIA Mirror
Usage Guide

Selective CUDA repository mirror for GPU servers. Install NVIDIA driver, CUDA toolkit, and companion libraries directly from mirrors.siam.ai.

Mirror: mirrors.siam.ai
Last check: —
Last sync: —
loading inventory…
01

Quick Links

02

Command Builder

Pick your driver branch and CUDA version — the install command updates live. Copy and run on any GPU node.

Install command
# 1. Download installer from mirror
wget https://mirrors.siam.ai/get-cuda-mirror.sh
chmod +x get-cuda-mirror.sh

# 2. Install
sudo ./get-cuda-mirror.sh --nvidia-driver=595 --cuda-toolkit=13-2 --nvitop=true
Verify command — run after the install

      
Same flags, different script

verify-install.sh takes the installer's own flag set, so it checks the node against what you asked for instead of only checking that the node is self-consistent. Details and sample output in section 05.

03

Available Versions

Driver + Fabric Manager

FM version must match driver EXACT version

Both ubuntu2204 and ubuntu2404 carry the same builds — the mirror takes the whole driver stack from NVIDIA's own CUDA repo, and a build is only synced when a fabricmanager of the identical version exists alongside it.

BranchInstallable versionsKernel moduleInstall flag (get-cuda-mirror.sh)
loading live versions from the mirror…

How to install. Pass --nvidia-driver=<branch> (e.g. --nvidia-driver=590) to get that branch's newest build — the one tagged default above, resolved live from the mirror. To pin an exact build, pass the full version from that branch's row above (e.g. --nvidia-driver=<branch>.<build>). When a branch has more than one build on the mirror, every installable version is listed in its row so you can pin any of them. The matching fabricmanager (nvidia-fabricmanager-<branch> on older branches, plain nvidia-fabricmanager from 580 on) is installed automatically in the same apt transaction, at the same exact version.

Everything comes from NVIDIA. The mirror sources the driver stack from NVIDIA's CUDA repo only — never the Ubuntu archive. That is deliberate: Ubuntu publishes just the one current build per branch and rewrites it in place, so a build you installed last month is gone from upstream today and the fleet drifts apart. NVIDIA keeps every point release, which is what makes --nvidia-driver=<exact build> reproducible months later. Branches are auto-selected by an FM-gated rolling window: keep the newest 5 branches that have both a driver and a fabricmanager of the same exact version (floor 570), keep the newest 5 builds within each branch, and serve each dropped branch 30 days more before deletion. A branch whose FM has not shipped yet is skipped until it does. Driver .debs already on disk are folded back into each run, so a build stays installable even after upstream moves on.

Why a branch can be missing — transitional shims (no silent upgrades)

When a driver branch is retired, the package name is not deleted — it is turned into a tiny transitional shim: a metapackage that keeps the old name but whose Depends: now point at a different branch, and whose version is the new branch's. NVIDIA's repo does this too, e.g. nvidia-driver-530 = 560.35.03  → depends →  nvidia-driver-560. Installing that shim does not install 530 — apt pulls 560 instead, which is exactly the "I picked a version but got upgraded" trap.

Two things make that unreachable here. First, the mirror and the installer key a build's branch off its version, not its package name, so a shim can never be returned for the branch its name advertises. Second, every build's Depends: is read and any shim whose driver/dkms dependency leaves its own branch is dropped, so the menu above lists only branches that install as themselves. The installer adds a third guard on the node: a version-based APT pin plus an install --simulate pre-check that aborts if a foreign branch would be pulled in — pick X, get exactly X, or nothing.

Package names also shift between NVIDIA's packaging generations — nvidia-driver-575 (≤575), nvidia-driver-580 with an unsuffixed nvidia-fabricmanager (580), and fully unsuffixed nvidia-driver / nvidia-dkms from 590 on, where the branch lives only in the version. The installer resolves all three, so --nvidia-driver=<branch> and --nvidia-driver=<exact build> work the same on every branch above.

Driver → max CUDA toolkit

Highest CUDA toolkit each driver supports

A driver supports its own CUDA version and every lower one (backward compatible). Pick a CUDA toolkit ≤ the number below for the driver you install.

Driver branchMax CUDA toolkitAlso runs
loading live versions from the mirror…

Source: NVIDIA Data Center Driver release notes. Newer minor CUDA toolkits need a driver whose branch reaches that number — e.g. CUDA 13.2 needs driver ≥ 595, CUDA 13.1 needs ≥ 590. Older toolkits always work on newer drivers.

CUDA Toolkit — 7 versions

Same 7 CUDA versions on both distros

NVIDIA ships CUDA 13.x for jammy (22.04) as well as noble (24.04), so the mirror carries the same set for both. The table below is live from the mirror — a version shows — only if that build has not synced yet. Running CUDA 13.x on jammy still needs a driver ≥ 580 available for that node.

Versionubuntu2404ubuntu2204
loading live versions from the mirror…

Companion libraries

LibraryScopeNotes
DCGM 4cuda12 + cuda13datacenter-gpu-manager-4-cuda12/13
cuDNN 9cuda11/12/13All variants — covers all our CUDA
NCCL 2.29cuda12/13Filter +cuda12 / +cuda13
TensorRT 10all10.4–10.15, builds against CUDA 12.6–13.x
DOCA-OFED 3.0–3.4separate path/srv/mirror/nvidia/doca/ — manual download
04

Install Workflows

Full HGX install (DOCA + driver + CUDA) — one run, one reboot

For HGX/NVSwitch nodes with ConnectX + GPUDirect RDMA. Install DOCA-OFED and the driver in a single command — reboot only once at the end.

bash
# DOCA + driver + CUDA + nvitop in one command
wget https://mirrors.siam.ai/get-cuda-mirror.sh
chmod +x get-cuda-mirror.sh
sudo ./get-cuda-mirror.sh --doca=true --nvidia-driver=580 --cuda-toolkit=13-0 --nvitop=true

# Reboot once — loads DOCA ib_core + driver + nvidia_peermem together
sudo reboot
Why one reboot works

DOCA-OFED and the driver build their DKMS modules in sequence (DOCA first). Because nvidia_peermem links against DOCA's ib_register_peer_memory_client symbols at build time — not runtime — a single reboot at the end loads DOCA's ib_core, the driver, and nvidia_peermem together. Running --doca=true on its own still stops and asks for a reboot before the driver.

Driver + CUDA only (no DOCA)

Use when the GPU node has network access and doesn't need GPUDirect RDMA (e.g., VMs without IB).

bash
# Download installer
wget https://mirrors.siam.ai/get-cuda-mirror.sh
chmod +x get-cuda-mirror.sh

# Latest driver + CUDA
sudo ./get-cuda-mirror.sh --nvidia-driver=595 --cuda-toolkit=13-2 --nvitop=true

# VM without NVLink
sudo ./get-cuda-mirror.sh --nvidia-driver=590 --cuda-toolkit=12-9 --nvitop=true --no-nv=true

Offline / air-gapped node (--local-install)

For a node that can't reach the mirror at install time, pre-stage the .deb files from the mirror, copy them to the node, then point the same installer at the local repo — no official NVIDIA egress.

bash
# On a machine WITH mirror access — pull the installer + the .deb files you need
wget https://mirrors.siam.ai/get-cuda-mirror.sh
# (copy get-cuda-mirror.sh + the .deb set to the air-gapped node)

# On the air-gapped node — install from the pre-staged local repo
sudo ./get-cuda-mirror.sh --local-install=true --nvidia-driver=580 --cuda-toolkit=13-0

Verify after install

Run verify-install.sh with the same flags you installed with — it covers everything below plus the checks that are easy to miss by eye. See section 05. For a quick look by hand:

bash
nvidia-smi -L | wc -l                       # GPU count
systemctl status nvidia-fabricmanager       # FM service
lsmod | grep nvidia_peermem                 # GPUDirect RDMA
dcgmi discovery -l                          # DCGM sees all GPUs
dpkg-query -W -f='${Package} ${Version}\n' nvidia-driver-580 nvidia-fabricmanager

Add libraries later (NCCL / cuDNN / TensorRT / DCGM)

Extra libraries install straight from the mirror with apt — no extra setup, no reaching out to NVIDIA.

Why sudo apt install -y just works

The base install already bound this node's apt to the mirror — the repo lives in /etc/apt/sources.list.d/cuda-<distro>-x86_64.list. From then on, any install or upgrade of a package inside the mirror's scope is pulled from mirrors.siam.ai instead of NVIDIA's official servers. No re-configuring, no VPN, no egress to NVIDIA.

bash
# NCCL — multi-GPU / multi-node collective comms
sudo apt update
sudo apt install -y libnccl2 libnccl-dev

# cuDNN 9 (match your CUDA major — cuda-13 shown)
sudo apt install -y cudnn9-cuda-13 libcudnn9-dev-cuda-13

# TensorRT
sudo apt install -y tensorrt libnvinfer-dev python3-libnvinfer

# DCGM 4 — health / telemetry
sudo apt install -y datacenter-gpu-manager-4-cuda13

# NVIDIA Container Toolkit — GPUs in Docker
sudo apt install -y nvidia-container-toolkit
Pin an exact build

Every patch build is kept on the mirror (all-versions mode). List them with apt-cache madison libnccl2, then pin: sudo apt install libnccl2=2.29.7-1+cuda13.2.

GPU stress test (gpu-burn) optional

Burn-in / thermal test — hammers every GPU with FP32 (or Tensor-core) matrix multiplies to surface unstable cards, throttling, or cooling problems. Needs the CUDA toolkit (nvcc) already installed.

bash
# Build
sudo apt install -y git build-essential
git clone https://github.com/wilicc/gpu-burn.git
cd gpu-burn
make            # if nvcc not found: make CUDAPATH=/usr/local/cuda-13.0

# Run — 120 s across all GPUs
./gpu_burn 120

# Tensor-core (mixed precision) stress
./gpu_burn -tc 120
Watch temps while it runs

In another shell: watch -n1 nvidia-smi (or nvitop). Healthy cards finish with OK (Ok) for every GPU; a FAULTY result or thermal shutdown means that card needs attention.

Node installed from the old mirror — apt update fails one-time fix

On a node set up before this mirror moved to curated metadata, apt update ends with:

apt
E: The repository 'https://mirrors.siam.ai/compute/cuda/repos/ubuntu2404/x86_64  Release' is no longer signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.

Run this on that node. It repairs the apt entry and installs nothing:

bash
wget https://mirrors.siam.ai/get-cuda-mirror.sh
chmod +x get-cuda-mirror.sh
sudo ./get-cuda-mirror.sh --fix-repo

Once per node, permanently. It is not needed again on a node that has had it, and a node installed from the current mirror never needs it at all.

Why it happens

The old mirror was a verbatim copy of NVIDIA's repo, so it could pass NVIDIA's signature along with the files, and the installer wrote an apt entry meaning “accept this repo only if NVIDIA signed it”.

This mirror is curated, not a copy: it keeps a fixed number of versions per package and rebuilds Packages and Release with apt-ftparchive after pruning. Those files are ours, so NVIDIA's signature cannot cover them — and signing them as NVIDIA would need NVIDIA's private key. apt finds a repo that used to be signed and no longer is, and refuses it.

Nothing on the mirror can repair this. apt decides what to trust by reading files on the node itself, and a mirror that could change that decision remotely would defeat the point of signing. The fix has to be applied on the node, which is all --fix-repo does.

Do not run apt upgrade on an unrepaired node

When apt disables a repo it does not discard the index it already has — it keeps using the stale copy, which still reports Origin: NVIDIA CUDA. The Pin: release o=Siam-AI rule never matches it, so the mirror loses its priority and ties with Ubuntu's archive, where the higher version number wins.

That is how a node ends up with an Ubuntu driver build that has no matching Fabric Manager. Run --fix-repo first, then review apt list --upgradable | grep -i nvidia before upgrading.

Installing the GPU stack repairs it too

Any normal run of the installer (--nvidia-driver, --cuda-toolkit, --dcgm, --doca) rewrites the same apt entry, so a node you are installing on is fixed as a side effect. --fix-repo is for the case where you only want apt update to work and are not installing anything.

Uninstall

bash
# Interactive — lists only what's installed, then pick what to remove
sudo ./get-cuda-mirror.sh --uninstall

# Specific components only (no prompt)
sudo ./get-cuda-mirror.sh --uninstall=doca,driver

# Everything
sudo ./get-cuda-mirror.sh --uninstall=all
05

Verify the Install

verify-install.sh checks a finished node against the flags it was installed with. Hand it the same flags as the install command and it answers "did this node get exactly what was asked for" — not just "is this node self-consistent". It is read-only: it installs nothing, changes nothing, starts no services. Exit code is 0 on a clean run, 1 if anything failed, so it drops straight into a provisioning pipeline.

bash
wget https://mirrors.siam.ai/verify-install.sh
chmod +x verify-install.sh

# VM / no NVLink — same flags used to install
sudo ./verify-install.sh --nvidia-driver=580 --cuda-toolkit=13-0 --dcgm=true --nvitop=true --no-nv=true

# HGX with DOCA — same flags used to install
sudo ./verify-install.sh --doca=true --nvidia-driver=580 --cuda-toolkit=13-0 --dcgm=true --nvitop=true

# Also run dcgmi diag -r 2 (several minutes)
sudo ./verify-install.sh --nvidia-driver=580 --cuda-toolkit=13-0 --dcgm=true --deep
Copy the install command, change the script name

The checker accepts the installer's whole flag set. Flags that cannot affect the result (--open, --mirror, --local-install, --doca-version, --yes) are accepted and ignored, so the install line pastes across verbatim. Run it with no flags at all and it still works — it just falls back to checking internal consistency, because nothing told it what you wanted.

What it checks

#GroupWhat it catches
1Kernel modulesnvidia, nvidia_uvm, nvidia_modeset, nvidia_drm actually loaded
2Driver version lockEvery driver package on one version; running module matches the installed package (a mismatch = reboot pending); no Ubuntu-archive builds mixed in; branch is the one you asked for
3Secure BootIf Secure Boot is on, modinfo -F signer nvidia is non-empty — catches the unsigned module that only fails at the next reboot
4CUDA toolkitnvcc release, /usr/local/cuda symlink target, cuda-toolkit-<ver>, and the cuda-<ver> meta
5Fabric ManagerPresent or absent per --no-nv, version exactly equal to the driver, service state
6NVLinkNvLinkDisable and /etc/modprobe.d/ state agree with the flags on this run
7DCGMCore package, service, dcgmi discovery -l, and the plugin major matching the driver's max CUDA
8nvitopInstalled and able to read the GPU (nvitop -1)
9DOCA-OFEDdoca-ofed, mft, ofed_info, ib_core, nvidia_peermem, the ib_register_peer_memory_client symbols for the running kernel, active IB ports
10Container toolkitnvidia-container-toolkit version, informational
11HygieneLeftover apt driver pin, held packages, a clean dependency tree, pending reboot, and free space on / and /var

The three that earn their keep

Results follow the flags, so read the mode

Fabric Manager missing is a pass under --no-nv=true — the installer skips FM deliberately in that mode. FM also reports a pass when it is installed but not running because the node has no NVSwitch; the check reads the journal before deciding, instead of calling it broken.

Before the first reboot, DOCA warns rather than fails — ib_core, nvidia_peermem and the peer-memory symbols are legitimately not up yet. Warnings never change the exit code.

Running both workflows on the same node? The installer does not remove a disable-nvlink.conf written by an earlier --no-nv run, so a later run without that flag keeps NVLink off and nothing on the console says so. The check catches the leftover and prints the fix.

Sample output

A VM node installed with --nvidia-driver=580 --cuda-toolkit=13-0 --dcgm=true --nvitop=true --no-nv=true, abridged:

verify-install.sh
==== 2. Driver version lock
[PASS] nvidia-smi reports driver 580.178.04  (max CUDA 13.0)
[PASS] all 17 driver packages at one version: 580.178.04-1ubuntu1
[PASS] running module matches the installed package (580.178.04)
[PASS] no Ubuntu-archive builds in the NVIDIA stack (NVIDIA lineage only)
[PASS] driver is on the requested branch 580 (build 580.178.04)
       kernel module flavor: open

==== 3. Secure Boot
[PASS] Secure Boot ON, nvidia module signed by: oa-test-mirros-0001 Secure Boot Module Signature key

==== 4. CUDA toolkit
[PASS] nvcc 13.0  (/usr/local/cuda/bin/nvcc)
[PASS] /usr/local/cuda -> /usr/local/cuda-13.0
[PASS] meta cuda-13-0 13.0.3-1 installed

==== 5. Fabric Manager
[PASS] no Fabric Manager, as expected with --no-nv=true

==== 6. NVLink
[PASS] NvLinkDisable: 1 — NVLink is off, as requested

==== 7. DCGM
[PASS] plugin datacenter-gpu-manager-4-cuda13 matches the driver's max CUDA (13.0)
[PASS] dcgmi discovery: 1 GPU(s), 0 NvSwitches found, 0 ConnectX found

==== 11. Hygiene
[PASS] no leftover apt driver pin
[PASS] apt dependency tree is clean
[WARN] only 4312 MB free where apt stages .debs — a CUDA toolkit install needs ~4500 MB
         sudo apt-get clean     (safe: pure cache)

========================================
RESULT: PASS  —  28 passed, 1 warning(s)
========================================
Two filesystems, two constraints

Stock Ubuntu LVM puts /var on its own logical volume. apt stages every .deb into /var/cache/apt/archives before unpacking anything into /usr/local, so a CUDA install can fail on a full /var while / still has tens of gigabytes free. That is what the warning above is about — sudo apt-get clean is safe, it only drops cached downloads.

06

Flags Reference

FlagValuesEffect
--nvidia-driver<branch> → newest, or a full version to pin an exact build
live list in section 03
Install NVIDIA driver — branch alone installs the newest build; a full version pins that exact build
--open=true|falseboolean — default autoKernel module flavor. Auto = keep what is already installed, else open (NVIDIA's default for Turing+); forced open on Blackwell / B300, proprietary on pre-Turing
--cuda-toolkit<version> e.g. 13-2 / 12-9
live list in section 03
Install CUDA toolkit version
--doca=truebooleanInstall DOCA-OFED — combine with driver flags, one reboot at end
--doca-version3.4.0 (default)DOCA-OFED version
--dcgm=truebooleanInstall DCGM — auto-picks cuda12/cuda13 from --cuda-toolkit
--nvitop=truebooleanInstall nvitop (GPU monitor)
--no-nv=truebooleanBlacklist NVLink — reboot required
--local-install=truebooleanUse pre-staged local .deb repo
--force-install=truebooleanForce driver 575 + toolkit 12-9 (legacy default)
--mirror=falsebooleanPull from official NVIDIA instead of mirror
--yes—Answer yes to the driver-lineage swap prompt (replacing an Ubuntu-archive driver with NVIDIA's) — for unattended runs
--uninstall—Interactive: list only installed components, then pick what to remove
--uninstall=LISTdriver,fabric,cuda,dcgm,doca,nvitop,allRemove selected components (comma-separated, no prompt)
--uninstall-all=truebooleanAlias for --uninstall=all (purge everything)
No flags = print usage

Running ./get-cuda-mirror.sh with no arguments prints the usage guide and exits.

07

Notes

copied to clipboard