Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Support nVidia-IMEX con instancia p6e-gb200
En este tutorial, se muestra cómo empezar a utilizar AWS ParallelCluster el GB2 P6e-00 para aprovechar el máximo rendimiento de la GPU para el entrenamiento y la inferencia de la IA. Las instancias p6e-gb200.36xlarge solo están disponibles a través del GB2 P6e-00, UltraServers donde el tamaño es Ultraserver y es el que forma el Ultraserveru-p6e-gb200x72 p6e-gb200.36xlarge InstanceType Al comprar un Ultraserver, estará disponible en Capacity Blocks for MLu-p6e-gb200x72, que tendrá 18 instancias. EC2 p6e-gb200.36xlarge Para obtener más información, consulte P6e
AWS ParallelCluster versión 3.14.0:
-
proporciona el paquete completo de software de NVIDIA (controladores, CUDA, EFA, NVIDIA-IMEX) que requiere este tipo de instancia
-
crea configuraciones nvidia-imex para el ultra servidor P6e- 00 GB2
-
habilita e inicia el servicio para el ultraserver P6e-00
nvidia-imexGB2 -
configura el complemento de topología Slurm Block para que cada Ultraserver GB2 P6e-00 (un bloque de EC2 capacidad) sea un bloque Slurm con el tamaño correcto (consulte la entrada de la versión 3.14.0). Notas de la versión e historial de revisión
Sin embargo, GPU-to-GPU la comunicación NVLink requiere configuraciones adicionales, específicamente un nodes_config.cfgnodes_config.cfg
nota
El GB2 P6e-00 se admite a partir de la versión AWS ParallelCluster 3.14.0 en Amazon Linux 2023, Ubuntu 22.04 y Ubuntu 24.04. Para obtener versiones de software detalladas y una lista actualizada de las distribuciones compatibles, consulte la lista de cambios.AWS ParallelCluster
Cree un script Prolog para administrar NVIDIA-IMEX
Limitación:
-
Este guion de prólogo se ejecutará al enviar un trabajo exclusivo. Esto es para garantizar que el reinicio de IMEX no interrumpa ninguna tarea en ejecución en los nodos del P6e-GB200 que pertenecen a un dominio IMEX.
A continuación se muestra el 91_nvidia_imex_prolog.sh script que debe configurar como prólogo en Slurm. Se utiliza para actualizar automáticamente la configuración de nvidia-imex en los nodos de cómputo. El nombre del script tiene el prefijo de 91 para cumplir con la convención de nomenclatura de SchedMD.
nota
Este script no se ejecutará en caso de que se inicien varios trabajos simultáneamente en los mismos nodos, por lo que le sugerimos que utilice la marca al enviarlos. --exclusive
#!/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"
Cree el script de acción HeadNode OnNodeStart personalizado
Cree una acción install_custom_action.sh personalizada que descargue el script de prólogo mencionado anteriormente en un directorio compartido al /opt/slurm/etc/scripts/prolog.d/ que accedan los nodos de cómputo y establezca los permisos adecuados para su ejecución.
#!/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}"
Cree el clúster
Cree un clúster que incluya instancias P6e- 00. GB2 A continuación, encontrará un ejemplo de configuración del tipo SlurmQueues Ultraserver. u-p6e-gb200x72
Actualmente, el GB2 P6e-00 solo está disponible en las Zonas Locales. Algunas zonas locales no admiten una puerta de enlace NAT, así que siga las opciones de conectividad de las zonas locales según sea ParallelCluster necesario Configuración de grupos de seguridad para entornos restringidos para conectarse a AWS los servicios. Siga las instrucciones Lanzamiento de instancias con bloques de capacidad (CB) (AWS ParallelClusterLaunch), ya que los Ultraservers solo están disponibles como bloques de capacidad.
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>
Valide la configuración de IMEX
El 91_nvidia_imex_prolog.sh prólogo se ejecutará cuando envíes un trabajo de Slurm. A continuación se muestra un ejemplo de trabajo para comprobar el estado del dominio 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"
Compruebe el resultado del 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