

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

# p6e-gb200 インスタンスでの NVIDIA-Imex のサポート
<a name="support-nvidia-imex-p6e-gb200-instance"></a>

このチュートリアルでは、P6e-GB200 AWS ParallelCluster で を開始し、AI トレーニングと推論に最高の GPU パフォーマンスを活用する方法を示します。[p6e-gb200.36xlarge インスタンスは、 が Ultraserver サイズで、 が Ultraserver を形成する InstanceType である P6e-GB200 UltraServers を介してのみ使用できます](https://aws.amazon.com/ec2/instance-types/p6/)。 `u-p6e-gb200x72` `p6e-gb200.36xlarge` [InstanceType](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-InstanceType) Ultraserver を購入する`u-p6e-gb200x72`と、18 個の`p6e-gb200.36xlarge`インスタンスを持つ [ML の EC2 キャパシティブロック](https://aws.amazon.com/ec2/capacityblocks/)を通じて利用できるようになります。詳細については、「[P6e-GB200](https://aws.amazon.com/ec2/instance-types/p6/)」を参照してください。

AWS ParallelCluster バージョン 3.14.0: 
+ は、このインスタンスタイプに必要な完全な NVIDIA ソフトウェアスタック (ドライバー、CUDA、EFA、NVIDIA-IMEX) を提供します。
+ が P6e-GB200 Ultraserver の nvidia-imex 設定を作成する
+ P6e-GB200 Ultraserver `nvidia-imex`のサービスを有効にして開始する
+ は、すべての P6e-GB200 Ultraserver (EC2 キャパシティブロック) が適切なサイズの Slurm ブロックになるように Slurm Block トポロジプラグインを設定します (バージョン 3.14.0 の[リリースノートとドキュメント履歴](document_history.md)エントリを参照）。

ただし、NVLink 経由の GPU-to-GPU通信には追加の設定が必要です。特に、ParallelCluster が自動的に生成しない IMEX ドメイン内のコンピューティングノードの IP アドレスを含む[https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/config.html#imex-service-node-configuration-file-location](https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/config.html#imex-service-node-configuration-file-location)ファイルが必要です。このファイルを生成するために、コンピューティングノードIPs を自動的に検出し、[https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/config.html#imex-service-node-configuration-file-location](https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/config.html#imex-service-node-configuration-file-location)以下の [ NVIDIA IMEX Slurm ジョブスケジューラ統合](https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/deployment.html#job-scheduler-integration)の推奨事項を設定するプロログスクリプトが用意されています。このチュートリアルでは、プロログスクリプトを作成し、HeadNode カスタムアクションを使用してデプロイし、IMEX セットアップを検証する方法について説明します。

**注記**  
P6e-GB200 は、Amazon Linux AWS ParallelCluster 2023、Ubuntu 22.04、および Ubuntu 24.04 の v3.14.0 以降でサポートされています。サポートされているディストリビューションの詳細なソフトウェアバージョンと更新されたリストについては、[AWS ParallelCluster 変更ログ](https://github.com/aws/aws-parallelcluster/blob/develop/CHANGELOG.md)を参照してください。

## NVIDIA-Imex を管理する Prolog スクリプトを作成する
<a name="support-nvidia-imex-p6e-gb200-instance-prolog"></a>

**制限:**
+ このプロログスクリプトは、排他的ジョブの送信時に実行されます。これは、IMEX 再起動によって、IMEX ドメインに属する p6e-Gb200 ノードで実行中のジョブが中断されないようにするためです。

以下は、Slurm でプロログとして設定する必要がある`91_nvidia_imex_prolog.sh`スクリプトです。これは、コンピューティングノードの nvidia-imex 設定を自動的に更新するために使用されます。スクリプトの名前には、[SchedMD の命名規則](https://slurm.schedmd.com/prolog_epilog.html)に準拠`91`するためのプレフィックス があります。これにより、シーケンス内の他のプロログスクリプトより先に実行されます。このスクリプトは、ジョブの開始時に NVIDIA Imex ノードの設定を再設定し、必要な NVIDIA デーモンを再ロードします。

**注記**  
このスクリプトは、同じノードで複数のジョブが同時に開始された場合は実行されないため、送信時に `--exclusive`フラグを使用することをお勧めします。

```
#!/usr/bin/env bash

# This prolog script configures the NVIDIA IMEX on compute nodes involved in the job execution.
#
# In particular:
# - Checks whether the job is executed exclusively.
#   If not, it exits immediately because it requires jobs to be executed exclusively.
# - Checks if it is running on a p6e-gb200 instance type.
#   If not, it exits immediately because IMEX must be configured only on that instance type.
# - Checks if the IMEX service is enabled.
#   If not, it exits immediately because IMEX must be enabled to get configured.
# - Creates the IMEX default channel.
#   For more information about IMEX channels, see https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/imexchannels.html
# - Writes the private IP addresses of compute nodes into /etc/nvidia-imex/nodes_config.cfg.
# - Restarts the IMEX system service.
#
# REQUIREMENTS:
#  - This prolog assumes to be run only with exclusive jobs.

LOG_FILE_PATH="/var/log/parallelcluster/nvidia-imex-prolog.log"
SCONTROL_CMD="/opt/slurm/bin/scontrol"
IMEX_START_TIMEOUT=60
IMEX_STOP_TIMEOUT=15
ALLOWED_INSTANCE_TYPES="^(p6e-gb200)"
IMEX_SERVICE="nvidia-imex"
IMEX_NODES_CONFIG="/etc/nvidia-imex/nodes_config.cfg"

function info() {
  echo "$(date "+%Y-%m-%dT%H:%M:%S.%3N") [INFO] [PID:$$] [JOB:${SLURM_JOB_ID}] $1"
}

function warn() {
  echo "$(date "+%Y-%m-%dT%H:%M:%S.%3N") [WARN] [PID:$$] [JOB:${SLURM_JOB_ID}] $1"
}

function error() {
  echo "$(date "+%Y-%m-%dT%H:%M:%S.%3N") [ERROR] [PID:$$] [JOB:${SLURM_JOB_ID}] $1"
}

function error_exit() {
  error "$1" && exit 1
}

function prolog_end() {
    info "PROLOG End JobId=${SLURM_JOB_ID}: $0"
    info "----------------"
    exit 0
}

function get_instance_type() {
  local token=$(curl -X PUT -s "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
  curl -s -H "X-aws-ec2-metadata-token: ${token}" http://169.254.169.254/latest/meta-data/instance-type
}

function return_if_unsupported_instance_type() {
  local instance_type=$(get_instance_type)

  if [[ ! ${instance_type} =~ ${ALLOWED_INSTANCE_TYPES} ]]; then
    info "Skipping IMEX configuration because instance type ${instance_type} does not support it"
    prolog_end
  fi
}

function return_if_imex_disabled() {
  if ! systemctl is-enabled "${IMEX_SERVICE}" &>/dev/null; then
    warn "Skipping IMEX configuration because system service ${IMEX_SERVICE} is not enabled"
    prolog_end
  fi
}

function return_if_job_is_not_exclusive() {
  if [[ "${SLURM_JOB_OVERSUBSCRIBE}" =~ ^(NO|TOPO)$  ]]; then
    info "Job is exclusive, proceeding with IMEX configuration"
  else
    info "Skipping IMEX configuration because the job is not exclusive"
    prolog_end
  fi
}

function get_ips_from_node_names() {
  local _nodes=$1
  ${SCONTROL_CMD} -ao show node "${_nodes}" | sed 's/^.* NodeAddr=\([^ ]*\).*/\1/'
}

function get_compute_resource_name() {
  local _queue_name_prefix=$1
  local _slurmd_node_name=$2
  echo "${_slurmd_node_name}" | sed -E "s/${_queue_name_prefix}(.+)-[0-9]+$/\1/"
}

function reload_imex() {
  info "Stopping IMEX"
  timeout ${IMEX_STOP_TIMEOUT} systemctl stop ${IMEX_SERVICE}
  pkill -9 ${IMEX_SERVICE}

  info "Restarting IMEX"
  timeout ${IMEX_START_TIMEOUT} systemctl start ${IMEX_SERVICE}
}

function create_default_imex_channel() {
  info "Creating IMEX default channel"
  MAJOR_NUMBER=$(cat /proc/devices | grep nvidia-caps-imex-channels | cut -d' ' -f1)
  if [ ! -d "/dev/nvidia-caps-imex-channels" ]; then
    sudo mkdir /dev/nvidia-caps-imex-channels
  fi

  # Then check and create device node
  if [ ! -e "/dev/nvidia-caps-imex-channels/channel0" ]; then
    sudo mknod /dev/nvidia-caps-imex-channels/channel0 c $MAJOR_NUMBER 0
    info "IMEX default channel created"
  else
    info "IMEX default channel already exists"
  fi
}

{
  info "PROLOG Start JobId=${SLURM_JOB_ID}: $0"

  return_if_job_is_not_exclusive
  return_if_unsupported_instance_type
  return_if_imex_disabled

  create_default_imex_channel

  IPS_FROM_CR=$(get_ips_from_node_names "${SLURM_NODELIST}")

  info "Node Names: ${SLURM_NODELIST}"
  info "Node IPs: ${IPS_FROM_CR}"
  info "IMEX Nodes Config: ${IMEX_NODES_CONFIG}"

  info "Updating IMEX nodes config ${IMEX_NODES_CONFIG}"
  echo "${IPS_FROM_CR}" > "${IMEX_NODES_CONFIG}"
  reload_imex

  prolog_end

} 2>&1 | tee -a "${LOG_FILE_PATH}" | logger -t "91_nvidia_imex_prolog"
```

## HeadNode OnNodeStart カスタムアクションスクリプトを作成する
<a name="support-nvidia-imex-p6e-gb200-instance-action-script"></a>

コンピューティングノードによってアクセス`/opt/slurm/etc/scripts/prolog.d/`される共有ディレクトリに前述のプロログスクリプトをダウンロードし、実行する適切なアクセス許可を設定する`install_custom_action.sh`カスタムアクションを作成します。

```
#!/bin/bash
set -e

echo "Executing $0"

PROLOG_NVIDIA_IMEX=/opt/slurm/etc/scripts/prolog.d/91_nvidia_imex_prolog.sh
aws s3 cp "s3://<Bucket>/91_nvidia_imex_prolog.sh" "${PROLOG_NVIDIA_IMEX}"
chmod 0755 "${PROLOG_NVIDIA_IMEX}"
```

## クラスターを作成する
<a name="support-nvidia-imex-p6e-gb200-instance-cluster"></a>

P6e-GB200 インスタンスを含むクラスターを作成します。以下は、Ultraserver タイプ の SlurmQueues を含む設定例です`u-p6e-gb200x72`。

P6e-GB200 は現在、ローカルゾーンでのみ使用できます。一部の[ローカルゾーンは NAT ゲートウェイをサポートしていない](https://docs.aws.amazon.com/local-zones/latest/ug/local-zones-connectivity-nat.html)ため、ParallelCluster が AWS サービスに接続[制限された環境のセキュリティグループの設定](security-groups-configuration.md)する必要があるため[、ローカルゾーンの接続オプション](https://docs.aws.amazon.com/local-zones/latest/ug/local-zones-connectivity.html)に従ってください。Ultraserver はキャパシティブロックとしてのみ使用できるため、 [キャパシティブロック (CB) を使用してインスタンスを起動する](launch-instances-capacity-blocks.md) (AWS ParallelClusterLaunch) に従ってください。

```
HeadNode:
  CustomActions:
    OnNodeStart:
      Script: s3://<s3-bucket-name>/install_custom_action.sh
    S3Access:
      - BucketName: <s3-bucket-name>
  InstanceType: <HeadNode-instance-type>
  Networking:
    SubnetId: <subnet-abcd78901234567890>
  Ssh:
    KeyName: <Key-name>
Image:
  Os: ubuntu2404
Scheduling:
  Scheduler: slurm
  SlurmSettings:
    CustomSlurmSettings:
      - PrologFlags: "Alloc,NoHold"
      - MessageTimeout: 240
  SlurmQueues:
    - CapacityReservationTarget:
        CapacityReservationId: <cr-123456789012345678>
      CapacityType: CAPACITY_BLOCK
      ComputeResources: ### u-p6e-gb200x72
        - DisableSimultaneousMultithreading: true
          Efa:
            Enabled: true
          InstanceType: p6e-gb200.36xlarge  
          MaxCount: 18
          MinCount: 18
          Name: cr1
      Name: q1
      Networking:
        SubnetIds:
          - <subnet-1234567890123456>
```

## IMEX セットアップの検証
<a name="support-nvidia-imex-p6e-gb200-instance-validate"></a>

`91_nvidia_imex_prolog.sh` プロログは、Slurm ジョブを送信すると実行されます。NVIDIA-imex ドメインのステータスをチェックするジョブの例を以下に示します。

```
#!/bin/bash
#SBATCH --job-name=nvidia-imex-status-job
#SBATCH --ntasks-per-node=1
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err

QUEUE_NAME="q1"
COMPUTE_RES_NAME="cr1"
IMEX_CONFIG_FILE="/opt/parallelcluster/shared/nvidia-imex/config_${QUEUE_NAME}_${COMPUTE_RES_NAME}.cfg"

srun bash -c "/usr/bin/nvidia-imex-ctl -N -c ${IMEX_CONFIG_FILE} > result_\${SLURM_JOB_ID}_\$(hostname).out 2> result_\${SLURM_JOB_ID}_\$(hostname).err"
```

ジョブの出力を確認します。

```
Connectivity Table Legend:
I - Invalid - Node wasn't reachable, no connection status available
N - Never Connected
R - Recovering - Connection was lost, but clean up has not yet been triggered.
D - Disconnected - Connection was lost, and clean up has been triggreed.
A - Authenticating - If GSSAPI enabled, client has initiated mutual authentication.
!V! - Version mismatch, communication disabled.
!M! - Node map mismatch, communication disabled.
C - Connected - Ready for operation

5/12/2025 06:08:10.580
Nodes:
Node #0   - 172.31.48.81    - READY                - Version: 570.172
Node #1   - 172.31.48.98    - READY                - Version: 570.172
Node #2   - 172.31.48.221   - READY                - Version: 570.172
Node #3   - 172.31.49.228   - READY                - Version: 570.172
Node #4   - 172.31.50.39    - READY                - Version: 570.172
Node #5   - 172.31.50.44    - READY                - Version: 570.172
Node #6   - 172.31.51.66    - READY                - Version: 570.172
Node #7   - 172.31.51.157   - READY                - Version: 570.172
Node #8   - 172.31.52.239   - READY                - Version: 570.172
Node #9   - 172.31.53.80    - READY                - Version: 570.172
Node #10  - 172.31.54.95    - READY                - Version: 570.172
Node #11  - 172.31.54.183   - READY                - Version: 570.172
Node #12  - 172.31.54.203   - READY                - Version: 570.172
Node #13  - 172.31.54.241   - READY                - Version: 570.172
Node #14  - 172.31.55.59    - READY                - Version: 570.172
Node #15  - 172.31.55.187   - READY                - Version: 570.172
Node #16  - 172.31.55.197   - READY                - Version: 570.172
Node #17  - 172.31.56.47    - READY                - Version: 570.172

 Nodes From\To  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17
       0        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C 
       1        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C 
       2        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C
       3        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C  
       4        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C 
       5        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C 
       6        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C
       7        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C 
       8        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C 
       9        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   
      10        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   
      11        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   
      12        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   
      13        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   
      14        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C  
      15        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C  
      16        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C  
      17        C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C   C  

Domain State: UP
```