---
title: "Installation"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Installation}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
Currently, {anvl} is not available on CRAN, so you either have to install it via [r-universe](https://r-xla.r-universe.dev/) or from [GitHub](https://github.com/r-xla/anvl).
## System Dependencies
The system library required during runtime is `libprotobuf`.
Source installation requires a `C++20` compiler and `protoc` (protobuf compiler).
## CPU Installation
You can install the latest release from GitHub
```{r, eval = FALSE}
pak::pak("r-xla/anvl@*release")
```
You can install the latest release from r-universe (prebuilt binary).
```{r, eval = FALSE}
install.packages("anvl",repos = c("https://cloud.r-project.org", "https://r-xla.r-universe.dev"))
```
To confirm that your CPU installation is working, run:
```{r, eval = FALSE}
library(anvl)
nv_scalar(1, device = "cpu")
```
The development version can be installed via:
```{r, eval = FALSE}
pak::pak("r-xla/anvl")
```
## GPU Installation
Running {anvl} with GPU support currently only works on Linux (amd64/x86-64) or via WSL2 on Windows (experimental).
```{r, include = FALSE}
cuda_pkg <- getFromNamespace("cuda_r_package", "pjrt")()
```
The recommended way to use CUDA there is to install the {`r cuda_pkg`} R package, which only requires a compatible driver to be installed.
You can install it from GitHub or r-universe:
```{r, echo = FALSE, results = "asis"}
cat(sprintf('```r\npak::pak("mlverse/cudatoolkit/%s")\n', cuda_pkg))
cat(sprintf('install.packages("%s", repos = "https://mlverse.r-universe.dev")\n```', cuda_pkg))
```
When the {`r cuda_pkg`} package is not installed, the correct runtime libraries need to be installed on the system and discoverable via `LD_LIBRARY_PATH`.
The specific versions of the CUDA runtime libraries provided with {`r cuda_pkg`} are listed [here](`r sprintf("https://github.com/mlverse/cudatoolkit/blob/main/%s/inst/components.tsv", cuda_pkg)`).
**Troubleshooting**
To trouble-shoot the CUDA installation, run the following in a new R session for maximum debug output.
```{r, eval = FALSE}
Sys.setenv(PJRT_DEBUG = "1", TF_CPP_MIN_LOG_LEVEL = "0")
anvl::nv_scalar(1, device = "cuda")
```
Note that if another package is using a different cudatoolkit package (e.g. when using {torch}), there might be some issues.
In this case, use separate R processes, e.g. via {mirai}.
## Docker
Prebuilt Docker images are available in [r-xla/docker](https://github.com/r-xla/docker).
This includes a CUDA and CPU build for amd64/x86-64 architecture:
### Available Images
| Image | Description |
|-------|-------------|
| `anvl-cpu` | CPU support, based on `rocker/r-ver` |
| `anvl-cuda` | GPU support with CUDA 12.8 |
Note that running the GPU container requires the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) to be installed on the host.
Once installed (and the Docker daemon restarted), pass `--gpus all` to `docker run` to expose the host GPUs to the container:
```bash
docker run --rm -it --gpus all ghcr.io/r-xla/anvl-cuda:latest R
```
You can verify that the GPU is visible inside the container by running `nvidia-smi`, or from R:
```r
anvl::nv_scalar(1, device = "cuda")
```
### Tags
Each image is available with two tags:
| Tag | Description |
|-----|-------------|
| `:latest` | Built from the `main` branch (rebuilt daily) |
| `:release` | Built from the latest release |