• ADAS
  • SDN
  • video
클라우드 머신러닝: FPGA 기반 DNN(Deep Neural Networks)
클라우드 머신러닝: FPGA 기반 DNN(Deep Neural Networks)
2016-07-13
 인공지능은 머신러닝(Machine Learning)의 급속한 발전에 힘입어 대혁신의 시기를 맞고 있다. 머신러닝 분야에서는 일종의 ‘딥-러닝(Deep Learning)’이라는 알고리즘이 대용량 데이터 세트로 탁월한 성능을 제공한다는 점에서 상당한 관심을 불러모으고 있다. 딥-러닝을 통해 머신은 대규모 데이터를 기반으로 지도식(supervised) 또는 비지도식(unsupervised) 학습방식으로 작업을 습득할 수 있다. 대규모 지도학습(Supervised Learning)은 이미지 인식이나 음성 인식과 같은 작업을 매우 성공적으로 수행할 수 있다.

글/ 나게시 굽타(Nagesh Gupta), Auviz Systems 창업자 및 CEO
 
딥-러닝 기법은 예상 결과와 일치하는 가중치(Weights) 및 바이어스(Bias) 값들을 찾기 위해 많은 양의 알려진 데이터들을 사용한다. 이 프로세스는 트레이닝이라고 불리며, 수많은 모델들을 만들어낼 수 있다. 이 때문에 엔지니어들은 트레이닝 및 분류 용도로 GPU와 같은 특화된 하드웨어를 지향하고 있다.
 
데이터 규모가 갈수록 증가함에 따라, 머신러닝은 CPU 상에 대규모 머신러닝 모델이 구현된 클라우드 상으로 이행해 가고 있다. GPU는 딥-러닝 알고리즘을 위한 성능 면에서는 뛰어난 대안이지만, 엄청난 전력요건으로 인해 고성능 컴퓨팅 클러스터에 사용하기에는 한계가 있다. 따라서 전력소모를 과도하게 증가시키지 않으면서도 알고리즘을 가속화할 수 있는 프로세싱 플랫폼에 대한 필요성이 절실하다. 이러한 맥락에서 FPGA는 저전력 속성으로 다수의 병렬 프로세싱을 용이하게 처리할 수 있는 고유의 기능을 갖추고 있어 이상적인 대안이 될 수 있다.
 
그렇다면 자일링스(Xilinx®) FPGA 상에 어떻게 CNN(Convolutional Neural Network)을 구현할 수 있는지 자세히 살펴보도록 하자. CNN은 대규모 이미지 인식 작업 및 다른 유사한 머신러닝 문제를 매우 성공적으로 처리할 수 있는 DNN의 일종이다. 따라서 FPGA에 대한 CNN 구현의 타당성 조사를 통해 FPGA가 대규모 머신러닝 문제 해결에 적합한지 여부에 대한 지표를 제공할 수 있을 것이다.
 
CNN(Convolutional Neural Network) 무엇인가?
CNN(Convolutional Neural Networks)은 DNN(Deep Neural Networks)의 한 형태로 최근 엔지니어들이 다양한 인식 작업에 사용하기 시작했다. 이미지 인식, 음성 인식, 자연언어(Natural-Language) 처리 등이 CNN을 적용한 일반적인 애플리케이션들이다.
 
2012년에 토론토 대학의 알렉스 크리쉬브스키(Alex Krishevsky)[1] 등이 제안한 CNN 기반의 딥 아키텍처는 국제 이미지 인식 기술대회인 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)에서 수상한바 있다. 이 모델은 이전의 모델이나 경쟁자들에 비해 인식 기술면에서 상당한 진전을 달성했으며, AlexNet은 모든 이미지 인식 작업 비교를 위한 벤치마크가 되었다.
 
AlexNet은 3개의 밀도 레이어(Dense Layer)에 이어 5개의 콘볼루션 레이어(Convolution Layer)로 구성되어 있다.(그림 1 참조) 각 콘볼루션 레이어는 가중 필터(Weight Filter)를 갖춘 일련의 입력 피처 맵(Feature Map)의 합성곱 연산을 수행하며, 출력 피처 맵을 도출하게 된다. 밀도 레이어는 완벽하게 레이어들이 연결되어 있으며, 모든 출력은 모든 입력의 함수가 된다.

 

그림 1. 이미지 인식 벤치마크인 AlexNet은 5개의 콘볼루션 레이어(청색 박스)와
3개의 밀도 레이어(노랑)로 구성된다.
 
 
콘볼루션 레이어(Convolution Layer)
AlexNet의 콘볼루션 레이어는 그림 2에 나타낸 것처럼 3D 콘볼루션과 ReLu(Rectified Linear Unit)를 이용한 활성화 함수, 서브 샘플링(Max Pooling) 등 3가지의 주요 작업을 수행한다. 3차원 콘볼루션은 다음 공식으로 표현된다:
 

 
Y(m,x,y)는 출력 피처 맵 m 위치(x,y)에서의 콘볼루션 출력이고, S는 (x,y) 주변의 로컬 인근(Local Neighborhood)을 나타내며, W는 콘볼루션 필터, X(n,x,y)는 입력 피처 맵 n의 픽셀 위치(x,y)에서의 콘볼루션 동작을 위한 입력이다.
 
사용되는 활성화 함수는 함수 Max(x,0)을 수행하는 ReLu이다. 이 활성화 함수는 네트워크 전달 함수에 비선형성을 도입한다. 맥스 풀링(Max Pooling)은 AlexNet에 사용되는 서브 샘플링 기법이다. 이 기법을 이용해 픽셀의 로컬 인근에서 다음 레이어로 전파할 최대값 만을 선택하게 된다.
 

그림 2. AlexNet의 콘볼루션 레이어는 3D 콘볼루션, 활성화 및 서브 샘플링을 수행한다.
 
 
밀도 레이어 정의
AlexNet의 밀도 레이어는 완벽하게 연결된 레이어와 일치하며, 여기에서 모든 입력 노드는 각 출력 노드와 연결되어 있다. AlexNet의 첫 번째 밀도 레이어는 9,216개의 입력 노드를 가지고 있으며, 이 벡터는 4,096개의 출력 노드에서 출력을 생성하기 위해 가중치 행렬로 곱셈이 이뤄진다. 마지막으로 이러한 4,096개의 출력은 소프트맥스 리그레션(Softmax Regression)을 이용해 1,000 클래스의 개연성을 만드는데 사용된다.
 
FPGA 상에 CNN 구현
더욱 새로운 첨단 디자인 환경이 구축되면서 소프트웨어 개발자들은 보다 쉽게 자일링스 FPGA에 자신의 디자인을 포팅할 수 있게 되었다. 소프트웨어 개발자는 C/C++ 코드에서 함수를 불러올 수 있어 FPGA 고유의 아키텍처 장점을 활용할 수 있게 되었다. AuvizDNN과 같은 Auviz Systems의 라이브러리는 사용자가 다양한 애플리케이션에 적합한 맞춤형 CNN을 생성할 수 있도록 최적화된 함수를 제공한다. 이러한 기능은 FPGA 상에 커널을 론칭하기 위해 자일링스의 SDAccel™ 디자인 환경에서 불러올 수 있다.
 
가장 간단한 방법은 순차적인 방식으로 콘볼루션 및 벡터 매트릭스 연산을 구현하는 것인데, 관련된 연산 수를 고려하면, 순차적 연산은 상당한 지연을 초래하게 된다.
 
순차적 구현방식의 매우 높은 지연의 주요 원인은 CNN과 관련된 엄청난 수의 연산 때문이다. 이러한 복잡도를 보여주기 위해 그림 3에 AlexNet의 각 레이어별 데이터 전송 및 연산 수를 나타내었다.
 

그림 3. AlexNet과 관련된 연산 복잡도와 데이터 전송 수를 측정한 차트
 
따라서 병렬 연산이 필수적이다. 병렬 구현방식은 여러 가지가 있는데, 그림 6에 한가지 사례를 나타내었다. 여기서 보면, 하나의 출력 값을 생성하기 위해 11 x 11 피처 맵으로 11 x 11 가중치 행렬을 병렬로 합성곱 연산을 처리한다. 이 프로세스는 121개의 병렬 곱셈-누적 연산기를 포함하고 있다. FPGA가 제공하는 리소스에 따라, 512개 또는 768개의 값을 병렬로 합성곱 연산을 처리할 수 있었다.
 
처리량을 더욱 높이기 위해, 구현방식을 파이프라인화할 수 있다. 파이프라인은 부동소수점 곱셈이나 덧셈처럼 완료하는데 한 사이클 이상이 소요되는 연산의 처리량을 더욱 높일 수 있다. 파이프라이닝으로 인해 첫 번째 출력에서 지연이 아주 조금 증가할 수 있지만, 매 사이클마다 출력을 얻을 수 있다.
 
AuvizDNN을 이용해 CNN을 FPGA 상에 완벽한 구현하는 방식은 C/C++ 프로그램에서 순차적으로 함수를 호출하는 것처럼 보인다. 객체 및 데이터 컨테이너가 설정된 이후, 각 콘볼루션 레이어를 생성하기 위해 함수 호출이 이뤄지며, 그 다음으로 밀도 레이어와 마지막으로 소프트맥스 레이어가 만들어진다.(그림 4 참조)
 

그림 4. CNN을 구현하기 위한 순차적인 함수 호출
 
 
FPGA 상에 CNN을 구현할 수 있도록 해주는 Auviz Systems의 함수 라이브러리인 AuvizDNN은 손쉽게 CNN을 구현할 수 있도록 모든 필요한 객체와 클래스, 함수를 제공한다. 사용자는 각기 다른 레이어를 생성하는데 필요한 파라미터만 제공하면 된다. 예를 들어, 그림 5의 코드 예제는 AlexNet에서 첫 번째 레이어를 생성하는 방법을 보여준다.
 

그림 5. AuvizDNN을 이용해 AlexNet의 레이어 1을 구현하기 위한 코드 예제
 
AuvizDNN은 모든 타입 및 구성의 CNN을 생성할 수 있는 컨피규레이션이 가능한 함수를 제공한다. AlexNet은 일러스트처럼 사용된다. CNN 구현은 C/C++ 프로그램에서 불러온 완벽한 비트스트림처럼 FPGA에 로드되며, 개발자들은 구현 소프트웨어를 구동할 필요없이 AuvizDNN을 사용할 수 있다.
 
FPGA는 수많은 LUT(Lookup Table)와 DSP 블록, 온칩 메모리를 가지고 있으며, 딥 CNN을 구현하는데 매우 적합하다. 데이터 센터 측면에서는 기본 성능 보다 와트당 성능이 중요하다. 데이터 센터는 고성능은 물론, 제한된 데이터 센터 서버 요구 범위 내의 전력 프로파일이 지켜져야 한다.
 
자일링스의 킨텍스(Kintex®) 울트라스케일(UltraScale™) 디바이스와 같은 FPGA는 와트당 14images/second 이상을 제공할 수 있으며, 이는 데이터 센터 애플리케이션에 매우 이상적이다. 그림 6은 각기 다른 FPGA로 달성할 수 있는 성능 아이디어를 보여준다.
 

그림 6. AlexNet의 성능은 채택한 FPGA의 등급에 따라 달라진다.
 
 
모두 C/C++ 시작 가능
CNN은 점차 보편화되고 있으며, 이미지 인식, 자연음성 처리 및 기타 여러 작업을 위해 대대적으로 확산되고 있다. CNN이 고성능 컴퓨팅 애플리케이션(HPC)에서 데이터 센터로까지 이행함에 따라, 이를 구현할 수 있는 효율적인 방법이 필요하다.
 
FPGA는 매우 효율적으로 CNN을 구현하는데 사용될 수 있다. 또한 FPGA는 매우 뛰어난 와트당 성능을 제공하기 때문에 데이터 센터에 적합하다.
 
AuvizDNN은 FPGA 상에 CNN을 구현할 수 있는 함수 라이브러리를 제공한다. AuvizDNN은 FPGA 사용의 복잡성을 없애주고, 사용자가 FPGA 구현을 가속화할 수 있도록 C/C++ 프로그램에서 불러올 수 있는 간단한 함수들을 제공한다. AuvizDNN 라이브러리 내에서 함수를 불어옴으로써 FPGA 구현 가속화는 C/C++를 작성하는 것과 전혀 다르지 않다.
 
보다 자세한 정보는 웹사이트 www.auvizsystems.com 또는 이메일 sales@auvizsystems.com을 통해 확인할 수 있다.
적용분야 :
Data Center, Smarter Networks
관련제품 :
UltraScale, Kintex-7