共计 3719 个字符,预计需要花费 10 分钟才能阅读完成。
前言
随着 AI 的爆火,更多的开源 AI 代码也涌现出来。但是,想要在用 docker 本地部署一个 AI 程序,仅仅靠 cpu 运行实在太慢,所以 docker 能使用宿主机的 gpu 也是很有必要的。
下面就简单了解一下如何让 docker 能够使用 宿主机的 gpu,阿蛮君仅自己尝试过,不敢保证完全正确。
一、升级docker并配置
1. 升级
建议更新 docker 到最新版本,版本至少 23 以上,可以参考 Linux 离线安装 Docker
2. 安装nvidia-container-toolkit
nvidia-container-toolkit 是一个用于与 NVIDIA GPU 集成的工具集,提供了一组工具和库,可以在容器中访问和管理 NVIDIA GPU 资源。
# 添加源
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
# 安装nvidia-container-toolkit
sudo apt-get install -y nvidia-container-toolkit
nvidia-container-toolkit 包含以下组件:
-
nvidia-container-runtime:这是 NVIDIA 容器运行时,它提供了在容器内访问 NVIDIA GPU 的功能。它与 NVIDIA 驱动程序和 CUDA 工具栈进行集成,使容器中的应用程序能够利用 GPU 进行加速计算。
-
nvidia-container-runtime-hook:这是 NVIDIA 容器运行时的钩子程序,它用于在容器启动和停止时进行设置和清理操作。它与容器运行时一起使用,以确保正确配置 GPU 访问和运行时选项。
-
nvidia-docker:它是 Docker 的一个插件,提供了与 NVIDIA 容器运行时的集成。它简化了在 Docker 容器中配置和管理 GPU 加速应用程序的过程。
在安装 nvidia-container-toolkit 时,可以看见以下几个相关软件包:
-
libnvidia-container-tools:是 nvidia-container-toolkit 的一个依赖包,它提供了与容器运行时相关的工具和库。
-
libnvidia-container1:也是 nvidia-container-toolkit 的一个依赖包,它提供了与容器运行时相关的库。
-
nvidia-container-toolkit-base:这是 nvidia-container-toolkit 的基础软件包,它包含必要的运行时组件和依赖项,用于支持 NVIDIA 容器运行时和相关工具。
以下是一些扩展内容:
Docker 19 之前,Docker 并不原生支持容器内直接使用 GPU。因此,为了在容器中实现 GPU 加速,NVIDIA 公司开发了一个名为 nvidia-docker 的项目。它通过与 NVIDIA 容器运行时 nvidia-container-runtime 集成,为 Docker 提供了 GPU 加速容器的支持。使用方式为:docker run --runtime=nvidia
从 Docker 20 版本开始,Docker 引入了官方的 GPU 加速支持,无需使用额外的 nvidia-docker 工具。可以安装官方插件 nvidia-container-toolkit,而这个插件正如上面所说包含了 nvidia-container-runtime。使用方式为:docker run --gpus all
另外,不管是 nvidia-docker 和 nvidia-docker2 已经被英伟达迭代了,使用的话会出现别的问题。最好还是安装比较高版本的 docker,使用 nvidia-container-toolkit 插件。
在线安装方式:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
离线安装方式:https://github.com/NVIDIA/libnvidia-container/tree/gh-pages/
找到系统对应的版本,下载四个包进行安装:libnvidia-container-tools、libnvidia-container1、nvidia-container-toolkit、nvidia-container-toolkit-base,注意这里不要直接复制连接 wget 下载,需要将链接的 blob 改为 raw。
二、安装cuda
可以尝试直接使用包管理工具安装 sudo apt install nvidia-cuda-dev nvidia-cuda-toolkit
,仅使用 apt install nvidla-cuda-toolkit
可能报错。
1. 安装
借用 chatgpt 的回答,CUDA(Compute Unified Device Architecture)是由 NVIDIA 开发的并行计算平台和编程模型。它提供了一种在NVIDIA GPU上进行通用目的并行计算的方法。所以,本教程也仅适用 NVIDIA GPU 的机器。
下载地址:https://developer.nvidia.com/cuda-toolkit-archive , 选择与自己系统相对应的版本。
这里可以选择最新版的,和驱动没有必要关系,不过这里安装的 cuda 可能也会捆绑显卡驱动,但是驱动不一定适合本机。
这里选择本地或在线安装都可以,按照提示的命令安装就行。
2. 配置环境变量
安装好以后需要配置环境变量,一般会在 /usr/local
文件夹下有一个 cuda 的文件夹。
cat >> ~/.bashrc <<EOF
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
EOF
注意:这里 cuda 根据实际目录进行配置,可以通过 find / -name "nvcc"
查看。
接下来,更新环境变量配置。
source ~/.bashrc
验证是否配置成功。
nvcc -V
三、安装显卡驱动
1. 查看驱动是否安装
nvidia-smi
如果提示命令不存在就是没有安装,其他提示可能是机器本身没有显卡或者显卡驱动安装的版本不正确。
如果提示内容为 Not supported,也是说明安装的版本不正确。
2. 查看显卡型号
lspci | grep -i vga
可以看见显卡的型号为 NVIDIA 的 GeForce GT 710。
如果后面内容显示为一串数字如下,则可以访问:http://pci-ids.ucw.cz/mods/PC/10de/2486 (把后面的数字替换为查询到的数字),查询到显卡型号为 3060 Ti。
root@robot-server:~# lspci | grep -i vga
01:00.0 VGA compatible controller: NVIDIA Corporation Device 2486 (rev a1)
3. 安装显卡驱动
查询地址:https://www.nvidia.com/Download/index.aspx?lang=zh-cn
通过输入显卡型号和系统类型进行搜索下载,下载后你将得到一个 run 后缀的文件,运行即可。
# 安装gcc和make
apt install -y gcc make
# 安装驱动
chmod +x NVIDIA-Linux-x86_64-470.182.03.run && \
./NVIDIA-Linux-x86_64-470.182.03.run
这里需要注意的是,可能会弹出窗口让你选择,如果看见 dkms,尽量选 yes,但阿蛮君也不是很懂,其他的选择默认即可。
4. 测试显卡驱动
nvidia-smi
正常显示结果如下:
四、Docker使用GPU
docker run -it --rm --gpus all ubuntu nvidia-smi
显示如下结果说明大功告成。
容器内使用 nvcc 命令:
docker run -it --rm -v $(which nvcc):/usr/bin/nvcc --gpus all ubuntu nvcc -V
参考资料:https://blog.csdn.net/NekoTom/article/details/127508810
提醒:本文发布于570天前,文中所关联的信息可能已发生改变,请知悉!