Support NVIDIA-IMEX dengan instans p6e-gb200 - AWS ParallelCluster

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

Support NVIDIA-IMEX dengan instans p6e-gb200

Tutorial ini menunjukkan cara memulai dengan AWS ParallelCluster P6e- GB2 00, untuk memanfaatkan kinerja GPU tertinggi untuk pelatihan dan inferensi AI. instans p6e-gb200.36xlarge hanya tersedia melalui P6e- GB2 00 UltraServers dimana adalah Ukuran Ultraserver dan merupakan yang membentuk ultraserver. u-p6e-gb200x72 p6e-gb200.36xlarge InstanceType Pada pembelian Ultraserver u-p6e-gb200x72 itu akan tersedia melalui Blok EC2 Kapasitas untuk MLyang akan memiliki 18 p6e-gb200.36xlarge instance. Untuk mempelajari lebih lanjut, lihat P6e- GB2 00.

AWS ParallelCluster versi 3.14.0:

  • menyediakan tumpukan perangkat lunak NVIDIA lengkap (driver, CUDA, EFA, NVIDIA-IMEX) yang diperlukan oleh jenis instance ini

  • membuat konfigurasi nvidia-imex untuk ultraserver P6e- 00 GB2

  • memungkinkan dan memulai nvidia-imex layanan untuk P6e- GB2 00 ultraserver

  • mengkonfigurasi plugin topologi Blok Slurm sehingga setiap P6e- GB2 00 Ultraserver (Blok EC2 Kapasitas) adalah Blok Slurm dengan ukuran yang tepat (lihat entri untuk versi 3.14.0). Catatan rilis dan riwayat dokumen

Namun, GPU-to-GPU komunikasi melalui NVLink memerlukan konfigurasi tambahan, khususnya nodes_config.cfgfile yang berisi alamat IP node komputasi dalam domain IMEX yang ParallelCluster tidak menghasilkan secara otomatis. Untuk membantu menghasilkan file ini, kami menyediakan skrip prolog yang secara otomatis menemukan node komputasi IPs dan mengonfigurasi rekomendasi Integrasi Job Scheduler NVIDIA IMEX Slurm nodes_config.cfgberikut. Tutorial ini memandu Anda melalui cara membuat skrip prolog, menyebarkannya melalui tindakan HeadNode khusus, dan memvalidasi pengaturan IMEX.

catatan

P6e- GB2 00 didukung mulai dengan AWS ParallelCluster v3.14.0 di Amazon Linux 2023, Ubuntu 22.04, dan Ubuntu 24.04. Untuk versi perangkat lunak yang mendetail dan daftar distribusi yang didukung yang diperbarui, lihat AWS ParallelCluster changelog.

Buat Skrip Prolog untuk mengelola NVIDIA-IMEX

Batasan:

  • Skrip prolog ini akan berjalan pada pengajuan pekerjaan eksklusif. Ini untuk memastikan bahwa mulai ulang IMEX tidak mengganggu pekerjaan yang berjalan pada node p6e-GB200 yang termasuk dalam domain IMEX.

Di bawah ini adalah 91_nvidia_imex_prolog.sh skrip yang harus Anda konfigurasikan sebagai prolog di Slurm. Ini digunakan untuk memperbarui konfigurasi nvidia-imex secara otomatis pada node komputasi. Nama skrip memiliki awalan 91 untuk mematuhi konvensi penamaan SchedMD. Ini memastikan ia mengeksekusi sebelum skrip prolog lainnya dalam urutan. Skrip mengkonfigurasi ulang konfigurasi node NVIDIA IMEX saat pekerjaan dimulai dan memuat ulang daemon NVIDIA yang diperlukan.

catatan

Skrip ini tidak akan dieksekusi jika beberapa pekerjaan dimulai secara bersamaan pada node yang sama, oleh karena itu kami sarankan untuk menggunakan --exclusive flag pada pengiriman.

#!/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"

Buat Skrip Tindakan HeadNode OnNodeStart Kustom

Buat tindakan install_custom_action.sh khusus yang akan mengunduh skrip prolog yang disebutkan di atas dalam direktori bersama /opt/slurm/etc/scripts/prolog.d/ yang diakses oleh Compute Nodes dan menetapkan izin yang tepat untuk dieksekusi.

#!/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}"

Buat cluster

Buat cluster termasuk instance P6e- GB2 00. Di bawah ini Anda dapat menemukan konfigurasi contoh yang berisi SlurmQueues untuk jenis Ultraserver. u-p6e-gb200x72

P6e- GB2 00 saat ini hanya tersedia di Local Zones. Beberapa Local Zones tidak mendukung NAT Gateway, jadi silakan ikuti opsi Konektivitas untuk Local Zones karena ParallelCluster perlu terhubung Mengkonfigurasi grup keamanan untuk lingkungan terbatas ke AWS Layanan. Silakan ikuti Luncurkan instans dengan Blok Kapasitas (CB) (AWS ParallelClusterLaunch) karena Ultraserver hanya tersedia sebagai Blok Kapasitas.

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>

Validasi Pengaturan IMEX

91_nvidia_imex_prolog.shProlog akan berjalan saat Anda mengirimkan pekerjaan Slurm. Di bawah ini adalah contoh pekerjaan untuk memeriksa status domain 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"

Periksa output dari Job:

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