기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
모델 병렬 처리 개념
모델 병렬 처리는 딥 러닝(DL) 모델이 여러 GPUs 인스턴스와 인스턴스에 걸쳐 분할되는 분산 훈련 방법입니다. SageMaker 모델 병렬 라이브러리 v2(SMP v2)는 네이티브 PyTorch APIs 및 기능과 호환됩니다. 따라서 PyTorch 완전 샤딩된 데이터 병렬(FSDP) 훈련 스크립트 SageMaker를 훈련 플랫폼에 맞게 조정하고 SMP v2가 제공하는 성능 개선을 활용할 수 있습니다. 이 소개 페이지에서는 모델 병렬 처리에 대한 개략적인 개요와 일반적으로 크기가 매우 큰 딥 러닝(DL) 모델을 훈련할 때 발생하는 문제를 극복하는 데 도움이 되는 방법에 대해 설명합니다. 또한 모델 병렬 라이브러리가 모델 병렬 전략 및 메모리 소비를 SageMaker 관리하는 데 도움이 되는 기능을 제공하는 예를 제공합니다.
모델 병렬화란 무엇입니까?
딥러닝 모델(계층 및 파라미터)의 크기를 늘리면 컴퓨터 비전 및 자연어 처리와 같은 복잡한 작업의 정확도가 향상됩니다. 그러나 단일 의 메모리에 맞출 수 있는 최대 모델 크기에는 제한이 있습니다GPU. DL 모델을 훈련할 때 GPU 메모리 제한은 다음과 같은 방식으로 병목 현상일 수 있습니다.
-
모델의 메모리 풋프린트는 파라미터 수에 비례하여 확장되므로 훈련할 수 있는 모델의 크기를 제한합니다.
-
훈련 중 배치당GPU 크기를 제한하여 GPU 사용률과 훈련 효율성을 낮춥니다.
단일 에서 모델 훈련과 관련된 제한을 극복하기 위해 SageMaker는 여러 컴퓨팅 노드에서 DL 모델을 효율적으로 배포하고 훈련하는 데 도움이 되는 모델 병렬 라이브러리를 GPU제공합니다. 또한 라이브러리를 사용하면 EFA지원되는 디바이스를 사용하여 최적화된 분산 훈련을 달성할 수 있으므로 지연 시간이 짧고 처리량이 높으며 OS 바이패스를 통해 노드 간 통신의 성능이 향상됩니다.
모델 병렬 처리를 사용하기 전에 메모리 요구 사항 추정
SageMaker 모델 병렬 라이브러리를 사용하기 전에 다음을 고려하여 대규모 DL 모델 훈련의 메모리 요구 사항을 파악하세요.
(FP16) 또는 float16
(bfloat16
BF16) 및 Adam 옵티마이저와 같은 자동 혼합 정밀도를 사용하는 훈련 작업의 경우 파라미터당 필수 GPU 메모리는 약 20바이트이며, 다음과 같이 분류할 수 있습니다.
-
FP16 또는 BF16 파라미터 ~ 2바이트
-
FP16 또는 그라BF16데이션 ~ 2바이트
-
FP32 옵티마이저 상태 Adam 옵티마이저를 기반으로 약 8바이트
-
파라미터 FP32 사본 ~ 4바이트(
optimizer apply
(OA) 작업에 필요) -
그라데이션 FP32 사본 ~ 4바이트(OA 작업에 필요)
100억 개의 파라미터가 있는 비교적 작은 DL 모델의 경우에도 단일 에서 사용할 수 있는 일반 메모리(예: 40GB200GB/80GB GPU 메모리가 있는 NVIDIA A100)보다 훨씬 큰 최소 200GB의 메모리가 필요할 수 있습니다GPU. 모델 및 옵티마이저 상태에 대한 메모리 요구 사항 외에도 포워드 패스에서 생성된 활성화와 같은 다른 메모리 소비자도 있습니다. 필요한 메모리는 200GB를 훨씬 넘을 수 있습니다.
분산 훈련의 경우 NVIDIA A100 및 H100 Tensor 코어가 GPUs 각각 있는 Amazon EC2 P4 및 P5 인스턴스를 사용하는 것이 좋습니다. CPU 코어, RAM, 연결된 스토리지 볼륨 및 네트워크 대역폭과 같은 사양에 대한 자세한 내용은 Amazon 인스턴스 유형 페이지의 가속 컴퓨팅 섹션을 참조하세요. EC2
가속화된 컴퓨팅 인스턴스에도 불구하고 Megatron-LM 및 T5와 같은 약 100억 개의 파라미터가 있는 모델과 GPT-3과 같은 수십억 개의 파라미터가 있는 더 큰 모델은 각 GPU 디바이스의 모델 복제본에 적합하지 않습니다.
라이브러리가 모델 병렬 처리 및 메모리 저장 기술을 사용하는 방법
라이브러리는 다양한 유형의 모델 병렬 처리 기능과 옵티마이저 상태 샤딩, 활성화 체크포인트, 활성화 오프로드 등의 메모리 절약 기능으로 구성되어 있습니다. 이러한 모든 기술을 결합하여 수천억 개의 파라미터로 구성된 대형 모델을 효율적으로 훈련시킬 수 있습니다.
샤딩된 데이터 병렬 처리
샤딩된 데이터 병렬 처리는 데이터 병렬 그룹 GPUs 내에서 모델의 상태(모델 파라미터, 그라데이션 및 최적화 프로그램 상태)를 분할하는 메모리 절약형 분산 훈련 기법입니다.
SMP v2는 를 통해 샤딩된 데이터 병렬 처리를 구현FSDP하고 확장하여 에 대한 거대 모델 훈련의 거의 선형적인 스케일 AWS
샤딩된 데이터 병렬 처리를 모델에 독립 실행형 전략으로 적용할 수 있습니다. 또한 NVIDIA A100 Tensor Core GPUs, ml.p4d.24xlarge
및 가 탑재된 가장 성능이 뛰어난 GPU 인스턴스를 사용하는 경우 SageMaker 데이터 병렬 처리(SMDDP) 라이브러리 에서 제공하는 AllGather
작업에서 향상된 훈련 속도를 활용할 ml.p4de.24xlarge
수 있습니다.
샤딩된 데이터 병렬 처리를 자세히 살펴보고 샤딩된 데이터 병렬 처리를 텐서 병렬 처리 및 혼합 정밀도 훈련과 같은 다른 기법과 조합하여 설정하거나 사용하는 방법을 알아보려면 섹션을 참조하세요하이브리드 샤딩된 데이터 병렬 처리.
전문가 병렬 처리
SMP v2는 네이티브 PyTorch FSDP 에 대한 지원 외에도 전문가 병렬 처리를 구현하기 위해 NVIDIA Megatron
MoE 모델은 여러 전문가로 구성된 트랜스포머 모델 유형으로, 각각은 신경망, 일반적으로 피드 포워드 네트워크()로 구성됩니다FFN. 라우터라는 게이트 네트워크는 어떤 토큰이 어떤 전문가에게 전송되는지 결정합니다. 이러한 전문가는 입력 데이터의 특정 측면을 전문적으로 처리하여 모델을 더 빠르게 훈련하고 컴퓨팅 비용을 절감하는 동시에 대응 고밀도 모델과 동일한 성능 품질을 달성할 수 있습니다. 또한 전문가 병렬 처리는 GPU 디바이스 간에 MoE 모델의 전문가를 분할하는 병렬 처리 기법입니다.
SMP v2를 사용하여 MoE 모델을 훈련하는 방법을 알아보려면 섹션을 참조하세요전문가 병렬 처리.
텐서 병렬화
Tensor 병렬 처리는 개별 계층 또는 를 디바이스 nn.Modules
간에 분할하여 병렬로 실행합니다. 다음 그림은 SMP 라이브러리가 4개의 계층으로 모델을 분할하여 양방향 텐서 병렬 처리()를 달성하는 방법에 대한 가장 간단한 예를 보여줍니다"tensor_parallel_degree": 2
. 다음 그림에서 모델 병렬 그룹, 텐서 병렬 그룹 및 데이터 병렬 그룹에 대한 표기법은 TP_GROUP
DP_GROUP
각각 MP_GROUP
, 및 입니다. 각 모델 복제본의 계층은 이분되어 두 개의 로 분산됩니다GPUs. 라이브러리는 텐서 분산 모델 복제본 간의 통신을 관리합니다.
에 대한 텐서 병렬 처리 및 기타 메모리 절약 기능을 자세히 살펴보고 핵심 기능의 조합을 설정하는 방법을 PyTorch알아보려면 섹션을 참조하세요텐서 병렬화.
활성화 체크포인트 및 오프로드
GPU 메모리를 저장하기 위해 라이브러리는 순방향 패스 중에 사용자 지정 모듈에 대한 GPU 메모리에 내부 활성화가 저장되지 않도록 활성화 체크포인트를 지원합니다. 라이브러리는 역방향 통과 중에 이러한 활성화를 다시 계산합니다. 또한 활성화 오프로딩을 사용하면 저장된 활성화를 CPU 메모리로 오프로드하고 백워드 패스 GPU 중에 로 다시 가져와 활성화 메모리 설치 공간을 추가로 줄입니다. 이러한 기능을 사용하는 방법에 대한 자세한 내용은 활성화 체크포인트 및 섹션을 참조하세요활성화 오프로딩.
모델에 적합한 기법 선택
올바른 기법 및 구성 선택에 대한 자세한 내용은 섹션을 참조하세요SageMaker 분산 모델 병렬화 모범 사례.