p6e-gb200 인스턴스에서 NVIDIA-Imex 지원 - AWS ParallelCluster

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

p6e-gb200 인스턴스에서 NVIDIA-Imex 지원

이 자습서에서는 P6e-GB200 AWS ParallelCluster 에서를 시작하여 AI 훈련 및 추론에 가장 높은 GPU 성능을 활용하는 방법을 보여줍니다. p6e-gb200.36xlarge 인스턴스는 P6e-GB200 UltraServers를 통해서만 사용할 수 있으며, 여기서 u-p6e-gb200x72는 Ultraserver 크기이고는 Ultraserver를 구성하는 InstanceTypep6e-gb200.36xlarge입니다. Ultraserver를 구매하면 p6e-gb200.36xlarge 인스턴스가 18u-p6e-gb200x72개인 ML용 EC2 용량 블록을 통해 사용할 수 있습니다. 자세한 내용은 P6e-GB200을 참조하세요.

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 블록 토폴로지 플러그인을 구성합니다(버전 3.14.0의 릴리스 정보 및 문서 기록 항목 참조).

그러나 NVLink를 통한 GPU-to-GPU 통신에는 추가 구성, 특히 ParallelCluster가 자동으로 생성하지 않는 IMEX 도메인에 있는 컴퓨팅 노드의 IP 주소가 포함된 nodes_config.cfg 파일이 필요합니다. 이 파일을 생성하는 데 도움이 되도록 컴퓨팅 노드 IPs를 자동으로 검색하고 nodes_config.cfg 다음과 같은 NVIDIA IMEX Slurm 작업 스케줄러 통합 권장 사항을 구성하는 prolog 스크립트를 제공합니다. 이 자습서에서는 로그 스크립트를 생성하고, HeadNode 사용자 지정 작업을 통해 배포하고, IMEX 설정을 검증하는 방법을 안내합니다.

참고

P6e-GB200은 Amazon Linux 2023, Ubuntu 22.04 및 Ubuntu 24.04에서 AWS ParallelCluster v3.14.0부터 지원됩니다. 자세한 소프트웨어 버전과 지원되는 배포의 업데이트된 목록은 AWS ParallelCluster 변경 로그를 참조하세요.

NVIDIA-Imex를 관리하기 위한 Prolog 스크립트 생성

제한:

  • 이 prolog 스크립트는 독점 작업 제출 시 실행됩니다. 이는 IMEX 재시작이 IMEX 도메인에 속하는 p6e-Gb200 노드에서 실행 중인 작업을 중단하지 않도록 하기 위한 것입니다.

다음은 Slurm에서 prolog로 구성해야 하는 91_nvidia_imex_prolog.sh 스크립트입니다. 컴퓨팅 노드에서 nvidia-imex 구성을 자동으로 업데이트하는 데 사용됩니다. 스크립트의 이름에는 SchedMD의 이름 지정 규칙을 준수하기 91 위한 접두사가 있습니다. SchedMD 이렇게 하면 시퀀스의 다른 prolog 스크립트보다 먼저 실행됩니다. 스크립트는 작업이 시작될 때 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 사용자 지정 작업 스크립트 생성

컴퓨팅 노드에서 /opt/slurm/etc/scripts/prolog.d/ 액세스하는 공유 디렉터리에 앞서 언급한 prolog 스크립트를 다운로드하고 실행할 적절한 권한을 설정하는 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}"

클러스터 생성

P6e-GB200 인스턴스를 포함하는 클러스터를 생성합니다. 아래에서 Ultraserver 유형 용 SlurmQueues가 포함된 구성 예제를 찾을 수 있습니다u-p6e-gb200x72.

P6e-GB200은 현재 로컬 영역에서만 사용할 수 있습니다. 일부 로컬 영역은 NAT 게이트웨이를 지원하지 않으므로 ParallelCluster가 AWS 서비스에 제한된 환경에 대한 보안 그룹 구성 연결해야 하므로 로컬 영역에 대한 연결 옵션을 따르세요. Ultraserver는 용량 블록으로만 사용할 수 있으므로 용량 블록(CB)을 사용하여 인스턴스 시작 (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 설정 검증

Slurm 작업을 제출하면 91_nvidia_imex_prolog.sh prolog가 실행됩니다. 다음은 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