View a markdown version of this page

Configurar UltraServer instâncias - AWS PEÇAS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar UltraServer instâncias

UltraServer As instâncias da NVIDIA conectam várias GPUs em todas as instâncias usando o NVLink. GPU-to-GPU a comunicação via NVLink exige que o serviço NVIDIA IMEX seja configurado com os endereços IP de todos os nós de computação na tarefa. Esta página mostra como criar um script de prólogo do Slurm que configura automaticamente o IMEX para cada trabalho e como implantá-lo em seu cluster PCS. AWS

Pré-requisitos

  • Um cluster AWS PCS com Slurm 25.05 ou posterior.

  • Um grupo de nós de computação usando UltraServer instâncias com um bloco de capacidade. Para obter mais informações, consulte Configurar um grupo de nós de computação AWS PCS para usar um bloco de capacidade.

  • Uma AMI com o driver NVIDIA, pacotes CUDA e IMEX instalados. O serviço IMEX (nvidia-imex) deve estar ativado na AMI.

  • O script prolog deve estar disponível em todos os nós de computação no caminho configurado na configuração Prolog Slurm do cluster. Você pode usar um sistema de arquivos compartilhado ou incluir o script em sua AMI personalizada.

Seleção automática de topologia

Quando você cria um cluster AWS PCS com grupos de nós de UltraServer computação, o sistema inspeciona o bloco de capacidade, identifica o UltraServer tipo e configura o Slurm com o plug-in de topologia apropriado. Esse processo é executado automaticamente e não requer nenhuma configuração.

AWS O PCS gerencia a topologia por meio de um arquivo gerado topology.yaml dinamicamente. À medida que o cluster evolui por meio de adições ou remoções de grupos de nós de computação, o AWS PCS reconcilia continuamente a configuração da topologia para refletir o estado atual do cluster.

A topologia de blocos modela domínios de comunicação uniformes e de alta largura de banda, nos quais todas as GPUs participam de um único domínio NVLink de alta velocidade com latência quase uniforme. O topology/block plug-in aloca nós com base na topologia de rede definida, garantindo que os trabalhos sejam colocados dentro da mesma UltraServer e que a GPU-to-GPU comunicação use o NVLink em vez de recorrer à rede EFA.

Usando o topology/block plugin

Os trabalhos enviados às UltraServer filas são automaticamente colocados no mesmo bloco (UltraServer) pelo agendador Slurm. Todos os nós em um bloco são alocados para uma tarefa antes que o próximo bloco seja usado. Os trabalhos devem usar o --exclusive sinalizador porque o IMEX exige um domínio IMEX dedicado por trabalho, e reiniciar o serviço IMEX interromperia qualquer outro trabalho em execução nos mesmos nós. Para obter mais informações sobre o topology/block plug-in, consulte o guia de topologia e a referência https://slurm.schedmd.com/topology.yaml.html topology.yaml na documentação do Slurm.

Ao enviar trabalhos, você pode usar o --segment=N argumento com sbatch e srun os comandos para especificar o número de nós a serem agrupados no mesmo bloco. O tamanho do segmento deve ser menor que ou igual ao tamanho do bloco de planejamento. --segmentO uso não garante que os segmentos sejam colocados em blocos diferentes.

A seguir estão exemplos de cenários para alocar blocos em uma fila com 18 nós UltraServers (por exemplo, uma u-p6e-gb200x72 que tem 18 instâncias): 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

Práticas recomendadas para UltraServer topologia

Para um desempenho ideal com UltraServer arquitetura em AWS PCS:

  • Use segmentos para melhorar a disponibilidade: use a --segment opção com um valor menor que o tamanho total do bloco para permitir que os trabalhos sejam agendados em blocos com alguns nós esgotados ou indisponíveis. Isso troca a localidade absoluta do NVLink por tempos de agendamento de tarefas mais rápidos. Para obter mais informações, consulte Obter mais controle sobre o agendamento de nós com o Topology/Block plug-in.

  • Considere o tamanho do trabalho e o tamanho do bloco: seBlockSizes=18, trabalhos com até 18 instâncias sempre são executados em uma única instância UltraServer. Os trabalhos que solicitam mais de 18 nós abrangem vários UltraServers, com conectividade NVLink em cada bloco e rede EFA entre os blocos.

  • Compensações de segmento: o uso --segment desativa o agendamento de tamanhos de blocos de maior ordem. Sem isso--segment, um bloco inteiro é preenchido antes que o próximo bloco seja usado. Com--segment, os segmentos podem ser colocados em qualquer bloco com nós disponíveis suficientes.

Limitações

  • AWS O PCS exige que os grupos de nós de UltraServer computação sejam colocados em filas dedicadas, separados dos grupos de nós que não são de UltraServer computação.

  • Cada grupo de nós de computação só pode ser associado a um bloco UltraServer de capacidade.

  • Quando uma fila contém vários grupos de nós de UltraServer computação, a contagem de instâncias de cada grupo de nós de computação deve ter proporções de potência de 2 entre eles (por exemplo, 9 e 18 ou 2 e 8).

  • Os trabalhos em UltraServer filas devem usar o --exclusive sinalizador para garantir um domínio IMEX dedicado por trabalho.

  • O domínio IMEX criado pelo script de prólogo inclui somente os nós alocados para a tarefa. Como o AWS PCS aloca dinamicamente os nós às tarefas, o domínio IMEX não pode ser pré-criado e deve ser configurado no momento do início da tarefa. Trabalhos que abrangem vários não UltraServers terão conectividade NVLink entre nós diferentes UltraServers porque o domínio IMEX é baseado em endereços IP e não pode ser conectado a malhas NVLink separadas.

  • O IMEX nodes_config.cfg não pode ser modificado enquanto o serviço estiver em execução. Se a configuração for alterada, o IMEX bloqueia permanentemente a comunicação com nós incompatíveis. A única recuperação é interromper o IMEX em todos os nós e reiniciar com uma configuração consistente.

Crie o script de prólogo IMEX

O 91_nvidia_imex_prolog.sh script a seguir configura o NVIDIA IMEX nos nós de computação quando uma tarefa do Slurm é iniciada. O nome do script usa um 91 prefixo seguindo a convenção de nomenclatura do SchedMD para ordenar a execução do prólogo.

O script executa as seguintes ações:

  1. Verifica se o trabalho é exclusivo. A configuração do IMEX exige trabalhos exclusivos para evitar a interrupção de outros trabalhos em execução nos mesmos nós.

  2. Verifica se o tipo de instância é compatível UltraServer (p6e-gb200oup6e-gb300).

  3. Verifica se o serviço IMEX está ativado.

  4. Cria o dispositivo de canal padrão IMEX se ele não existir.

  5. Grava os endereços IP privados de todos os nós de trabalho em/etc/nvidia-imex/nodes_config.cfg.

  6. Reinicia o serviço IMEX.

Importante

Esse script de prólogo exige que os trabalhos sejam enviados com o --exclusive sinalizador. Reiniciar o IMEX enquanto outros trabalhos estão sendo executados nos mesmos nós interromperá esses trabalhos.

nota

Esse script de prólogo oferece suporte a todos p6e-gb200 os tipos de p6e-gb300 instância. Para adaptá-lo a outros tipos de instância, atualize o ALLOWED_INSTANCE_TYPES padrão no script.

Salve o script a seguir como91_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"

Implemente o script de prólogo

Para implantar o script prolog, defina o Slurm Prolog e as configurações PrologFlags personalizadas em seu cluster. Você pode defini-las ao criar um cluster ou atualizar um cluster existente.

Para obter mais informações sobre como definir configurações personalizadas do Slurm, consulte. Configurações personalizadas do Slurm para AWS Clusters PCS Para saber o procedimento para atualizar um cluster, consulteAtualizar um AWS Cluster PCS.

Defina as seguintes configurações personalizadas do Slurm no cluster:

  • Prolog- Defina o caminho em que o script do prólogo está disponível nos nós de computação, por exemplo. /shared/scripts/prolog.d/91_nvidia_imex_prolog.sh

  • PrologFlags- Defina comoAlloc,NoHold. O Alloc sinalizador executa o prólogo em cada nó quando ele é alocado pela primeira vez para um trabalho. O NoHold sinalizador impede que o trabalho seja retido se o prólogo falhar.

exemplo Atualize o cluster com configurações de prólogo usando o 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"} ] }'

Validar a configuração do IMEX

O script prolog é executado automaticamente quando você envia um trabalho do Slurm. Envie um trabalho de teste para verificar se o IMEX está configurado corretamente em todos os nós.

Crie um script de trabalho chamadocheck-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"

Envie o trabalho para sua UltraServer fila:

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

Verifique os arquivos de saída. Uma configuração IMEX bem-sucedida mostra todos os nós no READY estado com C (Conectado) na tabela de conectividade 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

Solução de problemas

Incompatibilidade no mapeamento da configuração do nó

Se você observar !M! na tabela de conectividade ou Node configuration mapping mismatch nos registros do IMEX, o nodes_config.cfg arquivo não é consistente em todos os nós. O IMEX bloqueia permanentemente a comunicação com nós incompatíveis. Verifique se o script do prólogo foi executado em todos os nós e reinicie o trabalho.

Dispositivo de canal IMEX não encontrado

Se o script prolog falhar ao criar o dispositivo de canal IMEX, verifique se o driver NVIDIA está instalado e se ele contém. /proc/devices nvidia-caps-imex-channels

O script Prolog não está em execução

Verifique se as PrologFlags configurações Prolog e estão definidas no cluster. Verifique se o arquivo de script existe nos nós de computação e tem permissões de execução (chmod 0755).