优雅的 Windows 开发
0x00 背景
本文讲述如何在 Windows Subsystem for Linux 里跑起一个支持 CUDA 的 docker 容器来的。
我们的工作相当于将上图中的 NVIDIA CUDA 换成了 docker container。
0x01 步骤
0x00 安装 WSL
首先,现在 win11 默认装的 WSL 已经是2.0版本了,所以无需在命令里单独使用 wsl –set-default-version 2
指定2.0版本的 WSL 了。仅使用如下命令即可一键安装 Ubuntu 发行版的 WSL:
1 | wsl --install -d Ubuntu |
Tips
不用重启 Windows,仅重启 Ubuntu subsystem 的方法:
1 | wsl --shutdown |
同时,我们可以关闭Windows Subsystem for Linux GUI来降低WSL的CPU占用,以及解决日常高CPU占用、屏幕频繁刷新以及频繁获取失去焦点的bug。可以在%UserProfile%
目录下新建一个.wslconfig
文件,并写入如下配置:
1 | [wsl2] |
搞完以后,重启WSL即可。该文件内的详细配置可参考微软官方文档。
0x01 安装 NVIDIA 驱动
首先,你需要在宿主机,也就是 Windows 机器上安装为 WSL 特制的,兼容 GPU 半虚拟化技术(GPU paravirtualization technology)的 NVIDIA 驱动,驱动下载地址:https://developer.nvidia.com/cuda/wsl/download
0x02 安装 Docker
需要注意的一点是,在 WSL 里面不能使用 apt install docker.io
的形式安装 docker,如果你这么做了,你会发现装的这个 docker 压根启动不起来,需要使用如下方式安装 docker:
1 | curl https://get.docker.com | sh |
安装完成之后,使用如下命令即可启动 docker 服务:
1 | service docker start |
0x03 安装 NVIDIA Container Toolkit
有了这个才能让之前装的 docker 支持 GPU,否则使用 docker --gpus all
启动容器的时候将会报错:
1 | docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]. |
执行如下命令安装 NVIDIA Container Toolkit:
1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ |
然后重启 docker:
1 | service docker restart |
这个时候我们启动一个 GPU container,验证安装是否成功:
1 | docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi |
如果安装成功了,应该会看到如下输出:
1 | +-----------------------------------------------------------------------------+ |