2020. 5. 3. 13:57ㆍResearch
Paper Link: https://arxiv.org/pdf/2001.00138.pdf
높은 성능의 모바일 기기들이 등장함에 따라서 데스크탑에서만 동작하던 딥러닝 어플리케이션들을 모바일에서 서빙할 수 있는 가능성이 열렸다. 이에 따라 모바일 딥러닝 inference를 위한 여러 연구들이 진행되고 있는데 이 논문 역시 그와 관련한 내용을 다룬다.
비록 모바일 기기의 computing power가 상당히 올라가긴 했으나, real-time inference를 가능케 하는 정도의 성능을 내긴 쉽지 않다. 그래서 weight pruning, quantization과 같은 경량화 방식을 적용하여 서빙하는 것이 일반적이다. 이 논문에서는 quantization은 다루지 않고 있고, pruning에만 초점을 두고 있다. Pruning은 두 가지 범주로 구분할 수 있는데, 하나는 non-structured pruning이고, 다른 하나는 structured pruning이다.
Non-structured pruning은 fine-grained하며 accuracy가 잘 보장되지만 hardware-friendly하지 않은 단점이 있다. (효율적인 병렬화가 어려움). 반면, structured pruning은 coarse-grained하며 hardware-efficient하지만 accuracy 손실이 크다는 단점이 있다. 이 논문에서 제시하는 PatDNN은 coarse-grained structure pruning 방식과 fine-grained pruning 방식을 조화시켜서 accuracy 보존과 hardware-efficiency의 장점을 모두 잡은 E2E 경량화 프레임워크이다. PatDNN은 TensorFlow Lite, TVM, Alibaba Mobile Neural Network를 accuracy 손실 없이 각각 44.5배, 11.4배, 7.1배 능가하는 뛰어난 성능을 보였다.
이 논문의 핵심 아이디어는 non-structured pruning과 structured pruning의 특성에 바탕을 두고 있기 때문에 이에 대해서 좀 더 부연 설명을 하자면, non-structured pruning은 각각의 커널 내에서 임의의 weight를 pruning하는 방식이고, structured pruning은 필터나 채널을 통째로 날려버리는 pruning 방식이다.
- non-structured pruning: 임의의 weight를 pruning (아래 그림에서 0-D, 1-D에 해당)
- structured pruning: filter, channel pruning (아래 그림에서 2-D, 3-D에 해당)
PatDNN은 기존의 structured pruning과 non-structured pruning이 서로 다른 극단에서 상반되는 문제점을 갖고 있기 때문에, 이를 잘 조화시키면 큰 trade-off 없이 문제를 해결할 수 있을 것이라는 insight에 기반을 둔 연구이다. non-structured pruning은 weight의 어떤 부분도 pruning의 대상이 될 수 있기 때문에 너무 fine-grained한 반면, structured pruning은 필터나 채널 전체를 날려버리기 때문에 너무 coarse-grained하다. PatDNN은 이 두 가지 design space를 잘 조화시킨 pattern-based pruning 기법을 제시한다.
PatDNN은 pattern-based pruning 방식을 적용하여 높은 정확도의 DNN model을 생성하는 E2E 딥러닝 프레임워크이며, 컴파일러 최적화를 통한 효율적인 실행을 보장한다. PatDNN은 크게 2개의 스테이지를 거쳐서 동작한다.
- Pattern-based training stage: pattern-based pruning을 수행
- Execution code generation: DNN 모델을 computation graph로 변환하고 여러가지 그래프 최적화를 적용하는 단계
주목할만한 점은 computation graph 최적화시에 기존에 없던 새로운 최적화 기법들이 적용되었다는 점인데, 이는 pattern-based pruning이 사용되었을 때만 적용 가능하다.
System Overview
1. Pattern-based Pruning
Pattern-based pruning에서는 말 그대로 pruning에 가장 적합한 pattern을 설정하는 것이 관건이다. 논문에서는 좋은 패턴을 위한 조건으로 flexibility와 regularity를 언급하고 있다. Flexibility는 효율적인 코드 생성 및 병렬화와 관련이 있고, regularity는 효율적인 hardware execution과 컴파일러 최적화와 연관이 있다. 본 논문에서는 이 두 가지 조건을 고려해서 (1) kerenl pattern pruning, 그리고 (2) connectivity pruning 두 가지 방식을 제안한다.
Figure 3에서 볼 수 있듯이, kernel pattern pruning은 하나의 커널 내에서 특정 패턴에 따라서 몇몇 weight는 소거하고 몇몇 weight는 남기는 방식이다. 논문에서 말하길 각 커널에 대해서 적합한 pattern을 선택하는 과정은 DNN model compression 프레임워크 ADMM-NN의 기능을 일부 확장하여 구현하였다고 한다. 컴파일러 레벨에서는 동일한 패턴을 가진 커널들이 그룹으로 묶여서 병렬적으로 처리될 수 있도록 re-ordering이 이루어진다.
반면, connectivity pruning은 특정 input-output 채널 간의 연결을 끊어버리는 방식(특정 커널을 제거)이다. 이는 기존의 structured pruning에서 필터나 채널을 통째로 날려버리는 방식보다 훨씬 유연하다는 장점이 있다. 즉, 채널 전체나 필터 전체를 소거하는 것이 아니라 커널 단위로 프루닝을 하기 때문에 훨씬 flexible한 pruning이 가능하다. Figure 4는 connectivity pruning의 구체적인 모습을 보여준다. 인풋 채널 i와 아웃풋 채널 j 간의 연결 관계는 필터 j의 i 번째 커널을 통해서 나타나기 때문에 인풋 채널 i와 아웃풋 채널 j 간의 연결을 끊으려면 그에 해당하는 커널을 pruning 하면 된다.
논문의 핵심 Point
kernel pattern pruning은 하나의 커널 내에서 특정 모양의 pattern에 따라 weight pruning을 하기 때문에 fine-grained한 특성을 갖는 non-structured pruning의 특성을 가지고 있는 동시에, 미리 정해진(predefined) 패턴에 따라서만 weight pruning을 하기 때문에 structured pruning의 coarse-granularity를 함께 가질 수 있다.
한편, Connectivity pruning의 경우엔 필터나 채널 전체를 날려버리는 structured pruning 방식과 같이 커널 하나를 통째로 날려버리기 때문에 coarse grained한 특성을 가지지만, 필터나 채널 단위로 pruning을 하는 것이 아니라, 보다 fine-grained한 단위인 커널 단위로 pruning을 하기 때문에 non-structured pruning의 특성을 함께 가질 수 있다.
2. PatDNN Acceleration Framework
Figure 5는 PatDNN 프레임워크의 전체 시스템 구조를 보여준다. PatDNN은 (1) pattern-based training stage와 (2) execution code generation stage 두 단계로 구분된다. Pattern-based training은 앞서 설명한 kerenel pattern pruning과 connectivity pruning을 수행하는 과정이며, 이는 ADMM 프레임워크를 확장하여 구현되었다. Execution code generation은 computation graph를 통해서 graph optimization을 적용하는 과정에 해당한다.
PatDNN Training with Pattern-based Pruning
PatDNN의 첫번째 단계는 pattern-based pruning이다. 이 단계는 다음 두 스텝으로 이루어져 있다.
- 각 커널에 대해 적용될 pruning pattern을 디자인한다. (pre-defined pattern set 생성)
- 앞 단계에서 생성한 pattern을 각 커널에 적용하거나(kernel pattern pruning), 전체 커널을 pruning 한다(connectivity pruning)
아래의 Figure 6는 PatDNN training 과정의 전체적인 그림을 보여준다.
PatDNN Inference Code Optimization
PatDNN은 kernel pattern pruning과 connectivity pruning을 적용한 DNN 모델들에 대해서 inference 시의 hardware efficiency를 보장한다. 이 때 compiler optimization은 fine-grained pattern-based prunning으로 인해 발생한 퍼포먼스 저하(ex: 병렬성 저하) 문제를 해결하는데 중요한 역할을 한다. 총 2 단계의 최적화가 적용이 되는데, computation graph에 대한 최적화와 각각의 layer 내에서의 최적화가 이루어진다.
'Research' 카테고리의 다른 글
[CV Study] Spatial Transformer Networks (NIPS '15) (0) | 2020.05.30 |
---|---|
[CVPR 2020] Designing Network Design Spaces (1) | 2020.05.08 |
PyTorch IR에 관하여 (2) | 2020.03.05 |
[ASPLOS 2020] SwapAdvisor: Push Deep Learning Beyond the GPU Memory Limit via Smart Swapping (0) | 2020.03.01 |
[OSDI 2018] TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 논문 정리 (0) | 2020.02.14 |