20161016

MemoryTech (Tutorial on Existing and Emerging Memory Technologies and Circuits)
SRAM and eDRAM, D. Somasekhar
SRAM은 logic die의 30~40%를 차지함. SRAM을 사용하는 이유? logic process technology와 compatible하다. logic transistor 성능 개선 이득볼 수 있으며, 가장 높은 성능을 보이는 메모리이다. SRAM은 전통적으로 6개의 transistor로 구성됨. 메모리 셀의 물리적인 topology도 지속적으로 개선되어왔음. Topology가 어떻게 개선되어 왔는지 보여줌.
eDRAM은 next highest speed class of memory. DRAM과 SRAM 사이의 latency, density를 갖는다. leakage power를 줄이기 위한 공정 최적화가 필요하다. 회로 자체는 단순해보이지만, 실제 구조는 복잡하다 (만들기 힘들다, 공정 최적화가 필요하다는 이야기인 듯?). 회로 자체는 단순해보이지만, vertical integration을 통해 생성된다.
cell functionality에 대해 이야기하자. SRAM에서 cell retention stability가 있음. 이해 못함. SRAM cell write stability에 대해 이야기함. 최근에 생성되는 칩은 더이상 안정적이지 못하다고 함. collapse array Vdd, raise WL in steps, raise Vss, nagative BL… 너무 자세한 내용이라서 그냥 나옴.


Tutorial on Hardware Architectures for Deep Neural Networks
Overview of Deep Neural Nets
DNN의 활용 가능성에 대해 이야기하고 있었음. 뇌의 시냅스 연결을 찾아내는 것에도 사용할 수 있다고 함. 이를 통해 그래프를 생성하는 것. 요약하자면, image classification, recognition, detection, segmentation, speech recognition, translation, natural language processing, audio generation, games 등에 쓰일 수 있음. 컴퓨터 성능을 개선해서 더 많은 학습을 더 빠르게 할 수 있다면, 더 높은 뉴럴 넷을 사용할 수 있을 것.
DNN timeline. 1940년대에 뉴럴 넷이 제안되었고, 1960년대에 DNN이 제안됨. 1990년대에 뉴럴 넷을 위한 하드웨어가 제안됨. 1998년에 MNIST를 위한 LeNet을 만듦. 2011년에 DNN을 사용해 speech recognition 수행, 2012년에 deep learning이 인기를 얻기 시작함. 2010년 초반에 DNN 가속기 연구가 활발해짐. 이에 따라 neural network를 위한 가속기 논문도 급격히 증가함.
Neural network의 종류는 매우 다양하다. 흔히 쓰이는 DNN 종류는 fully-connected NN, convolutional NN, recurrent NN, long short-term memory NN등이 있음. Recurrent NN은 feedback만 있고, long short-term memory NN은 feedback과 storage가 함께 있다.
Training은 뉴럴 넷의 weight을 결정하는 단계. Supervised training은 training set이 입력과 출력을 가진 것 (labeled). Reinforcement training은 행위에 대한 보상으로 결정하는 것. Unsupervised training은 training set에 label이 없는 것. Inference는 뉴럴 넷으로 값을 결정하는 것.
최근 흔히 쓰이는 뉴럴 넷에서 convolution 연산이 90% 이상의 연산에 사용되며, 실행 시간과 에너지 소모의 대부분을 차지한다. 입력 feature map에 대해 filter를 곱하여 output feature map을 만든다. Sliding window 방식으로 모든 입력에 대해 output feature map 생성함. feature map에 여러 개의 channel이 있고, 채널별로 filter가 있다. Convolution 연산의 특징은 convolution 연산 루프이 모두 독립적이라는 점이다.
Activation function을 예전에는 흔히 sigmoid를 썼다. 요즘 더 흔히 많이 쓰이는 것은 rectified linear unit, leaky ReLu, exponential LU 등을 쓴다. Pooling layer에서는 channel의 해상도를 낮추어 noise resolution을 높인다. NORM layer에서는 표준 정규 분포로 normalize하다. NORM layer는 convolutional layer과 activation function 사이에 들어간다. Normalization 기법에도 다양하게 있는 듯 하다. Local response normalization(LRN)은 뇌에서의 방식을 따라하고자 한 것. 하지만 이제는 잘 쓰이지 않는다.


Survey of DNN Development Resources
DNN의 정확도는 계속해서 개선되고 있으며, 최근 한 학생의 정확도보다 높아지게 됨. LeNet은 1998년에 제안된 뉴럴 넷. 두 개의 convolutional layer, 두 개의 fully connected layer로 구성됨. 실제로 상품으로도 성공함. AlexNet은 다섯 개의 convolutional layer, 세 개의 fully connected layer로 구성됨. LeNet에 비해 weight의 수가 크게 증가함. 뉴럴 넷의 크기가 매우 크다. 채널도 많고, 필터도 많기 때문이다. VGG는 더 깊은 뉴럴 넷을 사용함. 뉴럴 넷을 아주 깊게 해보고자 한 연구이다. 16개의 convolutional layer, 3 개의 fully connected layer를 사용함. 하지만 deepness에 비하면 weight은 많지 않다. 이 연구에서는 weight을 줄이는 것을 한 가지 목표로 둠. GoogLeNET에서는 inception module을 사용해 weight의 수를 줄임. ResNet에서도 convolutional layer를 50개나 쓰며 그 깊이를 끝까지 가보고자 함. Depth가 지속적으로 늘어나고 있음. 그리고 convolutional layer는 매우 중요하다.


Survey of DNN Hardware
DNN hardware에 대해 이야기할 것. DNN이 하드웨어에 어떻게 매핑되었는지 이야기할 것. 하드웨어 생산자들돠 deep learning을 중요하게 생각하기 시작함. Intel Knights Landing은 deep learning 워크로드에 적합하다. 7 TFLOPS, 16GB MCDRAM, 245W TDP. MCDRAM은 tacked DRAM으로 프로세서 근처의 메모리이다. low power DRAM보다도 전력이 낮다. 왜 deep learning에 메모리가 중요한가? 뉴럴 넷에서 weight이 중요하기 때문이다. 실제로 뉴럴 넷은 고해상도 이미지 또는 데이터를 처리할 것이므로 메모리가 중요함. NVIDIA PASCAL 또한 deep learning에 사용될 수 있다. 10 TLFOPS for FP32, 20 TFLOPS for FP16 제공함. 300W TDP. NVIDIA에서는 turn-key system으로 DGX-1을 판매함. Facebook에서는 deep learning을 위해 open rack compliant의 것을 사용함. 8개의 Tesla M40 GPU를 사용. NVIDIA Tegra는 deep learning을 염두에 둔 새로운 GPU architecture. Mobile processor에서도 deep learning을 고려해서 설계한다. FPGA도 deep learning에 사용할 수 있다.
Kernel Computation에 대해 이야기할 것. Deep learning이 실제로 어떻게 매핑되어 실행되는가? Convolution 연산은 일반적으로 행렬 연산으로 변형되어 실행된다. 이를 Toeplitz Matrix라 한다. 이 과정에서 데이터 중복이 발생한다. Storage cost가 발생한다. 여러 개의 채널이 있어도 행렬 연산으로 변환하여 연산할 수 있다.
Computational transforms. 가장 중요한 연산은 곱셈이다. 곱셈을 줄이는 것이 중요하다. 같은 결과를 갖되, 연산의 수를 줄일 필요가 있다. Gauss’s multiplication algorithm을 예로 들어 설명해 줌. 곱 셈의 수를 줄이는 방법이었음. 같은 방식으로 연산 변환을 수행할 수 있다. Strassen이 그 예제임. 뉴럴 넷에서 weight은 상수이므로, 이같은 방법을 적용한다면 매번 재 연산할 필요 없이 덧셈으로만 inference를 수행할 수 있게 된다. theta(N^3) -> theta(N^2.807)로 연산 복잡도를 줄인다. 하지만 이를 적용하면 numerical stability를 떨어뜨리고 memory 사용량을 늘린다. Winograd의 기법 소개. 곱셈의 수를 크게 줄일 수 있다. Numerical accuracy가 inference에 중요하지 않기 때문에 Winograd 적용이 좋음. Frequency domain으로 전환에서 convolution 연산을 더 최적화할 수도 있음. DNN 벤치마크로 DeepBench 있음. Layer별로 성능을 평가할 수 있다는 것 같음.


DNN Accelerator Architecture
DNN을 위한 custom hardware를 어떻게 만들 수 있는지 볼 것이다. 너무 많은 뉴럴 넷 가속기가 나와있고, 개별 연구를 다 따라가 수는 없다. 연구 전반을 이해하는 방법에 대해서 이야기할 것이다. Highly-parallel compute paradigm이 있다. Temporal architecture(SIMD, SIMT)과 spatial architecture(Dataflow Processing)가 있다. Spatial architecture에서는 ALU끼리 통신이 가능하다. Spatial architecture가 DNN 가속에 유리하다.
Memory access가 bottleneck이다. weight, value 모두 메모리에서 읽어야 하며, partial sum 또한 메모리에 쓰여야 한다. Multiply-and-accumulate가 가장 빈번하게 일어나는 연산이기 때문이다. 최악의 경우에는 memory read & write 모두 DRAM이 될 것이다. Memory bottleneck을 해결하기 위한 기법으로 대표적인 것이 local memory이다. data reuse를 기대할 수 있다. DNN에서는 세 종류의 재사용이 발생한다. (1) Convolutional reuse는 convolutional layer에서 같은 filter를 다른 feature map에 적용하는 것. (2) Fmap reuse는 여러 개의 filter를 같은 feature map에 적용하는 것. convolutional layer, fully connected layer 모두에서 발생한다. (3) Filter reuse는 filter를 다른 feature map에 적용하는 것. data reuse 외로 local accumulation의 장점을 살릴 수 있다. local memory에 데이터를 축적함으로써 오버헤드를 줄일 수 있다.
Spatial architecture에서의 메모리 계층에 대해 살펴보자. DRAM이 있고, 칩 위에는 global buffer(100~500kB)가 있다. 그 다음으로 processing element에는 0.5~1.0kB 크기의 register file이 있다. Buffer에 접근하는 경우에는 6배밖에 느려지지 않지만, 메모리는 200배가 느려진다. local storage를 활용하면 좋겠지만, 문제는 local memory의 크기에 제약이 있다는 점이다.


Dataflow Taxonomy
Weight stationary, output stationary, no local reuse로 나뉠 수 있음. Weight stationary는 weight을 읽어들이는 것에 쓰이는 에너지 사용을 줄이는 것. Weight을 processing element에 고정시켜두고, 데이터만 주어 뉴럴 넷 활성화하는 것. Partial sum을 합하여 다시 global buffer에 저장한다. Output stationary는 연산 결과인 partial sum을 최대한 processing element에 두는 것이다. ShiDianNao에서 이같은 방식을 택하고 있으며, 데이터를 한 번만 메모리에서 읽고 그 이후로는 processing element에서 받는다. No local reuse는 local(processing element)에서 재사용하지 않고, global buffer에서 재사용하도록 한다. Global buffer를 크게 만들고, 데이터를 global buffer에 두는 것. 이로써 메모리 접근을 줄인다. 이같은 예제가 UCLA이다. 입출력단에서는 큰 버퍼를 두고, 가속기에서는 data path만 둔다. DianNao도 NLR의 예제 중 하나라고 할 수 있음. 그 외의 논문에 대해서도 dataflow taxonomy가 어떻게 되는지 소개하고 있음.
Dataflow taxonomy에 따른 에너지 효율성을 살펴봄. Simulation 기반으로 평가. 이를 기반으로 row stationary라는 새로운 data flow를 정의할 수 있음을 확인함. reuse, accumulation을 register file에서 수행하는 것. overall energy efficiency를 증가시킨다. convolution을 수행할 때 filter는 계속 반복사용되고, feature map은 sliding한다는 점에 착안한다. 그리고 register file에서 partial sum을 축적해간다. 이렇게 하면 데이터 재사용을 최대화할 수 있다. Weight stationary, output stationary, no local reuse, row stationary의 성능을 비교해 봄. Row stationary가 가장 좋은 에너지 효율성을 보인다. Non local reuse가 가장 나쁜 에너지 효율성을 보인다. DNN 연산의 전체 에너지 소모량 중에 ALU는 적은 부분을 차지한다. 대부분은 DRAM, NoC가 차지한다. DNN 연산 소모 에너지의 대부분을 convolutional layer가 차지한다. Eyeriss가 row-stationary data flow를 택했고, 어떤 방식으로 이를 구현했는지 설명한다. replication과 folding을 사용하겠다고 함. caffe에 eyeriss를 통합하여 실험함.


Advanced Technology Opportunities
미래 프로세스를 활용한 가능성에 대해서 생각할 것이다. embedded DRAM(eDRAM)을 활용해 on-chip storage capacity를 높일 수 있을 것으로 예상한다. 다음으로 3D-stacked DRAM을 볼 것이다. HMC, HBM 등을 활용하여 메모리 대역폭을 높일 수 있을 것으로 예상한다. 메모리를 어떻게 사용하느냐에 따라, 데이터를 연산에 가까운 곳에서 하기 위한 기법에 도움을 줄 수 있다. eDRAM은 SRAM보다 높은 집적도를 보이며, DRAM보다는 321배 에너지 효율적이다. DaDianNao는 eDRAM에 weight을 저장한다. fully connected layer를 타겟으로 한다. Stacked DRAM은 neuroCube에서 이를 채택함. logic die위에 DRAM die를 쌓음. vault는 더 높은 대역폭을 제공한다. 더 많은 채널이 있으므로 병렬적으로 접근 가능하다.
Analog computation. 행렬 연산에서 쓰이는 multiply and accumulation을 아날로그 연산으로 치환할 수 있다. 전압, 전류, 인덕턴스의 관계를 활용하면 resistor로 연산을 수행할 수 있다. meristor를 programmable weights로 활용할 수 있다. 더 높은 집적도를 가지며, non-volatile하고, 낮은 전압에 서 동작한다. 그리고 메모리에서 연산할 수 있다는 장점이 있다. Memristor는 저항을 조작할 수 있는 소자이다.Memristor를 사용하기 위한 다양한 문제가 있다. 정확도가 낮아진다는 문제가 있다. 6~7 비트 정도의 정확도를 갖는다는 문제가 있다. 그 다음으로 아날로그 디지털 전환 과정이 필요하다는 문제가 있다. wire가 에너지에 크게 영향을 미친다. 그 다음으로 programming에 많은 에너지가 필요하다. 에너지 효율성을 떨어뜨릴 것이다.그리고 여전히 어떻게 yield & variation을 해결할 것인지가 문제이다.
ISAAC은 memristor를 사용한 eDRAM을 활용한다. 그리고 이를 사용해 뉴럴 넷 연산을 수행한다. 다른 예제로 PRIME이 있다. 이 연구에서도 resistor RAM을 본다.


Network and Hardware Co-Design
뉴럴 넷과 하드웨어를 함께 구현하는 것에 대해 고민한다. 이 과정에서 정확도와 효율성을 함께 개선할 수 있다. Network optimization에 두 가지가 있음. 정확도를 낮추는 방법이 있음. 또는 연산의 수를 줄이거나 weight을 줄이는 방법이 있음 (pruning, compression). 정확도를 줄이는 다양한 방법이 있음. Quantization / Rounding, dynamic fixed point, fine-tuning 등이 있음. Gppg;e T{I에서도 floating point를 쓰지 않고 8-bit integer를 사용한다. Nvidia PASCAL에서도 8-bit integer instructions를 지원한다. 8-bit가 promising하다는 것을 알 수 있다. Bitwidth scaling을 적용하면 더 높은 throughput을 기대할 수 있을 뿐 아니라, critical path가 짧아져서 더 낮은 전력 소모를 기대할 수 있다. 이를 극단으로 끈 것이 binary neural net이다. weight은 binary로 하고, activation function은 그대로 둘 수 있을 것. 두 가지 모두 binary로 하는 연구도 있음.
연산의 수를 줄이는 방법에는 네트워크 압축, pruning, network architecture 재설계 등의 방법이 있다. low rank approximation은 SVD를 적용한 tensor decomposition. weight sharing을 통해 메모리 압축할 수 있다. 메모리 압축하면 메모리 대역폭 사용량 또한 줄일 수 있다. 0을 건너뛰게 함으로써전력 소모를크게 줄일 수 있다.


Benchmarking Metrics for DNN Hardware
DNN의 성능을 평가하기 위한 표준이 없다. 어떻게 디자인을 평가할 수 있는가? accuracy, power, throughput, area cost 등. 그 외에 메모리 대역폭, on-chip storage, utilization of cores 등도 있음. 이 모든 것을 함께 고려한 벤치마크를 어떻게 만들 것인가? 흔히 쓰이는 DNN은 AlexNet, VGG-16, GoogleNet-v1. RsNet-50 등이 있음. DNN 알고리즘 평가 기준에는 accuracy, network architecture(레이어의 수, 필터 크기, 필터의 수, 채널의 수), number of weights, number of MACS 등이 있음. 이러한 기준에 따라 평가한 연구가 있음. github.com/jcjohnson/cnn-benchmarks. DNN hardware를 위한
기준에는 무엇이 있나? 실제 연산이 필요한 요소에 쓰이는 에너지, 데이터 크기가 중요하다. 에너지 효율적인 설계, 메모리 대역폭 인지한 설계가 필요함. 그리고 area efficient한 설계가 필요함. 이러한 기준을 기반으로 해서 레이어 수준의 성능 분석을 할 수 있다.


Hardware for Training
학습은 어떻게 일어나는가? 학습은 뉴럴 넷 오차를 최소화하는 model parameter(bias, weight…)을 찾는 과정이다. 이를 찾기 위해 iterative하게 steepest descent를 찾으며, 이 과정이 back propagation이다.

Advertisements
Tagged with: , , , , ,
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 93,201 hits
%d bloggers like this: