계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

  • 홈
  • Who Am I(CV)
  • 태그

공지사항

인기 글

태그

  • SIFT
  • 에지검출
  • 머신러닝
  • 지도학습
  • 패턴인식
  • 결정경계
  • f1-score
  • 네트워크플로우
  • MaximumFlow
  • DigitalImageProcessing
  • ComputerVision
  • 선형회귀
  • 최대유량
  • 언어모델
  • DIP
  • NLP
  • 비용함수
  • 비지도학습
  • machinelearning
  • 군집화
  • 기계학습
  • LM
  • networkflow
  • 디지털이미지처리
  • 알고리즘
  • 경사하강법
  • 컴퓨터비전
  • 손실함수
  • ML
  • 파이썬 클린코드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

딥러닝 모델에서의 분산학습(Distributed Training)
인공지능(AI)/딥러닝(DL)

딥러닝 모델에서의 분산학습(Distributed Training)

2022. 7. 12. 18:00
반응형
해당 게시글은 자연어처리 리뷰 모임인 집현전 팀의  고현웅님의 [Large-scal LM에 대한 얕고 넓은 지식들(part1)] 부분의 Parallelism: Theory and Practice 강의 영상을 기반으로 작성되었습니다.

Intro.

딥러닝 모델에서는 학습 시 대용량의 모델 크기와 학습 데이터 때문에 여러 GPU에 나누어 연산하는 분산학습(Distributed Training)이 이루어져야 GPU를 최대한 활용하여 효율적으로 학습할 수 있습니다. 이러한 딥러닝 분산학습에는 학습 데이터를 여러 GPU에 나누어 학습하는 데이터 병렬화(Data Parallelism)와 모델을 여러 GPU에 나누는 모델 병렬화(Model Parallelism)와 입력 미니배치를 여러 GPU에 나누어 실행하는 파이프라인 병렬화(Pipeline Parallelism)로 크게 세 가지 기법으로 나눌 수 있습니다. 

병렬화의 종류

 

데이터 병렬화(Data Parallelism)

데이터가 많을 때, 데이터를 병렬처리하여 학습속도를 끌어올리는 작업입니다. 모든 디바이스에 모델을 복사하고 서로 다른 데이터를 각 디바이스에 입력합니다. 이 경우 배치 사이즈를 디바이스 수의 배수만큼 더 많이 입력할 수 있으나 이러한 데이터 병렬화의 경우 모델 하나가 디바이스 하나에 완전히 올라갈 때만 가능하다는 단점이 있습니다.

데이터 병렬화 예시: # of devices(4), batch size(16)

 

 

모델 병렬화(Model Parallelism)

모델이 너무 커서 하나의 디바이스에 담을 수 없을 때 파라미터를 쪼개서 올리는 방법으로, 각 디바이스에 모델의 파라미터 일부분들이 담겨있습니다. 이를 이용하면 큰 모델도 작은 디바이스 여러 개를 이용하여 올릴 수 있습니다.

모델 병렬화 예시: # of devices(4)

 

 

파이프 라인 병렬화(Pipeline Parallelism)

기본  모델 병렬화(이미지 출처:사진 클릭)

레이어 단위로 모델 병렬화를 수행할 경우 반드시 레이어 순으로 실행해야 합니다. 위의 그림에서 Fn은 n번째 forward computation function을 나타내며 Bn은 n번째 back-propagation function을 나타냅니다. 그림은 4개의 다른 GPU(세로축)에 4개의 레이어가 배치된 모델을 나타냅니다. 가로축은 한 번에 하나의 GPU만 활성화되는 것을 나타냅니다.

 

따라서 레이어 단위의 모델 병렬화를 수행할 경우 연산 과정의 순서가 생길 수 밖에 없습니다. 즉, 훈련 프로세스에서 GPU 사용률이 저하됩니다. 바로 이 연산과정을 효율적으로 하기 위해 병렬적으로 파이프라이닝(Pipelining)하는 것이 파이프라인 병렬화입니다.

 

파이프라인 모델 병렬화(이미지 출처: 사진클릭)

위 그림에서는 이 문제를 완화하기 위해 입력 미니 배치를 여러 마이크로 배치로 분할하고 이를 여러 GPU에서 실행하는 파이프 라인을 나타냅니다. 그림은 4개의 다른 GPU(세로출)에 4개의 레이어가 배치 된 모델을 나타냅니다. 수평 축은 기본 모델 병렬화보다 GPU가 훨씬 더 효율적으로 활용되고 있음을 보입니다. 하지만 여전히 특정 GPU가 사용되지 않는 거품(Bubble)이 존재합니다.

반응형

'인공지능(AI) > 딥러닝(DL)' 카테고리의 다른 글

Pytorch에서 Multi GPU를 사용하는 방법(nn.DataParallel)  (0) 2022.07.13
    '인공지능(AI)/딥러닝(DL)' 카테고리의 다른 글
    • Pytorch에서 Multi GPU를 사용하는 방법(nn.DataParallel)
    계속지나가기
    계속지나가기
    NLP Engineer

    티스토리툴바