

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
<a name="capacity-blocks-nvidia-imex"></a>

 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 ](https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/index.html) 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
<a name="capacity-blocks-nvidia-imex-prerequisites"></a>
+ 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](capacity-blocks-configure-cng.md).
+ 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
<a name="capacity-blocks-nvidia-imex-topology"></a>

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
<a name="capacity-blocks-nvidia-imex-job-submission"></a>

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 ](https://slurm.schedmd.com/topology.html) e a referência [https://slurm.schedmd.com/topology.yaml.html](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. `--segment`O 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
<a name="capacity-blocks-nvidia-imex-best-practices"></a>

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](https://slurm.schedmd.com/SLUG24/NVIDIA-Craig_Tierney.pdf).
+ **Considere o tamanho do trabalho e o tamanho do bloco**: se`BlockSizes=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
<a name="capacity-blocks-nvidia-imex-limitations"></a>
+ 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
<a name="capacity-blocks-nvidia-imex-prolog"></a>

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 ](https://slurm.schedmd.com/prolog_epilog.html) 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.

1. Verifica se o tipo de instância é compatível UltraServer (`p6e-gb200`ou`p6e-gb300`).

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

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

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

1. 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 como`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"
```

## Implemente o script de prólogo
<a name="capacity-blocks-nvidia-imex-deploy"></a>

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](slurm-custom-settings-cluster.md) Para saber o procedimento para atualizar um cluster, consulte[Atualizar um AWS Cluster PCS](working-with_clusters_update_procedure.md).

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 como`Alloc,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.

**Example 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
<a name="capacity-blocks-nvidia-imex-validate"></a>

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 chamado`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"
```

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 e`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
```

## Solução de problemas
<a name="capacity-blocks-nvidia-imex-troubleshooting"></a>

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`).