540 字
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 iptablesRef: 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使用新命令瘦身
Optimize-VHD -Path .\ext4.vhdx -Mode full注意不要把 WSL 设置为稀疏模式,有重大 bug 损坏文件:
给WSL2配置运行CUDA的Docker
https://blog.xiaobaizhang.top/posts/wsl-docker/