Follow this guide once on the Windows or Linux computer that will run cudaverse. At the end, a short R example verifies the complete setup.
| Platform | CUDA with cudaverse | Required runtime |
|---|---|---|
| Windows 10/11 or Windows Server | Supported | NVIDIA driver, CUDA Driver API, cuBLAS 12, cuSOLVER 11 |
| Supported Linux distribution | Supported | NVIDIA driver, libcuda, cuBLAS 12, cuSOLVER 11 |
| macOS | Not supported by current NVIDIA CUDA | Use a Windows or Linux machine for CUDA work |
NVIDIA changes its supported operating-system and driver matrix over time. Use the current official Windows CUDA guide or Linux CUDA guide rather than copying an old installation command.
Install a current driver for the CUDA-capable NVIDIA GPU. Open PowerShell, Command Prompt, or a Linux shell and run:
nvidia-smi
Do not continue until this command lists the GPU without a driver
error. The CUDA version shown by nvidia-smi describes
driver compatibility; it does not prove that cuBLAS and cuSOLVER are
installed.
cudaverse is lightweight because it uses the CUDA installation already on your computer. It needs these NVIDIA components:
Installing a compatible CUDA 12.x distribution from NVIDIA is the simplest way to obtain them. Use NVIDIA’s default installation choices unless your system administrator manages CUDA centrally.
Confirm that the CUDA bin directory contains:
cublas64_12.dll
cusolver64_11.dll
The NVIDIA installer normally adds its bin directory to
PATH. If R still cannot find the files, set their absolute
paths before loading cudaverse:
Sys.setenv(
CUDAVERSE_CUBLAS_PATH =
"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.x/bin/cublas64_12.dll",
CUDAVERSE_CUSOLVER_PATH =
"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.x/bin/cusolver64_11.dll"
)Replace v12.x with the installed CUDA directory. Use
forward slashes or escaped backslashes in R paths.
Ask the dynamic loader whether the libraries are visible:
ldconfig -p | grep -E 'libcuda.so|libcublas.so.12|libcusolver.so.11'
If they are installed outside the loader’s configured paths, either configure the system loader according to the NVIDIA guide or set absolute paths before loading cudaverse:
Sys.setenv(
CUDAVERSE_CUBLAS_PATH = "/absolute/path/to/libcublas.so.12",
CUDAVERSE_CUSOLVER_PATH = "/absolute/path/to/libcusolver.so.11"
)Avoid pointing at an unversioned symlink from an incompatible CUDA release. The runtime self-test, not the directory name, is the final compatibility check.
CUDA 10.2 was NVIDIA’s final CUDA release for macOS. Current cudaverse native CUDA targets Windows and Linux and reports CUDA as unavailable on macOS. Use a Windows/Linux workstation, server, or cloud instance with an NVIDIA GPU for the workflows in these guides.
The installed R package remains small because it does not download LibTorch or copy NVIDIA runtime libraries into the package library.
Run diagnostics in a fresh R session after changing a driver,
PATH, loader configuration, or either cudaverse
library-path variable:
The summary checks the GPU, driver, CUDA libraries, and a small
calculation. If anything is missing, next_steps tells you
what to fix.
This test requires CUDA and does not silently change devices:
cuda_select_device("cuda")
set.seed(1)
x_gpu <- cuda_tensor(
matrix(rnorm(1024^2), nrow = 1024),
device = "cuda",
dtype = "float32"
)
y_gpu <- tensor_matmul(x_gpu, x_gpu)
tensor_device(y_gpu)
cuda_provenance(y_gpu)
cuda_memory_info("cuda")For a successful lightweight run, provenance reports
device = "cuda" and backend = "native" for the
matrix multiplication.
nvidia-smi failsRepair or update the NVIDIA driver first. cudaverse cannot load the CUDA Driver API when the operating system cannot communicate with the GPU.
cublas_loaded or cusolver_loaded is
falseInstall the compatible CUDA 12.x runtime libraries or set the two absolute library paths before loading cudaverse. Restart R afterward.
Read check$next_steps. Restart R after changing the
driver or CUDA installation, then run the diagnostic check again.
batch_size for cuda_distance() or
cuda_knn().cuda_knn() over a complete pairwise distance
matrix when only neighbours are needed.gc() before measuring
a suspected leak.cuda_memory_info("cuda"); whole-device usage
can include other applications.Some graph clustering and embedding functions currently delegate
stages to established R packages. This is documented rather than hidden.
Use cuda_provenance(result) and the operation coverage guide to distinguish
native CUDA tasks from hybrid workflows.
R torch is not required for the lightweight native CUDA
path.