Windows 下让 Docker Desktop 关联上 NVidia GPU
Windows 下让 Docker Desktop 关联上 NVidia GPU
本文将详细介绍如何在Windows系统下配置Docker Desktop,使其能够使用NVIDIA GPU进行加速计算。这对于需要在Windows环境下进行深度学习、机器学习等GPU计算任务的开发者来说,具有很高的实用价值。
一、背景及动机
在使用Docker容器进行GPU计算时,如果遇到以下错误信息,说明需要对Docker进行GPU支持的配置:
$ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
docker: Error response from daemon: unknown or invalid runtime name: nvidia.
See 'docker run --help'.
关键在于--runtime=nvidia
选项,如果不解决这个问题,将无法在容器中使用GPU。
二、处理全过程
2.1、安装 WSL 2
此步骤要求Windows版本为10(内部版本19041及以上)或Windows 11。首先检查WSL是否已安装:
$ wsl -l -v
如果未安装,可以使用以下命令进行安装:
$ wsl --install
安装完成后,默认使用WSL 2。接下来安装Ubuntu 20.04:
$ wsl --install -d Ubuntu-20.04
安装完成后,需要设置用户名和密码。
2.2、安装 Docker Desktop
Docker Desktop的安装非常简单,可以直接从Docker官方文档下载并按照说明进行安装。
2.3、开启 Docker 的 GPU 支持
2.3.1、正式开始
首先验证当前配置是否支持GPU:
$ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
docker: Error response from daemon: unknown or invalid runtime name: nvidia.
See 'docker run --help'.
接着在WSL中打开Ubuntu:
2.3.2、安装 nvidia 容器工具包
在Ubuntu中使用Apt方式安装NVIDIA容器工具包:
$ 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-get update
可能会遇到以下错误:
$ sudo apt-get install -y nvidia-container-toolkit
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
解决方法是重启电脑或重启Docker Desktop。
2.3.3、配置 Docker Daemon
执行以下命令:
$ sudo nvidia-ctk runtime configure --runtime=docker
2.3.4、完美解决
重启Docker Desktop后,再次验证GPU支持:
$ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
如果显示GPU信息,则表示配置成功。
三、扩展知识
3.1、Linux 包管理工具 Apt、Yum、Dnf 和 Zypper 有什么不同?
本文使用了Apt进行包管理,以下是各种包管理工具的简要对比:
- Apt (Advanced Package Tool):主要用于Debian及其衍生发行版,如Ubuntu、Linux Mint等。
- Yum (Yellowdog Updater, Modified):主要用于Red Hat系列发行版,如CentOS、Fedora(早期版本)等。
- Dnf (Dandified Yum):是Yum的升级版,主要用于较新的Fedora和Red Hat Enterprise Linux 8及以上版本。
- Zypper:主要用于SUSE和openSUSE发行版。
3.2、解释一下 nvidia 容器工具包
NVIDIA Container Toolkit使用户能够构建和运行GPU加速的容器。其主要优势包括:
- 简化了在容器中使用NVIDIA GPU的过程。
- 提供了一致的方式来配置和部署GPU加速的容器。
- 与主流的容器运行时和编排工具兼容。
3.3、命令行中 docker --runtime 做什么用?
--runtime
选项用于指定容器运行时。默认情况下,Docker使用runc
作为容器运行时。通过--runtime=nvidia
选项,Docker将使用NVIDIA Container Toolkit提供的nvidia-container-runtime
,自动配置容器以使用GPU。
3.4、为什么选择 Ubuntu?
选择Ubuntu的原因包括:
- 微软WSL文档推荐使用基于glibc的发行版,如Ubuntu或Debian。
- Ubuntu在开发者社区中使用广泛,兼容性好。
四、参考资料
- NVidia 官方文档站点
- Docker Desktop 官方站点
- 如何使用 WSL 在 Windows 上安装 Linux