1. 머리말 최근 IT 기술의 발전으로 이미지 분류 및 글자/객체 인식 등 다양한 분야에서 딥러닝(deep learning) 기술이 활용되고 있다. 아울러 최근 심층신경망(DNN, Deep Neural Network)에 관한 연구가 활발히 이루어짐에 따라 딥러닝을 활용한 다양한 응용이 실생활에서 널리 사용되고 있다. 딥러닝 연산의 대부분은 벡터 또는 행렬 연산으로 구성된다. 이러한 벡터 또는 행렬 연산과 같은 일반적인 선형 대수 연산을 수행하기 위한 루틴 집합으로서 BLAS(Basic Linear Algebra Subprograms)가 존재한다. B LAS는 Netlib에서 정의한 명세(specification)가 일반적으로 사용되지만, CPU 또는 GPU와 같이 각 HW에 최적화된 다양한 BLAS 라이브러리가 존재한다. 아울러, BLAS 라이브러리와 별개로 cuDNN(NVIDIA CUDA Deep Neural Network Library)과 같이 심층신경망을 구성하는 각 계층(layer)에 대해서 GPU 기반 가속 연산을 수행하기 위한 라이브러리가 존재한다. 한편, 최근 스마트폰과 같은 온디바이스(ondevice) 형태의 임베디드 시스템(embedded system)이 대중화됨에 따라, PC/Server 플랫폼뿐만 아니라 임베디드 시스템을 기반으로 딥러닝을 수행하기 위한 연구가 활발히 진행 중이다. 임베디드 시스템은 일반적인 PC/Server 플랫폼에 비해 매우 적은 용량의 메모리와 고정된 크기의 저장 장치, 그리고 저전력의 프로세스를 탑재하고 있다. 또한, 임베디드 시스템은 CPU와 GPU, 그리고 메모리 구조에서 PC/Server 플랫폼과 연산 처리 구조가 상이할 뿐만 아니라, 시스템의 사용 목적에 따라 다양한 종류의 HW 플랫폼이 존재한다. 또한, 대부분의 임베디드 시스템은 CUDA와 같은 NVIDIA GPU 기반의 병렬 처리 언어를 지원하지 않기 때문에, PC/Server 플랫폼 기반의 BLAS 라이브러리 및 GPU 기반 딥러닝 연산 가속 라이브러리를 활용하지 못하는 한계점이 존재한다. 따라서 임베디드 시스템에서 딥러닝 연산을 효율적으로 수행하기 위해서는 임베디드 시스템에 특화된 딥러닝 연산 가속 기술을 활용해야 한다. 따라서 본고에서는 BLAS와 같은 딥러닝 연산가속 기술의 연구 동향을 파악하고, 임베디드 시스템을 위한 병렬 처리 기술 및 딥러닝 연산가속 기술 동향을 살펴본다. Ⅰ 기술표준이슈 ----• ICT Standard Weekly 제1064호 • ---------------------------------------------------------------2 2. 딥러닝 연산 가속 기술 연구 동향 2.1 딥러닝 연산 기본 구조 딥러닝 수행을 위한 심층신경망은 기본적으로 한 개의 입력 계층(input layer), 여러 개의 은닉계층(hidden layer), 그리고 한 개의 출력 계층(output layer)으로 구성된다. 입력 계층은 학습 또는 추론을 수행하기 위한 입력 데이터를 가지고 있으며, 일반적으로 배열 형태의 부동 소수점 자료형이 입력 데이터로 사용된다. 은닉 계층은 입력 데이터에 대한 추론 연산을 수행하며, 이를 위한 가중치(weight)와 편향(bias)을 가지고 있다. 출력 계층은 입력에 대한 추론 확률을 값으로 가진다. 딥러닝의 연산은 기본적으로 순전파(forward propagation) 및 역전파(backward propagation) 로 구성되어 있다. 순전파는 입력 계층에서 출력계층 방향으로 연산을 수행하며, 역전파는 출력계층에서 입력 계층 방향으로 연산을 수행하면서 가중치와 편향을 보정한다. 추론 시에는 순전파만 수행되며, 학습 시에는 순전파 이후 역전파를 수행한다. 역전파에서는 순전파에서 획득한 추론 결과와 실제 값과의 오차를 통해 가중치와 편향에 대한 경사도(gradient)를 계산한다. 역전파에서는 계산된 경사도를 이용하여 추론 결과와 실제 값과의 오차가 최소가 되도록 가중치와 편향을 보정한다. 이와 같이 심층신경망에서 순전파 수행 시에는 입력 데이터와 가중치, 그리고 편향값에 대한 행렬곱이 주로 이루어지며, 역전파 수행 시에는 은닉 계층의 가중치와 편향에 대한 경사도 계산이 주로 이루어진다. 이처럼 심층신경망을 사용하는 딥러닝 연산의 대부분은 벡터 또는 행렬 연산으로 구성된다. 2.2 딥러닝 연산 가속 기술 BLAS는 연산 데이터 형태에 따라 벡터-스칼라 연산 루틴(LEVEL 1), 행렬-벡터 연산 루틴(LEVEL 2), 행렬-행렬 연산 루틴(LEVEL 3)으로 구분된다. BLAS의 각 루틴은 연산의 정밀도에 따라 단정밀도(single precision), 배정밀도(double precision), 단정밀 복소수(complex precision), 배정밀 복소수(double complex precision)로 구분된다. 이중 심층신경망에서는 주로 단정밀도 연산이 사용되며, 단정밀도 연산은 LEVEL 1에 14개, LEVEL 2에 16개, LEVEL 3 에 6개의 연산이 존재한다. 은 딥러닝에서 사용되는 대표적인 BLAS 연산 루틴을 나타내며, [그림 1]은 대표적인 딥러닝 기술인 합성곱 신경망(CNN, Convolutional Neural Network)에서 BLAS 연산이 사용되는 예시를 나타낸다. AXPY는 스케일 계층(scale layer)과 요소곱 계층(eltwise layer), SCAL은 스케일 계층, GEMV는 배치 정규화 계층(batch normalization layer), 그리고 GEMM은 합성곱 계층(convolution layer)과 완전하게 연결된 계층(fully connected layer)에서 주로 사용된다. 한편, GEMV와 GEMM은 행렬의 전치(transpose) 여부에 따라 연산이 구분된다. 즉, GEMV는 행렬 A의 전치 여부(true or false)에 따라 2개의 연산(GEMV_T, GEMV_N)으로 구분되며, GEMM은 행렬 A, B의 전치여부에 따라 4개의 연산(GEMM_NN, GEMM_NT, GEMM_TN, GEMM_TT) 으로 구분된다.