한 권으로 LLM 온라인 스터디 1기 Day_6 - GPU 병렬화 기법

2025. 1. 7. 21:53·DL/LLM&RAG

https://product.kyobobook.co.kr/detail/S000214934825

 

한 권으로 끝내는 실전 LLM 파인튜닝 | 강다솔 - 교보문고

한 권으로 끝내는 실전 LLM 파인튜닝 | 실무 현장에서 꼭 필요한 파인튜닝, PEFT, vLLM 서빙 기술을 직접 실습하면서 배워 보자!AI 기술의 최전선에서 배우는 LLM 파인튜닝의 모든 것! 이론적 토대부터

product.kyobobook.co.kr

 

"한 권으로 끝내는 실전 LLM 파인튜닝" 교재를 활용해 3주(주말 제외) 동안 진행 되는 온라인 스터디

 

GPU 병렬화

병렬화 기술은 여러 컴퓨팅 자원을 동시에 활용하여 대규모 작업을 효율적으로 처리하는 방법이다.

단일 GPU로 훈련 속도가 지나치게 느리거나, 모델의 가중치 및 파라미터 수가 단일 GPU의 메모리 용량을 초과할 경우, 혹은 초대규모 모델 학습과 방대한 데이터 처리가 필요한 경우에 병렬화 기술이 필수적이다.

병렬화를 통해 작업을 여러 부분으로 나누어 동시에 처리함으로써, 전체 처리 시간을 크게 단축할 수 있습니다. 이는 학습 속도를 높이고 리소스 비용을 절감하는 데 있어 중요한 역할을 한다.

 


데이터 병렬 처리 (Data Parallelism, DP)

데이터 병렬 처리(DP)는 훈련 데이터를 병렬 처리하는 기법이다. 전체 데이터를 작은 덩어리 여러 개로 나눠 각각을 서로 다른 GPU와 같은 계산 장치에서 동시에 처리함으로써 전체 학습 과정의 속도를 높인다. 

 

동작 방식

  1. 모델의 동일한 복사본을 각 GPU에 복사
  2. GPU는 독립적으로 순전파와 역전파를 수행
  3. GPU에서 계산된 그래디언트를 모아 모든 모델 복사본의 파라미터를 갱신
  4. 모든 계산이 끝난 뒤에는 각 모델의 가중치를 맞춰 모든 GPU가 동일한 상태를 유지하도록 한다

 

장점

  • 여려 GPU로 데이터를 동시에 처리해 학습 시간을 크게 단축
  • 메모리 제약 없이 대규모 데이터셋을 효과적으로 다룰 수 있다

단점

  • 네트워크 통신 비용(오버헤드): GPU 간 그래디언트 수집과 파라미터 동기화 과정에서 발생
  • VRAM 사용량 증가: 각 GPU에 모델 복사본을 저장해야 하므로 많은 VRAM을 사용
  • VRAM 활용 비효율성: 특정 GPU에 그래디언트가 모여 계산되므로 모든 GPU의 VRAM을 균등하게 활용하지 못함

분산 데이터 병렬 처리 (Distributed Data Parallel, DDP)

DDP는 데이터 병렬 처리(DP)의 확장된 형태로, 여러 GPU에서 학습 작업을 병렬로 수행하면서 효율적인 통신과 동기화를 통해 성능을 최적화한 방식

  병렬처리방식 노드수 속도
DP Multithread (GIL 발생) 싱글 노드 느림
DDP Multiprocessing 싱글 노드 / 멀티 노드 빠름

 

(PyTorch 공식 문서에서도 DP 대신 DDP를 추천하고 있습니다.)

동작 방식

  1. 모델 복제: 각 GPU에 동일한 모델의 복사본을 배치
  2. 데이터 분할: 입력 데이터를 GPU 수만큼 분할
  3. 병렬 학습: 각 GPU에서 독립적으로 순전파와 역전파 수행
  4. 통신 및 동기화: GPU 간 All-Reduce 알고리즘을 사용해 그래디언트를 동기화하고 모델 파라미터를 업데이트

 

장점

  • 효율적인 통신: All-Reduce를 통해 그래디언트를 동기화하여 통신 오버헤드를 줄임
  • 자동 프로세스 관리: PyTorch DDP는 각 프로세스와 GPU를 자동으로 매핑
  • 확장성: 대규모 모델과 데이터셋에서도 효과적

단점

  • 복잡성 증가: 단순 DP에 비해 설정이 복잡할 수 있음
  • 통신 의존성: GPU 간 통신 속도와 네트워크 대역폭에 따라 성능 차이가 발생
  • 메모리 사용량: DP와 마찬가지로 각 GPU에 모델 복사본이 저장되므로 VRAM 사용량이 큼

DDP의 흐름

 


모델 병렬화 (Model Parallelism, MP)

 

모델 병렬화(MP)는 하나의 모델을 여러 GPU에 분산하여 학습하는 방식

모델의 각 레이어를 나누어 서로 다른 GPU에서 처리함으로써, 단일 GPU 메모리로는 처리할 수 없는 대규모 모델 학습이 가능

 

동작 방식

  1. 모델의 레이어를 GPU 단위로 나눔
  2. 입력 데이터는 첫 번째 GPU에서 시작해 각 레이어를 통과하며 GPU 간 이동
  3. 모든 GPU에서 순전파(Forward Propagation)와 역전파(Backward Propagation)를 처리하여 학습을 완료

 

장점

  • 메모리 문제 해결: 모델의 일부만 각 GPU에 저장되므로, GPU 메모리 한계를 극복
  • 대규모 모델 학습: GPT-3, LLaMA 같은 초대규모 모델 학습에 적합

 

단점

  • 레이어 간 통신 오버헤드: GPU 간 레이어 데이터를 주고받는 데 시간이 소요
  • 병렬화 비효율성: 각 GPU가 서로 다른 작업을 처리하므로, GPU 활용률이 떨어질 가능성 존재
  • 구현 복잡성: 모델 구조에 따라 병렬화를 설계하고 최적화 필요

파이프라인 병렬 처리 (Pipeline Parallelism, PP)

파이프라인 병렬 처리(PP)는 모델의 레이어를 여러 GPU에 분산하면서, 데이터 흐름을 파이프라인 방식으로 처리하는 병렬화 방식
이 방식은 데이터 배치를 여러 마이크로 배치(Micro-Batch)로 나누어 GPU 간 순차적으로 처리하며, 병렬 처리를 극대화한다

위의 그림 모델 병렬화, 아래 그림 파이프라인 병렬화
파이프라인 병렬화 레이어 분산 예시

 

동작 방식

  1. 모델의 레이어를 GPU별로 분할하여 배치
  2. 입력 데이터를 마이크로 배치로 나눈 뒤, 첫 번째 GPU에서 작업을 시작
  3. 첫 번째 마이크로 배치가 다음 GPU로 이동하는 동안, 첫 번째 GPU는 다음 마이크로 배치를 처리
  4. 각 GPU가 작업을 순차적으로 처리하며, 전체 파이프라인에서 병렬 처리

 

장점

  • GPU 활용도 향상: 모델의 모든 GPU를 병렬로 활용할 수 있어 효율성이 증가
  • 대규모 모델 처리 가능: 모델의 각 부분을 GPU에 분산하므로, 메모리 제한을 극복

 

단점

  • 파이프라인 대기 시간: 각 마이크로 배치가 이동하는 동안 GPU 간 대기 시간이 발생
  • 배치 크기 제한: 배치 크기가 작을 경우, 파이프라인 병렬화의 이점이 감소
  • 복잡한 설정: GPU 수, 레이어 분할, 마이크로 배치 크기 등을 최적화 필요

텐서 병렬 처리 (Tensor Parallelism, TP)

텐서 병렬 처리(TP)는 모델 자체(전체 파라미터)를 여러 개의 부분으로 쪼개어 서로 다른 GPU에 올리는 방식

텐서 병렬 처리 모델 자체 분산 예시

 

파이프라인 병렬 처리(PP)는 모델의 레이어를 나누어 서로 다른 GPU에 분산 처리

텐서 병렬처리(TP)는 모델 자체(전체 파라미터)를 나누어 서로 다른 GPU에 분산 처리

 

동작 방식

  1. 하나의 큰 텐서를 GPU 간 분할
  2. 각 GPU가 텐서의 일부를 병렬로 연산
  3. 연산 결과를 통합

 

장점

  • 메모리 사용의 효율성이 높아진다
  • 각 GPU가 전체 모델의 일분만 로드하기 때문에 개별 GPU의 메모리 제약을 더 잘 관리할 수 있다
  • 계산 작업을 여러 장치에 분산시켜 전체적인 처리 시간을 단축할 수 있으며, 행렬 연산과 같은 복잡한 계산에 유리

 

단점

  • 통신 오버헤드 발생 : 계산 과정에서 GPU 간에 데이터를 주고 받아야 하기 때문에 네트워크 대역폭과 지연 시간에 크게 영향을 미침
  • 텐서를 효과적으로 나누고 관리하는 로직을 구현하는 것은 복잡하여 구현 난이도가 어려움

TP의 흐름

 


완전 분할 데이터 병렬 처리 (Fully Sharded Data Parallel, FSDP)

완전 분할 데이터 병렬 처리(FSDP)는 모델을 각 GPU에 복사하여 데이터를 병렬 처리하는 방식인 DDP의 발전된 형태로, 각 GPU에 모델을 복사하는 대신 모델의 파라미터를 샤딩하여 메모리 사용을 줄이고, 더 큰 모델을 효율적으로 학습할 수 있게 합니다. FSDP는 파라미터를 여러 GPU에 나누어 저장하고 계산하는 방식

 

FSDP의 흐름

 

 

동작 방식

  1. 모델 샤딩: 모델의 파라미터를 여러 GPU에 분할하여 각 GPU에서 일부만 저장하고 계산하도록 함으로써 메모리 사용을 최적화
  2. 메모리 절약: 모델 파라미터를 각 GPU에 분배하여 메모리 사용량을 줄이고, 대형 모델을 훈련할 수 있게 지원
  3. 동적 샤드 로딩: 필요할 때만 다른 GPU의 파라미터를 로딩하여 메모리를 절약하고 효율적인 훈련을 수행
  4. 효율적인 그래디언트 집계: 각 GPU에서 계산된 그래디언트를 최소화된 통신으로 집계하여 빠르고 효율적인 학습을 진행

 

장점 

  • 메모리 사용 최적화
  • 메모리 효율성 향상
  • GPU 간에 파라미터를 동적으로 이동할 수 있어 다양한 학습 시나리오와 하드웨어 설정에 적응 가능

 

단점

  • 구현 복잡성
  • 올바른 샤딩 전략과 메모리 관리 필요
  • 모델이 여러 GPU에 분산되어 디버깅과 오류 추적이 복잡
  • 샤드 간의 데이터 동기화에는 여전히 통신 비용이발생하여, 전체 시스템의 성능에 영향을 줄 수 있다

 

 

참고

https://huggingface.co/docs/transformers/ko/perf_train_gpu_many#naive-model-parallelism-vertical-and-pipeline-parallelism

 

다중 GPU에서 효율적인 훈련

단일 GPU에서의 훈련이 너무 느리거나 모델 가중치가 단일 GPU의 메모리에 맞지 않는 경우, 다중-GPU 설정을 사용합니다. 단일 GPU에서 다중 GPU로 전환하기 위해서는 작업을 분산해야 합니다. 데이

huggingface.co

https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/

 

Introducing PyTorch Fully Sharded Data Parallel (FSDP) API

Recent studies have shown that large model training will be beneficial for improving model quality. During the last 3 years, model size grew 10,000 times from BERT with 110M parameters to Megatron-2 with one trillion. However, training large AI models is n

pytorch.org

https://medium.com/tesser-team/%EB%8B%A4%EC%A4%91-gpu%EB%A5%BC-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-dp%EB%B6%80%ED%84%B0-fsdp%EA%B9%8C%EC%A7%80-3057d31150b6

 

다중 GPU를 효율적으로 사용하는 방법: DP부터 FSDP까지

안녕하세요. 테서의 연구개발팀에서 의료 용어 해석을 진행하고 있는 노수철입니다.

medium.com

 

'DL > LLM&RAG' 카테고리의 다른 글

한 권으로 LLM 온라인 스터디 1기 Day_(8, 9) - 단일 GPU를 활용한 Gemma-2B-it 파인튜닝 (2편) : Gemma-2B-it 모델 파인튜닝 및 평가  (0) 2025.01.10
한 권으로 LLM 온라인 스터디 1기 Day_7 - 단일 GPU를 활용한 Gemma-2B-it 파인튜닝 (1편) : Gemma-2B-it 모델 한계 분석  (0) 2025.01.10
한 권으로 LLM 온라인 스터디 1기 Day_5 - GPT, Gemma, Llama3 : 대규모 언어 모델의 진화와 비교  (0) 2025.01.05
한 권으로 LLM 온라인 스터디 1기 Day_4 - 파인튜닝의 모든 것 : PEFT와 태스크 적용 사례  (0) 2025.01.05
한 권으로 LLM 온라인 스터디 1기 Day_3 - 멀티헤드 어텐션 & 피드포워드, Blocks  (0) 2025.01.05
'DL/LLM&RAG' 카테고리의 다른 글
  • 한 권으로 LLM 온라인 스터디 1기 Day_(8, 9) - 단일 GPU를 활용한 Gemma-2B-it 파인튜닝 (2편) : Gemma-2B-it 모델 파인튜닝 및 평가
  • 한 권으로 LLM 온라인 스터디 1기 Day_7 - 단일 GPU를 활용한 Gemma-2B-it 파인튜닝 (1편) : Gemma-2B-it 모델 한계 분석
  • 한 권으로 LLM 온라인 스터디 1기 Day_5 - GPT, Gemma, Llama3 : 대규모 언어 모델의 진화와 비교
  • 한 권으로 LLM 온라인 스터디 1기 Day_4 - 파인튜닝의 모든 것 : PEFT와 태스크 적용 사례
YAHO_STUDY
YAHO_STUDY
DATA&AI_study.zip
  • YAHO_STUDY
    YAHO_CODE
    YAHO_STUDY
  • 전체
    오늘
    어제
    • 분류 전체보기 (57)
      • Paper Review (0)
      • SQL (16)
      • CODING_TEST (21)
      • Time Series (0)
      • DL (20)
        • NLP (5)
        • LLM&RAG (15)
        • Recommender System (0)
      • 최적화 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    prompt-tuning
    Gemma
    quantization
    qlora
    hash
    Programmers
    PEFT
    한 권으로 끝내는 실전 llm 파인튜닝
    MySQL
    graph
    양자화
    Lora
    SQL
    runpod
    boj
    DP
    coding_test
    fine-tuning
    RNN
    pagedattention
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
YAHO_STUDY
한 권으로 LLM 온라인 스터디 1기 Day_6 - GPU 병렬화 기법
상단으로

티스토리툴바