Support NVIDIA-IMEX com instância p6e-gb200 - AWS ParallelCluster

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á.

Support NVIDIA-IMEX com instância p6e-gb200

Este tutorial mostra como começar a usar o AWS ParallelCluster GB2 P6e-00 para aproveitar o melhor desempenho de GPU para treinamento e inferência de IA. As instâncias p6e-gb200.36xlarge só estão disponíveis via GB2 P6e-00 UltraServers quando o tamanho do Ultraserver u-p6e-gb200x72 é o que forma o ultrasserver. p6e-gb200.36xlarge InstanceType Ao comprar um Ultraserveru-p6e-gb200x72, ele estará disponível por meio de um EC2 Capacity Blocks for ML, que terá 18 p6e-gb200.36xlarge instâncias. Para saber mais, consulte P6e- 00. GB2

AWS ParallelCluster versão 3.14.0:

  • fornece a pilha completa de software NVIDIA (drivers, CUDA, EFA, NVIDIA-IMEX) exigida por esse tipo de instância

  • cria configurações nvidia-imex para o ultrasserver P6e-00 GB2

  • ativa e inicia o nvidia-imex serviço para o ultrasserver P6e- 00 GB2

  • configura o plug-in de topologia do Slurm Block para que cada Ultraserver GB2 P6e-00 (um bloco de EC2 capacidade) seja um bloco do Slurm com o tamanho certo (consulte a entrada da versão 3.14.0). Notas de release e histórico de documentos

No entanto, a GPU-to-GPU comunicação via NVLink requer configurações adicionais, especificamente um nodes_config.cfgarquivo que contém os endereços IP dos nós de computação em um domínio IMEX que ParallelCluster não é gerado automaticamente. Para ajudar a gerar esse arquivo, fornecemos um script de prólogo que descobre automaticamente o nó de computação IPs e configura as nodes_config.cfgseguintes recomendações de integração com o NVIDIA IMEX Slurm Job Scheduler. Este tutorial explica como criar o script prolog, implantá-lo por meio de uma ação HeadNode personalizada e validar a configuração do IMEX.

nota

O P6e- GB2 00 é suportado a partir da AWS ParallelCluster v3.14.0 no Amazon Linux 2023, Ubuntu 22.04 e Ubuntu 24.04. Para ver as versões detalhadas do software e uma lista atualizada das distribuições suportadas, consulte o AWS ParallelCluster changelog.

Crie um script Prolog para gerenciar o NVIDIA-IMEX

Limitação:

  • Esse script de prólogo será executado após o envio de um trabalho exclusivo. Isso é para garantir que uma reinicialização do IMEX não interrompa nenhuma tarefa em execução nos nós P6e-GB200 que pertençam a um domínio IMEX.

Abaixo está o 91_nvidia_imex_prolog.sh script que você deve configurar como um prólogo no Slurm. Ele é usado para atualizar automaticamente a configuração nvidia-imex nos nós de computação. O nome do script tem um prefixo de 91 para aderir à convenção de nomenclatura do SchedMD. Isso garante que ele seja executado antes de qualquer outro script de prólogo na sequência. O script reconfigura a configuração do nó NVIDIA Imex quando um trabalho é iniciado e recarrega os daemons NVIDIA necessários.

nota

Esse script não será executado caso vários trabalhos sejam iniciados simultaneamente nos mesmos nós, portanto, sugerimos usar o --exclusive sinalizador no envio.

#!/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"

Crie o script HeadNode OnNodeStart de ação personalizado

Crie uma ação install_custom_action.sh personalizada que baixará o script de prolog mencionado acima em um diretório compartilhado /opt/slurm/etc/scripts/prolog.d/ que é acessado pelos Compute Nodes e defina as permissões adequadas a serem executadas.

#!/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}"

Criar um cluster

Crie um cluster incluindo instâncias P6e- GB2 00. Abaixo, você pode encontrar um exemplo de configuração contendo SlurmQueues o tipo Ultraserver. u-p6e-gb200x72

Atualmente, o P6e- GB2 00 está disponível apenas em Locais Zones. Algumas Zonas Locais não oferecem suporte a um NAT Gateway, portanto, siga as opções de conectividade para Zonas Locais conforme ParallelCluster necessário Configurando grupos de segurança para ambientes restritos para se conectar aos AWS Serviços. Siga o Instâncias de lançamento com Blocos de Capacidade (CB) (AWS ParallelClusterLaunch), pois os Ultraservers estão disponíveis somente como blocos de capacidade.

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>

Validar a configuração do IMEX

O 91_nvidia_imex_prolog.sh prólogo será executado quando você enviar um trabalho do Slurm. Abaixo está um exemplo de trabalho para verificar o status do domínio 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"

Verifique a saída do Job:

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