-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun_once_setup_wsl2_docker.sh.tmpl
79 lines (60 loc) · 2.74 KB
/
run_once_setup_wsl2_docker.sh.tmpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env bash
{{ if .is_wsl2 -}}
# check docker running on wsl2 or docker desktop
function is_docker_wsl2() {
if systemctl status docker &>/dev/null; then
return 0
fi
return 1
}
# enable systemd service on wsl2
cat <<EOF | sudo tee /etc/wsl.conf
[automount]
enabled = true
options = "metadata,umask=22,fmask=11"
#mountFsTab = false
#[network]
#generateHosts = true
#generateResolvConf = true
#[interop]
#enabled = true
#appendWindowsPath = true
#[service]
#enabled = true
[boot]
systemd = true
[user]
default=$(whoami)
EOF
# https://learn.microsoft.com/ja-jp/windows/ai/directml/gpu-cuda-in-wsl
# install nvidia-container-toolkit for use gpus in docker container
# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit
test ! -f /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg &&
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install -y nvidia-container-toolkit
# https://docs.nvidia.com/cuda/wsl-user-guide/index.html#cuda-support-for-wsl-2
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb -O /tmp/cuda-keyring_all.deb
sudo dpkg -i /tmp/cuda-keyring_all.deb
sudo apt update
sudo apt -y install cuda
sudo mkdir -p /etc/docker
if ! is_docker_wsl2; then
sudo ln -s -f $(wslpath $(wslvar USERPROFILE))/.docker/daemon.json /etc/docker/daemon.json
fi
sudo nvidia-ctk runtime configure --runtime=docker --cdi.enabled
sudo nvidia-ctk config --set accept-nvidia-visible-devices-as-volume-mounts=true --in-place
# restart docker systemd service if installed on wsl2
if is_docker_wsl2; then
sudo systemctl restart docker.service
else
# Docker Desktop for Windows
echo 'running the command below to restart docker desktop on windows host!'
# In recent versions, the full path to the docker desktop has changed.
powershell.exe -Command '$ddPath="C:\Program Files\Docker\Docker\Docker Desktop.exe"; $ddProc=(Get-Process -Name "Docker Desktop" -ErrorAction SilentlyContinue | Select-Object ProcessName,Path -First 1); if ($ddProc) { $ddPath=$ddProc.Path; Stop-Process -Name $ddProc.ProcessName -Force; Wait-Process -Name $ddProc.ProcessName; } Start-Process -FilePath $ddPath; Start-Sleep 10;'
fi
# test
docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.6.3-base-ubuntu24.04 nvidia-smi
{{- end }}