505 字
3 分钟
给WSL2配置运行CUDA的Docker
注意,本文使用WSL2
+Docker
,而不是安装Docker Desktop for Windows
,因为后者占用的资源非常多,而且还有很多bug,比如,GPU无法运行。
安装WSL
运行一下命令将安装WSL并安装Ubuntu发行版,如果需要安装其他Linux发行版(如Arch Linux),请参考此链接。
wsl --install
常用WSL命令
- 列出WSL子系统:
wsl --list
- 关闭WSL:
wsl --shutdown
- WSL配置文件:
C:/users/YOUR_NAME/.wslconfig
Notes
让WSL使用本机的代理,编写
.wslconfig
如下:
[wsl2]networkingMode=mirroreddnsTunneling=trueautoProxy=true
安装Docker
配置Docker的repo
sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update
安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo usermod $USER -aG docker # 添加本用户到docker的组中sudo service docker start
要确认Docker成功安装,进入WSL的Ubuntu(使用命令wsl
),并输入命令docker --version
查看输出,还可以通过尝试运行docker run hello-world
运行简单的内置Docker映像,测试安装是否正常工作。
给Docker配置CUDA
安装NVIDIA Container Toolkit
首先配置repo:
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
然后更新reposudo apt-get update
,再运行sudo apt-get install -y nvidia-container-toolkit
来安装NVIDIA Container Toolkit。
配置Docker
使用nvidia-ctk
命令配置容器运行时:
sudo nvidia-ctk runtime configure --runtime=docker
重新启动Docker进程:
sudo systemctl restart docker
测试
docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
配置Docker
配置iptable
让WSL中的Ubuntu使用iptable(option 1),否则Docker的NAT会有问题。
update-alternatives --config iptables
Ref: https://nickjanetakis.com/blog/install-docker-in-wsl-2-without-docker-desktop
配置proxy
让Docker build
使用本机proxy
docker build --network=host --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy ...
Docker部分命令
docker builder prune -a
给Docker瘦身
迁移WSL至其他盘
把Ubuntu的虚拟磁盘复制到其他盘符,然后创建符号链接
New-Item -ItemType SymbolicLink -Path "C:\Users\36477\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx" -Target "D:\wsl\ubuntu\ext4.vhdx"
停止WSL
wsl --shutdown
使用Diskpart来瘦身
diskpart
select vdisk file="C:\PATH\TO\ext4.vhd"attach vdisk readonlycompact vdiskdetach vdiskexit
给WSL2配置运行CUDA的Docker
https://blog.xiaobaizhang.top/posts/wsl-docker/