기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에서 제공하는 기본 수명 주기 스크립트로 시작합니다. HyperPod
이 섹션에서는 하향식 접근 HyperPod 방식으로 Slurm을 설정하는 기본 흐름의 모든 구성 요소를 안내합니다. 를 실행하기 위한 HyperPod 클러스터 생성 요청을 준비하는 것부터 시작하여 계층 구조에 대해 자세히 CreateCluster
API살펴보고 수명 주기 스크립트로 이동합니다. Awsome 분산 훈련 GitHub 리포지토리
git clone https://github.com/aws-samples/awsome-distributed-training/
에서 Slurm 클러스터를 설정하기 위한 기본 수명 주기 스크립트 SageMaker HyperPod 는 에서 사용할 수 있습니다1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
다음 흐름도는 기본 수명 주기 스크립트를 설계하는 방법에 대한 자세한 개요를 보여줍니다. 다이어그램 아래의 설명과 절차 가이드는 API 통화 중에 HyperPod CreateCluster
어떻게 작동하는지 설명합니다.
그림: HyperPod 클러스터 생성 및 수명 주기 스크립트의 구조에 대한 자세한 흐름도입니다. (1) 점선 화살표는 상자가 “내로 호출”되는 위치로 이동하며 구성 파일 및 수명 주기 스크립트 준비의 흐름을 보여줍니다. 이는 provisioning_parameters.json
및 수명 주기 스크립트 준비부터 시작됩니다. 그런 다음 집합 실행을 lifecycle_script.py
위해 에 순서대로 코딩됩니다. 또한 lifecycle_script.py
스크립트 실행은 인스턴스 터미널에서 실행할 on_create.sh
쉘 스크립트에 HyperPod 의해 수행됩니다. (2) 실선 화살표는 기본 HyperPod 클러스터 생성 흐름과 상자가 “인터로 호출” 또는 “제출”되는 방법을 보여줍니다. on_create.sh
는 콘솔 UI의 create_cluster.json
또는 클러스터 생성 요청 양식에서 클러스터 생성 요청에 필요합니다. 요청을 제출한 후 는 요청의 지정된 구성 정보와 수명 주기 스크립트를 CreateCluster
API 기반으로 를 HyperPod 실행합니다. (3) 점선 화살표는 HyperPod 플랫폼이 클러스터 리소스 프로비저닝 중에 클러스터 인스턴스resource_config.json
에 를 생성함을 나타냅니다. 에는 HyperPod 클러스터 ARN, 인스턴스 유형 및 IP 주소와 같은 클러스터 리소스 정보가 resource_config.json
포함되어 있습니다. 클러스터 생성 중에 resource_config.json
파일을 예상할 수 있도록 수명 주기 스크립트를 준비해야 합니다. 자세한 내용은 아래 절차 가이드를 참조하세요.
다음 절차 가이드에서는 HyperPod 클러스터 생성 중에 발생하는 작업과 기본 수명 주기 스크립트를 설계하는 방법을 설명합니다.
-
create_cluster.json
- 클러스터 생성 요청을 제출 HyperPod하려면 JSON 형식의CreateCluster
요청 파일을 준비합니다. 이 모범 사례 예제에서는 요청 파일의 이름이 라고 가정합니다create_cluster.json
. 인스턴스 그룹으로 HyperPod 클러스터를 프로비저닝create_cluster.json
하려면 를 작성합니다. 가장 좋은 방법은 HyperPod 클러스터에서 구성하려는 Slurm 노드 수와 동일한 수의 인스턴스 그룹을 추가하는 것입니다. 설정하려는 Slurm 노드에 할당할 인스턴스 그룹에 고유한 이름을 지정해야 합니다.또한 S3 버킷 경로를 지정하여 전체 구성 파일 및 수명 주기 스크립트 세트를
CreateCluster
요청 양식의 필드 이름InstanceGroups.LifeCycleConfig.SourceS3Uri
에 저장하고, 항목 쉘 스크립트의 파일 이름(명칭on_create.sh
)을 에 지정해야 합니다InstanceGroups.LifeCycleConfig.OnCreate
.참고
HyperPod 콘솔 UI에서 클러스터 제출 생성 양식을 사용하는 경우 콘솔은 사용자를 대신하여
CreateCluster
요청을 채우고 제출하며 백엔드CreateCluster
API에서 를 실행합니다. 이 경우 를 생성할 필요가 없습니다.create_cluster.json
대신 클러스터 제출 생성 양식에 올바른 클러스터 구성 정보를 지정해야 합니다. -
on_create.sh
- 각 인스턴스 그룹에 대해 명령을 실행하고, 스크립트를 실행on_create.sh
하여 소프트웨어 패키지를 설치하고, Slurm을 사용하여 클러스터 환경을 설정하려면 진입점 쉘 스크립트인 를 HyperPod 제공해야 합니다. 준비해야 하는 두 가지 사항은 Slurm을 설정하는 HyperPod 데provisioning_parameters.json
필요한 와 소프트웨어 패키지 설치를 위한 수명 주기 스크립트 세트입니다. 이 스크립트는 의 샘플 스크립트에 표시된 대로 다음 파일을 찾아 실행하기 위해 작성되어야 합니다on_create.sh
. 참고
전체 수명 주기 스크립트 세트를 에서 지정한 S3 위치에 업로드해야 합니다
create_cluster.json
. 또한provisioning_parameters.json
를 동일한 위치에 배치해야 합니다.-
provisioning_parameters.json
- 입니다Slurm 노드를 프로비저닝하기 위한 구성 양식 HyperPod.on_create.sh
스크립트는 이 JSON 파일을 찾고 해당 파일의 경로를 식별하기 위한 환경 변수를 정의합니다. 이 JSON 파일을 통해 Slurm 노드와 Slurm용 Amazon FSx for Lustre와 같은 스토리지 옵션을 구성하여 통신할 수 있습니다. 에서provisioning_parameters.json
에 지정한 이름을 사용하여 HyperPod 클러스터 인스턴스 그룹을 설정 방식에 따라 적절하게create_cluster.json
Slurm 노드에 할당해야 합니다.다음 다이어그램은 인스턴스 HyperPod 그룹을 Slurm 노드에 할당하기 위해 두 JSON 구성 파일
create_cluster.json
및 를provisioning_parameters.json
작성해야 하는 방법의 예를 보여줍니다. 이 예제에서는 컨트롤러(관리) 노드, 로그인 노드(선택 사항) 및 컴퓨팅(작업자) 노드라는 세 개의 Slurm 노드를 설정하는 경우를 가정합니다.작은 정보
이 두 JSON 파일을 HyperPod 검증하는 데 도움이 되도록 서비스 팀은 검증 스크립트인 를 제공합니다
validate-config.py
. 자세한 내용은 에서 Slurm 클러스터를 생성하기 전에 JSON 구성 파일을 검증합니다. HyperPod 을 참조하십시오. 그림:
create_cluster.json
클러스터 생성과 Slurm 구성을provisiong_params.json
직접 비교 HyperPod합니다. 의 인스턴스 그룹 수는 Slurm 노드로 구성하려는 노드 수와 일치해야create_cluster.json
합니다. 그림의 예제의 경우 세 개의 인스턴스 그룹 HyperPod 클러스터에 세 개의 Slurm 노드가 구성됩니다. 그에 따라 인스턴스 그룹 이름을 지정하여 HyperPod 클러스터 인스턴스 그룹을 Slurm 노드에 할당해야 합니다. -
resource_config.json
- 클러스터를 생성하는 동안lifecycle_script.py
스크립트는 에서resource_config.json
파일을 예상하도록 작성됩니다 HyperPod. 이 파일에는 인스턴스 유형 및 IP 주소와 같은 클러스터에 대한 정보가 포함되어 있습니다.를 실행하면
CreateCluster
HyperPod는 파일을/opt/ml/config/resource_config.json
기반으로 에서 리소스 구성create_cluster.json
파일을 API생성합니다. 파일 경로는 라는 환경 변수에 저장됩니다SAGEMAKER_RESOURCE_CONFIG_PATH
.중요
resource_config.json
파일은 HyperPod 플랫폼에서 자동으로 생성되므로 생성NOT해야 합니다. 다음 코드는create_cluster.json
이전 단계를 기반으로 클러스터 생성에서 생성될resource_config.json
의 예를 보여주고 백엔드에서 어떤 일이 발생하고 자동 생성된 가 어떻게 보일resource_config.json
지 이해하는 데 도움이 됩니다.{ "ClusterConfig": { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/abcde01234yz", "ClusterName": "your-hyperpod-cluster" }, "InstanceGroups": [ { "Name": "controller-machine", "InstanceType": "ml.c5.xlarge", "Instances": [ { "InstanceName": "controller-machine-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] }, { "Name": "login-group", "InstanceType": "ml.m5.xlarge", "Instances": [ { "InstanceName": "login-group-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] }, { "Name": "compute-nodes", "InstanceType": "ml.trn1.32xlarge", "Instances": [ { "InstanceName": "compute-nodes-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-2", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-3", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-4", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] } ] }
-
lifecycle_script.py
- 프로비저닝되는 동안 HyperPod 클러스터에서 Slurm을 설정하는 수명 주기 스크립트를 집합적으로 실행하는 기본 Python 스크립트입니다. 이 스크립트는 에 지정되거나 식별된 경로resource_config.json
에서provisioning_parameters.json
와 를 읽고 관련 정보를 각 수명 주기 스크립트에on_create.sh
전달한 다음 수명 주기 스크립트를 순서대로 실행합니다.수명 주기 스크립트는 Slurm 설정, 사용자 생성, Conda 또는 Docker 설치와 같이 클러스터 생성 중에 소프트웨어 패키지를 설치하고 필수 또는 사용자 지정 구성을 설정할 수 있는 완전한 유연성을 가진 스크립트 세트입니다. 샘플
lifecycle_script.py
스크립트는 리포지토리에서 Slurm 데몬( start_slurm.sh
) 시작, Amazon FSx for Lustre( mount_fsx.sh
) 탑재, MariaDB 계정( setup_mariadb_accounting.sh
) 및 RDS 계정 설정()과 같은 다른 기본 수명 주기 스크립트를 실행할 준비가 되어 있습니다 setup_rds_accounting.sh
. 스크립트를 더 추가하고, 동일한 디렉터리에서 패키징하고, lifecycle_script.py
에 코드 라인을 추가하여 스크립트를 HyperPod 실행할 수도 있습니다. 기본 수명 주기 스크립트에 대한 자세한 내용은 Awsome Distributed Training GitHub 리포지토리의 3.1 수명 주기 스크립트도 참조하세요. 참고
HyperPod 는 클러스터의 각 인스턴스SageMaker HyperPod DLAMI에서 실행되며 AMI는 클러스터와 HyperPod 기능 간의 호환성을 준수하는 소프트웨어 패키지를 사전 설치했습니다. 사전 설치된 패키지를 다시 설치하는 경우 호환되는 패키지를 설치할 책임이 있으며 일부 HyperPod 기능은 예상대로 작동하지 않을 수 있습니다.
기본 설정 외에도
utils
폴더 아래에서 다음 소프트웨어를 설치하기 위한 스크립트를 더 많이 사용할 수 있습니다. lifecycle_script.py
파일은 설치 스크립트를 실행하기 위한 코드 라인을 포함하도록 이미 준비되었습니다. 따라서 다음 항목을 참조하여 해당 행을 검색하고 주석을 제거하여 활성화합니다.-
다음 코드 라인은 Docker
, Enroot 및 Pyxis 를 설치하기 위한 것입니다. https://github.com/NVIDIA/pyxis 이러한 패키지는 Slurm 클러스터에서 Docker 컨테이너를 실행하는 데 필요합니다. 이 설치 단계를 활성화하려면
config.py
파일 True
에서enable_docker_enroot_pyxis
파라미터를 로 설정합니다.# Install Docker/Enroot/Pyxis if Config.enable_docker_enroot_pyxis: ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_enroot_pyxis.sh").run(node_type)
-
HyperPod 클러스터를 Amazon Managed Service for Prometheus 및 Amazon Managed Grafana와 통합하여 클러스터 및 클러스터 노드에 대한 지표를 HyperPod Amazon Managed Grafana 대시보드로 내보낼 수 있습니다. 지표를 내보내고 Amazon Managed Grafana에서 Slurm 대시보드
, NVIDIA DCGM Exporter 대시보드 및 EFA 지표 대시보드 를 사용하려면 Prometheus용 Slurm 내보내기 , NVIDIA DCGM 내보내기 및 EFA 노드 내보내기를 설치해야 합니다. Amazon Managed Grafana 워크스페이스에서 내보내기 패키지 설치 및 Grafana 대시보드 사용에 대한 자세한 내용은 섹션을 참조하세요SageMaker HyperPod 클러스터 리소스 모니터링. 이 설치 단계를 활성화하려면
config.py
파일 True
에서enable_observability
파라미터를 로 설정합니다.# Install metric exporting software and Prometheus for observability if Config.enable_observability: if node_type == SlurmNodeType.COMPUTE_NODE: ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_dcgm_exporter.sh").run() ExecuteBashScript("./utils/install_efa_node_exporter.sh").run() if node_type == SlurmNodeType.HEAD_NODE: wait_for_scontrol() ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_slurm_exporter.sh").run() ExecuteBashScript("./utils/install_prometheus.sh").run()
-
-
-
2단계의 모든 구성 파일과 설정 스크립트를 1단계의
CreateCluster
요청에 제공한 S3 버킷에 업로드해야 합니다. 예를 들어create_cluster.json
에 다음이 있다고 가정합니다."LifeCycleConfig": { "SourceS3URI": "
s3://sagemaker-hyperpod-lifecycle/src
", "OnCreate": "on_create.sh
" }그런 다음
lifecycle_script.py
에는on_create.sh
,provisioning_parameters.json
, 및 기타 모든 설정 스크립트가 포함되어야"s3://sagemaker-hyperpod-lifecycle/src"
합니다. 다음과 같이 로컬 폴더의 파일을 준비했다고 가정합니다.└── lifecycle_files // your local folder ├── provisioning_parameters.json ├── on_create.sh ├── lifecycle_script.py └── ... // more setup scrips to be fed into lifecycle_script.py
파일을 업로드하려면 다음과 같이 S3 명령을 사용합니다.
aws s3 cp --recursive
./lifecycle_scripts
s3://sagemaker-hyperpod-lifecycle/src