用通俗易懂的方式讲解大模型:使用 Docker 部署大模型的训练环境

之前给大家介绍了主机安装方式------如何在 Ubuntu 操作系统下安装部署 AI 环境,但随着容器化技术的普及,越来越多的程序以容器的形式进行部署,通过容器的方式不仅可以简化部署流程,还可以随时切换不同的环境。

实际上很多云服务厂商也是这么干的,用一台带有 NVIDIA 显卡的机器来部署多个容器,然后通过容器的方式来提供给用户使用,这样就可以充分利用显卡资源了。今天给大家介绍一下如何使用 Docker 的方式来部署我们之前部署过的 AI 环境。

目标

我们可以跟之前一样制定一个小目标:

  • 在 Docker 容器中可以正常执行nvidia-smi命令

  • 在 Docker 容器中可以正常执行python -c "import torch; print(torch.cuda.is_available())"命令

好奇的同学可能会问,为什么不在 Docker 容器中执行nvcc --version命令呢?这个问题留到后面再解释。

通俗易懂讲解大模型系列

技术交流

建了大模型技术交流群! 想要学习、技术交流、获取如下原版资料的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

方式①、微信搜索公众号:机器学习社区 ,后台回复:加群

方式②、添加微信号:mlc2060,备注:来自CSDN + 技术交流

预安装工作

我们还是以 Ubuntu 22.04 操作系统为例,首先我们要安装 Docker,这里就不再赘述了,可以参考官方文档[2]进行安装。

Docker 安装完成后,如果你想以非 root 用户执行docker命令的话,还需要将当前用户添加到docker用户组中,命令如下:

bash 复制代码
# 先确保 docker 用户组已存在
sudo usermod -aG docker <user-name>

安装 NVIDIA 驱动

安装 NVIDIA 驱动的步骤可以参考之前的文章,这里就不再赘述了。

安装 NVIDIA Container Toolkit

NVIDIA Container Toolkit 允许开发者和用户将 NVIDIA GPU 的能力无缝地加入到 Docker 容器中。通过简单地安装一个插件,用户就可以运行为 GPU 优化的容器,无需进行任何修改。该工具集包括 NVIDIA 驱动、CUDA 等必要组件,确保 GPU 在容器环境中的高性能执行,对 AI、数据分析和高性能计算场景特别有用。

我们可以通过以下命令来安装 NVIDIA Container Toolkit:

bash 复制代码
# 先切换到 root 用户
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
# 添加源
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu22.04/nvidia-docker.list > /etc/apt/sources.list.d/nvidia-docker.list
# 更新源
apt update
# 安装 NVIDIA Container Toolkit
apt -y install nvidia-container-toolkit
# 重启 Docker 服务
systemctl restart docker

安装完成后,系统会一并安装 NVIDIA Container Toolkit 的 CLI 命令(nvidia-ctk),我们可以运行该命令确认安装是否成功:

bash 复制代码
$ nvidia-ctk --version
NVIDIA Container Toolkit CLI version 1.13.5
commit: 6b8589dcb4dead72ab64f14a5912886e6165c079

然后我们就可以在 Docker 容器中运行nvidia-smi命令,验证是否可以在 Docker 容器中正常使用 NVIDIA 显卡了,我们下载一个简单的镜像来进行验证:

bash 复制代码
$ docker run --rm --gpus all nvidia/cuda:11.7.1-base-ubuntu22.04 nvidia-smi

Wed Aug 16 03:04:19 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.199.02   Driver Version: 470.199.02   CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro M6000        Off  | 00000000:03:00.0 Off |                  Off |
| 28%   38C    P8    13W / 250W |     15MiB / 12210MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

可以看到,我们在 Docker 容器中可以正常使用 NVIDIA 显卡了。

下载 Docker 镜像

要运行 AI 环境,一般需要安装 CUDA 和 PyTorch,之前我们是在主机上安装这 2 个程序,但使用 Docker 的方式,我们可以直接下载已经安装好 CUDA 和 PyTorch 的镜像,这里推荐使用这个镜像:anibali/pytorch [4],这个镜像中包含了 CUDA 和 PyTorch,我们可以通过以下命令来运行镜像:

bash 复制代码
$ docker run --rm --gpus all anibali/pytorch:1.13.0-cuda11.8-ubuntu22.04 nvidia-smi

Wed Aug 16 03:09:33 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.199.02   Driver Version: 470.199.02   CUDA Version: 11.8     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro M6000        Off  | 00000000:03:00.0 Off |                  Off |
| 28%   38C    P8    13W / 250W |     15MiB / 12210MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

可以看到 CUDA 版本显示的是 11.8,跟 Docker 镜像中的 CUDA 版本是一致的。

我们再来看在 Docker 容器中是否可以正常执行python -c "import torch; print(torch.cuda.is_available())"命令:

bash 复制代码
# 进入 Docker 容器
$ docker run -it --rm --gpus all anibali/pytorch:1.13.0-cuda11.8-ubuntu22.04 bash
$ user@32e8c83f88c3:/app$ python -c "import torch; print(torch.cuda.is_available())"
True

通过结果可以证明,容器中的 CUDA 和 PyTorch 程序可以正常使用。

为什么不在 Docker 容器中执行 nvcc 命令

回到原先那个问题,为什么不在 Docker 容器中执行**nvcc --version命令呢?我们可以在 Docker 容器中执行 nvcc --version**命令,看看会发生什么:

bash 复制代码
user@32e8c83f88c3:/app$ nvcc --version
bash: nvcc: command not found

发现容器中找不到nvcc命令,但是 CUDA 又是可以正常访问,再看 CUDA 的安装目录:

bash 复制代码
user@32e8c83f88c3:/app$ ls /usr/local/cuda*
/usr/local/cuda:
compat  lib64  targets

/usr/local/cuda-11:
compat  lib64  targets

/usr/local/cuda-11.8:
compat  lib64  targets

可以看到在 CUDA 安装目录中并没有bin文件夹(一般nvcc命令会放到这个文件夹里面),这是因为有些 Docker 镜像为了节省资源,会将一些不需要的文件去掉,只保留最核心的文件,已达到减小 Docker 镜像大小的目的。

总结

Docker 安装与主机安装的方式相比,我们少安装了 CUDA 和 PyTorch 程序,多安装了NVIDIA Container Toolkit和下载 Docker 镜像,但整体花费的时间其实是减少了的(因为 CUDA 和 PyToch 安装时间比较长)。Docker 安装最大的好处就是可以随时切换不同的环境,而且不会影响到主机的环境。比如我们今天安装了 CUDA 11.x 的版本,后面程序升级了可能需要安装 CUDA 12.x 的版本,如果是主机安装的话,就要卸载老的 CUDA 再重新安装新的 CUDA,这样就比较麻烦了,但是如果是 Docker 安装的话,我们只需要下载新的 Docker 镜像就可以了,非常方便。希望今天的分享可以帮助大家更好的使用 Docker 来部署 AI 环境,如果有任何疑问,欢迎在评论区沟通讨论。

关注我,一起学习各种人工智能和 AIGC 新技术,欢迎交流,如果你有什么想问想说的,欢迎在评论区留言。

参考资料

  • How to Use the NVIDIA GPU in Docker Containers on Ubuntu 22.04 LTS[5]

  • NVIDIA Container Toolkit Installation Guide[6]

参考:

[2]

官方文档: https://docs.docker.com/engine/install/ubuntu/

[4]

anibali/pytorch: https://hub.docker.com/r/anibali/pytorch

[5]

How to Use the NVIDIA GPU in Docker Containers on Ubuntu 22.04 LTS: https://linuxhint.com/use-nvidia-gpu-docker-containers-ubuntu-22-04-lts/

[6]

NVIDIA Container Toolkit Installation Guide: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

相关推荐
小菜日记^_^几秒前
BEAGLE: Forensics of Deep Learning Backdoor Attack for Better Defense(论文阅读)
论文阅读·人工智能·深度学习·sp·ai安全·backdoor 后门攻击·安全四大
千天夜41 分钟前
激活函数解析:神经网络背后的“驱动力”
人工智能·深度学习·神经网络
大数据面试宝典42 分钟前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt
封步宇AIGC1 小时前
量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
人工智能·python·机器学习·数据挖掘
m0_523674211 小时前
技术前沿:从强化学习到Prompt Engineering,业务流程管理的创新之路
人工智能·深度学习·目标检测·机器学习·语言模型·自然语言处理·数据挖掘
HappyAcmen1 小时前
IDEA部署AI代写插件
java·人工智能·intellij-idea
噜噜噜噜鲁先森1 小时前
看懂本文,入门神经网络Neural Network
人工智能
InheritGuo2 小时前
It’s All About Your Sketch: Democratising Sketch Control in Diffusion Models
人工智能·计算机视觉·sketch
weixin_307779132 小时前
证明存在常数c, C > 0,使得在一系列特定条件下,某个特定投资时刻出现的概率与天数的对数成反比
人工智能·算法·机器学习
封步宇AIGC2 小时前
量化交易系统开发-实时行情自动化交易-3.4.1.6.A股宏观经济数据
人工智能·python·机器学习·数据挖掘