问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Windows 下让 Docker Desktop 关联上 NVidia GPU

创作时间:
作者:
@小白创作中心

Windows 下让 Docker Desktop 关联上 NVidia GPU

引用
CSDN
1.
https://blog.csdn.net/ndscvipuser/article/details/136610169

在Windows系统下使用Docker进行深度学习或科学计算时,如何让Docker容器访问到NVIDIA GPU是一个常见的需求。本文将详细介绍如何在Windows环境下配置Docker Desktop,使其能够识别和使用NVIDIA GPU。

一、背景及动机

前面一篇写了《大数据及机器学习带 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**了,如果不解决掉这个问题,一切都是扯淡!

二、处理全过程

2.1、安装 WSL 2

此步必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。

之前有重装过很多次,有那么几次 wsl 命令自动带了,要看操作系统了,下面检查一下:

$ wsl -l -v  

如果支持上面的命令正常打印出信息,就不用考虑安装,如果不正常,就请如下:

$ wsl --install  

安装完成后,它默认就是 WSL 2,可能有朋友们想要第 1 版,本文在这里不讲述了,主要是 WSL 2 用了很久了,没啥太大问题。

紧接着就安装 Ubuntu 20.04,如果有想用最新的,可以考虑 Ubuntu 22.04。

$ wsl --install -d Ubuntu-20.04  

安装完成后,会出现输入账号和密码,因为 root 不让用,但不影响我们使用,设置就对了。

2.2、安装 Docker Desktop

此步太简单,傻瓜式安装,点击如下链接可前往下载,参考图紧随其它,如下所示:Install Docker Desktop on Windows

https://docs.docker.com/desktop/install/windows-install/

装完后,默认路径在:C:\Program Files\Docker\

一般情况下,安装包没有跟上最新版本,同样也操作很多次了,直接最新,反正以后不想更新了。

2.3、开启 Docker 的 GPU

2.3.1、正式开始

首先就像是文章开头的那样的,先试一下报错:

$ 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-20.04 打开:

2.3.2、安装 nvidia 容器工具包

在该 Linux 环境下使用 Apt 方式去安装,输入以下命令:

$ 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  

这个时候,会发现第 3 条命令会出现错误:

$ 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,一般可以,但不保证。再次执行,正常了!

$ sudo apt-get install -y nvidia-container-toolkit  

2.3.3、配置 Docker Daemon

执行以下命令:

$ sudo nvidia-ctk runtime configure --runtime=docker  

老实说,这没多大作用,重启也没有用,更好的办法是打开 Docker Desktop 如下操作之后,再重启:

2.3.4、完美解决

三、扩展知识

3.1、Linux 包管理工具 Apt、Yum、Dnf 和 Zypper 有什么不同?

本文安装的时候使用了 Apt,后面三种也是可以的,如有需要,可去官方找资料。

3.1.1、所属发行版

  • 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.1.2、命令语法

  • Apt 使用 apt-get、apt-cache 等命令进行包管理操作。

  • Yum 和 Dnf 使用 yum 和 dnf 命令进行包管理操作,语法基本相同。

  • Zypper 使用 zypper 命令进行包管理操作。

3.1.3、性能和速度

  • Dnf 相比 Yum 有更好的性能和速度,支持并发下载和安装包。

  • Apt 和 Zypper 的性能和速度也较为优秀。

3.1.4、依赖解析

  • Apt、Yum、Dnf 和 Zypper 都能够自动解析和处理包的依赖关系。

  • Dnf 在依赖解析方面有所改进,提供了更好的依赖解决方案。

3.1.5、软件仓库

不同的包管理工具使用不同的软件仓库配置文件和格式。

  • Apt 使用 /etc/apt/sources.list 和 /etc/apt/sources.list.d 目录下的文件。

  • Yum 和 Dnf 使用 /etc/yum.repos.d 目录下的 .repo 文件。

  • Zypper 使用 /etc/zypp/repos.d 目录下的 .repo 文件。

尽管这些包管理工具在语法和使用方面有所不同,但它们的基本功能和目的都是相似的,即方便地管理软件包的安装、升级和卸载等操作。选择哪个包管理工具主要取决于你使用的 Linux 发行版。

3.2、解释一下 nvidia 容器工具包

NVIDIA Container Toolkit 使用户能够构建和运行 GPU 加速的容器。该工具包括一个容器运行时库和一些实用工具,可以自动配置容器以利用 NVIDIA GPU。

那么使用 NVIDIA Container Toolkit 时有哪些优势:

  • 简化了在容器中使用 NVIDIA GPU 的过程。用户不需要手动安装 NVIDIA 驱动程序或修改容器镜像。

  • 提供了一致的方式来配置和部署 GPU 加速的容器,提高了可移植性和可重复性。

  • 与主流的容器运行时和编排工具(如 Docker、Kubernetes)兼容,便于集成到现有的容器化工作流中。

3.3、命令行中 docker --runtime 做什么用?

是 Docker 命令行中的一个选项,用于指定容器运行时期。容器运行时是负责创建和管理容器的底层软件。默认情况下,Docker 使用
runc
作为容器运行时。但是,通过 **
--runtime
选项,你可以指定使用其他的容器运行时,如
nvidia-container-runtime
**。

当你使用 **
--runtime=nvidia
选项运行容器时期,Docker 将使用 NVIDIA Container Toolkit 提供的
nvidia-container-runtime
** 作为容器运行时期。这个特殊的运行时会自动配置容器,使其能够访问宿主机上的 NVIDIA GPU。

3.4、为什么我用了 Ubuntu?

因为微软的 WSL 相关文章有提及到:安装驱动程序后,请确保启用 WSL 并且还要安装基于 glibc 的发行版本(例如 Ubuntu 或 Debian)。

另外一个原因是 Ubuntu 使用的概率还是蛮高的,算是混个脸熟。

四、参考资料

  1. NVidia 官方文档站点

  2. Docker Desktop 官方站点

  3. 如何使用 WSL 在 Windows 上安装 Linux

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号