

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Pyxis でコンテナ化されたジョブを実行する
<a name="tutorials_11_running-containerized-jobs-with-pyxis"></a>

Pyxis を使用して、コンテナ化されたジョブを実行できるクラスターを作成する方法について説明します。Pyxis は、SLURM でコンテナ化されたジョブを管理する SPANK プラグインです。Pyxis のコンテナは Enroot で管理します。Enroot は、従来のコンテナ/OS イメージを特権のないサンドボックスに変換するツールです。詳細については、「[NVIDIA Pyxis](https://github.com/NVIDIA/pyxis) と 「[NVIDIA Enroot](https://github.com/NVIDIA/enroot)」を参照してください。

**注記**  
この機能は v3.11.1 AWS ParallelCluster で使用できます。
このチュートリアルのスクリプトは、一部のファイルを移動 (`mv`) し、元の場所から削除します。これらのファイルのコピーを元の場所に保持する場合は、代わりにコピー (`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 のドキュメント](https://github.com/NVIDIA/pyxis/wiki/Setup#slurm-plugstack-configuration)と [Enroot のドキュメント](https://github.com/NVIDIA/pyxis/wiki/Setup#enroot-configuration-example)を参照してください。

便宜上、Pyxis (SPANK プラグイン) と Enroot の両方のサンプル設定を `/opt/parallelcluster/examples/` 内に用意しています。

用意されているサンプル設定を使用してクラスターをデプロイするには、次のチュートリアルを完了します。

**サンプル設定を使用してクラスターを作成するには**

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'
```