使用容器#

容器提供了一种封装应用程序所有软件依赖项的方法,使其能够部署在不同的系统上。容器是在 DGX SuperPOD 上运行应用程序的首选方式。

DGX SuperPOD 部署了两个工具 PyxisEnroot,以帮助简化在 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"
    

更多资源可在以下链接中找到

  • 有关运行多节点 Pyxis/Enroot BERT 容器的教程,请参阅本指南

  • 有关使用 MPI 运行多 GPU 和多节点作业的 Hello World 教程,请参阅本指南

  • 有关使用 Dask on Slurm 运行多节点机器学习作业的教程,请参阅本指南