Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configurazione delle UltraServer istanze
UltraServer Le istanze NVIDIA collegano più GPU tra istanze utilizzando NVLink. GPU-to-GPU la comunicazione tramite NVLink richiede che il servizio
Prerequisiti
-
Un cluster AWS PCS con Slurm 25.05 o successivo.
-
Un gruppo di nodi di calcolo che utilizza UltraServer istanze con un Capacity Block. Per ulteriori informazioni, consulta Configurare un gruppo di nodi di calcolo AWS PCS per utilizzare un Capacity Block.
-
Un'AMI con driver NVIDIA, CUDA e pacchetti IMEX installati. Il servizio IMEX (
nvidia-imex) deve essere abilitato sull'AMI. -
Lo script prolog deve essere disponibile su tutti i nodi di calcolo nel percorso configurato nell'impostazione Slurm del cluster.
PrologPuoi utilizzare un file system condiviso o includere lo script nella tua AMI personalizzata.
Selezione automatica della topologia
Quando si crea un cluster AWS PCS con gruppi di nodi di UltraServer calcolo, il sistema ispeziona il Capacity Block, identifica il UltraServer tipo e configura Slurm con il plug-in di topologia appropriato. Questo processo viene eseguito automaticamente e non richiede alcuna configurazione.
AWS PCS gestisce la topologia tramite un file generato topology.yaml dinamicamente. Man mano che il cluster si evolve tramite l'aggiunta o la rimozione di gruppi di nodi di calcolo, AWS PCS riconcilia continuamente la configurazione della topologia per riflettere lo stato corrente del cluster.
La topologia a blocchi modella domini di comunicazione uniformi e ad alta larghezza di banda in cui tutte le GPU partecipano a un unico dominio NVLink ad alta velocità con latenza quasi uniforme. Il topology/block plug-in alloca i nodi in base alla topologia di rete definita, assicurando che i processi siano collocati all'interno della stessa UltraServer e che la comunicazione utilizzi NVLink invece di ricorrere alla rete EFA. GPU-to-GPU
Utilizzo del plugin topology/block
I lavori inviati alle UltraServer code vengono automaticamente inseriti nello stesso blocco (UltraServer) dallo scheduler Slurm. Tutti i nodi di un blocco vengono assegnati a un lavoro prima che venga utilizzato il blocco successivo. I processi devono utilizzare il --exclusive flag perché IMEX richiede un dominio IMEX dedicato per processo e il riavvio del servizio IMEX interromperebbe qualsiasi altro lavoro in esecuzione sugli stessi nodi. Per ulteriori informazioni sul topology/block plugin, consultate la guida alla topologia
Quando invii lavori, puoi usare l'--segment=Nargomento with sbatch and srun commands per specificare il numero di nodi da raggruppare all'interno dello stesso blocco. La dimensione del segmento deve essere minore o uguale alla dimensione del blocco di pianificazione. L'utilizzo --segment non garantisce che i segmenti vengano posizionati su blocchi diversi.
Di seguito sono riportati alcuni esempi di scenari per l'allocazione di blocchi su una coda con 18 nodi UltraServers (ad esempio, una u-p6e-gb200x72 con 18 istanze): p6e-gb200.36xlarge
# 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 Procedure consigliate per la topologia
Per prestazioni ottimali con UltraServer l'architettura in AWS PCS:
-
Usa i segmenti per una migliore disponibilità: utilizza l'
--segmentopzione con un valore inferiore alla dimensione completa del blocco per consentire la pianificazione dei lavori su blocchi con alcuni nodi esauriti o non disponibili. Questo sostituisce la località NVLink assoluta con tempi di pianificazione dei lavori più rapidi. Per ulteriori informazioni, vedere Acquisire un maggiore controllo sulla pianificazione dei nodi con il plugin. Topology/Block -
Considerate la dimensione del job e la dimensione del blocco: If
BlockSizes=18, i job con un massimo di 18 istanze vengono sempre eseguiti su una singola istanza. UltraServer I job che richiedono più di 18 nodi si estendono su più nodi UltraServers, con connettività NVLink all'interno di ogni blocco e rete EFA tra i blocchi. -
Compromessi tra i segmenti: l'utilizzo disabilita la pianificazione delle dimensioni dei blocchi di ordine superiore.
--segment--segmentIn caso contrario, viene riempito un blocco completo prima di utilizzare il blocco successivo. Con--segment, i segmenti possono essere posizionati su qualsiasi blocco con un numero sufficiente di nodi disponibili.
Limitazioni
-
AWS Il PCS richiede che i gruppi di nodi di UltraServer calcolo siano collocati in code dedicate, separate dai gruppi di nodi non di elaborazione. UltraServer
-
Ogni gruppo di nodi di calcolo può essere associato a un solo Capacity Block. UltraServer
-
Quando una coda contiene più gruppi di nodi di UltraServer calcolo, il numero di istanze di ciascun gruppo di nodi di calcolo deve avere un rapporto di potenza pari a 2 (ad esempio, 9 e 18 o 2 e 8).
-
I lavori in UltraServer coda devono utilizzare il flag per garantire un dominio IMEX dedicato per processo
--exclusive. -
Il dominio IMEX creato dallo script prolog include solo i nodi allocati al job. Poiché AWS PCS alloca dinamicamente i nodi ai job, il dominio IMEX non può essere precreato e deve essere configurato all'inizio del job. I processi che si estendono su più nodi non UltraServers avranno la connettività NVLink tra nodi diversi UltraServers perché il dominio IMEX è basato su indirizzi IP e non può collegarsi tra strutture NVLink separate.
-
L'IMEX
nodes_config.cfgnon può essere modificato mentre il servizio è in esecuzione. Se la configurazione viene modificata, IMEX blocca permanentemente la comunicazione con i nodi non corrispondenti. L'unica soluzione è fermare IMEX su tutti i nodi e riavviarlo con una configurazione coerente.
Crea lo script di prolog IMEX
Il seguente 91_nvidia_imex_prolog.sh script configura NVIDIA IMEX sui nodi di calcolo all'avvio di un job Slurm. Il nome dello script utilizza un 91 prefisso che segue la convenzione di denominazione di SchedMD per l'ordine di esecuzione dei prolog.
Lo script esegue le operazioni seguenti:
-
Verifica se il lavoro è esclusivo. La configurazione IMEX richiede processi esclusivi per evitare l'interruzione di altri lavori in esecuzione sugli stessi nodi.
-
Verifica se il tipo di istanza è supportato UltraServer (
p6e-gb200op6e-gb300). -
Verifica se il servizio IMEX è abilitato.
-
Crea il dispositivo con canale predefinito IMEX se non esiste.
-
Scrive gli indirizzi IP privati di tutti i nodi di lavoro in
/etc/nvidia-imex/nodes_config.cfg. -
Riavvia il servizio IMEX.
Importante
Questo script di prolog richiede che i lavori vengano inviati con il flag. --exclusive Il riavvio di IMEX mentre altri processi sono in esecuzione sugli stessi nodi interromperà tali processi.
Nota
Questo script prolog supporta qualsiasi tipo di istanza. p6e-gb200 p6e-gb300 Per adattarlo ad altri tipi di istanza, aggiorna il ALLOWED_INSTANCE_TYPES pattern nello script.
Salvate il seguente script con nome91_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"
Distribuisci lo script prolog
Per distribuire lo script prolog, configura Slurm Prolog e PrologFlags le impostazioni personalizzate sul tuo cluster. È possibile impostarle quando si crea un cluster o si aggiorna un cluster esistente.
Per ulteriori informazioni sulla configurazione delle impostazioni personalizzate di Slurm, consulta. Impostazioni Slurm personalizzate per AWS Cluster PCS Per la procedura di aggiornamento di un cluster, consulta. Aggiorna un AWS Cluster PCS
Imposta le seguenti impostazioni personalizzate di Slurm sul cluster:
-
Prolog- Impostato sul percorso in cui lo script prolog è disponibile sui nodi di calcolo, ad esempio./shared/scripts/prolog.d/91_nvidia_imex_prolog.sh -
PrologFlags- Impostato su.Alloc,NoHoldIlAllocflag esegue il prolog su ogni nodo quando viene assegnato per la prima volta a un job. IlNoHoldflag impedisce che il job venga sospeso se il prolog fallisce.
Esempio Aggiorna il cluster con le impostazioni del prolog utilizzando 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"} ] }'
Convalida la configurazione IMEX
Lo script prolog viene eseguito automaticamente quando invii un job Slurm. Invia un processo di test per verificare che IMEX sia configurato correttamente su tutti i nodi.
Crea uno script di lavoro denominatocheck-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"
Invia il lavoro alla tua UltraServer coda:
sbatch -pqueue-name-Nnode-countcheck-imex.sh
Controlla i file di output. Una configurazione IMEX corretta mostra tutti i nodi nello READY stato C (Connesso) nella tabella di connettività eDomain 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
Risoluzione dei problemi
- Mancata corrispondenza nella mappatura della configurazione dei nodi
-
Se vedi
!M!nella tabella di connettività oNode configuration mapping mismatchnei log IMEX, ilnodes_config.cfgfile non è coerente in tutti i nodi. IMEX blocca permanentemente la comunicazione con nodi non corrispondenti. Verifica che lo script prolog sia stato eseguito su tutti i nodi e riavvia il processo. - Dispositivo con canale IMEX non trovato
-
Se lo script prolog non riesce a creare il dispositivo con canale IMEX, verifica che il driver NVIDIA sia installato e che contenga.
/proc/devicesnvidia-caps-imex-channels - Lo script Prolog non è in esecuzione
-
Verifica che le
PrologFlagsimpostazioniPrologand siano configurate sul cluster. Verifica che il file di script esista nei nodi di calcolo e disponga dei permessi di esecuzione ()chmod 0755.