AI - NLP/Articles

딥러닝 모델 병렬 처리 (2018)

딥러닝 모델 병렬 처리 (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 등에서도 쓰이고 통신 속도가 빠르다

 

- 모델 분할만으로는 병렬 처리 효과를 보기 어려우므로 성능을 높이기 위한 최적화 방법이 같이 사용된다.

 

후략..