기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SageMaker HyperPod에서 토폴로지 인식 스케줄링 사용
데이터 전송 효율성은 고성능 컴퓨팅(HPC) 및 기계 학습 워크로드에서 중요한 요소입니다. Amazon SageMaker HyperPod와 함께 UltraServers를 사용하는 경우 SageMaker HyperPod는 토폴로지 레이블을 리소스에 자동으로 적용합니다. 토폴로지 인식 스케줄링은 인스턴스 토폴로지(인스턴스 내에서 리소스가 연결되는 방식)와 네트워크 토폴로지(인스턴스가 서로 연결되는 방식)를 모두 고려하여 리소스를 할당함으로써 데이터 전송 오버헤드를 최소화하는 데 도움이 됩니다. 인스턴스 토폴로지에 대한 자세한 내용은 Amazon EC2 인스턴스 토폴로지를 참조하세요.
토폴로지 인식 스케줄링은 Slurm 및 Amazon EKS의 클러스터에서 작동합니다. 토폴로지가 Slurm과 작동하는 방식에 대한 일반적인 정보는 Slurm 설명서의 Topology guide
Amazon SageMaker HyperPod에서 데이터 전송 오버헤드는 일반적으로 세 가지 주요 소스에서 발생합니다.
-
GPU 간 데이터 전송: NVLink 및 NVLink 스위치와 같은 현대적 기술을 사용하면 다른 컴퓨팅 리소스를 사용하지 않고도 GPU 간에 처리량이 많은 데이터를 전송할 수 있습니다. 이는 매우 효율적이지만 일반적으로 단일 인스턴스로 제한됩니다.
-
GPU와 CPU 간 데이터 전송: Non-uniform Memory Access(NUMA) 시스템에는 단일 마더보드에 여러 시스템 버스가 있습니다. p5.48xlarge와 같은 일반적인 EC2 인스턴스 아키텍처에는 각각 CPU 1개와 GPU 4개가 있는 2개의 서로 다른 시스템이 있습니다. 최적의 성능을 위해 GPU로 데이터를 로드하거나 GPU에서 데이터를 읽는 프로세스는 GPU와 동일한 시스템 버스에 연결된 CPU에서 실행해야 합니다.
-
인스턴스 간 네트워크 통신: 인스턴스는 네트워크 스위치 체인을 통해 데이터를 전송합니다. 가장 짧은 경로가 일반적으로 지연 시간이 가장 짧습니다.
UltraServer 아키텍처
SageMaker HyperPod는 p6e-gb200.36xlarge 인스턴스를 사용하는 UltraServer 아키텍처를 지원합니다. UltraServer에는 최대 18개의 p6e-gb200.36xlarge 인스턴스가 포함되며 각 인스턴스에는 4개의 GPU가 있습니다. 모든 노드의 모든 GPU는 NVLink 스위치를 통해 상호 연결되므로 네트워크 인터페이스를 사용하지 않고도 두 GPU 간에 데이터를 전송할 수 있습니다.
이 아키텍처는 개별 인스턴스에 비해 상당한 성능 향상을 제공합니다. 이 아키텍처를 효과적으로 활용하려면 작업을 단일 UltraServer에서 컴퓨팅 노드로 제출해야 합니다.
EKS 토폴로지 레이블
EC2 인스턴스 토폴로지에 따라 HyperPod는 노드에 다음 레이블을 자동으로 지정합니다.
-
topology.kubernetes.io/region - 노드 AWS 리전 가 있는 입니다.
-
topology.kubernetes.io/zone - 노드가 있는 가용 영역입니다.
-
topology.k8s.aws/network-node-layer - NetworkNodes는 인스턴스의 네트워크 노드 세트를 설명합니다. 각 네트워크 노드 세트에서 네트워크 노드는 위에서 아래까지 계층적 순서로 나열됩니다. 인스턴스에 연결된 네트워크 노드는 목록의 마지막 네트워크 노드입니다. 네트워크 노드 계층은 최대 4개이며 각 노드에는 레이블이 지정됩니다. 사용 가능한 계층은
topology.k8s.aws/network-node-layer-1,topology.k8s.aws/network-node-layer-2,topology.k8s.aws/network-node-layer-3입니다. -
topology.k8s.aws/ultraserver-id - Ultraserver에서 동일한 NVLink 도메인에 속하는 각 인스턴스에 레이블을 지정하는 데 사용되는 식별자입니다. SageMaker HyperPod에서 UltraServers를 사용하는 방법에 대한 자세한 내용은 Amazon SageMaker HyperPod에서 UltraServers 사용 섹션을 참조하세요.
이러한 레이블을 사용하면 HyperPod 태스크 거버넌스에서 토폴로지 인식 스케줄링을 사용하여 토폴로지 레이블과 주석을 적용하여 워크로드의 훈련 효율성을 최적화할 수 있습니다. 자세한 내용은 Amazon SageMaker HyperPod 태스크 거버넌스에서 토폴로지 인식 스케줄링 사용 단원을 참조하십시오.
Slurm 네트워크 토폴로지 플러그인
Slurm은 네트워크 토폴로지 인식을 위한 내장 플러그인을 제공합니다. SageMaker HyperPod는 클러스터의 인스턴스 유형에 따라 적절한 토폴로지 플러그인을 자동으로 선택하고 구성합니다.
자동 토폴로지 선택
HyperPod Slurm 클러스터를 생성할 때 시스템은 모든 인스턴스 그룹 및 관련 인스턴스 유형을 검사하고, 각 인스턴스 유형의 GPU 통신 특성을 식별하고, 적절한 토폴로지 플러그인으로 Slurm을 구성합니다. 이 프로세스는 자동으로 실행되며 구성이 필요하지 않습니다.
HyperPod는 동적으로 생성된 구성 파일을 통해 토폴로지를 관리합니다. Slurm 25.11 이상에서는 토폴로지가 파일에 정의되어 있습니다.이 topology.yaml 파일은 신뢰할 수 있는 소스이며 여러 토폴로지 정의 및 파티션별 할당을 지원합니다. Slurm 24.x에서 토폴로지는 단일 클러스터 전체 토폴로지가 있는 topology.conf 파일에 정의됩니다. 클러스터가 조정 작업 또는 노드 교체를 통해 발전함에 따라 HyperPod는 토폴로지 구성을 지속적으로 조정하여 현재 클러스터 상태를 반영합니다. 자세한 내용은 동적 토폴로지 업데이트 단원을 참조하십시오.
네트워크 토폴로지를 지원하는 인스턴스 유형
HyperPod는 Amazon EC2 인스턴스 토폴로지를 지원하는 인스턴스 유형에 대해 트리 또는 블록 토폴로지를 구성합니다. 지원되는 인스턴스 유형의 신뢰할 수 있는 up-to-date 목록은 Amazon EC2 사용 설명서의 Amazon EC2 토폴로지 사전 조건을 참조하세요. Amazon EC2
지원되는 인스턴스 유형에는 G6e, G7e, P4d, P4de, P5, P5e, P5en, P6e-GB200과 같은 가속 컴퓨팅 패밀리와 Trn1, Trn1n, Trn2와 같은 AWS Trainium 패밀리가 포함됩니다. UltraServer 인스턴스 유형(예: ml.p6e-gb200.36xlarge)은 블록 토폴로지를 사용하고 기타 토폴로지 지원 인스턴스 유형은 트리 토폴로지를 사용합니다.
토폴로지/트리 플러그인 사용
topology/tree 플러그인은 여러 대역폭 계층으로 계층적 통신 구조를 모델링합니다. 트리 토폴로지를 사용하면 Slurm이 교차 계층 통신을 최소화하고 현지성을 극대화하는 방식으로 작업을 배치할 수 있습니다.
트리 토폴로지는 분산 훈련 워크로드가 로컬리티 인식 배치의 이점을 활용하는 계층적 인터커넥트가 있는 인스턴스 유형에 사용됩니다. 여기에는 ml.p5.48xlarge, ml.p5e.48xlarge및와 같은 인스턴스 유형이 포함됩니다ml.p5en.48xlarge.
SageMaker HyperPod는 클러스터가 이러한 인스턴스 유형을 사용할 때 topology/tree 플러그인을 자동으로 구성합니다. 생성된 토폴로지 구성은 노드를 하드웨어의 통신 계층을 반영하는 스위치 계층 구조에 매핑합니다.
slurm.conf에 다음이 포함되어야 합니다.
TopologyPlugin=topology/tree
구성
SageMaker HyperPod는 Amazon EC2에서 제공하는 정보를 기반으로 트리 토폴로지를 자동으로 구성합니다. Amazon EC2 토폴로지에 대한 자세한 내용은 Amazon EC2 인스턴스 토폴로지를 참조하세요.
Slurm 25.11 이상에서 HyperPod는 정확한 소스topology.yaml인에서 토폴로지를 정의합니다. 트리 토폴로지 항목은 하드웨어의 통신 계층을 반영하는 스위치 계층 구조에 노드를 매핑합니다.
- topology: tree cluster_default: true tree: switches: - switch: root children: leaf-0,leaf-1 - switch: leaf-0 nodes: compute-1,compute-2 - switch: leaf-1 nodes: compute-3,compute-4
Slurm 24.x에서는 트리 토폴로지가 topology.conf 대신에 정의되어 있으며, 이는 다음 형식을 사용합니다.
SwitchName=nn-6fe9d8a965d34d181 Switches=nn-0b53107754517bf0e SwitchName=nn-0b53107754517bf0e Switches=nn-424c855d4ad825aa4,nn-95acd7c656329fc30 SwitchName=nn-424c855d4ad825aa4 Nodes=ip-10-1-111-198 SwitchName=nn-95acd7c656329fc30 Nodes=ip-10-1-53-231
용도
topology/tree 플러그인이 구성되면 Slurm은 서로 가까운 시스템을 할당하려고 시도합니다. --switch 명령줄 파라미터를 sbatch 또는에 전달하여 Slurm이 단일 스위치에 시스템을 할당하도록 할 수 있습니다srun.
sbatch --switch=1 ....
토폴로지/블록 플러그인 사용
NVIDIA는 다음과 같은 특성을 가진 노드 블록 간 계층적 일정을 제공하는 topology/block 플러그인을 개발했습니다.
블록은 노드의 연속적인 범위입니다.
블록은 서로 겹칠 수 없습니다.
블록의 모든 노드는 다음 블록이 사용되기 전에 작업에 할당됩니다.
계획 블록 크기는 구성된 가장 작은 블록 크기입니다.
더 높은 블록 수준 크기는 이전 블록 수준보다 2의 거듭제곱으로 커집니다.
이 플러그인은 정의된 네트워크 토폴로지를 기반으로 노드를 할당합니다.
블록 토폴로지 모델은 모든 GPUs 참여하는 균일한 고대역폭 통신 도메인을 모델링합니다. 블록 토폴로지는 모든 노드를 단일 응집 통신 단위의 일부로 취급합니다. SageMaker HyperPod의 UltraServer 아키텍처는 블록 플러그인을 지원합니다.
블록 토폴로지는와 같은 UltraServer 인스턴스 유형에 사용됩니다ml.p6e-gb200.36xlarge.
slurm.conf에 다음이 포함되어야 합니다.
TopologyPlugin=topology/block
구성
SageMaker HyperPod는 블록 토폴로지를 자동으로 구성합니다. Slurm 25.11 이상에서는 블록 토폴로지가 신뢰할 수 topology.yaml있는 소스인에 정의되어 있습니다. 클러스터의 블록 및 트리 토폴로지는 동일한 파일에 함께 정의됩니다. 다음 예제에서는 P5 파티션(트리)과 UltraServer 파티션(블록)이 있는 클러스터를 보여줍니다.
- topology: tree cluster_default: true tree: switches: - switch: root children: leaf-0,leaf-1 - switch: leaf-0 nodes: compute-p5-1,compute-p5-2 - switch: leaf-1 nodes: compute-p5-3,compute-p5-4 - topology: block cluster_default: false block: block_sizes: - 18 blocks: - block: cb-001 nodes: ultraserver-1-[1-18]
Slurm 24.x에서는 블록 토폴로지가 topology.conf 대신에 정의되어 있으며, 이는 다음 형식을 사용합니다.
BlockName=us1 Nodes=ultraserver1-[0-17] BlockName=us2 Nodes=ultraserver2-[0-17] BlockSizes=18
용도
작업을 제출할 때 sbatch 및 srun 명령과 함께 다음 추가 인수를 사용할 수 있습니다.
--segment=N: 그룹화할 노드 수를 지정합니다. 세그먼트의 크기는 계획 블록 크기보다 작거나 같아야 합니다.--exclusive=topo: 동일한 블록에 다른 작업을 배치하지 않도록 요청합니다. 벤치마킹 및 성능에 민감한 애플리케이션에 유용합니다.
다음은 블록 할당을 생각할 때 고려할 수 있는 샘플 시나리오입니다.
빈 시스템에 전체 노드 블록 할당
sbatch -N18
빈 시스템에 노드 블록 2개 할당
sbatch -N36
한 블록에 노드 18개 + 다른 블록에 노드 6개 할당
sbatch -N24
한 블록에 노드 12개 할당 + 다른 블록에 노드 12개 할당
sbatch -N24 --segment=12
--exclusive=topo를 사용하면 다른 작업 없이 작업을 블록에 배치해야 합니다.
sbatch -N12 --exclusive=topo
파티션 수준 토폴로지 선택
Slurm 25.11부터 HyperPod는 파티션 수준에서 토폴로지 구성을 지원합니다. 각 파티션에는 컴퓨팅 인스턴스 그룹의 인스턴스 유형에 따라 토폴로지가 할당되므로 단일 클러스터가 한 파티션에서 트리 토폴로지를 실행하고 다른 파티션에서 블록 토폴로지를 실행할 수 있습니다. 네트워크 토폴로지 지원 없이 인스턴스 유형을 포함하는 파티션은 클러스터 전반의 flat 기본값을 상속하여 노드를 예약 가능하게 유지합니다.
HyperPod는 다음과 같이 각 파티션의 토폴로지를 확인합니다.
파티션의 모든 컴퓨팅 인스턴스 그룹이 UltraServer 인스턴스 유형인 경우 파티션은
block토폴로지를 사용합니다.파티션의 모든 컴퓨팅 인스턴스 그룹이 네트워크 토폴로지를 지원하는 경우(파티션이 모든 UltraServer가 아닌 경우) 파티션은
tree토폴로지를 사용합니다.파티션에 UltraServer 및 기타 토폴로지 지원 인스턴스 유형이 모두 포함된 경우 파티션은
tree토폴로지를 사용합니다.파티션의 컴퓨팅 인스턴스 그룹이 네트워크 토폴로지를 지원하지 않는 인스턴스 유형을 사용하는 경우 파티션에는 토폴로지 할당이 없으며 클러스터 전체의
flat기본값을 상속합니다.
클러스터 전반의 기본 토폴로지는 클러스터 전체에 존재하는 토폴로지를 기반으로 선택됩니다. 즉, 토폴로지 유형이 하나만 있는 경우 해당 유형이 기본값이고, 블록과 트리가 모두 비 토폴로지 그룹이 없는 경우 트리가 기본값이며, 비 토폴로지 컴퓨팅 그룹이 있는 경우가 기본값이므로 해당 노드flat를 예약할 수 있습니다.
다음 표는 HyperPod가 혼합 인스턴스 유형이 있는 클러스터의 토폴로지를 해결하는 방법의 예를 보여줍니다.
| 인스턴스 그룹 | 인스턴스 유형 | 적용된 토폴로지 |
|---|---|---|
IG-1 |
ml.p5.48xlarge |
트리 |
IG-2 |
ml.p6e-gb200.36xlarge |
차단 |
이 예제에서 P5 파티션은 트리 토폴로지를 사용하고 UltraServer 파티션은 블록 토폴로지를 사용합니다. 파티션 수준 토폴로지를 사용하면 각 파티션은 동일한 클러스터 내에서 최적의 토폴로지를 사용하므로 더 이상 개별 클러스터를 생성하여 각 인스턴스 유형에 이상적인 토폴로지 모델을 제공할 필요가 없습니다.
참고
Slurm 24.x를 실행하는 클러스터에서는 단일 클러스터 전체 토폴로지 구성만 지원됩니다. 파티션별 토폴로지에는 Slurm 25.11 이상이 필요합니다.
플랫 토폴로지 기본값
클러스터에 토폴로지 지원 인스턴스 유형과 비 토폴로지 인스턴스 유형이 혼합되어 있는 경우 HyperPod가 클러스터 기본값topology/flat으로 적용됩니다. 토폴로지 인식 파티션은 slurm.conf (Slurm 25.11 이상)의 파티션별 Topology= 지시문을 통해 트리 또는 블록 토폴로지를 가리키는 반면, 비 토폴로지 노드가 있는 파티션에는 Topology= 지시문이 없으며 플랫 기본값을 상속합니다. 이렇게 하면 모든 노드를 예약할 수 있습니다.
토폴로지 플러그인 비활성화 또는 변경
Slurm 클러스터가 생성되면 HyperPod는 최적의 토폴로지 플러그인을 자동으로 선택합니다. 토폴로지 플러그인을 수동으로 변경하려면 컨트롤러 노드에서의 TopologyPlugin 값을 업데이트slurm.conf합니다.
토폴로지 인식 배치를 비활성화하려면 플러그인을 topology/flat (또는 topology/default)로 설정합니다.
# Set this value to disable topology-aware placement TopologyPlugin=topology/flat
동적 토폴로지 업데이트
토폴로지 인식 예약은 클러스터가 변경될 때 토폴로지 정확성을 지속적으로 유지합니다. 다음 이벤트 중 하나가 발생하면 토폴로지가 자동으로 다시 계산되고 토폴로지 구성 파일이 다시 생성됩니다.
스케일 업: 클러스터에 새 노드가 추가됩니다.
스케일 다운: 클러스터에서 노드가 제거됩니다.
노드 교체: 실패하거나 비정상인 노드가 교체되거나 BatchReplaceClusterNodes API를 사용하여 노드가 수동으로 교체됩니다.
토폴로지가 업데이트되면 새 노드가 올바른 토폴로지 구조에 통합되고 제거된 노드가 정리되며 수동 개입 없이 Slurm 구성이 업데이트됩니다. 이렇게 하면 토폴로지가 항상 실제 클러스터 상태를 반영합니다.
참고
고급 사용자는 Slurm 컨트롤러 노드에 로그인하고 slurm.conf 및 해당 토폴로지 파일(topology.yamlSlurm 25.11 이상 또는 Slurm 24.x)을 수동으로 수정하여 토폴로지 동작을 재정의topology.conf할 수 있습니다. 그러나 조정 작업, 노드 교체 및 기타 클러스터 수명 주기 이벤트를 포함하여 후속 클러스터 업데이트 중에 HyperPod에서 수동 변경 사항을 덮어쓸 수 있습니다. 이러한 파일을 수동으로 수정하는 경우 클러스터 업데이트 후 변경 사항을 확인합니다.
UltraServer 토폴로지 모범 사례
SageMaker HyperPod의 UltraServer 아키텍처로 최적의 성능을 얻는 방법:
-
적절한 블록 크기 설정: UltraServer 아키텍처와 일치하도록
BlockSizes=18(또는 노드 하나가 예비 노드인 경우 17)을 구성합니다. -
가용성을 높이기 위해 세그먼트 사용:
srun및sbatch명령과 함께--segment=16,--segment=8또는--segment=9를 사용하여 작업 예약 유연성을 개선합니다. -
작업 크기와 세그먼트 크기 고려:
BlockSizes=18인 경우 인스턴스가 최대 18개인 작업은 항상 단일 UltraServer에서 실행됩니다.BlockSizes=16인 경우 인스턴스가 16개 미만인 작업은 항상 단일 UltraServer에서 실행되고, 인스턴스가 18개인 작업은 하나 또는 두 개의 UltraServer에서 실행될 수 있습니다.
분할을 고려할 때는 다음 사항을 고려하세요.
--segment=1인 경우 각 인스턴스를 별도의 UltraServer에서 실행할 수 있습니다.-N 18 --segment 9인 경우 한 UltraServer에 9개의 노드가 배치되고, 다른 9개의 노드는 동일한 UltraServer 또는 다른 UltraServer에 배치될 수 있습니다.-N 24 --segment 8인 경우 2개 또는 3개의 UltraServers에서 작업을 실행할 수 있으며, 노드가 8개씩 동일한 서버에 함께 배치됩니다.
SageMaker HyperPod 토폴로지 인식 스케줄링의 제한 사항
Slurm 25.11 이상에서는 파티션 수준 토폴로지 및 클러스터 기본값을 통해 이기종 클러스터(인스턴스 유형이 다른 flat 클러스터)가 지원됩니다. 각 파티션은 인스턴스 유형에 가장 적합한 토폴로지를 수신하며, 비 토폴로지 및 UltraServer 노드는 동일한 클러스터 내에서 예약 가능한 상태로 유지됩니다. 자세한 내용은 파티션 수준 토폴로지 선택 단원을 참조하십시오.
Slurm 24.x를 실행하는 클러스터에는 단일 클러스터 전체 토폴로지가 적용되며 topology/block 플러그인에는 이기종 클러스터에 대해 다음과 같은 제한 사항이 있습니다.
블록에 나열된 노드만 Slurm에서 예약할 수 있습니다.
모든 블록에는 최소한
BlockSizes[0]노드가 있어야 합니다.
Slurm 24.x의 이기종 클러스터의 경우 다음 대안을 고려하세요.
블록 플러그인을 이종 클러스터와 함께 사용하지 마세요. 대신 다른 파티션에 UltraServer 노드를 격리하세요.
동일한 VPC에서만 UltraServers를 사용하여 별도의 클러스터를 생성하고 Slurm의 멀티클러스터 설정을 사용합니다.