使用容器#
容器提供了一种封装应用程序所有软件依赖项的方法,使其能够部署在不同的系统上。容器是在 DGX SuperPOD 上运行应用程序的首选方式。
DGX SuperPOD 部署了两个工具 Pyxis 和 Enroot,以帮助简化在 DGX SuperPOD 上安全地使用容器。Pyxis 扩展了 Slurm 的功能,以便可以使用 srun 直接将作业启动到容器中。Enroot 是一种轻量级容器运行时,使传统的容器镜像能够在非特权模式下运行。
示例#
以下是一些使用用户容器的示例命令
在工作节点上向 Slurm 提交作业。
1srun grep PRETTY /etc/os-release 2PRETTY_NAME="Ubuntu 20.04.4 LTS"
向 Slurm 提交作业并在容器中启动它。
–container-image 选项用于指定要使用的容器。
1srun --container-image=centos grep PRETTY /etc/os-release 2PRETTY_NAME="CentOS Linux 7 (Core)"
从主机挂载文件并在容器内对其运行命令。
1srun --container-image=nvcr.io/nvidia/pytorch:22.12-py3 --container-mounts=/etc/os-release:/host/os-release grep PRETTY /host/os-release 2pyxis: importing docker image: nvcr.io/nvidia/pytorch:22.12-py3 3pyxis: imported docker image: nvcr.io/nvidia/pytorch:22.12-py3 4PRETTY_NAME="Ubuntu 20.04.4 LTS"
–container-mounts 选项可用于将文件和目录都挂载到容器环境中。多个选项应以逗号分隔。
1srun -N 2 --ntasks-per-node=1 --container-image=nvcr.io/nvidia/pytorch:22.12-py3 --container-mounts=/etc/os-release:/host/os-release grep PRETTY /host/os-release 2pyxis: imported docker image: nvcr.io/nvidia/pytorch:22.12-py3 3pyxis: imported docker image: nvcr.io/nvidia/pytorch:22.12-py3
在两个节点上提交相同的命令,并将当前目录作为 /work 挂载到容器中。
容器的完整网络名称是不同的。Enroot 要求网络仓库名称之间的分隔符(在本例中为 nvcr.io)用 # 分隔,而不是斜杠 (/)。
1srun -N 2 --ntasks-per-node=1 \ 2--container-image=nvcr.io/nvidia/pytorch:22.12-py3 --container-mounts=$(pwd):/work \ 3/bin/bash -c 'uname -n && cat /etc/os-release | grep PRETTY_NAME' 4dgx1 5PRETTY_NAME="Ubuntu 20.04.5 LTS" 6dgx2 7PRETTY_NAME="Ubuntu 20.04.5 LTS"
更多资源可在以下链接中找到