본문 바로가기

AI/대학원

Going Deeper with Embedded FPGA Platform for Convolutional Neural Network 리뷰

개요

임베디드신경망 수업에서 리뷰 발표 하였던 해당 논문에 대해 기록을 남긴다.

Going Deeper with Embedded FPGA Platform for Convolutional Neural Network.pdf
7.90MB

Abstract

연구 배경 및 문제점

  • CNN(Convolutional Neural Network)은 컴퓨터 비전 분야에서 성공적으로 활용되고 있지만 계산 집약적이고 자원 소모적이어서 임베디드 시스템에 통합하기 어려움.
  • FPGA(Field Programmable Gate Array)는 CNN 가속화에 유망하지만, 제한된 대역폭과 메모리 크기가 성능에 제약

연구 목표

  • 임베디드 FPGA 플랫폼에서 CNN 가속기 설계를 통해 Image-Net 대규모 이미지 분류를 효과적으로 수행.

주요 방법 및 기여

  • 최신 CNN 모델 분석: Convolutional 레이어는 계산 중심적, Fully-Connected 레이어는 메모리 중심적임을 확인.
  • 동적 정밀도 데이터 양자화(dynamic-precision data quantization) 및 효율적인 Convolution 설계를 통해 대역폭과 자원 활용도를 개선.
  • 데이터 배열 방법을 활용해 외부 메모리 대역폭 활용도 극대화.

실험 결과 및 성과

  • VGG16 모델에 8/4비트 양자화를 적용하여 0.4%의 정확도 손실만 발생.
  • Xilinx Zynq ZC706 보드에서 VGG16-SVD를 구현하여 4.45 fps의 프레임 속도 및 86.66% top-5 accuracy 달성.
  • 전체 CNN에서 평균 137.0 GOP/s의 성능을 보여 기존 방식보다 뛰어난 성능을 보임.

 

1. Introduction

배경

  • 이미지 분류는 컴퓨터 비전 분야의 중요한 문제이며, CNN은 이 분야에서 최첨단 정확도를 달성하고 있음.
  • CNN의 성능은 ILSVRC(Large-Scale Vision Recognition Challenge)에서 지속적으로 향상되었으며,
    2012년 84.7%에서 2015년 96.4%로 상승함.
  • 하지만 CNN은 기존 방법보다 많은 계산 및 메모리 자원이 필요하여 주로 대형 서버에 의존.

문제점

  • 임베디드 시스템(예: 자율주행차, 로봇 등)은 실시간 고정밀 객체 인식을 필요로 하지만 제한된 배터리와 자원으로 인해 CNN 적용에 어려움이 있음.
  • 기존 연구는 주로 소규모 CNN 모델에만 적용되었고, 대규모 모델의 가속화는 외부 메모리 대역폭 문제로 어려움.
  • 대부분의 가속화 연구가 CONV(Convolutional) 레이어에만 집중되어 있고, FC(Fully-Connected) 레이어는 충분히 다루어지지 않음.

연구 목표 및 기여

  • 임베디드 FPGA 플랫폼에서 대규모 이미지 분류를 위한 CNN 가속기를 설계.
  • 특히 VGG16-SVD 모델을 FPGA에서 4.45 fps로 실행할 수 있는 가속기 설계를 제안함.
  • 이 연구는 전체 CNN을 가속화하기 위한 방법을 심층적으로 조사하고, 기존 연구의 한계를 극복함.

 

2. Background

CNN 기본 사항

  • CNN은 여러 레이어로 구성되며, 특징 맵(feature map)을 통해 이미지를 분석.
    a. 주요 레이어: CONV 레이어(특징 맵을 합성곱), FC 레이어(선형 변환 수행).
    b. Pooling 레이어의 Down Sampling을 통해 데이터와 계산량의 크기를 줄이고 변환 불변성을 향상.

 

3. Related Work

소프트웨어 측면의 CNN 가속화 기술

  • 모델 압축: Network Pruning과 SVD(Singular Value Decomposition)기법을 통해 모델의 메모리 점유율과 계산 복잡도 감소.
  • 대표 사례: Han 등은 CaffeNet과 VGG16 모델을 프루닝 기법으로 9배, 13배까지 압축.

하드웨어 측면의 CNN 가속화 기술

  • 데이터 양자화: 16비트 고정소수점 사용을 통해 연산 및 메모리 효율 향상.
  • 대표 사례: Chen 등은 16비트 곱셈기를 활용하여 면적과 전력 소비를 크게 줄임.

CNN 가속기 설계의 두 가지 접근법

  • 컴퓨팅 엔진 초점: 계산 집약적인 CNN 연산을 가속화하기 위한 강력한 컴퓨팅 아키텍처 설계.
  • 메모리 시스템 최적화: 타일링과 데이터 재사용을 통한 메모리 대역폭의 효율적 사용.

 

4. Complexity Analysis of CNN

 

5. Data Quantization (1)

동적 정밀도 데이터 양자화 흐름 제안

  • 부동소수점을 고정소수점으로 변환 시 동적 정밀도 데이터 양자화 전략을 제안.
  • 양자화 흐름은 가중치 양자화와 데이터 양자화의 두 단계로 구성됨.

가중치 양자화 단계

  • 각 레이어의 가중치에 대해 최적의 소수부 길이(fl)를 찾음.
  • 가중치의 동적 범위를 분석하여 초기 fl을 설정하고 최적의 fl을 찾음.

데이터 양자화 단계

  • 각 레이어 사이의 특징 맵 세트에 대한 최적의 fl을 찾음.
  • 고정소수점과 부동소수점 모델을 비교하여 정확도 손실을 최소화함.

 

5. Data Quantization (2)

다양한 양자화 전략 비교

  • CaffeNet, VGG16, VGG16-SVD를 대상으로 정적 및 동적 정밀도 양자화 전략을 비교.
    • CaffeNet: 32비트 부동소수점을 사용했을 때 Top-5 정확도는 77.70%
      16비트 정적 정밀도 양자화 및 8/4비트 동적 정밀도 양자화를 적용하면 각각 77.12%와 76.64%의 정확도를 얻었음
    • VGG16: 16비트 정적 정밀도 양자화를 적용하면 정확도 손실은 0.06%에 불과하지만, 8비트 양자화는 사용할 수 없었음
    • VGG16-SVD: 16비트 동적 정밀도 양자화에서 Top-5 정확도는 86.66%로 감소했으며, 8/4비트 동적 정밀도 양자화는 86.30%까지 정확도가 떨어졌음
  • 8/4비트 동적 정밀도 양자화는 16비트보다 메모리 사용을 줄이면서도 정확도를 거의 유지함. 

 

6. SYSTEM DESIGN

6.1 Overall Architecture

  • CNN 을 가속화 하기 위한 CPU+FPGA 의 heterogeneous architecture 를 제안
  • Programmable Logic(PL) 과 Processing System(PS) 나뉨
  • PL (FPGA): CNN 연산을 수행하는 Processing Elements(PEs), On-chip Buffer, Controller, DMA가 포함
  • PS (CPU): 일반적인 프로세서와 외부 메모리로 CNN model parameter, data, 명령어 를 저장하고 전체 처리 과정을 조율

  • PL (FPGA) :
    • Computing Complex 는 CONV layer, Pooling layer, FC layer 등 CNN에서 대부분의 연산 작업을 수행
    • On-chip Buffer 는 PE에서 사용할 데이터를 준비하고 결과를 저장
    • Controller 는 외부 메모리에서 명령어를 가져와 PL의 모든 모듈을 제어.
    • DMA는 외부 메모리와 On-chip Buffer 간의 데이터를 전송.

 

★ 참고 : DMA (Direct Memory Access)CPU의 개입 없이 메모리 간의 데이터 전송을 직접적으로 처리하는 방식 , DMA는 프로세서가 데이터를 일일이 읽고 쓰지 않도록 하여 데이터 전송 속도를 높이고 시스템 성능을 향상

DMAFPGA 시스템에서 중요한 역할을 합니다. 특히 CNN 가속기와 같은 경우, 데이터 전송이 자주 발생하는데, 이 과정에서 DMA외부 메모리와 FPGA온칩 메모리 사이의 데이터를 빠르게 전송하는 데 사용

DMA를 사용하면 CPU가 다른 작업을 수행하는 동안 데이터가 전송되어 병렬 처리가 가능해지고, CPU 자원을 절약하게 해 줌

 

  • PS (CPU):
    • 프로세서는 bare-metal programs 을 실행하고 DMA를 구성하여 전체 inference 단계를 조직하는데 도움
    • FPGA 내에서 Softmax 함수 구현은 성능 향상이 크지 않기 때문에, CPU에서 처리
    • 전체 inference 과정은 세 단계로 구성:
      • Data Preparation : 이미지 데이터, 모델 데이터, 제어 데이터 등이 외부 메모리에 저장
      • Data Processing : CPU는 DMA를 통해 데이터를 로드하고, PE가 연산을 수행하며 DMA 인터럽트가 발생할때 CPU가 새로운 데이터를 설정
      • Result Output : 마지막 BD가 전송된 후, CPU는 PEs(Processing Elements)에서 나온 최종 결과에 Softmax 함수를 적용하여 결과를 계산하고, 이를 UART 로 출력

 

6.2 PE Architecture

  • Processing Elements(PEs)는 CNN 연산을 담당
  • 각 PE는 Convolver Complex, Adder Tree, Non-Linearity 모듈, Max-Pooling 모듈, 그리고 Bias Shift로 구성
  • Convolver Complex: 입력 데이터를 행렬로 변환하여 convolution 연산을 수행하는 핵심 모듈.
  • Adder Tree: 여러 입력값을 더해 중간 또는 최종 결과를 생성.
  • Non-Linearity 및 Max-Pooling 모듈: 각각 activation function과 Max-Pooling 을 적용.
  • Bias 및 Data Shift 모듈: dynamic quantization 를 지원하여 데이터 정밀도를 조정.

 

6.3 Implementation Details

  • 제안된 FPGA 기반 CNN accelerator 의 구체적인 구현 방식을 설명
  • Workloads Schedule 과 Controller System 으로 나뉨

 

    • Workloads Schedule :
      • 병렬 처리(Parallelism): CNN 작업에서 세 가지 유형의 병렬 처리가 고려
        • operator-level (fine-grained) parallelism : 세밀한 연산자 단위로 병렬 처리.
        • intra-output parallelism (multiple input features are combined to create a single output) : 여러 입력 feature map 을 결합해 하나의 출력을 생성.
        • inter-output parallelism (multiple independent features are computed simultaneously) : 여러 독립적인 feature map 을 동시에 계산.
      • Tiling and Reuse : 제한된 on-chip memory 때문에 tiling 이 필요
        • CONV layer
          • row/ column 기준으로 입력 이미지를 나누는 방식(Tr : row tiling factor, Tc : column tiling factor)
          • 입력(출력) feature map Ti(To) 계수에 따라 nin(nout)으로 tiling
        • FC layer:
          • matrix Ti×To tiles tiling
          • 이 방법으로 FC 레이어의 연산도 작은 블록 단위로 나누어 처리 가능
        • Reuse:
          • reuse_times 라는 변수는 각 input tiled block (vector) 이 몇 번 재사용될지를 결정
          • CONV layer 에서 각 tile 을 여러 번 재사용하여 연산 효율을 높이며, FC layer 에서도 같은 재사용 원리가 적용
    • Controller System :
      • 16비트 instruction 을 디코딩하여 on-chip buffers PE를 제어
      • 하나의 instruction 은 다음 신호로 구성
        • Pool Bypass and NL Bypass : 필요한 경우 풀 및 NL 모듈을 우회하는 데 사용
        • Zero Switch : 가산기 트리의 결과에 추가할 제로 또는 바이어스 데이터를 선택하는 데 사용되는데, 일반적으로 최종 결과를 계산 하려면 두 개 이상의 단계가 필요하고 바이어스는 한 번만 추가해 야 하기 때문
        • Result Shift and Bias Shift : dynamic data quantization 를 위한 데이터 시프트의 비트 수와 방향을 설명
        • Write En : 출력 버퍼의 데이터를 외부 메모리 또는 재사용할 PE로 전환하는 데 사용
        • PE En : 필요한 경우 여러 개의 PE를 유휴 상태로 설정할 수 있는 유연성을 제공. 이는 컴퓨팅 용량이 수요를 충족할 때 에너지를 절약하는 데 도움이 될 수 있음
        • Phase Type : 컨트롤러가 이러한 페이즈를 구분하고 해당 신호를 전송하는 데 도움 예를 들어, 마지막 레이어의 마지막 단계와 마지막 출력 이미지의 경우 더 이상 가중치나 데이터를 로드하지 않아야 하며 입력 버퍼를 이전 단계와 다르게 구성해야 함
      • Matlab에서 개발된 컴파일러는 fixed-point CNN model 을 입력으로 받아 명령어를 자동으로 생성
      • 명령어는 각 연산 단계에서 사용되며, 이를 통해 데이터 로드, 계산, 결과 출력이 효율적으로 이루어짐
      • 아래 테이블은 Figure 5 (a)의 예제와 함께 생성된 명령어를 보여줌
  •  

  • 명령어 1은 입력 버퍼에 필요한 모든 데이터를 로드하도록 명령하며, 이는 Phase Type signal 로 구분됩니다. PE En은 두 개의 PE가 병렬로 작동할 수 있도록 합니다. Ti = 2이므로 그림 수는 2로 설정됩니다. 타일 크기는 정의된 Tr로 설정됩니다. Layer Type은 레이어 유형을 CONV 레이어로 정의합니다. 이 단계에서는 다른 모든 신호는 쓸모가 없습니다.
  • 명령어 2는 출력 레이어에서 4개의 타일 블록을 계산하기 시작합니다. 모두 중간 결과이므로 풀 및 NL 모듈은 바이패스됩니다. 이 단계에서는 바이어스가 한 번만 추가됩니다. 그리고 바이어스 시프트는 바이어스 데이터의 시프트 구성을 지정합니다. 출력 버퍼는 중간 데이터만 수집하고 아무 곳에도 쓰지 않습니다.
  • 명령어 3에서 Write En을 “PE”로 설정하여 출력 버퍼에 중간 결과를 PE로 다시 보내도록 명령합니다. 바이어스가 더 이상 추가되지 않으므로 제로 스위치가 0으로 설정됩니다. 이 단계에서 생성된 모든 데이터는 최종 결과이므로 풀 및 NL 바이패스는 비활성화되어 AD의 데이터가 이 두 모듈에 순차적으로 입력되도록 합니다.
  • 마지막 명령어에서 이 CONV 계층이 마지막 계층이라고 가정하면 PE에서 작동하는 모듈은 없습니다. Write EN은 출력 버퍼에 결과를 외부 메모리에 다시 쓰도록 명령하기 위해 “DDR”로 설정됩니다. 결과 시프트는 원하는 대로 결과 데이터를 이동하도록 설정합니다. 이 단계는 컨트롤러에서 Phase Type을 마지막 단계로 설정하여 구분합니다.

 

7. MEMORY SYSTEM

7.1 Buffer Design

  • PL 에 두 가지 주요 on-chip buffer 가 존재하며, 각각 Input Buffer와 Output Buffer로 구성
  • Input Buffer는 bias, image data 및 weight 저장
  • Output Buffer는 PE에서 생성된 결과를 저장하고 적절한 시점에 PE에 중간 결과를 제공
  • Buffer 의 주요 파라미터:
    • datain_port_num : DMA가 한 사이클 동안 전송할 수 있는 data의 최대 양.
    • weightin_port_num : DMA가 한 사이클 동안 전송할 수 있는 weight 의 최대 양.
    • dataout_port_num :DMA가 한 사이클 동안 전송할 수 있는 result 의 최대 양.
  • CONV layer 에서는 각 단계에서 필요한 weight 양이 image data 보다 훨씬 적음
  • FC layer 에서는 weight 양이 입력 벡터 데이터 보다 훨씬 많기 때문에, weight Data Buffer 에 저장 하고 입력 벡터 데이터를 Weight Buffer 에 저장

7.2 Data Arrangement for CONV Layers

  • 같은 상대적 위치에 있는 tile 들을 연속적으로 저장
  • 각 단계에서 필요한 모든 input tile 들을 연속적으로 load 하여 연산 수행이 가능
  • 각 output feature map 은 다음 레이어의 input feature map 이 되므로, 동일한 저장 방식 패턴이 적용
  • Pooling 이 포함된 layer 에서 문제점:
    • 2 × 2 pooling 이 후 result tile 의 크기가 원래 tile ¼ 이 됨
    • 이로 인해 인접한 result tile 들이 외부 메모리에 연속적으로 저장되지 않으며, 이는 짧은 burst 길이(Tr/2)를 초래
    • 이는 외부 메모리 활용도를 저하시키는 요인이 됨
  • 해결 방법: :
    • On chipmemory budget 을 늘림
    • 메모리 대역폭을 최적화하기 위해, 여러 tile을 버퍼에 모아 한꺼번에 메모리로 전송하는 방식 사용
    • Out(1,1)부터 Out(4,1)까지의 result tile Output Buffer에 저장한 다음, 인접한 tile Out(1,2)이 준비되면 한꺼번에 외부 메모리 write하여 burst 길이를 늘림(Tr × Tc/2)

  • 핵심 포인트 :
    • 입력 타일은 연속적으로 저장되어 효율적으로 로드 됨
    • 2x2 풀링 후 결과는 타일 크기가 줄어들어 인접하지 않은 데이터가 생성될 수 있지만, 이를 버퍼링하여 효율적으로 처리
    • 이렇게 하면 메모리 접근 속도가 빨라지고 CNN 연산의 성능을 극대화 함

7.3 Data Arrangement for FC Layers

  • FC layer 의 성능이 주로 bandwidth 에 의해 제한된다는 점을 강조
  • FC layer 의 제한 사항:
    • FC layer 는 많은 양의 weight 를 포함하고, 이 weight 들은 한 번만 사용되므로 데이터 재사용이 거의 불가능
    • 이로 인해, FC layer 를 가속하기 위해 특별한 하드웨어를 사용하는 것은 비효율적
    • 따라서, FC layer 의 성능은 주로 외부 메모리에서 weight 을 얼마나 효율적으로 가져 올 수 있느냐에 달려 있음
  • Convolver Complex 활용:
    • Convolver Complex를 활용하여 FC layer 의 연산을 처리
  • 버퍼 할당 및 데이터 배열:
    • 시스템은 각 PE 내의 64개의 Compute Complex에 길이 900의 버퍼를 할당
    • 이 버퍼는 CONV layer 를 계산할 때 채워지며, FC layer 를 처리할 때 효율적으로 사용
    • weight matrix 을 처리할 때, 외부 메모리에서 데이터를 가져오기 위한 데이터 배열 방식을 최적화 해야 함weight matrix 64x9 열과 100 행의 블록으로 나누어 한 번의 DMA 트랜잭션으로 처리할 수 있도록 배열
    • Figure 9(a)에 나오는 비최적화 배열의 경우, 하나의 블록을 로드하기 위해 64×100번의 DMA 전송이 필요하며, burst 길이는 9에 불과. 이는 메모리 대역폭을 비효율적으로 사용
    • 반면, Figure 9(b)에서 최적화된 배열 방식을 사용하면 한 번의 DMA 트랜잭션으로 전체 블록을 load 할 수 있으며, burst 길이를 사용해 메모리 대역폭을 더욱 효율적으로 활용할 수 있음

 

8. SYSTEM EVALUATION

  • Testing environment :
    • FPGA – Xilinx Zynq platform
      • Xilinx Kintex-7 FPGA
      • Dual ARM Cortex-A9 Processor
      • 1 GB DDR3 memory (bandwidth: 4.2GB/s)
  • CPU, GPU
    • Intel Xeon E5-2690 CPU@2.90GHz
    • Nvidia K40 GPU (2880 CUDA cores with 12GB GDDR5 384-bit memory)
  • mGPU
    • Nvidia TK1 Mobile GPU development kit (192 CUDA cores)

 

  • Parameter configuration :
    • 리소스와 대역폭 제약 내에서 처리량을 최대화 할 수 있는 매개 변수 선택
    • 선택된 매개 변수는 주어진 FPGA 리소스를 최대한 사용하려고 하는 것을 확인할 수 있음

  • Theoretical estimation - CONV :
    • CONV 연산은 일반적으로 computation-intensive
    • 데이터 입출력에 필요한 시간이 컴퓨팅에 걸리는 시간보다 짧게 해야 함
    • 처리 시간은 컴퓨팅 리소스에 주로 영향 받음

  • Theoretical estimation – FC :
    • 임베디드 시스템에서, FC layer을 처리하는데 걸리는 시간의 대부분은 메모리 입출력에 걸리는 시간
    • 이론적 시간 계산에 컴퓨팅 시간을 거의 무시할 수 있음
    • 처리 시간은 메모리 대역폭에 영향 받음

  • Performance analysis :
    • 비슷한 전력(9W)을 소모하는 mGPU 대비 CONV 계산에 우수한 성능을 보임
    • GPU는 FPGA 대비 13배 빠른 처리 속도를 가지지만, 26배의 전력(250W)를 소모함
    • 메모리 대역폭의 부족으로 인해 FC layer의 처리 속도가 느림 (mGPU에서도 동일 문제 발생)
    • FC layer의 처리 속도가 이론적 계산과 크게 다른데, 메모리 레이턴시와 DMA 처리에서의 문제가 원인으로 추정

 

  • Design Comparison :
    • 2-layer CNN 모델 구동 시의 성능 비교
    • 기존의 FPGA 가속기들은 CONV layer만을 구동 가능
    • 기존의 FPGA 가속기들 대비 뛰어난 성능 확인 가능

 

9. CONCLUSION

  • CONV layer는 컴퓨팅 위주, FC layer는 메모리 위주
  • 제한된 메모리 대역폭은 CNN 모델을 구동하는 임베디드 시스템의 주요 병목 지점
  • dynamic-precision data quantization flow를 이용해 유사한 정확도를 유지하며 메모리 footprint와 대역폭 요구량을 줄일 수 있음
  • 리소스 절약을 위해 CONV layer와 FC layer을 둘 다 처리할 수 있는 convolver 제시
  • FC layer 처리 시 메모리 대역폭을 효율적으로 사용하는 data arrangement scheme 제시
  • 제시된 FPGA 시스템은 VGG16-SVD 모델을 16-bit quantization을 사용해 구동 시 4.45 fps속도로 구동 가능하며, 이 때 86.66% top-5 accuracy 기록