

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Konfigurasikan UltraServer instance
<a name="capacity-blocks-nvidia-imex"></a>

 UltraServer Instans NVIDIA menghubungkan beberapa GPU di seluruh instans menggunakan NVLink. GPU-to-GPU komunikasi melalui NVLink memerlukan [ layanan ](https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/index.html) NVIDIA IMEX untuk dikonfigurasi dengan alamat IP dari semua node komputasi dalam pekerjaan. Halaman ini menunjukkan cara membuat skrip prolog Slurm yang secara otomatis mengkonfigurasi IMEX untuk setiap pekerjaan, dan cara menyebarkannya di cluster PCS Anda. AWS 

## Prasyarat
<a name="capacity-blocks-nvidia-imex-prerequisites"></a>
+ Cluster AWS PCS dengan Slurm 25.05 atau yang lebih baru.
+ Grup node komputasi menggunakan UltraServer instance dengan Blok Kapasitas. Untuk informasi selengkapnya, lihat [Konfigurasikan grup node komputasi AWS PCS untuk menggunakan Blok Kapasitas](capacity-blocks-configure-cng.md).
+ AMI dengan driver NVIDIA, CUDA, dan paket IMEX diinstal. Layanan IMEX (`nvidia-imex`) harus diaktifkan pada AMI.
+ Skrip prolog harus tersedia di semua node komputasi di jalur yang dikonfigurasi dalam pengaturan S `Prolog` lurm cluster. Anda dapat menggunakan sistem file bersama atau menyertakan skrip dalam AMI kustom Anda.

## Pemilihan topologi otomatis
<a name="capacity-blocks-nvidia-imex-topology"></a>

Saat Anda membuat cluster AWS PCS dengan grup simpul UltraServer komputasi, sistem memeriksa Blok Kapasitas, mengidentifikasi jen UltraServer isnya, dan mengonfigurasi Slurm dengan plugin topologi yang sesuai. Proses ini berjalan secara otomatis dan tidak memerlukan konfigurasi apa pun.

AWS PCS mengelola topologi melalui `topology.yaml` file yang dihasilkan secara dinamis. Saat cluster berkembang melalui penambahan atau penghapusan grup simpul komputasi, AWS PCS terus mendamaikan konfigurasi topologi untuk mencerminkan status cluster saat ini.

Model topologi blok seragam, domain komunikasi bandwidth tinggi di mana semua GPU berpartisipasi dalam domain NVLink berkecepatan tinggi tunggal dengan latensi hampir seragam. `topology/block`Plugin mengalokasikan node berdasarkan topologi jaringan yang ditentukan, memastikan bahwa pekerjaan ditempatkan dalam yang sama UltraServer dan GPU-to-GPU komunikasi menggunakan NVLink alih-alih kembali ke jaringan EFA.

## Menggunakan topology/block plugin
<a name="capacity-blocks-nvidia-imex-job-submission"></a>

Pekerjaan yang dikirimkan UltraServer ke antrian secara otomatis ditempatkan dalam blok (UltraServer) yang sama oleh penjadwal Slurm. Semua node dalam blok dialokasikan ke pekerjaan sebelum blok berikutnya digunakan. Pekerjaan harus menggunakan `--exclusive` flag karena IMEX memerlukan domain IMEX khusus per pekerjaan, dan memulai ulang layanan IMEX akan mengganggu pekerjaan lain yang berjalan di node yang sama. Untuk informasi selengkapnya tentang topology/block plugin, lihat panduan Topologi [ dan referensi ](https://slurm.schedmd.com/topology.html) [https://slurm.schedmd.com/topology.yaml.html](https://slurm.schedmd.com/topology.yaml.html) topology.yaml dalam dokumentasi Slurm.

Saat mengirimkan pekerjaan, Anda dapat menggunakan `--segment=N` argumen dengan `srun` perintah `sbatch` dan untuk menentukan jumlah node untuk dikelompokkan bersama dalam blok yang sama. Ukuran segmen harus kurang dari atau sama dengan ukuran blok perencanaan. Penggunaan `--segment` tidak menjamin bahwa segmen akan ditempatkan pada blok yang berbeda.

Berikut ini adalah contoh skenario untuk mengalokasikan blok pada antrian dengan 18-node UltraServers (misalnya, `u-p6e-gb200x72` yang memiliki 18 `p6e-gb200.36xlarge` instance):

```
# Allocate a whole block (single UltraServer)
sbatch -N18 --exclusive --partition=ultra job.sh

# Allocate two full blocks (two UltraServers)
sbatch -N36 --exclusive --partition=ultra job.sh

# Allocate 24 nodes: full block is filled before 2nd block is used
sbatch -N24 --exclusive --partition=ultra job.sh

# Allocate 24 nodes as segments of 12, segments can fit on blocks with available space
sbatch -N24 --segment=12 --exclusive --partition=ultra job.sh
```

## Praktik terbaik untuk UltraServer topologi
<a name="capacity-blocks-nvidia-imex-best-practices"></a>

Untuk kinerja optimal dengan UltraServer arsitektur di AWS PCS:
+ **Gunakan segmen untuk ketersediaan yang lebih baik**: Gunakan `--segment` opsi dengan nilai yang lebih kecil dari ukuran blok penuh untuk memungkinkan pekerjaan dijadwalkan pada blok yang memiliki beberapa node yang terkuras atau tidak tersedia. Ini memperdagangkan lokalitas NVLink absolut untuk waktu penjadwalan pekerjaan yang lebih cepat. Untuk informasi selengkapnya, lihat M [ endapatkan kontrol lebih lanjut atas penjadwalan node dengan Topology/Block Plugin](https://slurm.schedmd.com/SLUG24/NVIDIA-Craig_Tierney.pdf).
+ **Pertimbangkan ukuran pekerjaan dan ukuran blok**: Jika`BlockSizes=18`, pekerjaan dengan hingga 18 instans selalu berjalan pada satu instans UltraServer. Pekerjaan yang meminta lebih dari 18 node mencakup beberapa UltraServers, dengan konektivitas NVLink dalam setiap blok dan jaringan EFA antar blok.
+ **Pengorbanan segmen**: Menggunakan `--segment` menonaktifkan penjadwalan ukuran blok tingkat tinggi. Tanpa`--segment`, blok penuh diisi sebelum blok berikutnya digunakan. Dengan`--segment`, segmen dapat ditempatkan pada blok apa pun dengan node yang cukup tersedia.

## Batasan
<a name="capacity-blocks-nvidia-imex-limitations"></a>
+ AWS PCS mensyaratkan bahwa UltraServer grup simpul komputasi ditempatkan dalam antrian khusus, terpisah dari grup simpul non- UltraServer komputasi.
+ Setiap grup simpul komputasi dapat dikaitkan dengan hanya satu Blok UltraServer Kapasitas.
+ Ketika antrian berisi beberapa grup simp UltraServer ul komputasi, jumlah instance dari setiap grup simpul komputasi harus memiliki rasio kekuatan-2 di antara mereka (misalnya, 9 dan 18, atau 2 dan 8).
+ Pekerjaan di UltraServer antrian harus menggunakan `--exclusive` flag untuk memastikan domain IMEX khusus per pekerjaan.
+ Domain IMEX yang dibuat oleh skrip prolog hanya mencakup node yang dialokasikan untuk pekerjaan. Karena AWS PCS mengalokasikan node ke pekerjaan secara dinamis, domain IMEX tidak dapat dibuat sebelumnya dan harus dikonfigurasi pada waktu mulai pekerjaan. Pekerjaan yang mencakup beberapa tidak UltraServers akan memiliki konektivitas NVLink antar node yang berbeda UltraServers karena domain IMEX didasarkan pada alamat IP dan tidak dapat menjembatani struktur NVLink terpisah.
+ IMEX `nodes_config.cfg` tidak dapat dimodifikasi saat layanan sedang berjalan. Jika konfigurasi diubah, IMEX secara permanen memblokir komunikasi ke node yang tidak cocok. Satu-satunya pemulihan adalah menghentikan IMEX pada semua node dan memulai ulang dengan konfigurasi yang konsisten.

## Buat skrip prolog IMEX
<a name="capacity-blocks-nvidia-imex-prolog"></a>

`91_nvidia_imex_prolog.sh`Skrip berikut mengonfigurasi NVIDIA IMEX pada node komputasi saat pekerjaan Slurm dimulai. Nama skrip menggunakan `91` awalan mengikuti konvensi penamaan [ SchedMD ](https://slurm.schedmd.com/prolog_epilog.html) untuk urutan eksekusi prolog.

Skrip tersebut melakukan tindakan-tindakan berikut:

1. Periksa apakah pekerjaan itu eksklusif. Konfigurasi IMEX memerlukan pekerjaan eksklusif untuk mencegah gangguan pekerjaan lain yang sedang berjalan pada node yang sama.

1. Memeriksa apakah jenis instance adalah UltraServer tipe yang didukung (`p6e-gb200`atau`p6e-gb300`).

1. Memeriksa apakah layanan IMEX diaktifkan.

1. Membuat perangkat saluran default IMEX jika tidak ada.

1. Menulis alamat IP pribadi dari semua node pekerjaan ke dalam`/etc/nvidia-imex/nodes_config.cfg`.

1. Mulai ulang layanan IMEX.

**penting**  
Skrip prolog ini mengharuskan pekerjaan dikirimkan dengan `--exclusive` bendera. Memulai ulang IMEX saat pekerjaan lain berjalan di node yang sama akan mengganggu pekerjaan tersebut.

**catatan**  
Skrip prolog ini mendukung `p6e-gb200` dan jenis `p6e-gb300` instance. Untuk menyesuaikannya dengan jenis instance lain, perbarui `ALLOWED_INSTANCE_TYPES` pola dalam skrip.

Simpan skrip berikut sebagai`91_nvidia_imex_prolog.sh`:

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

# This prolog script configures 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 supported UltraServer instance type.
#   If not, it exits immediately because IMEX must be configured only on those instance types.
# - 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/nvidia-imex-prolog.log"
SCONTROL_CMD="scontrol"
IMEX_START_TIMEOUT=60
IMEX_STOP_TIMEOUT=15
ALLOWED_INSTANCE_TYPES="^(p6e-gb200|p6e-gb300)"
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 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 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"
```

## Terapkan skrip prolog
<a name="capacity-blocks-nvidia-imex-deploy"></a>

Untuk menerapkan skrip prolog, konfigurasikan pengaturan Slurm `Prolog` dan `PrologFlags` kustom pada cluster Anda. Anda dapat mengatur ini ketika Anda membuat cluster atau memperbarui cluster yang ada.

Untuk informasi selengkapnya tentang mengkonfigurasi pengaturan Slurm kustom, lihat. [Pengaturan Slurm khusus untuk AWS Cluster PCS](slurm-custom-settings-cluster.md) Untuk prosedur memperbarui cluster, lihat[Perbarui sebuah AWS Cluster PCS](working-with_clusters_update_procedure.md).

Tetapkan pengaturan Slurm kustom berikut pada cluster:
+ `Prolog`- Atur ke jalur di mana skrip prolog tersedia pada node komputasi, misalnya. `/shared/scripts/prolog.d/91_nvidia_imex_prolog.sh`
+ `PrologFlags`- Setel ke`Alloc,NoHold`. `Alloc`Bendera menjalankan prolog pada setiap node saat pertama kali dialokasikan ke pekerjaan. `NoHold`Bendera mencegah pekerjaan ditahan jika prolog gagal.

**Example Perbarui cluster dengan pengaturan prolog menggunakan AWS CLI**  

```
aws pcs update-cluster \
  --cluster-identifier <cluster-id> \
  --slurm-configuration '{
    "slurmCustomSettings": [
      {"parameterName": "Prolog", "parameterValue": "/shared/scripts/prolog.d/91_nvidia_imex_prolog.sh"},
      {"parameterName": "PrologFlags", "parameterValue": "Alloc,NoHold"}
    ]
  }'
```

## Validasi pengaturan IMEX
<a name="capacity-blocks-nvidia-imex-validate"></a>

Skrip prolog berjalan secara otomatis saat Anda mengirimkan pekerjaan Slurm. Kirim tugas pengujian untuk memverifikasi bahwa IMEX dikonfigurasi dengan benar di semua node.

Buat skrip pekerjaan bernama`check-imex.sh`:

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

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

Kirim pekerjaan ke UltraServer antrian Anda:

```
sbatch -p {{queue-name}} -N {{node-count}} check-imex.sh
```

Periksa file output. Konfigurasi IMEX yang berhasil menunjukkan semua node dalam `READY` keadaan dengan `C` (Terhubung) di tabel konektivitas dan: `Domain State: UP`

```
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/4/2026 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
```

## Pemecahan masalah
<a name="capacity-blocks-nvidia-imex-troubleshooting"></a>

Ketidakcocokan pemetaan konfigurasi simpul  
Jika Anda melihat `!M!` di tabel konektivitas atau `Node configuration mapping mismatch` di log IMEX, `nodes_config.cfg` file tidak konsisten di semua node. IMEX secara permanen memblokir komunikasi ke node yang tidak cocok. Verifikasi bahwa skrip prolog berjalan di semua node dan mulai ulang pekerjaan.

Perangkat saluran IMEX tidak ditemukan  
Jika skrip prolog gagal membuat perangkat saluran IMEX, verifikasi bahwa driver NVIDIA diinstal dan berisi. `/proc/devices` `nvidia-caps-imex-channels`

Skrip prolog tidak berjalan  
Verifikasi bahwa `PrologFlags` pengaturan `Prolog` dan dikonfigurasi pada cluster. Periksa apakah file skrip ada di node komputasi dan memiliki izin eksekusi (`chmod 0755`).