

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

# 使用 Pyxis 运行容器化作业
<a name="tutorials_11_running-containerized-jobs-with-pyxis"></a>

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

**注意**  
此功能在 AWS ParallelCluster v3.11.1 中可用
本教程中的脚本移动 (`mv`) 一些文件，这会将它们从其原始位置删除。如果要将这些文件的副本保存在其原始位置，请更改脚本以改用 copy (`cp`) 命令。

使用时 AWS ParallelCluster，您只需为创建或更新 AWS ParallelCluster 映像和集群时创建的 AWS 资源付费。有关更多信息，请参阅 [AWS 使用的服务 AWS ParallelCluster](aws-services-v3.md)。

**先决条件：**
+  AWS CLI 已[安装并配置。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Amazon EC2 密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。
+ 具有运行 [pcluster CLI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) 所需的[权限](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)的 IAM 角色。

## 创建集群
<a name="create-the-cluster"></a>

从 AWS ParallelCluster 3.11.1 开始，所有官方版本都预 AMIs 装了 Pyxis 和 Enroot。特别是，SLURM 在 Pyxis 支持下重新编译，Enroot 作为二进制文件安装到系统中。不过，您必须根据自己的具体需求进行配置。Enroot 和 Pyxis 使用的文件夹对集群性能有重要影响。有关更多信息，请参阅 [Pyxis documentation](https://github.com/NVIDIA/pyxis/wiki/Setup#slurm-plugstack-configuration) 和 [Enroot documentation](https://github.com/NVIDIA/pyxis/wiki/Setup#enroot-configuration-example)。

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

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

**使用示例配置创建集群**

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

1. 在头节点中执行以下脚本作为[OnNodeConfigured](HeadNode-v3.md#yaml-HeadNode-CustomActions-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
   ```

1. 必须在计算实例集上配置 Pyxis 和 Enroot，方法是为 Enroot 创建持久和易失性目录，为 Pyxis 创建运行时目录。在计算节点中将以下脚本作为[OnNodeStart](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-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
   ```

## 提交作业
<a name="submit-jobs"></a>

现在，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'
```