翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
UltraServer インスタンスを設定する
NVIDIA UltraServer インスタンスGPUs を接続します。 NVLink NVLink 経由の GPU-to-GPU通信では、NVIDIA IMEX
前提条件
-
Slurm AWS 25.05 以降の PCS クラスター。
-
キャパシティブロックを持つ UltraServer インスタンスを使用するコンピューティングノードグループ。詳細については、「キャパシティブロックを使用するように PCS AWS コンピューティングノードグループを設定する」を参照してください。
-
NVIDIA ドライバー、CUDA、IMEX パッケージがインストールされている AMI。IMEX サービス (
nvidia-imex) は AMI で有効にする必要があります。 -
prolog スクリプトは、クラスターの Slurm
Prolog設定で設定されたパスのすべてのコンピューティングノードで使用できる必要があります。共有ファイルシステムを使用するか、カスタム AMI にスクリプトを含めることができます。
自動トポロジ選択
UltraServer コンピューティングノードグループを使用して AWS PCS クラスターを作成すると、システムはキャパシティブロックを検査し、UltraServer タイプを識別し、適切なトポロジプラグインを使用して Slurm を設定します。このプロセスは自動的に実行され、設定は必要ありません。
AWS PCS は、動的に生成されたtopology.yamlファイルを通じてトポロジを管理します。コンピューティングノードグループの追加または削除によってクラスターが進化するにつれて、 AWS PCS はトポロジ設定を継続的に調整して、現在のクラスターの状態を反映します。
ブロックトポロジは、すべての GPUsに参加する、均一で高帯域幅の通信ドメインをモデル化します。 NVLink topology/block プラグインは、定義されたネットワークトポロジに基づいてノードを割り当て、ジョブが同じ UltraServer 内に配置され、GPU-to-GPU通信が EFA ネットワークにフォールバックするのではなく NVLink を使用するようにします。
トポロジ/ブロックプラグインの使用
UltraServer キューに送信されたジョブは、Slurm スケジューラによって自動的に同じブロック (UltraServer) に配置されます。ブロック内のすべてのノードは、次のブロックを使用する前にジョブに割り当てられます。IMEX にはジョブごとに専用の IMEX ドメインが必要であり、IMEX サービスを再起動すると、同じノードで実行中の他のジョブが中断されるため、ジョブは --exclusiveフラグを使用する必要があります。トポロジ/ブロックプラグインの詳細については、Slurm ドキュメントの「トポロジガイド
ジョブを送信するときは、 コマンドsbatchと srun コマンドで --segment=N引数を使用して、同じブロック内でグループ化するノードの数を指定できます。セグメントのサイズは、計画ブロックサイズ以下である必要があります。--segment を使用しても、セグメントが異なるブロックに配置されるとは限りません。
以下は、18 ノードの UltraServers (たとえば、インスタンスが 18 u-p6e-gb200x72個の ) を持つキューにブロックを割り当てるシナリオの例です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 トポロジーのベストプラクティス
PCS の UltraServer AWS アーキテクチャで最適なパフォーマンスを得るには:
-
可用性を高めるためにセグメントを使用する: フルブロックサイズより小さい値を持つ
--segmentオプションを使用して、ドレインされたノードまたは使用できないノードがあるブロックでジョブをスケジュールできるようにします。これにより、NVLink の絶対ローカリティが取引され、ジョブのスケジューリング時間が短縮されます。詳細については、「トポロジ/ブロックプラグインを使用してノードスケジューリングをより詳細に制御する」を参照してください。 -
ジョブサイズとブロックサイズを考慮する: の場合
BlockSizes=18、最大 18 個のインスタンスを持つジョブは常に 1 つの UltraServer で実行されます。18 個を超えるノードをリクエストするジョブは複数の UltraServers にまたがり、各ブロック内の NVLink 接続とブロック間の EFA ネットワークを使用します。 -
セグメントのトレードオフ: を使用すると、高次ブロックサイズのスケジューリング
--segmentが無効になります。を使用しない場合--segment、次のブロックを使用する前に完全なブロックが埋められます。では--segment、十分な使用可能なノードを持つ任意のブロックにセグメントを配置できます。
制限事項
-
AWS PCS では、UltraServer コンピューティングノードグループは、UltraServer 以外のコンピューティングノードグループとは別の専用キューに配置する必要があります。
-
各コンピューティングノードグループは、1 つの UltraServer キャパシティブロックにのみ関連付けることができます。
-
キューに複数の UltraServer コンピューティングノードグループが含まれている場合、各コンピューティングノードグループのインスタンス数は、それらの間に 2 倍の比率 (9 と 18、または 2 と 8 など) を持つ必要があります。
-
UltraServer キューのジョブでは、
--exclusiveフラグを使用して、ジョブごとに専用の IMEX ドメインを確保する必要があります。 -
prolog スクリプトによって作成された IMEX ドメインには、ジョブに割り当てられたノードのみが含まれます。 AWS PCS はノードをジョブに動的に割り当てるため、IMEX ドメインを事前に作成することはできず、ジョブの開始時に設定する必要があります。複数の UltraServers にまたがるジョブは、IMEX ドメインが IP アドレスに基づいており、個別の NVLink エンスペック間でブリッジできないため、異なる UltraServers のノード間で NVLink 接続を持ちません。
-
サービスの実行中に IMEX を変更
nodes_config.cfgすることはできません。設定を変更すると、IMEX は一致しないノードへの通信を完全にブロックします。唯一の復旧は、すべてのノードで IMEX を停止し、一貫した設定で再起動することです。
IMEX プロログスクリプトを作成する
次の91_nvidia_imex_prolog.shスクリプトは、Slurm ジョブの開始時にコンピューティングノードに NVIDIA IMEX を設定します。スクリプト名は、SchedMD の命名規則91プレフィックスを使用します。
スクリプトは以下のアクションを実行します。
-
ジョブが排他的かどうかを確認します。IMEX 設定では、同じノードで実行中の他のジョブの中断を防ぐために、排他的ジョブが必要です。
-
インスタンスタイプがサポートされている UltraServer タイプ (
p6e-gb200または ) かどうかを確認しますp6e-gb300。 -
IMEX サービスが有効になっているかどうかを確認します。
-
IMEX デフォルトチャネルデバイスが存在しない場合は作成します。
-
すべてのジョブノードのプライベート IP アドレスを に書き込みます
/etc/nvidia-imex/nodes_config.cfg。 -
IMEX サービスを再起動します。
重要
このプロログスクリプトでは、 --exclusiveフラグを使用してジョブを送信する必要があります。他のジョブが同じノードで実行されている間に IMEX を再起動すると、それらのジョブが中断されます。
注記
このプロログスクリプトは、 p6e-gb200および p6e-gb300インスタンスタイプをサポートします。他のインスタンスタイプに適応させるには、スクリプトのALLOWED_INSTANCE_TYPESパターンを更新します。
次のスクリプトを として保存します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"
プロログスクリプトをデプロイする
プロログスクリプトをデプロイするには、クラスターで Slurm PrologとPrologFlagsカスタム設定を設定します。これらは、クラスターの作成時または既存のクラスターの更新時に設定できます。
カスタム Slurm 設定の設定の詳細については、「」を参照してくださいPCS クラスターのカスタム Slurm AWS 設定。クラスターを更新する手順については、「」を参照してくださいPCS AWS クラスターを更新する。
クラスターで次のカスタム Slurm 設定を設定します。
-
Prolog- プロログスクリプトが などのコンピューティングノードで使用できるパスに設定します/shared/scripts/prolog.d/91_nvidia_imex_prolog.sh。 -
PrologFlags- を に設定しますAlloc,NoHold。Allocフラグは、ジョブに最初に割り当てられたときに、各ノードでプロログを実行します。NoHoldフラグは、プロログが失敗した場合にジョブが保持されるのを防ぎます。
例 CLI AWS を使用してプロログ設定でクラスターを更新する
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"} ] }'
IMEX セットアップを検証する
プロログスクリプトは、Slurm ジョブを送信すると自動的に実行されます。テストジョブを送信して、IMEX がすべてのノードで正しく設定されていることを確認します。
という名前のジョブスクリプトを作成します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"
UltraServer キューにジョブを送信します。
sbatch -pqueue-name-Nnode-countcheck-imex.sh
出力ファイルを確認します。IMEX 設定が成功すると、接続テーブルと で C (接続済み) READY状態のすべてのノードが表示されます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
トラブルシューティング
- ノード設定マッピングの不一致
-
!M!接続テーブルまたは IMEX ログNode configuration mapping mismatchに が表示されている場合、nodes_config.cfgファイルはすべてのノードで一貫しているわけではありません。IMEX は、一致しないノードへの通信を完全にブロックします。プロログスクリプトがすべてのノードで実行されていることを確認し、ジョブを再起動します。 - IMEX チャネルデバイスが見つかりません
-
プロログスクリプトが IMEX チャネルデバイスの作成に失敗した場合、NVIDIA ドライバーがインストールされ、
/proc/devicesが含まれていることを確認しますnvidia-caps-imex-channels。 - Prolog スクリプトが実行されていない
-
PrologおよびPrologFlags設定がクラスターで設定されていることを確認します。スクリプトファイルがコンピューティングノードに存在し、実行アクセス許可 () があることを確認しますchmod 0755。