기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
UltraServer 인스턴스 구성
NVIDIA UltraServer 인스턴스는 NVLink를 사용하여 인스턴스 간에 여러 GPUs를 연결합니다. NVLink를 통한 GPU-to-GPU 통신에서는 NVIDIA IMEX
사전 조건
-
Slurm 25.05 이상이 설치된 AWS PCS 클러스터.
-
용량 블록이 있는 UltraServer 인스턴스를 사용하는 컴퓨팅 노드 그룹입니다. 자세한 내용은 용량 블록을 사용하도록 AWS PCS 컴퓨팅 노드 그룹 구성 섹션을 참조하세요.
-
NVIDIA 드라이버, CUDA 및 IMEX 패키지가 설치된 AMI입니다. IMEX 서비스(
nvidia-imex)는 AMI에서 활성화되어야 합니다. -
클러스터의 Slurm
Prolog설정에 구성된 경로의 모든 컴퓨팅 노드에서 prolog 스크립트를 사용할 수 있어야 합니다. 공유 파일 시스템을 사용하거나 사용자 지정 AMI에 스크립트를 포함할 수 있습니다.
자동 토폴로지 선택
UltraServer 컴퓨팅 노드 그룹을 사용하여 AWS PCS 클러스터를 생성하면 시스템은 용량 블록을 검사하고, UltraServer 유형을 식별하고, 적절한 토폴로지 플러그인으로 Slurm을 구성합니다. 이 프로세스는 자동으로 실행되며 구성이 필요하지 않습니다.
AWS PCS는 동적으로 생성된 topology.yaml 파일을 통해 토폴로지를 관리합니다. 클러스터가 컴퓨팅 노드 그룹 추가 또는 제거를 통해 발전함에 따라 AWS PCS는 토폴로지 구성을 지속적으로 조정하여 현재 클러스터 상태를 반영합니다.
블록 토폴로지 모델은 모든 GPUs 참여하는 균일한 고대역폭 통신 도메인을 모델링합니다. NVLink topology/block 플러그인은 정의된 네트워크 토폴로지를 기반으로 노드를 할당하므로 작업이 동일한 UltraServer 내에 배치되고 GPU-to-GPU 통신은 EFA 네트워킹으로 돌아가는 대신 NVLink를 사용합니다.
토폴로지/블록 플러그인 사용
UltraServer 대기열에 제출된 작업은 Slurm 스케줄러에 의해 동일한 블록(UltraServer) 내에 자동으로 배치됩니다. 블록의 모든 노드는 다음 블록을 사용하기 전에 작업에 할당됩니다. IMEX에는 작업당 전용 IMEX 도메인이 필요하고 IMEX 서비스를 다시 시작하면 동일한 노드에서 실행 중인 다른 작업이 중단되므로 작업은 --exclusive 플래그를 사용해야 합니다. 토폴로지/블록 플러그인에 대한 자세한 내용은 Slurm 설명서의 토폴로지 가이드
작업을 제출할 때 sbatch 및 srun 명령과 함께 --segment=N 인수를 사용하여 동일한 블록 내에서 함께 그룹화할 노드 수를 지정할 수 있습니다. 세그먼트의 크기는 계획 블록 크기보다 작거나 같아야 합니다. --segment를 사용해도 세그먼트가 다른 블록에 배치된다는 보장은 없습니다.
다음은 18노드 UltraServers를 사용하여 대기열에 블록을 할당하기 위한 샘플 시나리오입니다(예: p6e-gb200.36xlarge 인스턴스가 18u-p6e-gb200x72개 있는 ).
# 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
UltraServer 토폴로지 모범 사례
AWS PCS에서 UltraServer 아키텍처를 사용하여 최적의 성능을 얻으려면:
-
가용성을 높이기 위해 세그먼트 사용: 전체 블록 크기보다 작은 값의
--segment옵션을 사용하여 일부 드레이닝되거나 사용할 수 없는 노드가 있는 블록에서 작업을 예약할 수 있습니다. 이렇게 하면 절대 NVLink 로캘이 거래되어 작업 예약 시간이 단축됩니다. 자세한 내용은 토폴로지/차단 플러그인을 사용하여 노드 예약에 대한 추가 제어 확보를참조하세요. -
작업 크기 및 블록 크기 고려:
BlockSizes=18인 경우 인스턴스가 최대 18개인 작업은 항상 단일 UltraServer에서 실행됩니다. 18개 이상의 노드를 요청하는 작업은 각 블록 내의 NVLink 연결과 블록 간 EFA 네트워킹을 통해 여러 UltraServers에 걸쳐 있습니다. -
세그먼트 절충:를 사용하면 고차 블록 크기 예약이
--segment비활성화됩니다. 이 없으면 다음 블록--segment을 사용하기 전에 전체 블록이 채워집니다. 를 사용하면 사용 가능한 노드가 충분한 모든 블록에--segment세그먼트를 배치할 수 있습니다.
제한 사항
-
AWS PCS를 사용하려면 UltraServer 컴퓨팅 노드 그룹을 UltraServer가 아닌 컴퓨팅 노드 그룹과 별도로 전용 대기열에 배치해야 합니다.
-
각 컴퓨팅 노드 그룹은 하나의 UltraServer 용량 블록에만 연결할 수 있습니다.
-
대기열에 여러 UltraServer 컴퓨팅 노드 그룹이 포함된 경우 각 컴퓨팅 노드 그룹의 인스턴스 수는 이들 간에 2의 파워 비율을 가져야 합니다(예: 9와 18 또는 2와 8).
-
UltraServer 대기열의 작업은 작업당 전용 IMEX 도메인을 보장하기 위해
--exclusive플래그를 사용해야 합니다. -
prolog 스크립트에 의해 생성된 IMEX 도메인에는 작업에 할당된 노드만 포함됩니다. AWS PCS는 노드를 작업에 동적으로 할당하므로 IMEX 도메인을 미리 생성할 수 없으며 작업 시작 시 구성해야 합니다. IMEX 도메인은 IP 주소를 기반으로 하므로 여러 UltraServers에 걸쳐 있는 작업은 서로 다른 UltraServers의 노드 간에 NVLink 연결이 되지 않으며 별도의 NVLink 구성 요소를 연결할 수 없습니다.
-
서비스가 실행되는 동안에는 IMEX를 수정할 수
nodes_config.cfg없습니다. 구성이 변경되면 IMEX는 일치하지 않는 노드와의 통신을 영구적으로 차단합니다. 유일한 복구 방법은 모든 노드에서 IMEX를 중지하고 일관된 구성으로 다시 시작하는 것입니다.
IMEX prolog 스크립트 생성
다음 91_nvidia_imex_prolog.sh 스크립트는 Slurm 작업이 시작될 때 컴퓨팅 노드에서 NVIDIA IMEX를 구성합니다. 스크립트 이름은 로그 실행 순서 지정을 위해 SchedMD의 명명 규칙에91 접두사를 사용합니다.
이 스크립트는 다음 작업을 수행합니다.
-
작업이 배타적인지 확인합니다. IMEX 구성에는 동일한 노드에서 실행 중인 다른 작업이 중단되는 것을 방지하기 위한 전용 작업이 필요합니다.
-
인스턴스 유형이 지원되는 UltraServer 유형(
p6e-gb200또는 )인지 확인합니다p6e-gb300. -
IMEX 서비스가 활성화되어 있는지 확인합니다.
-
IMEX 기본 채널 디바이스가 없는 경우 생성합니다.
-
모든 작업 노드의 프라이빗 IP 주소를에 씁니다
/etc/nvidia-imex/nodes_config.cfg. -
IMEX 서비스를 다시 시작합니다.
중요
이 prolog 스크립트를 사용하려면 --exclusive 작업을 플래그와 함께 제출해야 합니다. 다른 작업이 동일한 노드에서 실행되는 동안 IMEX를 다시 시작하면 해당 작업이 중단됩니다.
참고
이 prolog 스크립트는 p6e-gb200 및 p6e-gb300 인스턴스 유형을 지원합니다. 다른 인스턴스 유형에 맞게 조정하려면 스크립트의 ALLOWED_INSTANCE_TYPES 패턴을 업데이트합니다.
다음 스크립트를 로 저장합니다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"
prolog 스크립트 배포
prolog 스크립트를 배포하려면 클러스터에서 Slurm Prolog 및 PrologFlags 사용자 지정 설정을 구성합니다. 클러스터를 생성하거나 기존 클러스터를 업데이트할 때 이를 설정할 수 있습니다.
사용자 지정 Slurm 설정 구성에 대한 자세한 내용은 섹션을 참조하세요AWS PCS 클러스터에 대한 사용자 지정 Slurm 설정. 클러스터를 업데이트하는 절차는 섹션을 참조하세요AWS PCS 클러스터 업데이트.
클러스터에서 다음과 같은 사용자 지정 Slurm 설정을 지정합니다.
-
Prolog-와 같이 컴퓨팅 노드에서 prolog 스크립트를 사용할 수 있는 경로로 설정합니다/shared/scripts/prolog.d/91_nvidia_imex_prolog.sh. -
PrologFlags-를 로 설정합니다Alloc,NoHold.Alloc플래그는 작업에 처음 할당될 때 각 노드에서 prolog를 실행합니다.NoHold플래그는 prolog가 실패할 경우 작업이 보류되지 않도록 합니다.
예 AWS CLI를 사용하여 prolog 설정으로 클러스터 업데이트
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"} ] }'
IMEX 설정 검증
Slurm 작업을 제출하면 prolog 스크립트가 자동으로 실행됩니다. 테스트 작업을 제출하여 IMEX가 모든 노드에서 올바르게 구성되었는지 확인합니다.
라는 작업 스크립트를 생성합니다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"
UltraServer 대기열에 작업을 제출합니다.
sbatch -pqueue-name-Nnode-countcheck-imex.sh
출력 파일을 확인합니다. IMEX 구성이 성공하면 연결 테이블 및에 C (연결됨) READY 상태인 모든 노드가 표시됩니다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
문제 해결
- 노드 구성 매핑 불일치
-
연결 테이블 또는 IMEX 로그
!M!에가 표시되면nodes_config.cfg파일이 모든 노드Node configuration mapping mismatch에서 일관되지 않은 것입니다. IMEX는 일치하지 않는 노드와의 통신을 영구적으로 차단합니다. prolog 스크립트가 모든 노드에서 실행되었는지 확인하고 작업을 다시 시작합니다. - IMEX 채널 디바이스를 찾을 수 없음
-
prolog 스크립트가 IMEX 채널 디바이스를 생성하지 못하는 경우 NVIDIA 드라이버가 설치되어 있고가
/proc/devices포함되어 있는지 확인합니다nvidia-caps-imex-channels. - Prolog 스크립트가 실행되지 않음
-
클러스터에
Prolog및PrologFlags설정이 구성되어 있는지 확인합니다. 스크립트 파일이 컴퓨팅 노드에 존재하고 실행 권한()이 있는지 확인합니다chmod 0755.