农妇山泉一亩田 发表于 2024-6-26 16:57:08

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 Windowshttps://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8https://docs.docker.com/desktop/install/windows-install/https://img-blog.csdnimg.cn/direct/7afdc138ceef45749e7ee5dfd1b816d4.png
   装完后,默认路径在:C:\Program Files\Docker\
一般环境下,安装包没有跟上最新版本,同样也操作很多次了,直接最新,反正以后不想更新了。
https://img-blog.csdnimg.cn/direct/7f0ecf49e50c43c0b992d9e6b9f98005.png
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 打开:
https://img-blog.csdnimg.cn/direct/d05443c5228a41b68ec35fb2c8e6221e.png
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 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 https://img-blog.csdnimg.cn/direct/1785a75ca1094e19bfdb46330ef18d3f.png

2.3.3、配置 Docker Daemon

执行以下下令:
$ sudo nvidia-ctk runtime configure --runtime=docker https://img-blog.csdnimg.cn/direct/af5ae857abf840fcbdbd19e5015a058a.png
诚实说,这没多大作用,重启也没有用,更好的办法是打开 Docker Desktop 如下操作之后,再重启:
https://img-blog.csdnimg.cn/direct/22e406d60dd74c66a92654fadb0896f7.png
2.3.4、完美办理

https://img-blog.csdnimg.cn/direct/ff4399db090448d388c8f2aa95393b3f.png
三、扩展知识

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 使用的概率还是蛮高的,算是混个脸熟。
四、参考资料


[*]NVidia 官方文档站点
[*]Docker Desktop 官方站点
[*]如何使用 WSL 在 Windows 上安装 Linux

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Windows 下让 Docker Desktop 关联上 NVidia GPU