

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Pyxis 執行容器化任務
<a name="tutorials_11_running-containerized-jobs-with-pyxis"></a>

了解如何建立叢集，該叢集可以使用「Pyxis」執行容器化任務，這是一種 SPANK 外掛程式，可在 SLURM 中管理容器化任務。Pyxis 中的容器由 Enroot 管理，這是將傳統容器/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)
+ 具有執行叢集 CLI 所需[許可](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)的 IAM 角色。[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)

## 建立叢集
<a name="create-the-cluster"></a>

從 AWS ParallelCluster 3.11.1 開始，所有官方 AMIs都隨附預先安裝的 Pyxis 和 Enroot。特別是，SLURM 會重新編譯為使用「Pyxis 支援」，Enroot 會安裝為系統中的二進位檔。不過，您必須根據您的特定需求進行設定。Enroot 和 Pyxis 使用的資料夾將對叢集效能產生重大影響。如需詳細資訊，請參閱 [Pyxis 文件](https://github.com/NVIDIA/pyxis/wiki/Setup#slurm-plugstack-configuration)和 [Enroot 文件。](https://github.com/NVIDIA/pyxis/wiki/Setup#enroot-configuration-example)

為方便起見，您可以在 中找到適用於 Pyxis、Enroot 和 SPANK 的範例組態`/opt/parallelcluster/examples/`。

若要使用我們提供的範例組態來部署叢集，請完成下列教學課程。

**使用範例組態建立叢集**

必須先為 Enroot 建立持久性和揮發性目錄，然後為 Pyxis 建立執行期目錄，最後在整個叢集中啟用 Pyxis 做為 SPANK 外掛程式，才能在前端節點上設定 Pyxis 和 Enroot。

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. 在運算機群上，必須透過為 Enroot 建立持久性和揮發性目錄，以及為 Pyxis 建立執行時間目錄，來設定 Pyxis 和 Enroot。在運算節點中執行以下指令碼做為 [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 and 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'
```