Skip to content

Commit

Permalink
Add NVIDIA acceleration how-to documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
shikanime committed Nov 10, 2024
1 parent adb6bc4 commit 7ec4a50
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
32 changes: 32 additions & 0 deletions docs/src/how-to/docker-nvidia-device.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# How to use NVIDIA GPU in Docker

WSL supports NVIDIA-based GPU acceleration, making it ideal for many use cases
including machine learning or general compute acceleration. Since Docker version
25, the use of `virtualisation.docker.enableNvidia` has been deprecated in
favour of a more standard specification called Container Device Interface.

1. Enable the NVIDIA Container Toolkit and disable the mounting of executables,
as this will cause an problem related to missing libraries.

```nix
hardware.nvidia-container-toolkit = {
enable = true;
mount-nvidia-executables = false;
};
```

2. As of Docker 25, the Docker daemon doesn't have the CDI feature enabled by
default.

```nix
virtualisation.docker = {
enable = true;
daemon.settings.features.cdi = true;
};
```

3. Test the installation by running the following command.

```shell
docker run --rm --device nvidia.com/gpu=all ubuntu nvidia-smi -L
```
45 changes: 45 additions & 0 deletions docs/src/how-to/nix-ld-nvidia-acceleration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# How to use NVIDIA acceleration with nix-ld

By default, the NixOS WSL configuration provides a symlink farm from
/usr/lib/wsl/lib to the OpenGL packages. However, if you want to use the GPU
with a non-NixOS compiled program via nix-ld (e.g. nvidia-smi), you also need to
add the symlinks to the to the nix-ld libraries.

```nix
let
wsl-lib = pkgs.runCommand "wsl-lib" { } ''
mkdir -p "$out/lib"
# # We can't just symlink the lib directory, because it will break merging with other drivers that provide the same directory
ln -s /usr/lib/wsl/lib/libcudadebugger.so.1 "$out/lib"
ln -s /usr/lib/wsl/lib/libcuda.so "$out/lib
ln -s /usr/lib/wsl/lib/libcuda.so.1 "$out/lib
ln -s /usr/lib/wsl/lib/libcuda.so.1.1 "$out/lib
ln -s /usr/lib/wsl/lib/libd3d12core.so "$out/lib
ln -s /usr/lib/wsl/lib/libd3d12.so "$out/lib
ln -s /usr/lib/wsl/lib/libdxcore.so "$out/lib
ln -s /usr/lib/wsl/lib/libnvcuvid.so "$out/lib
ln -s /usr/lib/wsl/lib/libnvcuvid.so.1 "$out/lib
ln -s /usr/lib/wsl/lib/libnvdxdlkernels.so "$out/lib
ln -s /usr/lib/wsl/lib/libnvidia-encode.so "$out/lib
ln -s /usr/lib/wsl/lib/libnvidia-encode.so.1 "$out/lib
ln -s /usr/lib/wsl/lib/libnvidia-ml.so.1 "$out/lib
ln -s /usr/lib/wsl/lib/libnvidia-opticalflow.so "$out/lib
ln -s /usr/lib/wsl/lib/libnvidia-opticalflow.so.1 "$out/lib
ln -s /usr/lib/wsl/lib/libnvoptix.so.1 "$out/lib
ln -s /usr/lib/wsl/lib/libnvwgf2umx.so "$out/lib
ln -s /usr/lib/wsl/lib/nvidia-smi "$out/lib
'';
in
{
programs.nix-ld = {
enable = true;
libraries = [ wsl-lib ];
};
}
```

Test the installation by running the following command:

```shell
nvidia-smi
```

0 comments on commit 7ec4a50

Please sign in to comment.