[논문리뷰]Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

ICLR2018에 발표된 논문입니다. 이 논문은 분산 학습에서 gradient를 압축하여 보내어 통신 비용을 줄여 그 속도를 높이고자 하는 시도를 담은 논문입니다.

저자는 Yujun Lin, Song Han, Huizi Mao, Yu Wang, William J. Dally입니다.

공개된 공식코드는 없으며 논문은 링크에서 확인 가능합니다.

들어가기 전에


Model Parallelism vs Data Parallelism
reference : https://xiandong79.github.io/Intro-Distributed-Deep-Learning

Model Parallelism

모델이 하나의 디바이스에서 동작이 힘들시에 모델을 머신별로 짤라서 사용하는 방법(왼쪽)

Data Parallelism

하나의 머신마다 모델을 가지며 데이터를 나누어 처리하여 합치는 방법이며 분산처리를 한다고 하면 주로 사용하는 방법이며 이 논문에서는 data paralleism을 다룬다(오른쪽)

Synchronous vs Asynchronous
Data Parallelism으로 학습시에는 각기다른 데이터로 학습을 진행한 후 파라미터를 일정시간이 지난후 동기화를 해주어야한다. 이때 동기식과 비동기식 처리방식이 존재한다. 동기적 방식은 모든 device의 처리가 끝이 날 때까지 대기하였다가 동기화를 진행해야하는 단점과 비동기적 방식은 처리시간이 일정하지 않을 시에 이전버젼을 늦게처리한 머신이 덮어쓸 수 있다는 단점이 있다.

reference : https://hpc-forge.cineca.it/files/CoursesDev/public/2018/Deep%20Learning/Slides/IDL_day3_part2.pdf

Defect of Asynchronous

All-Reduce

분산처리 할시 간간이 볼 수 있는 연산이다. 별도의 서버를 두지 않고 링구조를 가지고 델타값많을 전송하여 효율적으로 분산환경에서 연산을 하는 방법이다.

all reduce에 대한 이미지 검색결과
reference : https://preferredresearch.jp/2018/07/10/technologies-behind-distributed-deep-learning-allreduce/

Motivation

본격적인 본문시작이다. 학습할때 노드의 수가 증가하면 할수록 통신비용의 증가가 연산량에 비하여 증가폭이 커지기 때문에 노드를 증가시켜도 선형적인 증가가 이루어 지지 않는 것을 우리는 볼 수 있다. 아래 그림에서 볼 수 있듯 통신속도가 노드가 증가할시에 지배적이게 된다. 여담으로 이를 줄이고자 딥러닝 컴퓨터를 살때 PCIE lane도 신경쓰고 nvlink같은 기술도 도입하는 것이다.

reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

Introduction

  • Minimize training time by reducing the bandwidth for gradient exchange in distributed training
  • Preserve model accuracy for faster training
  • Focus on reducing data communication on inexpensive commodity network or training on mobile devices(data privacy)

Related work

Async SGD

  • accelerates the training by removing synchronization and updating params immediately once node completes backprop
  • 위에 소개한 비동기적 방식라고 이해하면된다. 이를 통하여 gradient를 빠르게 업데이트한다.

Gradient Quantization

  • Quantizing the gradients to low-precision values can reduce the communication bandwidth
  • ex) 1-bit SGD, QSGD, and TernGrad. DoReFa-Net uses 1-bit weights with 2-bit gradients
  • gradient를 양자화하여 gradient의 크기를 줄여 통신 대역을 줄인다.

Gradient Sparsification

  • Threshold quantization to send gradients larger than predefined constant
  • Choose a fixed proportion of positive and negative gradient updates
  • Gradient dropping to sparsify gradients by a single threshold based on the absolute value (required adding layer normalization)
  • Automatically tunes the compression rate depending on local gradient activity, and gained high compression ratio with negligible degradation of accuracy

Deep Gradient Compression

GRADIENT SPARSIFICATION

중요한 gradients 만 보낸다. 여기서 중요한 gradients는 값이 크다는 가정이 들어가며 이는 경험적으로 그렇다고 한다(SGD를 생각하면 gradients가 크면 큰 에러를 가졌다고 생각할 수 있다.)

즉, 문턱값이 넘는 gradients값만을 전달한다. 그러나 문턱값이 안된다고 다버리면 최종결과에 영향이 있을 수 있기때문에 이값을 local에 저장하여 계속 축적했다가 문턱값이 넘으면 그떄 전달한다. 그리고 이때 32bit를 사용할 필요가 없기 때문에 16비트로 인코딩한다.

문턱값이 3일때 의 예시

IMPROVING THE LOCAL GRADIENT ACCUMULATION

GRADIENT SPARSIFICATION 를 cifar10에서 사용하였을때 1.0%의 accuracy loss 가 발생한다고 한다. 그 이유는 문턱값 이하의 값을 저장할 때 momentum을 고려하지 않고 있다가 문턱값을 넘어가는 시점 즉 n번째 스텝후에 갱신후에 n번째 전의 momentum을 사용하기 때문이라고 한다(아래  첫 그림의 C). 저자는 그렇기에 momentum을 따로 저장하는 방법을 제시한다.

이 부분이 momentum수식을 조금 변형하여 까다로울 수도 있는데 위 설명을 바탕으로 논문을 읽으면 쉽게 이해가 될 것이다.

reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training
바뀌기 전
reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training
바뀐 후
reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

IMPROVING THE LOCAL GRADIENT ACCUMULATION

Local Gradient Clipping

local mode에서 gradient의 l2-norm의 합을 구해서 이것이 threshold를 넘었을때 N-1/2를 한다고 한다(N=#of node)

momentum correction and local gradient clipping help improve the word error rate from 14.1% to 12.9% on the AN4 corpus 라고 한다.

 

OVERCOMING THE STALENESS EFFECT

Momentum Factor Masking

gradient sparsity 인 상황에서 대부분의 파라미터들은 600~1000 iterations이면 업데이트가 된다고 한다.

이때 gradient와 momentum에 같은 마스크를 적용한다고 한다. 이를 통해서 학습이 정체되는 것을 막아진다고 한다.


OVERCOMING THE STALENESS EFFECT

Warm-up Training

이건 종종 볼 수 있는 방법인데 학습초기에 네트워크의 파라미터가 급격하게 바뀌기 때문에 lr을 적게주고 서서히 network를 학습시키는 방법이다.

reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training
다른논문과의 비교

Experiments

실험환경이다.

Image Classification

Using ResNet, AlexNe The warm-up period for DGC is 4 epochs out of 164 epochs for Cifar10 and 4 epochs out of 90 epochs for ImageNet Dataset

Language Modeling

We adopt the 2-layer LSTM language model architecture with 1500 hidden units per layer  The warm-up period is 1 epoch out of 40 epoch

Speech Recognition

Using DeepSpeech architecture without n-gram language mode  The warm-up period for DGC is 1 epoch out of 80 epochs

resnet-101에서 cifar-10을 학습
reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

실험결과에서 노드가 증가하여도 성능 하락이 크게 발생하지 않는다는 것을 알 수 있다. 개인적으로는 1000개 이상일때 결과와 이미지넷에서의 결과도 확인 하고 싶은데 아쉽다.

4개의 gpu를 사용했을 때 결과
reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

이미지넷에서도 좋은 결과를 보여준다. 그러나 4개의 노드를 사용했다는 점이 아쉽다.

reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

다른 방법들에 비하여 gradient의 압축이 잘 되는 것을 볼 수 있다. 이는 기존 방법을 적절하게 섞어서 사용하여서 gradient의 크기를 줄이는 것을 목표로 잡아서 그런것이 아닌가 짐작된다.

reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

이미지 분류작업 뿐 아니라, 음성모델에서도 잘되는 것을 확인할 수 있다.

reference : Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training

실험결과에서 가장 눈길을 끄는 결과이다. 이 실험은 과연 통신속도가 진짜 node 숫자를 증가시킬때 병목을 발생하는가? 라는 질문을 해결해주는 실험이다. 우리가 주변에서 쉽게 접할 수있는 1G환경에서는 논문에서 제시된 방법을 이용하여 gradient를 압축하지 않을시에는 linear하게 증가하지 못하지만 10G 환경에서는 gradient를 조금만 압축하여도 통신대역이 증가하여 linear하게 속도가 증가하는 것을 볼 수 있다. 

여기서 역시 장비빨이 최고란 것을 다시한번 느꼇다..ㅎ

댓글을 남겨주세요~