본문으로 건너뛰기

© 2026 Molayo

HuggingFace헤드라인2026. 05. 04. 20:44

Accelerate ND-Parallel: 효율적인 다 GPU 학습 가이드

요약

본 문서는 대규모 언어 모델(LLM) 학습 시 효율적인 다중 GPU 병렬화 전략을 안내합니다. 데이터 병렬화(DP), 완전한 쉐드드 데이터 병렬화(FSDP), 텐서 병렬화(TP) 등 다양한 병렬화 기법의 작동 원리와 조합 방법을 설명하며, 특히 Accelerate와 Axolotl 같은 도구를 사용하여 이러한 복잡한 전략을 쉽게 구현할 수 있는 방법을 제시합니다. 사용자는 `ParallelismConfig`를 통해 여러 전략의 차수와 조합을 구성하고, 메모리 제약에 따라 최적의 병렬화 구성을 선택하여 대규모 모델 학습을 가속화할 수 있습니다.

핵심 포인트

  • 다양한 병렬화 기법(DP, FSDP, TP 등)을 이해하고 적절히 조합하는 것이 대규모 LLM 학습의 핵심입니다.
  • 데이터 병렬화(DP)는 배치 데이터를 분산시키고 모델 전체가 단일 장치에 들어갈 수 있어야 합니다. (최상위 레벨 전략)
  • FSDP는 모델 가중치, 경사도, 옵티마이저 상태를 여러 GPU에 분산시켜 메모리 제약을 해결합니다.
  • Accelerate와 Axolotl 같은 프레임워크의 `ParallelismConfig`를 사용하여 복잡한 병렬화 조합을 쉽게 구성하고 관리할 수 있습니다.
  • 병렬화 전략 선택 시에는 장치 간 통신 오버헤드를 최소화하는 것이 가장 중요한 과제입니다.

학습 스크립트에 추가하는 방법:

from transformers import AutoModelForCausalLM
from accelerate import Accelerator
from accelerate.parallelism_config import ParallelismConfig
...

또한, Accelerate 리포지토리에 더 포괄적인 엔드 투 엔드 학습 스크립트를 포함하여 데이터 로더, 옵티마이저, 그리고 학습 루프를 설정하는 방법과 학습 후 모델을 저장하는 방법을 보여줍니다.

규모에 맞게 모델을 미세 조정하고 다양한 미세 조정 기법과 병렬화 전략을 조합하기 위해 우리는 이 기술을 Axolotl 에 통합했습니다. 바로 시작할 수 있도록 도와드리기 위해 몇 가지 예제 구성 파일을 테스트하여 필요에 맞게 수정할 수 있습니다 - 아래 명령어로 하나를 실행해 보세요:

# 참고: 최소 월드 사이즈 16 필요
axolotl train examples/distributed-parallel/llama-3_1-8b-hsdp-tp.yaml

Axolotl ND-Parallelism 문서도 더 자세한 정보를 확인하실 수 있습니다 - 기존 구성 파일에 ND 병렬 기법을 추가하는 것은 Axolotl 구성 파일에 다음 필드 중 하나 또는 여러 개를 추가하는 것과 같습니다:

# Fully Sharded Data Parallel degree (참고: fsdp_config 필드도 필요)
# 자세한 내용은 https://docs.axolotl.ai/docs/multi-gpu.html#sec-fsdp 를 참조하세요
dp_shard_size: 2
...

ParallelismConfig 클래스를 통해 Accelerate 또는 Axolotl 의 구성 필드를 통해 서로 다른 병렬화 전략의 차수와 조합 방법을 쉽게 구성할 수 있습니다. 그러나 어떤 구성이 우리 사용 사례에 가장 잘 작동하는지 어떻게 알 수 있을까요? 우리가 수십억, 심지어 수조 개의 파라미터를 가진 모델을 학습으로 확장함에 따라 주요 과제는 다양한 병렬화 전략을 이해하고 장치 간 통신 오버헤드를 최소화하는 방식으로 상호작용하는 방법을 아는 것입니다. 이 게시물에서는 서로 다른 병렬화 전략이 어떻게 작동하는지, 그리고 언제 그리고 어떻게 조합할 수 있는지에 대해 살펴보겠습니다.

  • 데이터 병렬화 (Data Parallelism)
  • 완전한 쉐드드 데이터 병렬화 (Fully Sharded Data Parallelism)
  • 텐서 병렬화 (Tensor Parallelism)
  • 컨텍스트 병렬화 (Context Parallelism)
  • ND 병렬화 (ND Parallelisms)
  • 사용 노트 (Usage Notes)

데이터 병렬화 (DP) 는 여러 GPU 를 통한 모델 학습을 위한 가장 일반적인 기법으로, 각 장치에 모델을 복제하고 경사도와 옵티마이저 상태를 복제하여 데이터 배치와 균등하게 분배하며 장치 간 경사를 동기화한 후 파라미터를 업데이트합니다. 이는 단일 장치 학습에 비해 통량을 크게 증가시킬 수 있지만, 모델이 단일 장치에 들어맞아야 합니다.

Accelerate 의 ParallelismConfig 또는 Axolotl 의 구성 필드에서 dp_replicate_size 매개변수를 사용하여 모델의 복제 수를 제어할 수 있습니다. DP 는 최상위 레벨 병렬화 전략임을 주목해야 합니다. 즉, dp_replicate_size=2 를 사용하고 다른 병렬화 전략과 조합하면 2 개의 모델 복제가 있으며, 각각 다른 병렬화 전략에 의해 영향을 받습니다. 예를 들어, dp_replicate_size=2tp_size=2 를 사용하면 2 개의 모델 복제가 있으며, 각각 2 개의 텐서 병렬 쉐드가 있습니다.

우리는 단일 장치의 데이터로 설명하는 단어를 사용합니다.

모델이 단일 장치에 들어맞지 너무 크다면? 완전한 쉐드드 데이터 병렬 (FSDP) 은 이를 해결하여 모델의 가중치, 경사도와 옵티마이저 상태를 GPU 에 균등하게 분배합니다 (이는 DeepSpeed 의 ZeRO-3 에서 영감을 받음), 각 장치는 여전히 전체 배치 데이터의 자신의 부분을 받습니다. 위의 다이어그램에서 알 수 있듯이, 각 장치에 전체 모델의 완전한 복제를 필요로 하지 않고, 전파 전에 한 번에 단일 레이어의 가중치를 수집하고, 이후 가중치가 다시 쉐드될 수 있습니다.

이 방식에서는 전파 및 역전파 전에 쉐드된 파라미터를 수집하기 위한 통신 오버헤드를 희생하여 메모리 사용량을 교환하고, 로컬 경사를 축소 및 분산합니다. FSDP 에서 이 균형을 조절할 수 있는 방법은 파라미터가 수집되는粒度 (granularity) 를 조정하는 것입니다. 한 가지 예외

AI 자동 생성 콘텐츠

본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0