英伟达 Docker 的使用
一、英伟达 Docker 简介
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个称为容器的独立单元中,从而实现应用程序在不同环境中的快速部署和运行。英伟达(NVIDIA)则在这个基础上为支持 GPU 加速的容器提供了专门的技术。
英伟达 Docker 是 NVIDIA 为了在容器环境中更好地利用 GPU 资源而开发的工具。它使得在容器中运行深度学习、高性能计算等 GPU – 密集型任务变得更加容易。通过英伟达 Docker,用户可以在容器内无缝访问主机上的 NVIDIA GPU,就像在主机系统中直接使用 GPU 一样。
二、安装英伟达 Docker
(一)系统要求
首先,你的主机系统需要安装 NVIDIA GPU 驱动程序。不同型号的 GPU 对应不同版本的驱动,要确保安装的驱动与 GPU 兼容并且支持容器运行。一般建议安装最新的稳定版驱动。
你的系统需要支持 Docker。常见的操作系统如 Ubuntu、CentOS 等都有很好的 Docker 支持。以 Ubuntu 为例,系统版本最好是较新的长期支持版本(LTS),如 Ubuntu 20.04 或 22.04。
(二)安装步骤
安装 Docker 引擎
在 Ubuntu 系统中,可以通过以下命令安装 Docker:
更新软件包列表:sudo apt – get update
安装依赖包:sudo apt – get install apt – transport – https ca – certificates curl software – properties – common
添加 Docker 官方 GPG 密钥:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
设置稳定版 Docker 仓库:echo “deb [arch=amd64 signed – by = /usr/share/ keyrings/docker – archive – keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker 引擎:sudo apt – get update && sudo apt – get install docker – ce docker – ce – cli containerd.io
安装完成后,可以使用sudo systemctl enable docker && sudo systemctl start docker命令来启动并设置 Docker 开机自启。
安装英伟达 Docker
首先,添加 NVIDIA Docker 的软件仓库。在 Ubuntu 系统中,可以使用以下命令:
curl -s -L https://nvidia.github.io/nvidia – docker/gpgkey | sudo apt – key add –
distribution = $ (. /etc/os – release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia – docker/ $distribution/nvidia – docker.list | sudo tee /etc/apt/sources.list.d/nvidia – docker.list
然后更新软件包列表并安装英伟达 Docker:
sudo apt – get update
sudo apt – get install – y nvidia – docker2
安装完成后,需要重新加载 Docker 守护进程的配置,使用sudo pkill -SIGHUP dockerd命令。
三、创建和运行英伟达 Docker 容器
(一)拉取支持 GPU 的容器镜像
英伟达提供了许多预构建的容器镜像,这些镜像包含了各种深度学习框架和工具,并且已经配置好可以使用 GPU。例如,NVIDIA 提供的深度学习容器(NGC,NVIDIA GPU Cloud)包含了 TensorFlow、PyTorch 等框架。
以拉取一个 PyTorch 容器镜像为例,可以使用以下命令:docker pull nvcr.io/nvidia/pytorch:xx.yy.zz(其中xx.yy.zz是具体的版本号)。
(二)创建容器
可以使用docker run命令来创建容器。基本的命令格式如下:
docker run – – gpu all – – name my_pytorch_container -it nvcr.io/nvidia/pytorch:xx.yy.zz /bin/bash
其中–gpu all表示将所有可用的 GPU 分配给容器。–name my_pytorch_container是给容器指定一个名称,-it表示以交互模式运行容器,/bin/bash是容器内要执行的命令,这样进入容器后可以直接在命令行操作。
如果只想分配特定的 GPU 给容器,可以使用–gpu device = GPU_ID的形式,例如–gpu device = 0表示将 ID 为 0 的 GPU 分配给容器。
(三)在容器内运行 GPU – 密集型任务
以在 PyTorch 容器中运行一个简单的深度学习模型训练任务为例。假设已经将训练数据挂载到容器内合适的目录中。
进入容器后(通过前面创建容器时的/bin/bash命令进入),可以编写一个简单的 PyTorch 训练脚本,例如:
收起python复制 torch
torchnn nn
torchoptim optim
torchutilsdata DataLoader
dataset MyDataset
dataloader DataLoaderdataset batch_size shuffle
model MyModel
criterion nnCrossEntropyLoss
optimizer optimAdammodelparameters
epoch
i inputs labels dataloader
optimizerzero_grad
outputs modelinputs
loss criterionoutputs labels
lossbackward
optimizerstep
保存上述脚本为train.py,然后在容器内的命令行中运行python train.py,就可以利用容器内配置好的 PyTorch 和分配的 GPU 资源进行模型训练。
四、英伟达 Docker 的配置管理
(一)容器资源限制
除了分配 GPU,还可以对容器的其他资源进行限制,如 CPU、内存等。在docker run命令中,可以使用-c或–cpu – shares参数来限制 CPU 资源,例如docker run – – gpu all – – cpu – shares 512 – – name my_container -it nvcr.io/nvidia/pytorch:xx.yy.zz /bin/bash,这里–cpu – shares 512表示分配给容器一定比例的 CPU 资源。
对于内存限制,可以使用-m或–memory参数,如docker run – – gpu all – – memory 4g – – name my_container -it nvcr.io/nvidia/pytorch:xx.yy.zz /bin/bash,限制容器使用 4GB 的内存。
(二)容器数据挂载
为了在容器内外共享数据,需要将主机上的目录挂载到容器内。例如,要将主机上的/home/user/data目录挂载到容器内的/data目录,可以在docker run命令中添加-v /home/user/data:/data参数。这样,容器内的/data目录下的文件操作实际上是对主机上/home/user/data目录的操作。
这对于在容器内进行训练的数据输入和模型输出保存非常有用,方便在主机系统中查看和进一步处理训练结果。
五、英伟达 Docker 的高级应用
(一)容器网络配置
可以通过–network参数来配置容器的网络。例如,使用–network host可以让容器共享主机的网络命名空间,这样容器内的网络服务可以直接使用主机的 IP 地址等网络资源。
另外,还可以创建自定义的 Docker 网络,如docker network create my_network,然后在docker run命令中使用–network my_network将容器连接到这个自定义网络中,方便容器之间的通信。
(二)容器编排与集群
在大规模的 GPU 计算场景中,可能需要对多个容器进行编排。可以使用 Docker Compose 或者 Kubernetes 等工具。
Docker Compose 可以通过一个docker – compose.yml文件来定义多个容器的配置,包括容器的镜像、资源分配、网络连接等。例如,以下是一个简单的docker – compose.yml文件用于运行两个相关的 GPU 容器:
收起yaml复制
nvcr.io/nvidia/pytorchxx.yy.zz
/home/user/data1/data1
my_network
/bin/bash
nvcr.io/nvidia/tensorflowxx.yy.zz
/home/user/data2/data2
my_network
/bin/bash
bridge
使用docker – compose up命令就可以根据这个文件启动并运行这两个容器,它们会连接到同一个自定义网络my_network中,并且可以根据配置分配 GPU 和挂载数据目录。
英伟达 Docker 为在容器环境中高效利用 GPU 资源提供了强大的支持,通过合理的安装、配置和使用,可以大大提升 GPU – 密集型应用程序的开发和部署效率。在深度学习、科学计算等领域有着广泛的应用前景。