Amazon SageMaker HyperPod 태스크 거버넌스에서 토폴로지 인식 예약 사용 - Amazon SageMaker AI

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SageMaker HyperPod 태스크 거버넌스에서 토폴로지 인식 예약 사용

Amazon SageMaker HyperPod 태스크 거버넌스의 토폴로지 인식 스케줄링은 Amazon EC2 인스턴스의 물리적 네트워크 토폴로지를 기반으로 포드를 배치하여 분산 기계 학습 워크로드의 훈련 효율성을 최적화합니다. 가용 영역, 네트워크 블록, 물리적 랙을 포함한 AWS 인프라의 계층 구조를 고려하여 토폴로지 인식 일정을 예약하면 빈번한 통신이 필요한 포드를 가까운 곳에 예약하여 네트워크 지연 시간을 최소화할 수 있습니다. 이 지능형 배치는 집약적인 pod-to-pod 통신이 필요한 대규모 기계 학습 훈련 작업에 특히 유용하므로 훈련 시간이 단축되고 클러스터 전체에서 리소스 사용률이 향상됩니다.

참고

토폴로지 인식 일정을 사용하려면 HyperPod 태스크 거버넌스 버전이 v1.2.2-eksbuild.1 이상인지 확인합니다.

토폴로지 인식 예약은 다음 인스턴스 유형을 지원합니다.

  • ml.p3dn.24xlarge

  • ml.p4d.24xlarge

  • ml.p4de.24xlarge

  • ml.p5.48xlarge

  • ml.p5e.48xlarge

  • ml.p5en.48xlarge

  • ml.p6e-gb200.36xlarge

  • ml.trn1.2xlarge

  • ml.trn1.32xlarge

  • ml.trn1n.32xlarge

  • ml.trn2.48xlarge

  • ml.trn2u.48xlarge

토폴로지 인식 스케줄링은 기존 HyperPod 워크플로와 통합되는 동시에 kubectl YAML 파일과 HyperPod CLI를 통해 유연한 토폴로지 기본 설정을 제공합니다. HyperPod 태스크 거버넌스는 토폴로지 레이블을 사용하여 클러스터 노드를 자동으로 구성하고 HyperPod 태스크 거버넌스 정책 및 리소스 차용 메커니즘과 함께 작동하여 토폴로지 인식 예약이 현재 운영 프로세스를 방해하지 않도록 합니다. 기본 토폴로지 사양과 필수 토폴로지 사양을 모두 기본적으로 지원하므로 특정 성능 요구 사항에 맞게 워크로드 배치를 미세 조정하는 동시에 토폴로지 제약 조건을 충족할 수 없는 경우 표준 일정으로 되돌릴 수 있는 유연성을 유지할 수 있습니다.

HyperPod에서 토폴로지 인식 레이블을 활용하면 물리적 네트워크 인프라를 고려하는 지능형 포드 배치를 통해 기계 학습 워크로드를 개선할 수 있습니다. HyperPod 작업 거버넌스는 계층적 데이터 센터 토폴로지를 기반으로 포드 일정을 자동으로 최적화합니다. 이를 통해 네트워크 지연 시간이 단축되고 분산 ML 작업에 대한 훈련 성능이 향상됩니다. 이러한 토폴로지 인식은 네트워크 계층 구조에서 관련 포드를 전략적으로 서로 가깝게 배치하여 통신 오버헤드를 최소화하므로 대규모 기계 학습 워크로드에 특히 유용합니다. 따라서 복잡한 네트워크 토폴로지 구성을 수동으로 관리할 필요 없이 포드 간 통신 네트워크 지연 시간이 최적화되고, 리소스 사용률이 더 효율적이며, 컴퓨팅 집약적인 AI/ML 애플리케이션의 전반적인 성능이 향상됩니다.

다음은 HyperPod 태스크 거버넌스가 포드를 예약할 수 있는 사용 가능한 토폴로지 네트워크 계층의 레이블입니다.

  • topology.k8s.aws/network-node-layer-1

  • topology.k8s.aws/network-node-layer-2

  • topology.k8s.aws/network-node-layer-3

토폴로지 인식 일정을 사용하려면 YAML 파일에 다음 레이블을 포함합니다.

  • kueue.x-k8s.io/podset-required-topology -이 작업에 필요한 포드가 있어야 하고 노드의 모든 포드가 동일한 토폴로지 계층 내에서 예약되어야 함을 나타냅니다.

  • kueue.x-k8s.io/podset-preferred-topology -이 작업에 포드가 있어야 하지만 동일한 토폴로지 계층 내에서 포드를 예약하는 것이 좋지만 필수는 아님을 나타냅니다. HyperPod 작업 거버넌스는 다음 토폴로지 계층을 시도하기 전에 한 계층 내에서 포드를 예약하려고 시도합니다.

리소스가 동일한 토폴로지 레이블을 공유하지 않으면 작업이 일시 중지됩니다. 작업은 대기 목록에 있습니다. Kueue는 리소스가 충분하다는 것을 확인하면 작업을 허용하고 실행합니다.

다음 예제에서는 YAML 파일에서 레이블을 사용하는 방법을 보여줍니다.

apiVersion: batch/v1 kind: Job metadata: name: test-tas-job namespace: hyperpod-ns-team-name labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue kueue.x-k8s.io/priority-class: PRIORITY_CLASS-priority spec: parallelism: 10 completions: 10 suspend: true template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue annotations: kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" or kueue.x-k8s.io/podset-preferred-topology: "topology.k8s.aws/network-node-layer-3" spec: nodeSelector: topology.k8s.aws/network-node-layer-3: TOPOLOGY_LABEL_VALUE containers: - name: dummy-job image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0 args: ["3600s"] resources: requests: cpu: "100" restartPolicy: Never

다음 표에서는 kubectl YAML 파일에서 사용할 수 있는 새 파라미터에 대해 설명합니다.

파라미터 설명
kueue.x-k8s.io/queue-name 작업을 실행하는 데 사용할 대기열의 이름입니다. 이 queue-name의 형식은 여야 합니다hyperpod-ns-team-name-localqueue.
kueue.x-k8s.io/priority-class 포드 예약에 대한 우선 순위를 지정할 수 있습니다. 이 사양은 선택 사항입니다.
주석 작업에 연결하는 토폴로지 주석을 포함합니다. 사용 가능한 토폴로지는 kueue.x-k8s.io/podset-required-topologykueue.x-k8s.io/podset-preferred-topology. 주석 또는 nodeSelector를 사용할 수 있지만 둘 다 동시에 사용할 수는 없습니다.
nodeSelector Amazon EC2 인스턴스 배치의 계층을 나타내는 네트워크 계층을 지정합니다. 이 필드 또는 주석을 사용하지만 둘 다 동시에 사용하지는 않습니다. YAML 파일에서 nodeSelector 파라미터를 사용하여 포드의 정확한 계층을 선택할 수도 있습니다. 레이블 값을 가져오려면 DescribeInstanceTopology API 작업을 사용합니다.

HyperPod CLI를 사용하여 작업을 실행하고 토폴로지 인식 예약을 사용할 수도 있습니다. HyperPod CLI에 대한 자세한 내용은 섹션을 참조하세요SageMaker HyperPod CLI 명령.

hyp create hyp-pytorch-job \ --version 1.1 \ --job-name sample-pytorch-job \ --image 123456789012.dkr.ecr.us-west-2.amazonaws.com/ptjob:latest \ --pull-policy "Always" \ --tasks-per-node 1 \ --max-retry 1 \ --priority high-priority \ --namespace hyperpod-ns-team-name \ --queue-name hyperpod-ns-team-name-localqueue \ --preferred-topology-label topology.k8s.aws/network-node-layer-1

다음은 토폴로지 레이블이 있는 PytorchJob을 실행하는 데 사용할 수 있는 구성 파일의 예입니다. MPI 및 Tensorflow 작업을 실행하려는 경우 파일은 거의 비슷합니다. 대신 이러한 작업을 실행하려면 PyTorchJob 대신 올바른 이미지를 사용하는 등 구성 파일을 적절히 변경해야 합니다. PyTorchJob을 실행하는 경우 마스터 노드와 작업자 노드에 다른 토폴로지를 할당할 수 있습니다. PyTorchJob에는 항상 하나의 마스터 노드가 있으므로 토폴로지를 사용하여 작업자 포드를 대신 지원하는 것이 좋습니다.

apiVersion: kubeflow.org/v1 kind: PyTorchJob metadata: annotations: {} labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue name: tas-test-pytorch-job namespace: hyperpod-ns-team-name spec: pytorchReplicaSpecs: Master: replicas: 1 restartPolicy: OnFailure template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch Worker: replicas: 10 restartPolicy: OnFailure template: metadata: # annotations: # kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch resources: limits: cpu: 1 requests: memory: 200Mi cpu: 1 #nodeSelector: # topology.k8s.aws/network-node-layer-3: xxxxxxxxxxx

클러스터의 토폴로지를 보려면 DescribeInstanceTopology API 작업을 사용합니다. 기본적으로 토폴로지는 AWS Management Console 및 Amazon SageMaker Studio에 숨겨집니다. 다음 단계에 따라 사용 중인 인터페이스에서 확인합니다.

SageMaker Studio

  1. SageMaker Studio에서 클러스터로 이동합니다.

  2. 작업 보기의 이름 열에서 옵션 메뉴를 선택한 다음 열 관리를 선택합니다.

  3. 요청된 토폴로지토폴로지 제약 조건을 선택하여 열을 추가하여 Kubernetes 포드 목록에서 토폴로지 정보를 확인합니다.

AWS Management Console

  1. https://console.aws.amazon.com/sagemaker/ Amazon SageMaker AI 콘솔을 엽니다.

  2. HyperPod 클러스터에서 클러스터 관리를 선택합니다.

  3. 작업 탭을 선택한 다음 기어 아이콘을 선택합니다.

  4. 인스턴스 속성에서 요청된 토폴로지토폴로지 제약 조건을 전환합니다.

  5. 테이블에서 토폴로지 정보를 보려면 확인을 선택합니다.