使用 Pyxis 运行容器化作业 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Pyxis 运行容器化作业

了解如何创建一个能够使用 Pyxis 运行容器化作业的集群,Pyxis 是一个 SPANK 插件,用于在 SLURM 中管理容器化作业。Pyxis 中的容器由 Enroot 管理,Enroot 是将传统 container/OS 图像转换为非特权沙箱的工具。有关更多信息,请参阅 NVIDIA PyxisNVIDIA Enroot

注意
  • 此功能在 Amazon ParallelCluster v3.11.1 中可用

  • 本教程中的脚本移动 (mv) 一些文件,这会将它们从其原始位置删除。如果要将这些文件的副本保存在其原始位置,请更改脚本以改用 copy (cp) 命令。

使用时 Amazon ParallelCluster,您只需为创建或更新 Amazon ParallelCluster 映像和集群时创建的 Amazon 资源付费。有关更多信息,请参阅 Amazon 使用的服务 Amazon ParallelCluster

先决条件:

创建集群

从 Amazon ParallelCluster 3.11.1 开始,所有官方版本都预 AMIs 装了 Pyxis 和 Enroot。特别是,SLURM 在 Pyxis 支持下重新编译,Enroot 作为二进制文件安装到系统中。不过,您必须根据自己的具体需求进行配置。Enroot 和 Pyxis 使用的文件夹对集群性能有重要影响。有关更多信息,请参阅 Pyxis documentationEnroot documentation

为方便起见,您可在 /opt/parallelcluster/examples/ 中找到 Pyxis、Enroot 和 SPANK 的配置示例。

要使用我们提供的示例配置部署集群,请完成以下教程。

使用示例配置创建集群

必须在头节点上配置 Pyxis 和 Enroot,方法是先为 Enroot 创建持久和易失性目录,然后为 Pyxis 创建运行时目录,最后将 Pyxis 作为 SPANK 插件在整个集群中启用。

  1. 在头节点中执行以下脚本作为OnNodeConfigured自定义操作,在头节点上配置 Pyxis 和 Enroot。

    #!/bin/bash set -e echo "Executing $0" # Configure Enroot ENROOT_PERSISTENT_DIR="/var/enroot" ENROOT_VOLATILE_DIR="/run/enroot" sudo mkdir -p $ENROOT_PERSISTENT_DIR sudo chmod 1777 $ENROOT_PERSISTENT_DIR sudo mkdir -p $ENROOT_VOLATILE_DIR sudo chmod 1777 $ENROOT_VOLATILE_DIR sudo mv /opt/parallelcluster/examples/enroot/enroot.conf /etc/enroot/enroot.conf sudo chmod 0644 /etc/enroot/enroot.conf # Configure Pyxis PYXIS_RUNTIME_DIR="/run/pyxis" sudo mkdir -p $PYXIS_RUNTIME_DIR sudo chmod 1777 $PYXIS_RUNTIME_DIR sudo mkdir -p /opt/slurm/etc/plugstack.conf.d/ sudo mv /opt/parallelcluster/examples/spank/plugstack.conf /opt/slurm/etc/ sudo mv /opt/parallelcluster/examples/pyxis/pyxis.conf /opt/slurm/etc/plugstack.conf.d/ sudo -i scontrol reconfigure
  2. 必须在计算实例集上配置 Pyxis 和 Enroot,方法是为 Enroot 创建持久和易失性目录,为 Pyxis 创建运行时目录。在计算节点中将以下脚本作为OnNodeStart自定义操作执行,以便在计算队列上配置 Pyxis 和 Enroot。

    #!/bin/bash set -e echo "Executing $0" # Configure Enroot ENROOT_PERSISTENT_DIR="/var/enroot" ENROOT_VOLATILE_DIR="/run/enroot" ENROOT_CONF_DIR="/etc/enroot" sudo mkdir -p $ENROOT_PERSISTENT_DIR sudo chmod 1777 $ENROOT_PERSISTENT_DIR sudo mkdir -p $ENROOT_VOLATILE_DIR sudo chmod 1777 $ENROOT_VOLATILE_DIR sudo mkdir -p $ENROOT_CONF_DIR sudo chmod 1777 $ENROOT_CONF_DIR sudo mv /opt/parallelcluster/examples/enroot/enroot.conf /etc/enroot/enroot.conf sudo chmod 0644 /etc/enroot/enroot.conf # Configure Pyxis PYXIS_RUNTIME_DIR="/run/pyxis" sudo mkdir -p $PYXIS_RUNTIME_DIR sudo chmod 1777 $PYXIS_RUNTIME_DIR # In Ubuntu24.04 Apparmor blocks the creation of unprivileged user namespaces, # which is required by Enroot. So to run Enroot, it is required to disable this restriction. # See https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces source /etc/os-release if [ "${ID}${VERSION_ID}" == "ubuntu24.04" ]; then echo "kernel.apparmor_restrict_unprivileged_userns = 0" | sudo tee /etc/sysctl.d/99-pcluster-disable-apparmor-restrict-unprivileged-userns.conf sudo sysctl --system fi

提交作业

现在,Pyxis 已配置到集群中,您可以使用 sbatch 和 srun 命令提交容器化作业了,这些命令现在增加了特定于容器的选项。

# Submitting an interactive job srun -N 2 --container-image docker://ubuntu:22.04 hostname # Submitting a batch job sbatch -N 2 --wrap='srun --container-image docker://ubuntu:22.04 hostname'