딥러닝 모델 병렬 처리 (2018)
I. 머리말
- 딥러닝 모델이 점점 대형화되면서 하나의 디바이스로 연산이 불가능해짐
- 다수의 컴퓨터가 이를 효율적으로 나누어 처리하기 위한 분산 처리 기술이 요구됨
II. 딥러닝 모델 병렬 처리 개요
- 다수의 컴퓨터에서 분산 처리 하는 방법엔 데이터 병렬 처리, 모델 병렬 처리가 있다.
- 모델 병렬 처리는 모델의 파라미터들을 여러 디바이스로 나누어 계산
- SGD 기법을 이용할 경우 미니배치 크기가 적으면 늦게 수렴하거나 정확도가 저하, 미니배치가 가능한 커야한다.
1) 딥러닝 모델 분할
- 분할 방법에 따라 4가지로 나뉜다
① 계층별 분할 ② 피처별 분할 ③ 하이브리드 방법들 ④ 뉴런 단위의 자유 분할
- 레이어를 담당하는 워커들 간의 데이터 전송이 필요하다
- 통신 비용 : (L-1) × 2
- 초기 입력 피처들을 그루핑하여 여러 그룹이 각각의 워커에 배정
- 워커들 사이에 로컬 파라미터를 매 층, 매 피처 분할마다 전달해야하는 의존성이 생김
- 통신 비용 : (L-1) × F× (F-1) × 2
- 모델이 너무 커서 두 가지 모델 분할 방법을 같이 도입할 경우
- 지나치케 많은 통신 오버헤드를 초래한다.
- 통신 비용 : (L-1) × F× F × 2
2) 딥러닝 모델 병렬 처리
- 데이터 병렬 처리와는 다르게 모델 병렬 처리 시에는 실행의 선후 관계로 인한 의존성이 생긴다.
- 분할된 모델 간 종속적 & 직교하지 않는 성질 ⇒ 수렴 속도가 느리거나 알고리즘 오류가 발생할 수 있다.
- 분할된 모델의 파라미터가 각기 다른 속도로 수렴하면 파라미터 처리 시 병목 현상이 발생
- 모델 파라미터를 전송하는 방법은 다음과 같다
Message Passing Interface (MPI), general-purpose RPC (gRPC), NVIDIA Collective Commucations Library (NCCL)
- NCCL 방식은 Torch 등에서도 쓰이고 통신 속도가 빠르다
- 모델 분할만으로는 병렬 처리 효과를 보기 어려우므로 성능을 높이기 위한 최적화 방법이 같이 사용된다.
후략..
'AI - NLP > Articles' 카테고리의 다른 글
Switch Transformers: Scaling to trillion parameter models with simple and efficient sparcity (2021) (0) | 2021.02.16 |
---|---|
Scaling Laws for Neural Language Models (2020) (0) | 2021.02.05 |
Transformer Feed-Forward Layers Are Key-Value Memories (2020) (0) | 2021.02.05 |
BERT 기반의 Sentence-wise Attention을 활용한 계약서 조항 분류 연구 (2019) (0) | 2020.12.18 |
안전기준의 검색과 분석을 위한 기계독해 기반 질의응답 시스템 (2020) (0) | 2020.12.18 |