Amazon EKS 및 Torch Distributed Elastic PlatoBlockchain Data Intelligence를 사용한 분산 교육. 수직 검색. 일체 포함.

Amazon EKS 및 Torch Distributed Elastic을 사용한 분산 교육

많은 산업에서 데이터 크기가 증가함에 따라 분산 딥 러닝 모델 교육이 점점 더 중요해지고 있습니다. 컴퓨터 비전 및 자연어 처리의 많은 응용 프로그램은 이제 딥 러닝 모델의 훈련을 필요로 합니다. 딥 러닝 모델은 복잡성이 기하급수적으로 증가하고 종종 수백 테라바이트의 데이터로 훈련됩니다. 그런 다음 방대한 클라우드 인프라를 사용하여 이러한 대규모 모델의 교육을 확장하는 것이 중요해집니다.

개발자는 PyTorch와 같은 오픈 소스 프레임워크를 사용하여 직관적인 모델 아키텍처를 쉽게 설계할 수 있습니다. 그러나 이러한 모델의 훈련을 여러 노드에 걸쳐 확장하는 것은 오케스트레이션 복잡성이 증가하기 때문에 어려울 수 있습니다.

분산 모델 교육은 주로 두 가지 패러다임으로 구성됩니다.

  • 모델 병렬 – 모델 병렬 학습에서 모델 자체가 너무 커서 단일 GPU의 메모리에 맞지 않고 모델을 학습시키기 위해 여러 GPU가 필요합니다. 3억 개의 훈련 가능한 매개변수(크기가 약 175GB)가 있는 Open AI의 GPT-350 모델이 이에 대한 좋은 예입니다.
  • 데이터 병렬 – 데이터 병렬 훈련에서 모델은 단일 GPU에 상주할 수 있지만 데이터가 너무 크기 때문에 모델을 훈련하는 데 며칠 또는 몇 주가 걸릴 수 있습니다. 여러 GPU 노드에 데이터를 배포하면 훈련 시간을 크게 줄일 수 있습니다.

이 게시물에서는 다음을 사용하여 PyTorch 모델을 훈련하는 예제 아키텍처를 제공합니다. 토치 분산 탄성 분산 데이터 병렬 방식의 프레임워크 Amazon Elastic Kubernetes 서비스 (아마존 EKS).

사전 조건

이 게시물에 보고된 결과를 복제하기 위한 유일한 전제 조건은 AWS 계정입니다. 이 계정에서 EKS 클러스터를 생성하고 Luster 용 Amazon FSx 파일 시스템. 또한 컨테이너 이미지를 Amazon Elastic Container Registry (Amazon ECR) 계정의 리포지토리. 이러한 구성 요소를 설정하는 지침은 게시물 전체에서 필요에 따라 제공됩니다.

EKS 클러스터

Amazon EKS는 AWS에서 Kubernetes 애플리케이션을 실행하고 확장하는 관리형 컨테이너 서비스입니다. Amazon EKS를 사용하면 최신 버전을 사용하여 분산 교육 작업을 효율적으로 실행할 수 있습니다. 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 인스턴스는 자체 제어 평면 또는 노드를 설치, 운영 및 유지 관리할 필요가 없습니다. 그것은 인기있는 오케 스트레이터 머신 러닝(ML) 및 AI 워크플로용 AWS의 일반적인 EKS 클러스터는 다음 그림과 같습니다.

우리는 오픈 소스 프로젝트를 발표했으며, EKS용 AWS DevOps(aws-do-eks), EKS 클러스터를 프로비저닝하고 분산 교육 작업을 실행하기 위해 사용하기 쉽고 구성 가능한 스크립트 및 도구의 대규모 컬렉션을 제공합니다. 이 프로젝트는 프레임워크 수행: 단순성, 유연성 및 보편성. 다음을 사용하여 원하는 클러스터를 구성할 수 있습니다. eks.conf 파일을 실행한 다음 실행하여 실행하십시오. eks-create.sh 스크립트. 자세한 지침은 GitHub 레포.

Torch Distributed Elastic을 사용하여 PyTorch 모델 학습

TDE(Torch Distributed Elastic)는 가용성에 따라 컴퓨팅 리소스를 동적으로 확장하는 것이 중요한 대규모 딥 러닝 모델을 교육하기 위한 기본 PyTorch 라이브러리입니다. 그만큼 Kubernetes용 TorchElastic 컨트롤러 TDE 교육에 필요한 포드 및 서비스의 수명 주기를 자동으로 관리하는 TDE용 기본 Kubernetes 구현입니다. 이를 통해 필요에 따라 교육 중에 컴퓨팅 리소스를 동적으로 확장할 수 있습니다. 또한 노드 장애에서 작업을 복구하여 내결함성 교육을 제공합니다.

이 게시물에서는 PyTorch를 훈련하는 단계에 대해 설명합니다. 이피션트넷-B7레스넷50 사용하는 모델 IMAGEnet TDE를 사용하여 분산 방식으로 데이터. 우리는 PyTorch를 사용합니다 분산 데이터 병렬 API 및 Kubernetes TorchElastic 컨트롤러를 사용하고 여러 GPU 노드가 포함된 EKS 클러스터에서 교육 작업을 실행합니다. 다음 다이어그램은 이 모델 교육에 대한 아키텍처 다이어그램을 보여줍니다.

Amazon EKS 및 Torch Distributed Elastic PlatoBlockchain Data Intelligence를 사용한 분산 교육. 수직 검색. 일체 포함.

Kubernetes용 TorchElastic은 주로 TorchElastic Kubernetes 컨트롤러(TEC)와 매개변수 서버(etcd)의 두 가지 구성 요소로 구성됩니다. 컨트롤러는 교육 작업을 모니터링하고 관리하는 역할을 하고 매개변수 서버는 분산 동기화 및 피어 검색을 위해 작업자 노드를 추적합니다.

훈련 포드가 데이터에 액세스하려면 각 포드가 탑재할 수 있는 공유 데이터 볼륨이 필요합니다. 다음을 통한 공유 볼륨에 대한 몇 가지 옵션 컨테이너 스토리지 인터페이스 (CSI) 드라이버 포함 EKS용 AWS DevOps are 아마존 탄성 파일 시스템 (아마존 EFS) 및 광택을 위한 FSx.

클러스터 설정

클러스터 구성에서는 시스템 포드에 대해 하나의 c5.2xlarge 인스턴스를 사용합니다. 4개의 p24d.50xlarge 인스턴스를 작업자 포드로 사용하여 EfficientNet 모델을 교육합니다. ResNet3.8 교육의 경우 pXNUMXxlarge 인스턴스를 작업자 포드로 사용합니다. 또한 FSx 공유 파일 시스템을 사용하여 교육 데이터와 모델 아티팩트를 저장합니다.

AWS p4d.24xlarge 인스턴스에는 탄성 직물 어댑터 (EFA) 노드 간의 네트워킹을 제공합니다. EFA에 대해서는 포스트 뒷부분에서 더 논의합니다. EFA를 통한 통신을 활성화하려면 .yaml 파일을 통해 클러스터 설정을 구성해야 합니다. 안 예제 파일 GitHub 리포지토리에서 제공됩니다.

이 .yaml 파일이 올바르게 구성되면 GitHub 리포지토리에 제공된 스크립트를 사용하여 클러스터를 시작할 수 있습니다.

./eks-create.sh

자세한 내용은 GitHub 레포 자세한 지침은

p4d.24xlarge와 p3.8xlarge에서 작업을 실행하는 데에는 실질적으로 차이가 없습니다. 이 게시물에 설명된 단계는 둘 다에 대해 작동합니다. 유일한 차이점은 p4d.24xlarge 인스턴스에서 EFA를 사용할 수 있다는 점입니다. ResNet50과 같은 더 작은 모델의 경우 EFA 네트워킹에 비해 표준 네트워킹은 훈련 속도에 최소한의 영향을 미칩니다.

Lustre 파일 시스템용 FSx

FSx는 고성능 컴퓨팅 워크로드용으로 설계되었으며 솔리드 스테이트 드라이브 스토리지 볼륨을 사용하여 밀리초 미만의 대기 시간을 제공합니다. 많은 수의 노드로 확장할 때 더 나은 성능을 제공했기 때문에 FSx를 선택했습니다. 주의해야 할 중요한 세부 사항은 FSx가 단일 가용 영역에만 존재할 수 있다는 것입니다. 따라서 FSx 파일 시스템에 액세스하는 모든 노드는 FSx 파일 시스템과 동일한 가용 영역에 있어야 합니다. 이를 달성하는 한 가지 방법은 클러스터를 생성하기 전에 특정 노드 그룹에 대해 클러스터 .yaml 파일에 관련 가용 영역을 지정하는 것입니다. 또는 클러스터가 설정된 후 이러한 노드에 대한 Auto Scaling 그룹의 네트워크 부분을 수정하고 단일 서브넷을 사용하도록 제한할 수 있습니다. 이는 Amazon EC2 콘솔에서 쉽게 수행할 수 있습니다.

EKS 클러스터가 가동되어 실행 중이고 가용 영역에 대한 서브넷 ID를 알고 있다고 가정하면 FSx 파일 시스템에 필요한 정보를 제공하여 FSx 파일 시스템을 설정할 수 있습니다. fsx.conf 에 설명 된 파일 추가 정보 그리고 실행 배포.sh 스크립트 fsx 폴더. 이렇게 하면 파일 시스템에 액세스하기 위한 올바른 정책 및 보안 그룹이 설정됩니다. 스크립트는 또한 CSI 드라이버 FSx의 경우 데몬 집합입니다. 마지막으로 단일 .yaml 파일을 적용하여 Kubernetes에서 FSx 영구 볼륨 클레임을 생성할 수 있습니다.

kubectl apply -f fsx-pvc-dynamic.yaml

이렇게 하면 에 지정된 가용 영역에 FSx 파일 시스템이 생성됩니다. fsx.conf 파일을 생성하고 영구 볼륨 클레임을 생성합니다. fsx-pvc, RWX(Read-Write-Many) 방식으로 클러스터의 모든 포드에 탑재될 수 있습니다.

실험에서는 12개의 클래스로 분할된 1,000만 개 이상의 훈련 이미지가 포함된 완전한 ImageNet 데이터를 사용했습니다. 데이터는 다음에서 다운로드할 수 있습니다. 이미지넷 웹사이트. 원래 TAR 공에는 여러 디렉토리가 있지만 모델 교육의 경우에만 관심이 있습니다. ILSVRC/Data/CLS-LOC/이것은 trainval 하위 디렉토리. 훈련하기 전에 이미지를 재정렬해야 합니다. val PyTorch에 필요한 디렉토리 구조와 일치하는 하위 디렉토리 이미지 폴더 수업. 이것은 간단한 파이썬 스크립트 다음 단계에서 데이터가 영구 볼륨에 복사된 후

에서 데이터를 복사하려면 아마존 단순 스토리지 서비스 (Amazon S3) 버킷을 FSx 파일 시스템에 추가하여 이 작업에 대한 스크립트를 포함하는 Docker 이미지를 생성합니다. 예제 Dockerfile 및 셸 스크립트는 CSI GitHub 리포지토리 내의 폴더. 우리는 다음을 사용하여 이미지를 만들 수 있습니다. build.sh 스크립트를 만든 다음 다음을 사용하여 Amazon ECR에 푸시합니다. push.sh 스크립트. 이 스크립트를 사용하기 전에 ECR 저장소에 대한 올바른 URI를 제공해야 합니다. .env GitHub 리포지토리의 루트 폴더에 있는 파일입니다. Docker 이미지를 Amazon ECR에 푸시한 후 관련 .yaml 파일을 적용하여 데이터를 복사하는 포드를 시작할 수 있습니다.

kubectl apply -f fsx-data-prep-pod.yaml

포드는 스크립트를 자동으로 실행합니다. 데이터 준비.sh Amazon S3에서 공유 볼륨으로 데이터를 복사합니다. ImageNet 데이터에는 12만 개 이상의 파일이 있으므로 복사 프로세스는 몇 시간이 걸립니다. 파이썬 스크립트 imagenet_data_prep.py 또한 재정렬하기 위해 실행됩니다. val PyTorch에서 예상한 대로 데이터 세트입니다.

네트워크 가속

Elastic Fabric Adapter(EFA)를 다음과 함께 사용할 수 있습니다. 지원되는 EC2 인스턴스 유형 클러스터의 GPU 노드 간의 네트워크 트래픽을 가속화합니다. 이는 표준 네트워크 통신이 병목 현상을 일으킬 수 있는 대규모 분산 교육 작업을 실행할 때 유용할 수 있습니다. 여기에서 사용하는 EKS 클러스터에서 EFA 장치 플러그인을 배포하고 테스트하기 위한 스크립트는 efa 장치 플러그인 GitHub 리포지토리의 폴더입니다. EKS 클러스터에서 EFA를 사용하여 작업을 활성화하려면 필요한 하드웨어 및 소프트웨어가 있는 클러스터 노드 외에도 EFA 장치 플러그인을 클러스터에 배포해야 하며 작업 컨테이너에는 호환되는 CUDA 및 NCCL이 있어야 합니다. 버전 설치.

NCCL 테스트를 실행하고 p4d.24xlarge 인스턴스에서 EFA의 성능을 평가하는 방법을 시연하려면 먼저 해당하는 실행하여 Kubeflow MPI 연산자를 배포해야 합니다. 배포.sh 스크립트 mpi 연산자 폴더. 그런 다음 우리는 실행 배포.sh 스크립트 및 업데이트 테스트-efa-nccl.yaml 매니페스트 so 제한 및 리소스 요청 vpc.amazonaws.com p4d.4xlarge 노드에서 사용 가능한 24개의 EFA 어댑터가 함께 번들로 제공되어 최대 처리량을 제공합니다.

달리기 kubectl apply -f ./test-efa-nccl.yaml 테스트를 적용한 다음 테스트 포드의 로그를 표시합니다. 로그 출력의 다음 줄은 EFA가 사용 중임을 확인합니다.

NCCL INFO NET/OFI Selected Provider is efa

테스트 결과는 다음 출력과 유사해야 합니다.

[1,0]<stdout>:#                                                       out-of-place                       in-place
[1,0]<stdout>:#       size         count      type   redop     time   algbw   busbw  error     time   algbw   busbw  error
[1,0]<stdout>:#        (B)    (elements)                       (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
[1,0]<stdout>:           8             2     float     sum    629.7    0.00    0.00  2e-07    631.4    0.00    0.00  1e-07
[1,0]<stdout>:          16             4     float     sum    630.5    0.00    0.00  1e-07    628.1    0.00    0.00  1e-07
[1,0]<stdout>:          32             8     float     sum    627.6    0.00    0.00  1e-07    628.2    0.00    0.00  1e-07
[1,0]<stdout>:          64            16     float     sum    633.6    0.00    0.00  1e-07    628.4    0.00    0.00  6e-08
[1,0]<stdout>:         128            32     float     sum    627.5    0.00    0.00  6e-08    632.0    0.00    0.00  6e-08
[1,0]<stdout>:         256            64     float     sum    634.5    0.00    0.00  6e-08    636.5    0.00    0.00  6e-08
[1,0]<stdout>:         512           128     float     sum    634.8    0.00    0.00  6e-08    635.2    0.00    0.00  6e-08
[1,0]<stdout>:        1024           256     float     sum    646.6    0.00    0.00  2e-07    643.6    0.00    0.00  2e-07
[1,0]<stdout>:        2048           512     float     sum    745.0    0.00    0.01  5e-07    746.0    0.00    0.01  5e-07
[1,0]<stdout>:        4096          1024     float     sum    958.2    0.00    0.01  5e-07    955.8    0.00    0.01  5e-07
[1,0]<stdout>:        8192          2048     float     sum    963.0    0.01    0.02  5e-07    954.5    0.01    0.02  5e-07
[1,0]<stdout>:       16384          4096     float     sum    955.0    0.02    0.03  5e-07    955.5    0.02    0.03  5e-07
[1,0]<stdout>:       32768          8192     float     sum    975.5    0.03    0.06  5e-07   1009.0    0.03    0.06  5e-07
[1,0]<stdout>:       65536         16384     float     sum   1353.4    0.05    0.09  5e-07   1343.5    0.05    0.09  5e-07
[1,0]<stdout>:      131072         32768     float     sum   1395.9    0.09    0.18  5e-07   1392.6    0.09    0.18  5e-07
[1,0]<stdout>:      262144         65536     float     sum   1476.7    0.18    0.33  5e-07   1536.3    0.17    0.32  5e-07
[1,0]<stdout>:      524288        131072     float     sum   1560.3    0.34    0.63  5e-07   1568.3    0.33    0.63  5e-07
[1,0]<stdout>:     1048576        262144     float     sum   1599.2    0.66    1.23  5e-07   1595.3    0.66    1.23  5e-07
[1,0]<stdout>:     2097152        524288     float     sum   1671.1    1.25    2.35  5e-07   1672.5    1.25    2.35  5e-07
[1,0]<stdout>:     4194304       1048576     float     sum   1785.1    2.35    4.41  5e-07   1780.3    2.36    4.42  5e-07
[1,0]<stdout>:     8388608       2097152     float     sum   2133.6    3.93    7.37  5e-07   2135.0    3.93    7.37  5e-07
[1,0]<stdout>:    16777216       4194304     float     sum   2650.9    6.33   11.87  5e-07   2649.9    6.33   11.87  5e-07
[1,0]<stdout>:    33554432       8388608     float     sum   3422.0    9.81   18.39  5e-07   3478.7    9.65   18.09  5e-07
[1,0]<stdout>:    67108864      16777216     float     sum   4783.2   14.03   26.31  5e-07   4782.6   14.03   26.31  5e-07
[1,0]<stdout>:   134217728      33554432     float     sum   7216.9   18.60   34.87  5e-07   7240.9   18.54   34.75  5e-07
[1,0]<stdout>:   268435456      67108864     float     sum    12738   21.07   39.51  5e-07    12802   20.97   39.31  5e-07
[1,0]<stdout>:   536870912     134217728     float     sum    24375   22.03   41.30  5e-07    24403   22.00   41.25  5e-07
[1,0]<stdout>:  1073741824     268435456     float     sum    47904   22.41   42.03  5e-07    47893   22.42   42.04  5e-07
[1,4]<stdout>:test-efa-nccl-worker-0:33:33 [4] NCCL INFO comm 0x7fd4a0000f60 rank 4 nranks 16 cudaDev 4 busId 901c0 - Destroy COMPLETE
[1,0]<stdout>:# Out of bounds values : 0 OK
[1,0]<stdout>:# Avg bus bandwidth    : 8.23785

테스트 결과에서 최대 처리량은 약 42GB/초이고 평균 버스 대역폭은 약 8GB임을 알 수 있습니다.

또한 단일 EFA 어댑터가 활성화된 상태와 EFA 어댑터가 없는 상태로 실험을 수행했습니다. 모든 결과는 다음 표에 요약되어 있습니다.

EFA 어댑터 수 Net/OFI 선정 공급자 평균 대역폭(GB/s) 최대 대역폭(GB/s)
4 이파 8.24 42.04
1 이파 3.02 5.89
0 소켓 0.97 2.38

또한 ImageNet과 같은 상대적으로 작은 모델의 경우 가속 네트워킹을 사용하면 배치 크기 5에서 에포크당 훈련 시간이 8-64%로 감소한다는 사실도 발견했습니다. , 가속화된 네트워킹의 사용이 더 큰 영향을 미칩니다. 배치 크기가 15인 EfficientNet-B18의 훈련에 대해 Epoch 훈련 시간이 7-1% 감소하는 것을 관찰했습니다. 훈련에 대한 EFA의 실제 영향은 모델의 크기에 따라 다릅니다.

GPU 모니터링

교육 작업을 실행하기 전에 다음을 설정할 수도 있습니다. 아마존 클라우드 워치 훈련 중 GPU 활용도를 시각화하기 위한 메트릭. 리소스가 최적으로 사용되고 있는지 또는 잠재적으로 리소스 부족 및 교육 프로세스의 병목 현상을 식별하는지 여부를 아는 것이 도움이 될 수 있습니다.

CloudWatch를 설정하기 위한 관련 스크립트는 GPU 메트릭 폴더. 먼저 Docker 이미지를 생성합니다. amazon-cloudwatch-agentnvidia-smi. Dockerfile을 사용할 수 있습니다. gpu-metrics 이 이미지를 만들 폴더입니다. ECR 레지스트리가 이미 설정되어 있다고 가정합니다. .env 이전 단계의 파일을 사용하여 이미지를 빌드하고 푸시할 수 있습니다. build.shpush.sh. 이 후 실행 deploy.sh 스크립트가 자동으로 설정을 완료합니다. 다음을 사용하여 데몬셋을 시작합니다. amazon-cloudwatch-agent 다양한 지표를 CloudWatch에 푸시합니다. GPU 메트릭은 CWAgent CloudWatch 콘솔의 네임스페이스. 나머지 클러스터 메트릭은 아래에 표시됩니다. ContainerInsights 네임 스페이스.

모델 훈련

PyTorch 교육에 필요한 모든 스크립트는 엘라스틱잡 GitHub 리포지토리의 폴더입니다. 훈련 작업을 시작하기 전에 다음을 실행해야 합니다. etcd 작업자 검색 및 매개변수 교환을 위해 TEC에서 사용하는 서버입니다. 그만큼 배포.sh 스크립트 elasticjob 폴더는 정확히 그 일을 합니다.

p4d.24xlarge 인스턴스에서 EFA를 활용하려면 다음에서 사용할 수 있는 특정 Docker 이미지를 사용해야 합니다. Amazon ECR 공개 갤러리 EFA를 통한 NCCL 통신을 지원합니다. 이 Docker 이미지에 교육 코드를 복사하기만 하면 됩니다. 그만큼 도커 파일 아래 샘플 폴더는 p4d 인스턴스에서 훈련 작업을 실행할 때 사용할 이미지를 생성합니다. 언제나처럼, 우리는 사용할 수 있습니다 빌드.sh푸시.시 폴더에 있는 스크립트를 사용하여 이미지를 빌드하고 푸시합니다.

XNUMXD덴탈의 이미지넷-efa.yaml 파일은 훈련 작업을 설명합니다. 이 .yaml 파일은 교육 작업을 실행하는 데 필요한 리소스를 설정하고 이전 섹션에서 설정한 교육 데이터로 영구 볼륨도 탑재합니다.

여기서 몇 가지 지적할 가치가 있습니다. 복제본 수는 클러스터에서 사용 가능한 노드 수로 설정해야 합니다. 우리의 경우 3개의 p4d.24xlarge 노드가 있었기 때문에 이것을 XNUMX으로 설정했습니다. 에서 imagenet-efa.yaml 파일 nvidia.com/gpu 리소스 아래의 매개변수 및 nproc_per_node 아래에 args 노드당 GPU 수로 설정해야 합니다. p4d.24xlarge의 경우 8입니다. 또한 Python 스크립트의 작업자 인수는 프로세스당 CPU 수를 설정합니다. 실험에서 p4d.4xlarge 인스턴스에서 실행할 때 최적의 성능을 제공하기 때문에 이 값을 24로 선택했습니다. 이러한 설정은 클러스터에서 사용 가능한 모든 하드웨어 리소스의 사용을 최대화하기 위해 필요합니다.

작업이 실행 중일 때 클러스터의 모든 GPU에 대한 CloudWatch의 GPU 사용량을 관찰할 수 있습니다. 다음은 클러스터에 4개의 p24d.100xlarge 노드가 있는 교육 작업 중 하나의 예입니다. 여기에서는 각 노드에서 하나의 GPU를 선택했습니다. 앞에서 언급한 설정을 사용하면 클러스터의 모든 노드에 대한 epoch의 교육 단계에서 GPU 사용량이 XNUMX%에 가깝습니다.

Amazon EKS 및 Torch Distributed Elastic PlatoBlockchain Data Intelligence를 사용한 분산 교육. 수직 검색. 일체 포함.

p50xlarge 인스턴스를 사용하여 ResNet3.8 모델을 교육하려면 p4d.24xlarge를 사용하는 EfficientNet 교육에 대해 설명한 것과 정확히 동일한 단계가 필요합니다. 동일한 Docker 이미지를 사용할 수도 있습니다. 앞서 언급했듯이 p3.8xlarge 인스턴스에는 EFA가 장착되어 있지 않습니다. 그러나 ResNet50 모델의 경우 이는 큰 단점이 아닙니다. 그만큼 이미지넷-fsx.yaml GitHub 리포지토리에서 제공되는 스크립트는 p3.8xlarge 노드 유형에 적절한 리소스로 교육 작업을 설정합니다. 작업은 FSx 파일 시스템의 동일한 데이터 세트를 사용합니다.

GPU 확장

GPU 수를 늘려 EfficientNet-B7 모델에 대한 훈련 시간이 어떻게 확장되는지 관찰하기 위해 몇 가지 실험을 실행했습니다. 이를 위해 각 훈련 실행에 대한 훈련 .yaml 파일의 복제본 수를 1에서 3으로 변경했습니다. 전체 ImageNet 데이터 세트를 사용하는 동안 단일 에포크의 시간만 관찰했습니다. 다음 그림은 GPU 확장 실험의 결과를 보여줍니다. 빨간색 점선은 GPU 수를 늘려서 8개의 GPU를 사용한 실행에서 훈련 시간을 줄이는 방법을 나타냅니다. 우리가 볼 수 있듯이, 스케일링은 예상했던 것과 아주 가깝습니다.

Amazon EKS 및 Torch Distributed Elastic PlatoBlockchain Data Intelligence를 사용한 분산 교육. 수직 검색. 일체 포함.

유사하게, 우리는 p50xlarge 인스턴스에서 ResNet3.8 훈련을 위한 GPU 스케일링 플롯을 얻었습니다. 이 경우 .yaml 파일의 복제본을 1에서 4로 변경했습니다. 이 실험의 결과는 다음 그림에 나와 있습니다.

Amazon EKS 및 Torch Distributed Elastic PlatoBlockchain Data Intelligence를 사용한 분산 교육. 수직 검색. 일체 포함.

정리

유휴 인스턴스 실행과 관련된 비용을 피하기 위해 모델 교육 후에 리소스를 줄이는 것이 중요합니다. 리소스를 생성하는 각 스크립트와 함께, GitHub 레포 삭제하기 위해 일치하는 스크립트를 제공합니다. 설정을 정리하려면 클러스터를 삭제하기 전에 FSx 파일 시스템을 삭제해야 합니다. 이는 클러스터의 VPC에 있는 서브넷과 연결되어 있기 때문입니다. FSx 파일 시스템을 삭제하려면 다음 명령을 실행하면 됩니다(내부에서 fsx 폴더):

kubectl delete -f fsx-pvc-dynamic.yaml
./delete.sh

이렇게 하면 영구 볼륨이 삭제될 뿐만 아니라 FSx 파일 시스템도 삭제되며 파일 시스템의 모든 데이터가 손실됩니다. 이 단계가 완료되면 다음 스크립트를 사용하여 클러스터를 삭제할 수 있습니다. 전의 폴더 :

./eks-delete.sh

그러면 기존 포드가 모두 삭제되고 클러스터가 제거되며 처음에 생성된 VPC가 삭제됩니다.

결론

이 게시물에서는 EKS 클러스터에서 PyTorch 분산 데이터 병렬 모델 교육을 실행하는 데 필요한 단계를 자세히 설명했습니다. 이 작업이 어려울 수 있지만 EKS용 AWS DevOps AWS의 ML Frameworks 팀에서 생성한 프로젝트는 프로세스를 단순화하고 분산 모델 교육에 쉽게 액세스할 수 있도록 하는 데 필요한 모든 스크립트와 도구를 제공합니다.

이 게시물에 사용된 기술에 대한 자세한 내용은 다음을 방문하십시오. 아마존 EKS토치 분산 탄성. 여기에 설명된 접근 방식을 자체 분산 교육 사용 사례에 적용하는 것이 좋습니다.

자료


저자 소개

Amazon EKS 및 Torch Distributed Elastic PlatoBlockchain Data Intelligence를 사용한 분산 교육. 수직 검색. 일체 포함.임란 유누스 AWS의 ML 프레임워크 팀의 수석 솔루션 아키텍트입니다. 그는 Amazon EKS 및 AWS ParallelCluster와 같은 AWS 서비스 전반의 대규모 기계 학습 및 딥 러닝 워크로드에 중점을 둡니다. 그는 컴퓨터 비전 및 산업용 IoT에서 딥 린닝(Deep Leaning)을 적용한 광범위한 경험을 보유하고 있습니다. Imran은 페타바이트 규모의 실험 데이터 분석에 참여하면서 고에너지 입자 물리학 박사 학위를 취득했습니다.

Amazon EKS 및 Torch Distributed Elastic PlatoBlockchain Data Intelligence를 사용한 분산 교육. 수직 검색. 일체 포함.알렉스 이안쿨스키 깊이 있는 실습 작업을 좋아하는 풀스택 소프트웨어 및 인프라 설계자입니다. 그는 현재 AWS에서 자체 관리형 기계 학습을 위한 수석 솔루션 아키텍트입니다. 그의 역할에서 그는 컨테이너 기반 AWS 서비스에서 ML 및 AI 워크로드의 컨테이너화 및 오케스트레이션을 통해 고객을 돕는 데 중점을 두고 있습니다. 그는 또한 오픈 소스의 저자입니다. 프레임워크를 수행 컨테이너 기술을 적용하여 혁신의 속도를 가속화하는 동시에 세계의 가장 큰 문제를 해결하는 것을 좋아하는 Docker 캡틴입니다. 지난 10년 동안 Alex는 기후 변화 퇴치, AI 및 ML 민주화, 더 안전한 여행, 더 나은 의료 서비스, 더 스마트한 에너지를 만드는 일을 했습니다.

타임 스탬프 :

더보기 AWS 기계 학습