KR102647858B1 - 컨볼루션 신경망 계산을 위한 저전력 하드웨어 가속 방법 및 시스템 - Google Patents
컨볼루션 신경망 계산을 위한 저전력 하드웨어 가속 방법 및 시스템 Download PDFInfo
- Publication number
- KR102647858B1 KR102647858B1 KR1020180064186A KR20180064186A KR102647858B1 KR 102647858 B1 KR102647858 B1 KR 102647858B1 KR 1020180064186 A KR1020180064186 A KR 1020180064186A KR 20180064186 A KR20180064186 A KR 20180064186A KR 102647858 B1 KR102647858 B1 KR 102647858B1
- Authority
- KR
- South Korea
- Prior art keywords
- values
- input
- vector
- bits
- output
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000013528 artificial neural network Methods 0.000 title description 62
- 230000001133 acceleration Effects 0.000 title description 6
- 239000013598 vector Substances 0.000 claims abstract description 70
- 238000012545 processing Methods 0.000 claims abstract description 26
- 238000013527 convolutional neural network Methods 0.000 claims abstract description 19
- 238000000605 extraction Methods 0.000 claims description 12
- 239000011159 matrix material Substances 0.000 claims description 8
- 239000000284 extract Substances 0.000 claims description 5
- 238000013507 mapping Methods 0.000 claims description 5
- 238000009825 accumulation Methods 0.000 claims description 2
- 230000003247 decreasing effect Effects 0.000 claims 1
- 230000001131 transforming effect Effects 0.000 claims 1
- 238000004364 calculation method Methods 0.000 description 40
- 238000007792 addition Methods 0.000 description 30
- 230000008569 process Effects 0.000 description 16
- 238000012886 linear function Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 230000004913 activation Effects 0.000 description 10
- 238000001994 activation Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 5
- 238000011068 loading method Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 4
- 238000013178 mathematical model Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000003062 neural network model Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005094 computer simulation Methods 0.000 description 2
- 238000013523 data management Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000001816 cooling Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000008451 emotion Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000001815 facial effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000010355 oscillation Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7821—Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Neurology (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Complex Calculations (AREA)
Abstract
컨볼루션 신경망의 계층을 처리하는 방법은 온-칩 메모리로부터 입력 벡터 값들 및 상응하는 가중치 벡터 값들의 페어(pair)들의 복수의 상이한 부분 집합들을 읽고, 그리고 읽혀진 페어 값들을 복수의 곱셈 유닛들의 레지스터들에 저장하는 단계, 및 현재 계층에 대한 출력 벡터를 얻기 위해 상기 읽혀진 페어 값들을 곱하고 곱셈들의 결과들을 누적함으로써 상기 레지스터들의 상기 복수의 상이한 부분 집합들을 동시에 처리하는 단계를 포함한다. 상기 입력 벡터 값들 및 상기 가중치 벡터 값들은 부동 소수점 값들을 갖고 그리고 상기 읽혀진 페어 값들을 곱하는 것은 로그 영역에서 정수들의 상응하는 페어들을 더하는 것을 포함하고, 그리고 입력 값 또는 가중치 값은, 상기 입력 값 또는 상기 가중치 값이 계산되지 않은 출력 벡터 값들을 계산하는데 더 이상 필요하지 않은 이후에 상기 온-칩 메모리로부터 나온다.
Description
본 발명의 실시 예들은 컨볼루션 신경망들을 이용하는 방법들, 및 그것의 하드웨어 구현에 관한 것이다.
신경망들(Neural-Networks; 이하 NN) 및 특히 컨볼루션 신경망(convolution-neural-network; 이하 CNN)은 이미지들 내 객체들의 인식 및 분할, 얼굴 인식, 음성 인식, 광학식 문자 및 필기 인식, 스테레오(stereo) 이미지들로부터 깊이(depth) 추출, 자동 번역 등을 포함하는, 많은 고급의 알고리즘(algorithm)들 및 어플리케이션(application)들을 위한 유용한 계산 모델들이다.
NN들은 일반적으로 매우 계산 집약적이다. 예를 들어, 초당 30개 또는 60개 프레임들에서 비디오의 온라인의 실시간 객체 검출 및 객체 분할을 위해 NN의 많은 활성화들이 요구되면, 계산 부하는 예를 들어, 초당 수 테라(tera) 연산들까지 매우 높아질 수 있다. 이러한 부하를 지원하기 위해서는, NN 계산을 가속하기 위한 전용의 디지털 회로가 유용하다. 극심한(intense) 계산은 상당한 전력도 소모하고, 이는 배터리 전력으로 동작하는 모바일 장치들과 같은, 일부 상황들에서 주요 요인이 된다.
전통적으로, NN 계산들은 고정밀의(예를 들어, 32 비트) 부동 소수점 값들을 처리하는 CPU들 및 GPU들과 같은 표준의 범용 디지털 하드웨어로 구현되었다. 그러나, 유사하지만, 저정밀로 표현(예를 들어, 16 비트들 또는 8비트들 고정 소수점 정수 표현)되는 값들에 대한 덜 요구되는 계산들이 많은 실제 어플리케이션들을 위해 충분한 것이 최근에 밝혀졌다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 컨볼루션 신경망 계산을 위한 저전력 하드웨어 가속 방법 및 시스템을 제공할 수 있다.
본 발명의 예시적인 실시 예들은 저전력을 소비하면서 요구되는 정확도는 유지하는 컨볼루션 신경망 수학적 모델의 중심 계산을 가속하는 방법 및 디지털 하드웨어 장치에 관한 것이다. 가속은 대규모 병렬 처리에 의한 고도로 집약된 전용의 NN 계산들을 수행하는 곱셈 유닛들에 의해 달성된다. 저전력은 수치들 의 새로운, 고도의 조정할 수 있는 고정 소수점 표현 그리고 정확도가 많은 NN 기반의 어플리케이션들에 충분한, 이러한 값들에 대한 상응하는 고도의 효과적으로 근사치로 계산된 NN 계산들에 의해 달성된다. NN 가속기는 수치들의 새로운, 고도의 조정할 수 있는 고정 소수점 표현과, 이러한 표현에 대해 근사치 연산들, 그리고 NN 계산 동안 값들의 표현의 최적의 조정할 수 있는 변수들을 자동으로 판별하기 위한 상응하는 디지털 회로 구현을 이용한다. 본 발명의 실시 예들에 따른 NN 가속기는 NN 계산들에 전통적으로 사용되는 명백한 곱셈을 위한 디지털 유닛은 피하고, 대신에 새로운 저전력 디지털 유닛들을 사용하고, 이들 각각은 약간의 덧셈기들 및 약간의 쉬프터들과 함께, 룩업 테이블을 포함하는 간단한 디지털 유닛들을 결합한다. 실시 예에 따른 디지털 회로는 사용 가능한 디지털 산술 유닛들의 활용을 최적화함으로써 연산 당 로직 게이트들 측면에서 회로 상 작은 공간을 갖고, 회로 변경 없이 전력과 계산들의 정확도간의 트레이드오프를 변수에 의해 제어할 수 있다.
본 발명의 실시 예에 따라, 온-칩 메모리로부터 입력 벡터 값들 및 상응하는 가중치 벡터 값들의 페어(pair)들의 복수의 상이한 부분 집합들을 읽고, 그리고 읽혀진 페어 값들을 복수의 곱셈 유닛들의 레지스터들에 저장하는 단계, 및 현재 계층에 대한 출력 벡터를 얻기 위해 상기 읽혀진 페어 값들을 곱하고 곱셈들의 결과들을 누적함으로써 상기 레지스터들의 상기 복수의 상이한 부분 집합들을 동시에 처리하는 단계를 포함하는 컨볼루션 신경망의 계층을 처리하는 방법이 제공된다. 상기 입력 벡터 값들 및 상기 가중치 벡터 값들은 부동 소수점 값들을 갖고 그리고 상기 읽혀진 페어 값들을 곱하는 것은 로그 영역에서 정수들의 상응하는 페어들을 더하는 것을 포함하고, 그리고 입력 값 또는 가중치 값은, 상기 입력 값 또는 상기 가중치 값이 계산되지 않은 출력 벡터 값들을 계산하는데 더 이상 필요하지 않은 이후에 상기 온-칩 메모리로부터 나온다.
본 발명의 추가의 실시 예에 따라, 상기 로그 영역의 밑(base)은 2^(1/(2^N))이고, N은 양의 정수이다.
본 발명의 추가 실시 예에 따라, 방법은, 상기 컨볼루션 신경망의 각 계층에 대해, 상기 온-칩 메모리에 상기 입력 벡터 값들의 로그 영역 값들을 저장하는 단계, 상기 온-칩 메모리에 상기 가중치 벡터 값들의 로그 영역 값들을 저장하는 단계, 곱셈 결과들을 누적하기 전에 덧셈 결과들을 선형 영역으로 변환하는 단계, 및 상기 온-칩 메모리로부터 외부 메모리로 상기 현재 계층에 대한 상기 출력 벡터를 출력하는 단계를 더 포함한다.
본 발명의 추가 실시 예에 따라, 로그 영역에서 정수들의 상응하는 페어들을 더하는 것에 의해 읽혀진 페어 값들을 곱하는 단계는, R=2N이고 s는 N 비트들만큼 s를 오른쪽으로 쉬프트하여 정수들의 상응하는 페어들의 합이고, y=를 계산하는 단계, s%R은 [0, R-1] 범위이고, s의 N개 LSB(least significant bit)들을 추출함으로써 s%R을 계산하는 단계, 룩업 테이블을 이용하여 s%R을 [1, 2) 범위의 양수 x에 맵핑(mapping)하는 단계, 및 y 비트들만큼 x를 왼쪽으로 쉬프트하여 를 계산하는 단계를 포함한다.
본 발명의 추가 실시 예에 따라, 곱셈-및-누적 연산을 계산하는 단계는, 일부 k에 대한 uk에 대해, 를 계산하는 단계를 포함하고, uk는 상기 출력 벡터이고, vj는 입력 벡터이고, 그리고 wk,j는 상응하는 가중치이고, Ψ(d, k)는 uk를 계산하는 것의 d번 반복에 대해 선택된 i개 인덱스들의 집합이고, 모든 d번의 반복들에 대한 결합은 인덱스들 1, …, J의 전체 집합이고, 그리고 Ω(j, k)는 각 출력 값 uk를 계산하는데 사용되는 입력들 Ω(1, k), …Ω(j, k)의 부분 집합이고 그리고 상기 곱셈-및-누적 연산의 결과들을 누적하는 것은 를 계산하는 단계를 포함한다.
본 발명의 추가 실시 예에 따라, 방법은 정수 f 및 그것의 상한 fmax를 사전에 결정된 값들로 초기화하는 단계, 상기 현재 계층의 상기 출력 벡터 uk에 대한 인덱스들의 부분 집합 k', …, k'을 선택하는 단계, f를 증가시키는 단계, 및 f>fmax면, f를 fmax로 설정하는 단계를 포함할 수 있다.
본 발명의 추가 실시 예에 따라, 방법은 (f-M)만큼 상기 덧셈 결과들을 조정하되, M은 상기 덧셈 결과들의 분수 비트들의 개수인 단계, 및 조정된 곱셈 결과가 L-1 또는 그 이상의 비트들을 요구할 때, L은 덧셈 유닛의 정수 워드 사이즈이고, 플래그를 참으로 설정하는 단계, 그렇지 않으면 상기 플래그를 거짓으로 설정하는 단계를 포함한다.
본 발명의 추가 실시 예에 따라, 방법은 상기 플래그가 거짓이고 f<fmax이면, f를 증가시키는 단계, 및 상기 플래그가 참이면 f를 감소시키고 fmax를 f의 새로운 값으로 설정하는 단계를 포함한다.
본 발명의 추가 실시 예에 따라, 방법은 상기 출력 벡터 uk를 f만큼 나누는 단계를 포함한다.
본 발명의 추가 실시 예에 따라, 방법은 상기 곱셈들의 누적된 결과들에 비선형 함수 F를 적용하는 단계, 및 온-칩 버퍼에 상기 출력 벡터로서 상기 비선형 함수 F가 적용된 결과들을 저장하는 단계를 포함한다.
본 발명의 다른 실시 예에 따라, 입력 벡터, 가중치 벡터, 및 출력 벡터를 저장하는 외부 메모리, 및 제어 유닛을 포함하는 컨볼루션 신경망의 계산들을 가속하기 위한 디지털 회로가 제공된다. 상기 제어 유닛은, 처리될 상기 입력 벡터 및 가중치 행렬의 로그 영역 값들을 저장하는 온-칩 메모리, 상기 온-칩 메모리로부터 로그 영역 입력 벡터 값들 및 상응하는 처리되지 않은 로그 영역 가중치 벡터 값들의 페어(pair)들의 상이한 부분 집합들을 선택하고, 복수의 레지스터들에 페어 값들을 저장하는 페어들 선택 유닛, 및 복수의 서브 유닛들을 포함하는 코어 유닛을 포함하고, 각 서브 유닛은 상기 복수의 레지스터들의 하나의 페어의 상기 페어 값들에 대한 곱셈-및-누적 연산을 수행하고, 상기 페어 값들을 곱하는 것은 로그 영역의 정수들의 상응하는 페어들을 더하는 것을 포함한다. 상기 코어 유닛은 z개 출력 값들의 부분 합들을 동시에 계산하고, z는 상기 출력 벡터의 값들의 총 개수보다 작고, 각 부분 합은 선형 영역 곱셈 결과들의 부분 집합을 포함하고, 그리고 상기 제어 유닛은 z개 출력 값들과 관련된 z개의 상응하는 레지스터들로 상기 부분 합들을 누적한다.
본 발명의 추가 실시 예에 따라, 디지털 회로는, 상기 상이한 부분 집합들에 대한 곱셈-및-누적 연산들의 결과들을 누적하는 누적기, 덧셈기에 의해 누적된 결과를 저장하는 레지스터, 상기 덧셈기에 의해 누적된 상기 결과에 비선형 함수를 적용하여 출력 값을 계산하는 함수 유닛, 및 상기 출력 값들을 저장하는 온-칩 버퍼를 포함한다.
본 발명의 추가 실시 예에 따라, 상기 복수의 레지스터들의 각 페어는 로그 영역 입력 값 vΩ ( j,k ) 및 로그 영역 가중치 값 wk,j을 각각 보유하고, 입력 값 vΩ(j,k)은 J개 구성 요소들을 갖는 입력 벡터의 구성 요소이고, 가중치 값 wk,j는 K X J 가중치 행렬의 k번째 열 벡터의 구성 요소이고, 그리고 Ω(j,k)는 입력 인덱스들 Ω(1,k), …, Ω(j,k)의 부분 집합이다. 각 서브 유닛은, vΩ ( j,k ) X wk,j를 계산하는 곱셈기, 및 서브 유닛들의 곱셈 결과들을 누적하는 덧셈기를 포함한다. 상기 서브 유닛들의 개수 i는 입력 값들의 개수 J보다 작다.
본 발명의 추가 실시 예에 따라, 상기 외부 메모리는 상기 가중치 행렬의 로그 영역의 값들을 저장하고, 그리고 상기 제어 유닛은 상기 로그 영역 입력 벡터 값이 상기 온-칩 메모리에 저장되기 전에 선형 영역의 입력 벡터를 상기 로그 영역 입력 벡터로 변환하는 로그-변환기 유닛을 포함한다.
본 발명의 추가 실시 예에 따라, 상기 곱셈기는, s=v'+w'를 계산하고 출력하는 덧셈기, s를 N 비트들만큼 오른쪽으로 쉬프트하여 를 계산하되, λ=21/R은 상기 로그 영역의 밑이고 R=2N인 제 1 쉬프트 레지스터, s의 N개 LSB(least significant bit)들을 추출하여 p=s%R을 계산하는 추출 유닛, p를 양수로 맵핑하고 x=2^(M+p/R)를 계산하되, x는 1+M 비트들 형태의 무부호 정수인 LUT, y = -M을 계산하는 뺄셈기, 및 x를 y 비트들만큼 왼쪽으로 쉬프트하고, v X w 결과를 출력하는 제 2 쉬프트 레지스터를 포함한다.
본 발명의 추가 실시 예에 따라, 상기 코어 유닛은, 상기 곱셈 유닛들의 상기 제 1 쉬프트 레지스터의 모든 i개 출력들 을 입력으로서 얻고 그리고 를 계산하는 제 1 최대화 유닛, f=L-2-q-δ 및 α=f-M를 계산하되, L은 상기 덧셈기의 정수 워드 사이즈이고, δ는 상기 덧셈기의 유효 개수의 비트들을 판별하는 유저 정의 상수이고, f는 순서O(10)의 사전에 결정된 정수이고, 그리고 각 곱셈 유닛의 상기 뺄셈기로의 입력으로서 출력 a를 제공하는 제 2 최대화 유닛, 곱셈기 결과 vΩ ( j,k ) X wk,j의 부호 gj를 추출하고 상기 덧셈기로 σi = vi X wi X gi X 2^f 결과를 출력하는 부호 추출 유닛, 및 상기 덧셈기로부터 수신된 누적된 곱셈 결과들을 2f로 나누는 쉬프터를 포함한다.
본 발명의 추가 실시 예에 따라, 디지털 회로는 상기 덧셈기로부터 수신된 상기 누적된 곱셈 결과들을 부동 소수점 표현으로 변환하는 부동 소수점 변환 유닛을 포함한다.
본 발명의 추가 실시 예에 따라, L은 상기 디지털 회로의 정확도와 전력 사용을 절충하도록 사전에 결정된다.
본 발명의 다른 실시 예에 따라, 적어도 하나의 LUT(look-up-table)를 포함하는 복수의 서브 유닛들을 포함하는 컨볼루션 신경망의 계산들을 가속하기 위한 디지털 회로가 제공된다. 각 서브 유닛은 정수 p를 B^(M+p/R)의 근사치를 계산하는 양수로 맵핑(mapping)하는 상기 적어도 하나의 LUT를 이용하여 입력 값들의 페어(pair)에 대한 곱셈-및-누적 연산을 수행하고, p, R, 및 M은 정수들이고, 그리고 B는 실수이다.
본 발명의 추가 실시 예에 따라, 각 서브 유닛은, 로그 영역 입력 값 vΩ ( j,k ) 및 로그 영역 가중치 값 wk,j을 각각 보유하되, 입력 값 vΩ ( j,k ) 은 J개 구성 요소들을 갖는 입력 벡터의 구성 요소이고, wk,j는 K X J 가중치 행렬의 k번째 열 벡터의 구성 요소이고, 그리고 Ω(j,k)는 입력 인덱스들 Ω(1,k), …, Ω(j,k)의 부분 집합인 레지스터들의 한 페어(pair); vΩ ( j,k ) X wk,j를 계산하는 곱셈기, 상기 복수의 서브 유닛들의 곱셈 결과들을 누적하는 덧셈기, 및 곱셈기의 결과 vΩ ( j,k ) X wk,j의 부호 gj를 추출하고 상기 덧셈기로 σi = vi X wi X gi X 2^f 결과를 출력하는 부호 추출 유닛을 포함한다. 상기 복수의 서브 유닛들 i의 개수는 입력 값들의 개수 J보다 작다.
본 발명의 실시 예에 따르면, NN 계산을 가속하고, 효율, 저전력에 초점을 맞추고, 대규모 병렬 처리에 사용되는 NN 입력 값들 및 가중치들의 로딩 및 재사용을 위한 고수준의 시스템이 제공될 수 있다.
도 1은 NN 및 CNN 계산들을 가속하기 위한 실시 예에 따른 하드웨어 시스템의 최상위 레벨의, 간략화된 개요를 도시한다.
도 2는 본 발명의 실시 예에 따라, 주 제어 유닛에 의해 구현된 단일 NN 계층을 처리하기 위한 방법의 순서도이다.
도 3은 본 발명의 실시 예에 따라, 로그 영역 덧셈에 의해 근사치로 계산된 곱셈의 하드웨어 구현을 도시한다.
도 4는 로그 기반 곱셈 및 고도의 조정할 수 있는 고정 소수점 덧셈을 이용하는 NN 저전력 가속기(LPA)의 설계를 도시한다.
도 5a 및 도 5b는 본 발명의 실시 예에 따라, 조정할 수 있는 고정 소수점 스케일 요인을 갖는 NN LPA를 위한 알고리즘의 순서도이다.
도 6은 본 발명의 실시 예에 따라, 컨볼루션 신경망 수학적 모델의 중심 계산을 가속하기 위한 방법을 구현하는 시스템의 블록도이다.
도 2는 본 발명의 실시 예에 따라, 주 제어 유닛에 의해 구현된 단일 NN 계층을 처리하기 위한 방법의 순서도이다.
도 3은 본 발명의 실시 예에 따라, 로그 영역 덧셈에 의해 근사치로 계산된 곱셈의 하드웨어 구현을 도시한다.
도 4는 로그 기반 곱셈 및 고도의 조정할 수 있는 고정 소수점 덧셈을 이용하는 NN 저전력 가속기(LPA)의 설계를 도시한다.
도 5a 및 도 5b는 본 발명의 실시 예에 따라, 조정할 수 있는 고정 소수점 스케일 요인을 갖는 NN LPA를 위한 알고리즘의 순서도이다.
도 6은 본 발명의 실시 예에 따라, 컨볼루션 신경망 수학적 모델의 중심 계산을 가속하기 위한 방법을 구현하는 시스템의 블록도이다.
본 명세서에 설명된 대로 본 발명의 예시적인 실시 예들은 일반적으로 저전력을 소비하면서 요구되는 정밀함은 유지하는 컨볼루션 신경망(convolutional neural network) 수학적 모델의 중심 계산을 가속하는 시스템들 및 방법들을 제공한다. 실시 예들이 다양한 수정들 및 대안적인 형태들에 민감하지만, 그것의 특정 실시 예들은 도면들 내에서 예로서 도시되고 본 명세서에서 상세하게 설명될 것이다. 그러나, 개시된 특정한 형태들로 본 발명을 제한하려는 의도는 없으나, 반대로, 개시는 본 발명의 사상 및 범위 내에 있는 모든 수정들, 균등물들, 및 대안들을 포함하는 것으로 이해되어야 한다.
개요
신경망(Neural Network; 이하 NN)은 '계층 계산들(layer computations)'의 활성화를 반복하여 J개 요소들을 갖는 입력 벡터(V=v1, …vJ)를 처리하는 계산의 방법이다. 여러 유형들의 계층 계산들이 있고, 여기서 중심의, 매우 많이 사용되고, 대부분의 자원을 요구하는 유형은 아래 수학식 1과 같은 형태의 많은 곱셈-누적(multiply-accumulate; MAC) 연산들의 형태를 구현한다:
계층의 출력은 K개 요소들을 갖는 벡터(U = u1, …uK)이다. 각 출력 값(uK)은 vj X wk,j 형태의 J개 곱셈 결과들을 더하여 계산되고, 여기서 wk,j는 K X J 행렬로서 표현될 수 있다. 그러면 결과는 비선형(non-linear) 함수(F)에 의해 처리된다. 계층 변수들의 전체 집합(W = w1, …K, l, …J)은 NN 정의의 일부이고, 입력 벡터들의 다른 인스턴스(instance, 혹은 경우)들을 처리하는 동안 동일한 변수들이 사용된다는 의미에서 고정된다. 각 k에 대해, 가중치들의 고유의 부분 집합(Wk=wk,1 …k,J)은 입력 인스턴스 벡터(V)로부터 출력(uk)의 인스턴스를 계산하기 위해 사용된다.
컨볼루션 신경망(Convolution Neural Network; 이하 CNN)은 순차적으로 계층 계산들을 적용하여 2차원 또는 3차원의 입력 이미지들을 처리하는 특정한 유형의 NN이다. 중심 계층 유형 연산은 컨볼루션(합성곱)이다. 컨볼루션은 상이한 출력 값들의 계산 동안 입력 및 가중치 요소들을 모두 재사용하는 측면에서 좀 더 복잡한 구조를 갖지만, 수학식 1과 유사한 형식인 아래 수학식 2로 표현될 수 있다:
각 출력 값(uk)의 계산 동안 모든 입력 값들이 사용되는 NN과 달리, CNN은 동일한 목적을 위해 입력들의 부분 집합(Ωk = Ω(1, k), …Ω(j, k))만을 이용할 수 있다. 부분 집합(Ωk)은 출력 값들의 3차원 배열 내 uk의 위치, 그리고 스트라이드(stride) 및 패딩(padding)과 같은 컨볼루션 연산의 다른 잘 알려진 속성들에 의존할 수 있다. 게다가, k의 상이한 값들에 대한 집합들(Wk's)의 다수가 동일하지만, 상이한 출력 값들을 얻기 위해 입력의 상이한 부분 집합들(Ωk)과 함께 사용된다. 필터(filter) 용어는 이하에서 재사용할 수 있는 W's의 집합에 대해 사용될 것이다. 하나의 이러한 필터로 계산된 출력 값들(u's)의 집합은 출력 슬라이스(output slice), 또는 출력 맵(output map)으로서 지칭된다. 전형적으로 계층 계산은 몇몇의 필터들과 상응하는 출력 슬라이스들을 포함한다. 수학식 1은 수학식 2의 간단한 형태이고 여기서 Ω는 항상 k와 관계없는 사소한 맵핑(Ω(j, k) = j)이다. 이것은 CNN 계층들의 완전 연결된(fully connected) 유형으로서 알려진 것의 경우뿐만 아니라 NN의 경우도 포함한다. 본 발명의 실시 예들은 NN 연산 및 CNN 컨볼루션 연산의 변형들간을 구별할 수 있는 Ωk에 대한 많은 선택들을 포함한다. 이들 변형들 모두는 본 발명의 실시 예를 이용하여 계산될 수 있고, 그리고 Ωk의 인덱싱(indexing)을 구현하는 하드웨어 로직 내에서만 다르다. 이하 본 명세서에서 사용된 대로 신경망(NN) 용어는 NN 및 CNN 모두를 지칭한다.
하나의 NN 계층의 처리, 즉 주어진 입력 벡터(V) 및 가중치들(W)로부터 하나의 출력 벡터(U)의 계산, 그리고 아마 사소하지 않은 인덱싱 로직(Ω)은 수십억의 곱셈-누적 연산들을 포함할 수 있다. 본 발명의 실시 예들은 수학식 1 및 수학식 2에 의해 표현되는 유형의 계산들을 가속하기 위한 방법 및 상응하는 하드웨어 시스템에 관한 것이다.
NN은 계층들의 다양한 토폴로지(topology)들을 가질 수 있다. 간단한 네트워크들에서, 계층 계산들이 순차적으로 수행되도록 하나의 계층의 출력은 다른 계층의 입력의 역할을 한다. 좀 더 복잡한 유형의 네트워크들에서, 하나의 계층의 출력은 몇몇의 계층들로 입력될 수 있고, 일부 계층들의 총 출력들은 또 다른 계층으로 입력될 수 있다. 하나의 계층의 출력을 다른 계층의 입력으로 전달하는 과정(process)은 많은 계산 자원들을 사용하지 않는다. 본 발명의 실시 예들은 하나의 계층의 출력을 다른 계층의 입력으로 전달하는 과정과 관계가 없다.
본 발명의 실시 예들의 측면들은 다음을 포함한다:
1. 고도의 병렬 처리를 위한 전력 효율적인 데이터 관리;
2. 조정 가능한 정확도와 함께 로그 영역의 효율적인 저전력 곱셈 방법;
3. 스케일(scale) 조정과 함께 효율적인 고정 소수점 덧셈:
o 상대적인 스케일의 온라인의 계산 및 빠른 스케일 조정;
o 절대적인 스케일의 온라인의 예측 및 느린 스케일 조정;
4. 정확도-전력 트레이드오프(tradeoff) 제어;
5. 곱셈 및 덧셈 동안의 제로 스키핑(zero skipping); 및
6. 결합된 고정 소수점 및 부동 소수점 계산: 부동 소수점에서의 곱셈, 고정 소수점에서의 대부분의 덧셈들과 부동 소수점에서의 일부 덧셈들.
고도의 병렬 처리를 위한 전력 효율적 데이터 관리
이번 섹션(section)에서는 CNN 계산을 가속하기 위한 실시 예에 따른 고수준의, 일반적인 시스템을 설명하고, 그리고 대규모 병렬 처리를 위한 효율적인 데이터 흐름을 위한 방법들에 초점을 맞춘다. 상술한 계산들은 병렬화될 수 있다. 병렬 계산들을 위한 실시 예에 따른 하드웨어 시스템은 시스템 클럭에 따라 동기된 i개의 동일한 곱셈 유닛들을 포함하고, 각 곱셈 유닛은 입력 값 및 가중치 값인 2개 값들의 곱셈을 구현할 수 있다. 곱셈 유닛들은 모든 결과들을 더하기 위해 충분한 개수의 상응하는 덧셈 유닛들과 파이프라인 방식으로 연결된다. 이것은 간단한 접근인 반면에, 더 미묘한 문제는 병렬 유닛들에 의해 처리될 많은 입력 페어(pair, 혹은 쌍)들을 어떻게 사용 가능하게 하느냐이다. 예를 들어, i=512이면, 병렬 머신(machine)의 이용을 최대화하기 위해, 시스템 클럭의 각 사이클에서(예를 들어, 1GHz(Giga Hertz)의 속도에서) 곱셈 유닛들이 1024개 값들을 사용 가능하게 되어야 한다. 저전력 및 저비용에서 고도의 병렬화를 위해 사용되는 처리량(throughput) 및 속도를 지원하기 위해, 실시 예에 따른 시스템은 곱셈 및 덧셈 유닛들과 함께 폭넓게 그리고 동기되어(synchronically) 접근될 수 있는 상대적으로 작은 온-칩 메모리(on-chip memory)를 포함한다. 또한, 실시 예에 따른 시스템은 많은 수의 값들, 즉, NN 계산에 포함되는 입력(V), 가중치들(W), 및 출력(U)을 보유하는 큰 외부 메모리를 포함한다. 최신의 NN에서, 가중치들만의 개수는 6천만을 초과할 수 있다. 칩 상에서 이러한 큰 개수의 값들을 보유하는 것은 크고 매우 비싼 온-칩 메모리를 사용했을 것인 반면에, 그것을 DRAM에 저장하는 것이 훨씬 저렴하다. 또한, 가속기가 더 큰 시스템의 일부이면, 이러한 구성 요소들은 이미 사용 가능하고, 추가 비용이 없다. 그러나, 입력 값들 및 가중치들 모두가 계산 동안에 과도하게 재사용된다. 매우 넓고 값비싼 버스를 포함하고 큰 전력을 소모하는 곱셈 유닛들에게 외부 스토리지(storage)로부터 직접 이들 값들을 반복해서 전달하는 것 대신에, 실시 예에 따른 시스템은 각 계층 계산에 대해 단지 한번만 데이터를 온-칩 메모리로 로드(load)하고, 그리고 온-칩 메모리로부터 병렬 곱셈 유닛들의 입력 레지스터들로, 매 클럭 사이클에서, 값들의 선택된 페어들의 고속 처리 전달을 관리한다.
도 1은 수학식 1 및 수학식 2에 의해 표현된 유형의 NN 및 CNN 계산들을 가속하기 위한 실시 예에 따른 하드웨어 시스템(10)의 최상위 레벨의, 간략화된 개요를 도시한다. 전술한 외부 메모리(11) 및 온-칩 메모리(12)에 더해, 실시 예에 따른 칩은 몇몇의 제어 및 처리 유닛들을 포함한다: 주 제어 유닛(13), 페어들 선택 유닛(pairs-selection-unit, 14), 및 코어 유닛(core unit, 15).
실시 예에 따라, 코어 유닛(15)은 곱셈 및 덧셈(MAC) 연산들을 구현하는 i개의 동일한 서브 유닛들을 갖는다. 각 서브 유닛은 입력 값(vΩ ( j,k )) 및 가중치(wk,j)를 각각 보유하기 위한 레지스터들(15.1, 15.2)의 페어, vΩ ( j,k ) X wk,j를 계산하기 위한 곱셈기(15.3), 및 서브 유닛들의 곱을 누적하기 위한 덧셈기(15.4)를 포함한다. 예를 들어 전술한대로 i는 ~512개와 같이 클 수 있으나, 하드웨어 가속기를 위해 사용되는 칩 면적 및 전력 자원들에 의해 제한된다. i<J 이므로 하나의 출력 값(uk)을 계산하기 위해 사용되는 모든 J개 MAC들을 완료하는데 코어의 다수 활성화들이 사용되는 경우가 종종 있다.
실시 예에 따라, 주 제어 유닛(13)은 외부 메모리로부터 입력 및 가중치들을 로드하는 과정, 그리고 출력으로서 결과를 외부 메모리로 다시 쓰는 것뿐만 아니라 이러한 활성화들을 관리한다. 주 제어 유닛(13)은 처리의 여러 측면들을 조정하는 2개의 중첩된 루프들을 구현한다.
실시 예에 따른 하드웨어 시스템(10)은 또한 다양한 입력 부분 집합들(Ωk)에 대한 결과들을 누적하기 위한 덧셈기(16), 결과를 저장하기 위한 레지스터(17), 출력 값들(uk)을 저장하기 위한 온 칩 버퍼(18), 및 누적 결과에 비선형 함수(F)를 적용하는 선택적 함수 유닛(19)을 포함한다. 온 칩 버퍼(18)는 비선형 함수(F)가 적용된 결과를 저장할 수 있다.
표기의 간략화를 위해, 도 1은 v's 및 w's의 i개의 임의의 페어들의 일부 집합에 대한 MAC 연산을 구현하는 코어를 도시한다:
본 발명의 다른 실시 예에 따라, i개 곱셈들은 코어 유닛에 의해 동시에 계산되나, 이들은 모두 하나의 출력(uk)과 관련된 하나의 합의 일부가 아니다. 오히려, 코어는 z개 출력 값들의 부분 합들을 동시에 계산하고, 여기서 z는 출력 값들의 총 개수보다 작고, 그리고 이들 부분 합들 각각은 곱셈 결과들의 부분 집합을 포함한다. 이들 결과들이 계산된 후에, 부분 합들은 주 제어 유닛에 의해 z개의 출력 값들과 관련된 z개의 상응하는 레지스터들에 누적된다.
도 2는 본 발명의 실시 예에 따라, 주 제어 유닛에 의해 구현된 단일 NN 계층을 처리하기 위한 방법의 순서도이다.
도면을 참조하면, 제 1 출력 값(uk, k=1)을 계산하기 위해 필요한 적절한 입력 값들 및 가중치들이 버스를 통해 외부 메모리로부터 읽혀지고, 온-칩 메모리에 저장된다. 버스는 AXI 버스와 같이, 사이클당 256 비트들로 클 수 있다. 실시 예들에 따라, 동일한 입력 벡터(V)가 가중치들(W)의 모든 부분 집합들에 사용되므로, 단계(203)에서 k가 1로 초기화되기 전에 입력 벡터(V)는 단계(201)에서 읽혀진다. 단계(205)에서, 출력 벡터(Uk)를 계산하기 위해 필요한 가중치들의 부분 집합(Wk)은 외부 메모리로부터 읽혀지고, 온-칩 메모리에 저장된다. 단계(207)에서, 누적기 값(ACC)은 0으로 초기화된다.
다음으로, 페어들 선택 유닛은 인덱싱 로직(Ω)에 따라 입력 및 가중치들의 i개 페어들의 상이한 부분 집합을 읽는다. 예를 들어, 페어들 선택 유닛은 특정 uk의 계산 동안 d번 반복에 대한 j=1+i(d-1), …i(d-1)+i를 선택할 수 있다. 일반적으로, 페어들 선택 유닛은 맵핑(Ψ)을 구현하고, 여기서 Ψ(d, k)는 uk 계산의 d번 반복에 대해 선택된 i개 인덱스들(indices)의 집합이고, 모든 d번의 반복들에 대한 결합은 단순히 지표인덱스들의 전체 집합(1, …J)이다. 입력 값들 및 가중치들은 온-칩 메모리로부터 읽혀지고, 코어 유닛 레지스터들의 집합에 저장된다. 코어 유닛은 많은 동일한 곱셈 및 덧셈 유닛들을 포함하고, 레지스터들의 각 페어는 코어 유닛 내의 곱셈 유닛들 중 하나와 연결된다.
실시 예들에 따라, 단계(209)에서, 페어들 선택 유닛은, 온-칩 메모리로부터, Wk에서 처리되지 않은 가중치들(wk,j's) 및 상응하는 입력 값들의 i개 페어들의 상이한 부분 집합을 읽고, 이들 값들을 코어 유닛 내의 곱셈 유닛들의 레지스터들에 저장한다.
그 다음, 단계(211)에서, 코어 유닛은 레지스터들의 값들을 동시에 처리하고 일부 k에 대한 uk에 대해, MAC 연산을 계산한다:
주 제어 유닛은 코어에 의해 모든 페어들(1, …j)이 처리될 때까지 d번 반복들에 대해 단계(213)에서 코어 결과들(cd,k's)을 누적하고, 여기서 현재 출력(uk)에 대한 수학식 2의 총 합이 계산되도록, 단계들(209, 211, 213)은 단계(215)로부터 반복된다. 그 다음, 단계(217)에서, 비선형 함수(F)가 누적된 결과에 적용된다:
출력은 온-칩 버퍼에 의해 모아진다. 비선형 함수(F)는 다른 하드웨어 유닛에 의해, 또는 그렇지 않으면 이후에, 가속기의 일부로서가 아닌 다른 수단에 의해, 선택적으로 적용될 수 있다. 만약, 단계(219)에서, 모든 uk's가 계산되지 않았으면, 현재 슬라이스의 다음 출력(uk)이 처리될 수 있도록, 단계(221)에서 k는 증가되어 단계(205)로 되돌아가고 모든 출력 값들(u1, …uk)에 대한 과정을 반복한다. 결국, 출력은 버스를 통해 외부 메모리에 쓰여진다. 온-칩 메모리에 있는, 입력 값 또는 가중치는 다음의, 아직 계산되지 않은, 출력 값들 중 임의의 값을 계산하기 위해 더 이상 필요하지 않으면, 메모리에서 해제될 수 있다. 이러한 접근을 이용하여, 단지 상대적으로 작은 온-칩 메모리가 계산들을 관리하는데 사용된다.
표현의 간략화를 위해, 도 1은 v's 및 w's의 i개 임의의 페어들의 일부 집합에 대한 MAC 연산들을 구현하는 것으로서 코어를 도시한다:
본 발명의 다른 실시 예에 따라, i개 곱셈들은 코어 유닛에 의해 동시에 계산되나, 이들은 하나의 출력(uk)과 관련된 하나의 합의 모든 부분은 아니다. 오히려, 코어는 z개 출력 값들의 부분 합들을 동시에 계산하고, 이들 부분 합들 각각은 곱셈 결과들의 부분합을 포함한다. 이들 결과들이 계산된 후에, 부분 합들은 주 제어 유닛에 의해 z개 출력 값들과 관련된 z개의 상응하는 레지스터들로 누적된다.
실시 예들에 따른 가속기는 NN 계층들, CNN 컨볼루션 계층들, 및 CNN 완전 연결(fully connected) 계층들의 계산을 위해 사용될 수 있다. 이들 유형들의 계층들간의 차이는 맵핑(Ω) 그리고 외부 메모리로부터 온-칩 메모리로 입력 값들 및 가중치들을 로딩하는 특정한 순서, 및 코어에 의해 계산될 페어들의 적절한 부분 집합들의 순서를 구현하는 상응하는 로직이다. 적절한 로딩 순서 및 선택은 본 발명의 기술 분야에 알려진 바와 같이, 그리고 임의의 숙련된 디지털 설계자에 의해 구현될 수 있는 바와 같이, 특정한 유형의 계층의 서술에 의해 자연스럽게 정의된다.
조정 가능한 정확도와 함께 로그 영역에서의 효율적인 저전력 곱셈 방법
이번 섹션에서는 NN 계산을 가속하고, 효율, 저전력에 초점을 맞추고, 대규모 병렬 처리에 사용되는 NN 입력 값들 및 가중치들의 로딩 및 재사용을 위한 실시 예에 따른 고수준의 시스템을 설명한다.
실시 예에 따라, 2개의 양의 실수들(v, w), 및 실수의 양수(λ)를 가정한다. 밑(base, λ)의 로그 함수에 기초하여, 곱셈 연산은 덧셈으로서 서술될 수 있다:
실시 예에 따라, 이 수식의 하드웨어 구현을 구성하는 것은 몇몇의 문제들을 포함한다:
● 어떻게 값들(v, w)을 로그 영역(log domain)으로 변환할지;
● 어떻게 결과를 다시 선형 영역(linear domain)으로 변환할지; 그리고
● 어느 표현을 사용하고, 그리고 어떻게 결과의 정확성을 제어할지.
x의 정수 부분에 대한, -∞로 반올림된 (혹은 x보다 작거나 같은 정수를 나타내는) 표현()을 이용하여, 다음과 같다고 가정하되:
,
여기서 v', w', 및 s는 모두 부호 있는 정수들이다. 실시 예들에 따라, 방법 및 하드웨어는 2의 보수 형식을 이용하여 부호 있는 정수 값들을 표현하는 것으로 가정한다. 그러나, 실시 예들은 이에 제한되지 않고, 그리고 다른 실시 예들에서, 다른 부호 있는 정수 표현 규칙들에 기초하여, 아마 작은 수정과 함께 유사한 계산이 수행될 수 있다.
상술한 표현(혹은 가정)을 이용하면:
근사값()의 정확도는 λ의 선택에 의존한다. λ가 작을수록, log2v가 커진다. 결과적으로, 상이한 v's에 대한 평균 오차()는 감소하고 근사값들의 정확도는 향상된다. 작은 정수 N에 대한, λ=21/R, R=2N의 경우는 작은 공간 및 저전력 소모를 갖는 하드웨어 디자인에 특히 유용하다.
나머지 연산의 정의 를 이용하면:
예를 들어, N=7, R=27=128, λ1/128의 선택에 대해, 하나를 얻을 수 있다:
계산()은 산술 오른쪽 쉬프트(shift) 연산을 적용하는 간단한 하드웨어 유닛에 의해 구현될 수 있다: 예를 들어, 2의 보수 코딩을 이용하는 부호 있는 정수 형식으로 s가 표현되면 C 언어 표현들을 이용하여, . 유닛은 음의 경우들도 정확하게 다뤄야 한다.
상응하는 연산(s%R)은 s의 N개 LSB(lease significant bit)들을 얻음으로써 간단히 구현될 수 있다. 이들 비트들은 범위(0~R-1)의 양의 정수 값을 나타낸다. 연산(2(s%R)/R)을 구현하기 위해, 범위([0, R-1])의 p=s%R를 범위([1,2))의 양수로 맵핑(mapping)하는 룩업-테이블(lookup-table; 이하 LUT) 하드웨어 유닛은, 즉, 1+M 비트들로 1.bbb… 형태의 양의 이진 분수(positive binary fraction)로서 표현될 수 있고, 여기서 M은 선행하는 1을 제외한다. 포인트 이전의 선행하는 1은 항상 있고, LUT 또는 LUT 하드웨어 유닛에 저장될 필요가 없다. 전체 연산()의 구현은 1.bbb… 표현을 얻고 그것을 비트들만큼 왼쪽으로 쉬프트함으로써, 즉, 를 적용함으로써 완료될 수 있다. 근사치인 결과는 포인트 이후의 M 비트들을 갖는 aaaaa.bbb 형태이다.
대안으로, LUT의 출력은 값()을 표현하는 1을 포함하는 1+M 비트들을 갖는 1bbb… 형태의 무부호 정수로서 간주될 수 있다. 비트들만큼의 왼쪽 쉬프트 연산 표현을 이용, 즉, 를 적용한다. 이진 무부호 정수 표현을 이용하여, 결과는 정수 부분()을 표현한다.
도 3은 본 발명의 실시 예에 따라, 로그 영역 덧셈에 의해 근사치로 계산된 곱셈의 하드웨어 구현을 도시한다. 도면을 참조하면, 곱셈기(30)는 입력들(v, w)에 대해 및 를 각각 계산하는 함수 유닛들(31, 32)을 포함한다. 덧셈기(33)는 s=v'+w'를 계산하고 출력한다. 블록(34)은 s를 N 비트들(혹은 N개의 LSB들)만큼 오른쪽 쉬프트하여 를 계산하는 쉬프트 레지스터이고, 그리고 블록(35, 예를 들어, 추출 유닛)은 s의 N개의 LSB들을 뺌으로써 p=s%R를 계산한다. 블록(36, 예를 들어, 뺄셈기)은 에서 M을 빼서 y를 계산하고, 반면에 블록(37)은 LUT를 참조하여 1+M 비트들의 형태: 1bbb… 의 무부호 정수인 x = 2^(M+p/R)를 계산한다. 블록(38)은 x를 y 비트들만큼 왼쪽으로 쉬프트하는 쉬프터(shifter) 또는 쉬프트 레지스터이고, 결과()를 출력한다. 도 3에서 도시된 구현은 예시적이고 제한되지 않으며, 이러한 요소들은 다른 실시 예들의 많은 실제 구현들을 갖는다. 예를 들어, 다른 실시 예들에 있어서, 및 를 계산하는 함수 유닛들은 곱셈기의 일부가 아니지만 곱셈기로부터 분리될 수 있다.
논의에서 v 및 w는 양의 실수들인 것으로 가정되었으나, 그러나, NN 계산들의 실시 예들은 이에 제한되지 않는다. 다른 실시 예들에 따라, 계산 및 회로는 절대 값들(|v|, |w|)을 이용할 수 있다. 결과의 올바른 부호, 즉, v 및 w의 부호들의 XOR는 로그 기반 곱셈 유닛의 양의 결과에 할당될 수 있다.
실시 예들에 따라, 대부분의 경우들에서, 로그 영역의 덧셈을 이용하여 2개의 실수들의 곱셈을 구현하는 것은 일반적인 곱셈 접근과 비교하여, 전력 소모 및 하드웨어 사이즈에 관하여 더 요구한다. 2개 입력 값들에 대한, 밑(λ)의, 로그 함수, 그리고 결과에 대한, 상응하는 함수(λx)를 구현하는데 사용되는 2개 하드웨어 유닛들은 하드웨어 사이즈 및 전력에 관하여 요구한다. 덧셈 유닛이 더 복잡한 곱셈 유닛에 비해 간단하고, 작고, 그리고 전력을 덜 요구하지만, 이 장점은 추가적인 logλ(x) 및 λx 유닛들의 사이즈 및 전력 요구들에 압도된다.
그러나, 실시 예에 따라, 신경망의 경우는 곱셈이 사용되는 특별한 상황으로 인해 다르다. 로그 기반 곱셈 하드웨어가 NN 하드웨어 가속에 왜 효율적인지에 대한 3가지 측면들이 있다. 먼저, 이미지들 및 음성들과 같이, 처리된 신호들은 본질적으로 잡음이 있으므로, 계산의 정확도는 높을 필요가 없다. NN은 이 잡음에 견고하기 때문에, 설계에 의해 일반적으로 계산 자체의 부정확성에 견고하다. 그 다음, 및 형태의, 로그 영역으로의 변환 연산들의 개수가 곱셈 연산들의 개수보다 현저히 작도록, 입력 값 및 가중치들 모두에 대해 고도의 재사용이 있다. 주어진 훈련된 NN의 가중치들은 완전히 고정되었기 때문에, 변환()은, 예를 들어, 소프트웨어에서, 모든 w's에 대해 오프라인에서 한번만 수행될 수 있고, 그리고 가중치들의 로그 버전(w')은 모든 입력 인스턴스들에 대해 완전히 재사용될 수 있다.
입력 값들(v's)은 인스턴스들간에 상이하다. 그러나, NN에 대해, 수학식 1로부터 볼 수 있듯이, 하나의 입력 값(예를 들어, v1)은 출력 값(uk)의 한번의 각 계산에 대해, k번 재사용된다. CNN의 경우, 모든 출력 값들의 계산에 모든 입력 값들이 참여하지는 않지만, 각 입력 값은 많은 출력 값들의 계산에 일반적으로 기여한다. 예를 들어, 잘 알려진 이미지 분류 CNN의 컨볼루션 계층 2는 200,704개의 입력 값들을 갖지만, 무려 202,309,632만큼의 곱셈들을 갖는다. 따라서, 입력 값들을 로그 영역으로 바꾸는 상대적인 노력은 로그 입력들에 기초하는 로그 기반 계산을 이용하는 것의 잠재적인 이득에 비해 무시할 수 있다.
최종적으로, NN 계산은 각 v X w 곱셈의 결과에 많은 다른 결과들을 더한다. 실시 예들에 따라, 이하에서 설명될 바와 같이, 더해질 값들은 덧셈 유닛들의 활성 범위를 효율적으로 활용하기 위해 조정된다(scaled). 실시 예들에 따라, 조정(scaling)은 로그 영역의 곱셈 유닛의 일부인, 왼쪽 쉬프트 연산(x≪y)의 일부로서 결합될 수 있다. 이것은 전체 칩-로직 및 결합된 곱셈-덧셈 연산에 사용되는 전력을 더 줄인다.
전술한 실시 예에 따른 주 제어 유닛은 선형 영역에서 값들을 로드하고 저장한다. 실시 예들에 따라, 계산이 로그 영역에서 완료되면 동일한 흐름의 제어 및 페어들 선택 로직이 사용될 수 있다. 그러나, 저장되고 처리된 값들은 이제 원본 값들의 로그 버전들이다. 외부 메모리는 온-칩 메모리에서 읽혀질 수 있고 직접적으로 저장될 수 있는 원본 가중치들의 로그 버전들을 이미 포함한다. 그러나, 외부 메모리에 저장된 계층 입력 값들은 이전 계층 계산의 출력이고 로그 영역에 있지 않는다. 주 제어 유닛은 입력 값들을 읽고, 그들(입력 값들)의 로그 버전들을 계산하고, 그리고 추가(향후) 처리를 위해 그들을 온-칩 메모리에 저장한다.
자동 스케일(scale) 조정과 함께 효율적인 고정 소수점 덧셈
이번 섹션에서는 실시 예에 따른 저전력 가속기(low power accelerator; 이하 LPA)에서 어떻게 많은 값들의 덧셈이 효율적으로 구현되는지를 설명하고, LPA의 병렬 처리 코어 유닛의 세부 구성들을 제시한다.
전술한대로, 실시 예에 따른 컨볼루션 연산은 i개 서브 유닛들을 이용하여 병렬로 수학식 5의 곱셈-누적 연산들을 계산하는 코어 유닛의 반복된 적용(application)을 이용하여 구현될 수 있다. 다음의 논의가 수학식 5에 대한 코어 유닛의 실시 예에 따른 구현에 초점을 맞춤에 따라, 인덱스(i)를 갖는 선택된 vi's 및 wi's의 임의의 집합은 아래에서 설명되고, 주 제어 유닛에 의해 집합을 선택하는데 사용되는 인덱싱(Ω, Ψ)은 무시한다.
실시 예에 따라, 전술한 로그 영역 곱셈에 기초하여, 수학식 5는 다음과 같이 다시 표현될 수 있다:
여기서 gi ≡ sign(vi)sign(wi) 는 vi X wi의 올바른 부호이다.
많은 NN들에서, 일반적인 입력들(v's, w's)은 절대 값들이 1보다 작거나, 1보다 크지 않은 실수들인 경우가 종종 있다. 전술한대로, 실시 예에 따른 로그 영역 곱셈 회로에 의해 근사치로 계산된 각 vi X wi는 정수이나, 이것은 참 값에서 벗어난다. 정수 값들의 최종 합은 유사하게 높은 근사치 오차를 가질 것이다. 이 오차를 줄이기 위해, 실시 예에 따른 LPA는 대신 다음 수식을 구현한다:
여기서,
작고, 양수인, 정수 f, 예를 들어, f=10으로 가정하면, 합(Σiσi)은 훨씬 더 큰 정수들이고, 그리고 실제 합에 대한 상대적인 오차는 훨씬 작다. 실시 예에 따른 LPA는 L 비트들의 i개 부호 있는 정수 입력들을 갖는 큰 덧셈 유닛을 포함한다. 결과 또한 다수의 L+ 비트들을 갖는 부호 있는 정수이다. 이것은 합산 동안 오버플로우(overflow)가 없음을 보장할 수 있다. 물론, L이 클수록, 하드웨어 로직 및 상응하는 물리적 크기 및 덧셈 유닛의 전력 소모가 커진다. 반면에, L이 작다는 것은 더 작은 f가 σi가 L 비트들로 표현될 수 있음을 보장하는데 사용됨을 의미한다. 의 정수 부분을 얻는 것은 전체 값에 대한 더 큰 상대적인 오차를 도입하므로 이는 최종 결과의 정확도를 감소시킨다. L은 덧셈 유닛의 고정된 특성이고 실시 예에 따라 설계에 의해 설정될 수 있다.
실시 예에 따라서, 주어진 선택된 L에 대해, 다음의 두 섹션들은 L로부터 가능한 많은 비트들을 이용하여 덧셈 계산의 정확도를 최적화하기 위한 두 개의 상이한 방법들을 설명한다. 실시 예에 따라, 활성 비트들 관점에서, 최대의 σi's와 덧셈 유닛의 높은 활용을 보장하는 것뿐만 아니라, σi가 부호 있는 정수 표현을 위해 L 비트들보다 더 많은 비트들을 사용하는 오버플로우 위험을 감소시키거나 방지하는 값(f)가 선택된다.
코어 활성화 당 온라인의 빠른 스케일 조정
f를 선택하기 위한 실시 예에 따른 한 방법은 모든 σ's가 기껏해야 L 비트들을 이용하는 반면에, σ's 중 적어도 하나가 모든 L개 비트들을 이용하는 것을 보장하도록 제한을 늘이는 것이다. 실시 예에 따른 코어는 i개 입력들에 대한 최대화 유닛, 및 2개 덧셈 유닛들을 포함한다. 최대화 유닛은 수학식 11 및 수학식 12, 및 고정된 시스템 변수들(R, L, M)을 이용하여 코어에 의해 사전에 계산된 값들()을 입력으로서 수신하고, 그리고 두 개 값들(α, f)을 계산한다:
여기서, δ는 아직 특정되지 않은 시스템 변수이다.
δ는 정확도 대 전력 소모의 트레이드오프를 제어하는 것을 허용하는 사용자 정의의 구성 가능한 노브(knob)이다. 실시 예에 따른 NN은 L 비트들 입력 덧셈기들 유닛들을 갖고, 즉 각 유닛은 오버플로우 위험 없이 L 비트들까지의 입력 값들을 더할 수 있다. 유저가 δ를 0으로 설정하기로 선택하면, 입력 값은 실제 L 비트들만큼의 크기이기 때문에, 덧셈기들은 최대 활용으로 동작하고, 그리고 결과는 사용 가능한 L 비트들 덧셈기들이 주어지면, 시스템이 제공할 수 있는 만큼 정확하다. 그렇지 않으면, 유저가 0이 아닌 δ(예를 들어 1, 2, L-1까지)를 선택하면, 입력 값들은 L 비트들보다 항상 작고, 덧셈기들은 모든 비트-폭(bit-width)에서 활용되지 않고 그리고 출력의 정확도는 δ=0인 상태와 비교하여, 감소한다. 그러나, 덧셈기들의 하드웨어 '플립 플롭들(flip-flops)'의 토글(toggle)이 덜하기 때문에, 시스템에 의해 더 적은 에너지가 소비된다.
예를 들어, 시각 객체 분류 NN은 이미지 내 객체의 시각 분류를 선택하기 위해 수십억 덧셈 연산들을 사용할 수 있다. 그러나, 최근 결과들은 16 및 심지어 8 비트들 연산들이 32 비트 연산들과 거의 동일한 분류 결과들을 얻기에 충분한 것을 보여준다. 그래서, 예를 들어, L=16인 시스템은 16 비트들 덧셈기들까지 지원하지만, 유저는 델타(delta)를 8로 선택할 수 있고(δ=8), 이것은 덧셈기로의 모든 입력 값들을 단지 8개(=16-8) MSB(most significant bit)들로 표현되게 하고, NN 계산들에 대해 에너지를 덜 소비하고, 그리고 유사한 최종 분류 결과들을 여전히 제공한다. 각 덧셈 연산에 대해 더 높은 정확도를 요구하는 다른 NN들을 위해, δ=0를 선택함으로써, 동일한 하드웨어가 덧셈기들의 모든 16 비트들을 활용할 수 있다.
가 최대인 특정한 값(s)을 선택하면, . 임의의 si 및 특히 최대 s를 고려하면, , 그리고 . 수학식 12에 이어서, 최대 s에 상응하는 σ는:
이것은 무부호 |σ|는 L-1-δ 비트들을 이용하여 이진 정수로 표현되고, 부호 있는 σ는 음수인 경우 L-δ 비트들을 이용하여 표현됨을 의미한다. 모든 다른 si's에 대해, 이므로, L-δ 비트들로 충분하다. L은 일단 선택되면 덧셈 유닛의 사이즈뿐만 아니라, 각 곱셈 유닛의 중심 쉬프터의 물리적 사이즈를 정의하는 반면에, δ는 구성 가능한 시스템 변수이다. 실시 예에 따라, δ는 덧셈기의 최대 비트 활용, 및 L 비트들과 함께 제공될 수 있는 가장 높은 계산 정확도를 얻기 위해 0으로 설정될 수 있다. 만약 그러나, 특정한 NN 계층에 대해, 낮은 정확도가 충분하면, 범위(0<δ<L-2) 내에서 더 높은 δ를 설정하는 것은 모든 σi 중 적어도 δ MSB들은 항상 0이고, 합계의 정확도를 감소시키지만, 그러나 덧셈 동안 적은 비트들이 토글하므로 에너지도 절약되는 것을 보장할 것이다.
도 4는 상술한 구성 요소들(외부 메모리(41), 온-칩 메모리(42), 주 제어 유닛(43), 페어들 선택 유닛(44), 및 코어 유닛(45))을 포함하는 실시 예에 따른 NN LPA(40)의 설계를 도시한다. 또한, 하드웨어 시스템(40)은 다양한 입력 부분 집합들(Ωk)에 대한 결과들을 누적하기 위한 덧셈기(46), 결과를 저장하기 위한 레지스터(47), 출력 값들(uk)을 저장하기 위한 온 칩 버퍼(48), 및 누적기 결과에 비선형 함수(F)를 적용하는 선택적 함수 유닛(49)을 포함한다. 온 칩 버퍼(48)는 비선형 함수(F)가 적용된 결과를 저장할 수 있다.
외부 메모리(41)는 NN 계층 입력 값들(V), NN 계층 로그 가중치들(W), 및 NN 계층 출력 값들(U)을 저장한다. 오프라인 계산에서, 가중치들(W)은 로그 영역으로 변환될 수 있다: , 여기서 w의 부호 비트는 저장된다. 온-칩 메모리(42)는 NN 계층 입력(V) 및 가중치들(W)을 저장한다. 입력 값들이 온-칩 메모리(42)로 로드되면 블록(41.5, 예를 들어, 로그-변환기 유닛)은 NN 계층 입력 값들(V)을 로그 영역으로 변환한다: , 여기서 v의 부호 비트는 저장된다.
주 제어 유닛(43)은 로그 영역에 이미 있는 값들(v's 및 w's)을 온-칩 메모리(42)에 로드하고, 도 2를 참조하여 설명된 이중 루프를 관리하고, 페어들 선택 유닛(44) 및 코어 유닛(45)을 활성화하고, 그리고 결과들을 외부 메모리(41)로 출력한다. 페어들 선택 유닛(44)은 전술한대로 각 사이클에서 처리를 위해 페어들의 부분 집합을 선택한다. 코어 유닛(45)은 곱셈 유닛(45.3)의 i개 인스턴스들을 포함한다. 도면의 명료함을 위해, 단지 제 1 곱셈 유닛(45.3)만 레이블(label)이 지정되었다. 각 곱셈 유닛(45.3)은 로그 영역으로의 변환을 수행하는 함수 유닛들이 없고 이하에서 설명되는 부호 추출 유닛(45.7)을 포함하는 것을 제외하면, 도 3에서 도시된 유닛과 실질적으로 유사하다. 도면의 명료함을 위해, 도 3에서 도시된 구성 요소들과 대응하지만 각 곱셈 유닛(45.3)의 개개의 구성 요소들은 참조 번호들로 레이블이 지정되지 않는다. 각 곱셈 유닛(45.3)은 레지스터들(45.1, 45.2)의 하나의 입력 페어에 대해 동작하고, 전술한대로 단지 덧셈기들, 쉬프터들, 및 LUT에 기초한다. 각 유닛의 주 쉬프터는 두 가지 역할을 갖는다: 2α +M만큼 정수 값들을 조정하여 오차를 줄이고, 그리고 연산의 일부로서 만큼 조정하는 것에 기여한다. 부호 추출 유닛(45.7)은 적절한 부호(gi≡sign(vi)sign(wi))를 계산하고 이를 결과로 설정한다. 부호 추출 유닛(45.7)의 출력은 σi=vi X wi X 2^f 이다. 각 로그 값(v' 또는 w')의 표현은 로그 값의 부호화 관련이 없는, 원본 값의 sign(v) 또는 sign(w)를 나타내는 추가의 상응하는 비트도 포함하는 2의 보수의 부호 있는 정수이다. 이 추가의 비트는 대부분의 계산 동안 무시되고 gi를 계산하기 위해서만 사용된다.
코어 유닛(45)은 모든 곱셈 결과들의 스케일들, 비트 활용을 최대화하는 쉬프트 값(α=f-M), 및 이번 섹션의 시작에서 설명된 것으로서 L 비트들의 표현 정확도에 대해 선택하는 최대화 유닛들(45.5, 45.6)도 포함한다. 유닛(45.5)은 곱셈 유닛들(45.3)의 쉬프트 레지스터(34)의 모든 i개 출력들()을 입력으로서 얻고, 를 계산하고, 그리고 유닛(45.6)은 f=L-2-q-δ 및 α=f-M를 계산한다. 출력(a)은 각 곱셈 유닛(45.3)의 블록(36)에 입력으로서 제공된다.
코어 유닛(45)은 L 비트들의 i개 입력들로 부호 추출 유닛(45.7)로부터의 모든 곱셈 결과들을 더하는 큰 정수 덧셈 유닛(45.4)을 갖는다. 합을 출력하기 전에, 코어 유닛은 그것을 수학식 11 및 수학식 12에 의해 표현된 것과 같이 쉬프터(45.8)의 2f로 나눈다.
최종 출력 계산 유닛(46)은 전술한대로, 레지스터(47)에 저장된, 여러 코어 결과들을 누적하고, 비선형 함수(49)를 적용하고, 온-칩 버퍼(48) 내 각 반복에 대한 결과를 저장하고, 그리고 최종 CNN 출력 벡터(U)를 외부 메모리(41)로 전송한다. 본 발명의 일 실시 예의 LPA에 따라, 큰 정수 덧셈 유닛(45.4)에 의한 코어 출력의 결과는 부동 소수점 변환 유닛(45.9)에 의해 정수에서 부동 소수점 표현으로 변환되고 부동 소수점 유닛들을 사용하여 더 처리된다. LPA의 대체적인 실시 예에서, 정수 유닛들은 주어진 고정된 소수점 스케일 요인(factor)를 이용하는 고정된 소수점 표현으로 사용되고 출력 값들을 표현한다. 도 4에서 도시된 구현은 예시적이고 제한되지 않으며, 이러한 요소들은 다른 실시 예들의 많은 실제 구현들을 갖는다.
공개적으로 사용 가능한 이미지 분류 신경망들에 대한 실험 결과들은 예를 들어, n=7, λ=1/128, 및 L=16을 사용하는 것은, 32비트 해상도(resolution)를 갖는 부동 소수점 곱셈기들 및 덧셈기들을 이용하는 간단한(straight-forward) 방식으로 계산된 결과와 비교하여, 약 1%의 평균 정확도로 분류-별(per-class) 최종 확률들을 계산하기에 충분한 것을 보여준다.
느린 스케일 조정
이전 섹션에서는 코어에 의해 처리된 페어들의 모든 집합에 대한 독립적인 계산에 의한 정수 스케일 인자(f)의 빠른 적용이 설명되었다. 실시 예에 따른 방법이 하드웨어의 활용을 최적화하고 정확도를 최대화하지만, 각 코어 활성화에 대해, i개 입력 값들의 최대값을 이용한다. 이것은 최대화 유닛에 대한 면적 자원들 모두를 이용하고, 전력을 소모한다. 실시 예들에 따라, 각 코어 활성화에서 처리되는 값들간의 약간의 통계적 의존성을 가정하면, 아마도 덧셈 유닛의 비트들의 활용의 약간의 감소, 및 정확도의 약간의 감소와 함께, 좀 더 안정적인 f가, 대신 사용될 수 있다. 예를 들어, 실시 예에 따른 LPA의 한 변형은 각 필터에 대해, 즉, 전술한대로, 상이한 k's에 대한 가중치들의 동일한 집합(Wk)을 이용하여 수행된 출력 슬라이스 내 모든 값들의 계산들에 대해 고정된 f의 선택된 값을 이용한다. 실시 예에 따른 다른 변형은 전체 NN 계층에 대해 고정된 고유한 값을 이용한다.
실시 예에 따라, 다음의 방법은 데이터, 예를 들면, 이미지들의 하나 이상의 모든 인스턴스들을 처리하고, NN 계층 계산 동안에 처리된 값들을 평가하는 것에 기초하여 f의 값을 선택하는데 사용된다.
수학식 2: 를 고려하고, uk', …, uk''가 하나의 출력 슬라이스와 관련된 값들과 같은, 특정한 값(f)를 선택하는 출력 값들의 부분 집합이라고 가정한다. uk', …, uk''의 계산은 유형의 많은 페어와이즈(pairwise; 쌍으로의) 곱셈들을 포함한다. 각 이러한 페어는 수학식 12: 에 의해 정의된 정수 값(σi)에 의해 실시 예에 따른 LPA에서 근사치로 계산된다. 실시 예에 따라, 검색은 결과(σ)의 표현 내에서 오버플로우를 방지하는 가장 큰 f를 위해, uk', …, uk''와 관련된 페어 곱셈 동안 수행된다. f는 0과 같은, 작은 값으로 초기화되고, 첫 번째 코어 계산에 사용된다.
실시 예에 따라, 코어의 각 활성화 동안, 모든 i개 무부호 정수 값들의 크기들(|σi|)은 올바른 부호들이 설정되기 전에 평가된다. 만약 표현이 L-1 비트들 또는 그 이상이 필요한 적어도 하나의 |σi|가 있으면, 이벤트, 오버플로우, 또는 오버플로우에 근접한 것을 나타내는 (is-near-overflow; 오버플로우 근접)란 플래그가 참(TRUE)으로 설정된다. 그렇지 않으면, 즉, 모든 σi's가 L-1 비트들보다 작은 비트들로 표현될 수 있으면, 플래그(is-near-overflow)는 거짓(FALSE)으로 설정된다. 코어 계산 후에, 주 제어 유닛은 플래그(is-near-overflow)를 평가한다. 플래그가 거짓(FALSE)이면, f는 증가하고, 그리고 플래그가 참(TRUE)이면, f는 감소한다. 그 다음 새로운 값은 연속적인 코어 활성화들에 사용되고, 이것은 f를 추가로 수정할 수 있다. 진동(oscillation)을 방지하기 위해, 두 번째 변수(fmax)가 또한 온라인으로 업데이트된다. 이것은 초기에 f≪fmax 이도록, 20과 같이, 상대적으로 높은 값으로 초기화된다. f의 진화 동안, fmax는 상한으로서 사용되고, 즉, f는 f<fmax인 경우에만 플래그(is-near-overflow)가 거짓(FALSE)일 때 증가한다. 플래그(is-near-overflow)가 참(TRUE)이고 f가 감소할 때, fmax는 f의 새로운 값으로 또한 설정된다. 이것은 f가 증가하지 않을 것이고 오버플로우의 추가(향후) 위험을 생성하지 않을 것을 보장한다. 실시 예에 따라, uk', …, uk''의 집합의 계산 동안 찾아낸 하나의 큰 수(|σi|)가 동일한 집합 내 추가적인 큰 값의 좋은 예측 변수(predictor)인 것으로 가정한다. 그러나, 다른 출력 슬라이스들과 관련된 uk의 다른 집합들에 대해, 예측 변수는 덜 적절할 수 있다. 이러한 다른 집합들을 위한 큰 f's를 허용하기 위해, 일단 하나의 출력 슬라이스의 계산이 끝나고 다른 출력 슬라이스의 계산이 시작되면 f 및 fmax 모두는 증가한다. f 및 fmax의 업데이트들의 과정은 도 5a 및 도 5b를 참조하여 설명된다.
실시 예에 따른 방법은 오버플로우가 방지되는 것을 보장하지 않는다. 몇몇 경우들에서는 이전의 |σi|'s에 기초하여 선택된 f의 값은, 너무 클 수 있어서 연속적인 |σi|'s에서 오버플로우를 유도할 수 있다. 오버플로우의 위험을 줄이기 위해, 표현이 L-δ(여기서, 전술한 δ=1의 경우 대신에, δ>1) 비트들을 요구하는 적어도 하나의 |σi|가 있으면 플래그(in-near-overflow)가 설정될 수 있다. δ가 높을수록, 오버플로우 위험이 낮아질 것이다. 그러나, 높은 δ's는 f를 줄여서 결국 정확도를 줄인다. 실시 예에 따라, 많은 실제의 NN들에 대해, δ=1 또는 δ=2를 선택하는 것이 가장 정확한 결과들을 주었던 것으로 알게 되었다. 일부 오버플로우 이벤트들이 일어났지만, 이러한 이벤트들의 개수는 NN 계산 동안 일반적으로 누적된 값들의 개수와 비교하면 작다. 오버플로우가 심지어 발생했을 때에, 코어는 올바른 값 σi 대신에, 적절한 부호와 함께, L-1 비트들로 표현될 수 있는 최대 절대 값을 사용했다.
도 5a 및 도 5b는 본 발명의 실시 예에 따라 NN LPA의 주 제어 유닛에 의해 구현되는 3개 중첩 루프들의 순서도이다. 도 5a를 참조하면, 단계(501)에서, k=1에 대해 첫 번째 출력 값(uk)를 계산하기 위해 필요한 적절한 입력 값들(V)이, 외부 메모리로부터 읽혀지고, 상응하는 로그 영역 값들이 온-칩 메모리에 저장된다. 또한, 슬라이스 카운터(slc)는 1로 초기화되고, f 및 그것의 상한(fmax)은 사전에 결정된 값들로 초기화된다. 단계(502)에서, 현재 출력 슬라이스(slc)의 uk's에 대한 인덱스들의 부분 집합(k', …, k'')이 선택되고, f는 증가하고, 그리고 f>fmax이면, fmax는 f로 설정된다. 단계(503)에서, 카운터(k)는 k', 출력 인덱스들의 선택된 부분 집합의 첫 번째 인덱스로 초기화된다.
단계(505)에서, 출력 벡터(Uk)를 계산하기 위해 필요한 가중치들의 부분 집합(Wk)이 외부 메모리로부터 읽혀지고, 로그 영역 값들이 온-칩 메모리에 저장된다. 단계(507)에서, 누적기 값(ACC)은 0으로 초기화된다. 다음, 단계(509)에서, 페어들 선택 유닛은 Wk로부터 처리되지 않은 가중치들(wk,j's)의 i개 페어들의 상이한 부분 집합 및 온-칩 메모리로부터 상응하는 입력 값들을 읽고, 코어 유닛 내 곱셈 유닛들의 레지스터들에 이들 값들을 저장한다.
그러면, 단계(511)에서, 코어 유닛은 로그 영역에서 i개 곱셈들을 동시에 수행하고, 결과들을 (f-M)만큼 조정하고, 결과들을 정수들로 변환하고, 그리고 도 4에서 도시된 대로, i개의 조정된 곱셈 결과들의 정수들 합인 코어 결과를 계산하기 위해 활성화된다. 조정된 곱셈 결과들 중 임의의 것이 L-1 또는 더 많은 비트들을 요구하면, 플래그(is-near-overflow)는 참(TRUE)으로 설정되고, 그렇지 않으면 플래그(is-near-overflow)는 거짓(FALSE)로 설정된다. 주 제어 유닛은 단계(513)에서 코어 결과들을 누적한다: ACC+=코어 결과. 계속해서 도 5b를 참조하면, 단계(514)에서, 주 제어 유닛은 플래그(is-near-overflow)를 평가한다. 플래그가 거짓(FALSE)이고 f<fmax이면, f는 증가하고, 그리고 플래그가 참(TRUE)이면, f는 감소하고 그리고 fmax는 f의 새로운 값으로 재설정된다.
주 제어 유닛은 k's의 현재 부분 집합을 위해 uk를 계산하는데 필요한 모든 wk,j's 및 vk's가 처리될 때까지 단계(515)부터 단계들(509~514)을 반복한다. 그러면, 단계(517)에서, 코어 결과는 f로 나뉘고, 비선형 함수(F)가 결과에 적용되고, 그 다음 (비선형 함수(F)가 적용된 결과가) 도 4의 온-칩 버퍼(48)에 uk로서 저장된다. 만약, 단계(519)에서, 모든 uk's가 계산되지 않았으면, 즉 k≠k''이면, 단계(505)로 돌아가고 다음 출력 값들(uk)에 대한 처리를 반복함으로써, 현재 슬라이스 내 다음 출력(uk)이 처리될 수 있도록 k는 단계(521)에서 증가한다. 단계(519)에서 k==k'이면, 모든 슬라이스들이 계산되었는지 여부가 단계(523)에서 판별된다. 모든 슬라이스들이 계산되지 않았으면, 단계(525)에서 슬라이스 카운터(slc)가 증가하고 단계들(502~519)이 반복된다. 모든 슬라이스들이 계산되었으면, 계층 계산은 종료되고, 그리고 출력은 버스를 통해 외부 메모리로 쓰여진다.
효과들
실시 예들에 따라, 저전력 하드웨어를 이용하는 신경망 계산들을 가속하는 것은 휴대폰들, 태블릿들, 스마트 카메라들, 노트북들, 가상 및 증강 현실 장치들, 및 전기적인 전력 자원들에 의해 제한되는 임의의 다른 장치 상의 신경망 기반의 어플리케이션들의 연속적이거나 대량의 활성화에 유용하다.
적절한 NN 기반 및 CNN 기반의 어플리케이션들은 그 중에서도 다음 것들을 포함한다:
● 잡음 제거(denoising), 디모자이크(demosaicing), 디블러링(deblurring), 선명화(sharpening), 초해상(super-resolution, 스마트 업스케일(smart upscale)), 재색칠(recoloring), 스테레오 비전(stereo vision)으로부터 차이/깊이 추출 등과 같은, 이미지 및 비디오 처리;
● 객체들, 사람들, 얼굴들, 차량들의 인식, 분류, 및 분할; 장면들 내 개체들간의 관계들의 해석; 얼굴 감정들 및 표현 및 눈 추적의 인식; 인체 및 손 포즈 평가, 손 제스처들 및 인간 활동 인식과 같은 이미지, 비디오, 및 장면 이해; 및
● 필기 인식, 음성 인식, 음성 합성, 기계 번역, 음성 기반 인간-기계 상호 작용 및 대화와 같은 언어 관련 어플리케이션.
자동차 산업은 운전자 보조 및 경보 어플리케이션들, 완전 자동 운전까지의 자동 차선 및 거리 제어, 음성 및 제스처에 기반하는 운전자와 차량 시스템간의 상호 작용 등을 포함하는 신경망 모델들에 기초하는 많은 어플리케이션들을 사용한다. 자동차에 탑재된 많은 카메라들, 라이다(lidar)들, 및 다른 센서들로부터의 비디오 스트림(stream)들은 각 센서의 부분인 전용의 회로들을 이용하여, 또는 모든 시각 자료들 및 신호들을 처리하고 통합하는 중심 계산 장치에 의해 분석될 수 있다. 이러한 분석은 일반적으로 신경망 모델들에 기초하고, 본 발명의 실시 예들은 자동차의 전체 전기적인 전력 소모를 줄이는데 사용될 수 있다.
또한, 실시 예들에 따른 신경망 계산들의 저전력의, 전용의 가속은 비휴대용 홈 컴퓨터들의, 그리고 또한 서버들 상의 신경망 모델들의 다수의 인스턴스들을 실행할 때 주요 요인이 될 수 있다. 일반적으로, 비용들 및 환경적인 고려 사항들 측면에서 그리고 쿨링(cooling)이 문제가 되는 시스템들에서 전체 소모 계산 전력이 중요해지는 경우들에서, 이러한 가속은 주요 계산 모델로서 신경망 모델들을 사용하는 모든 장치들에 기여할 수 있다.
시스템 구현들
본 발명의 실시 예들은 하드웨어, 소프트웨어, 펌웨어(firmware), 특정 목적의 프로세스들, 또는 이들 조합의 다양한 형태들로 구현될 수 있음이 이해되어야 한다. 일 실시 예에 있어서, 본 발명은 ASIC(application-specific integrated circuit), 또는 FPGA(field programmable gate array)로서 하드웨어로 구현될 수 있다. 다른 실시 예에 있어서, 본 발명은 컴퓨터 읽기 가능 프로그램 저장 장치 상에 구현된 실재의 어플리케이션 프로그램으로서 소프트웨어로 구현될 수 있다. 어플리케이션 프로그램은 임의의 적합한 아키텍처(architecture)를 포함하는 머신(machine)으로 업로드될 수 있고, 이 머신에 의해 수행될 수 있다.
도 6은 본 발명의 실시 예에 따라, 저전력을 소비하면서 요구되는 정확도를 유지하는 컨볼루션 신경망 수학적 모델의 중심 계산을 가속하기 위한 방법을 구현하는 시스템의 블록도이다. 도 6을 참조하면, 본 발명을 구현하기 위한 컴퓨터 시스템(61)은 특히, CPU(central processing unit, 62), 메모리(63), 및 입출력(I/O) 인터페이스(64)를 포함한다. 컴퓨터 시스템(61)은 I/O 인터페이스(64)를 통해 디스플레이(65) 및 마우스 및 키보드와 같은 다양한 입력 장치들(66)과 일반적으로 연결된다. 지원 회로들은 캐시(cache), 전원 장치들, 클럭 회로들, 및 통신 버스와 같은 회로들을 포함한다. 메모리(63)는 RAM(random access memory), ROM(read only memory), 디스크 드라이브, 테이프 드라이브 등, 또는 이들 조합들을 포함할 수 있다. 본 발명은 메모리(63)에 저장되고 CPU(62)에 의해 처리되어 신호 소스(signal source, 68)로부터의 신호를 처리하는 루틴(routine, 67)으로서 구현될 수 있다. 이와 같이, 컴퓨터 시스템(61)은 본 발명의 루틴(67)을 실행할 때 특정 목적의 컴퓨터 시스템이 되는 범용 컴퓨터 시스템이다. 대안으로, 전술한대로, 본 발명의 실시 예들은 신호 소스(68)로부터의 신호를 처리하는 CPU(62)와 신호 통신하는 ASIC 또는 FPGA(67)로서 구현될 수 있다.
컴퓨터 시스템(61)은 운영 체제(operating system) 및 마이크로(micro) 명령 코드도 포함한다. 본 명세서에서 개시된 다양한 처리들 및 기능들은 운영 체제를 통해 실행되는 마이크로 명령 코드의 일부이거나 또는 어플리케이션 프로그램의 일부 (또는 이들의 조합)일 수 있다. 또한, 추가적인 데이터 저장 장치 및 프린팅(printing device) 장치와 같은 다양한 다른 주변 장치들은 컴퓨터 플랫폼(platform)에 연결될 수 있다.
첨부 도면들에 도시된 구성 시스템 구성 요소들 및 방법 단계들 중 일부는 소프트웨어로 구현될 수 있기 때문에, 시스템 구성 요소들(또는 프로세스 단계들)간의 실제 연결들은 본 발명이 프로그램된 방법에 따라 상이할 수 있음이 더 이해된다. 본 명세서에 제공된 본 발명의 교시들이 주어지면, 당업자는 본 발명의 이들 및 유사한 구현들 또는 구성들을 고려할 수 있을 것이다.
본 발명은 예시적인 실시 예들을 참조하여 상세히 설명되었지만, 당업자는 첨부된 청구항들에서 제시된 것으로서 본 발명의 사상 및 범위를 벗어나지 않으면서 다양한 수정들 및 대체들이 이루어질 수 있음을 이해할 것이다.
Claims (10)
- 컨볼루션 신경망의 계층을 처리하는 방법에 있어서:
온-칩 메모리로부터 입력 벡터 값들 및 상응하는 가중치 벡터 값들의 페어(pair)들의 복수의 상이한 부분 집합들을 읽고, 그리고 읽혀진 페어 값들을 복수의 곱셈 유닛들의 레지스터들에 저장하는 단계; 및
현재 계층에 대한 출력 벡터를 얻기 위해 상기 읽혀진 페어 값들을 곱하고 곱셈들의 결과들을 누적함으로써 상기 레지스터들의 상기 복수의 상이한 부분 집합들을 동시에 처리하는 단계를 포함하되,
상기 입력 벡터 값들 및 상기 가중치 벡터 값들은 부동 소수점 값들을 갖고 그리고 상기 읽혀진 페어 값들을 곱하는 것은 로그 영역에서 정수들의 상응하는 페어들을 더하는 것을 포함하고, 그리고
입력 값 또는 가중치 값은, 상기 입력 값 또는 상기 가중치 값이 계산되지 않은 출력 벡터 값들을 계산하는데 더 이상 필요하지 않은 이후에 상기 온-칩 메모리로부터 나오고,
상기 로그 영역의 밑(base)은 2^(1/(2^N))이고, N은 양의 정수이고,
상기 컨볼루션 신경망의 각 계층에 대해:
상기 온-칩 메모리에 상기 입력 벡터 값들의 로그 영역 값들을 저장하는 단계;
상기 온-칩 메모리에 상기 가중치 벡터 값들의 로그 영역 값들을 저장하는 단계;
곱셈 결과들을 누적하기 전에 덧셈 결과들을 선형 영역으로 변환하는 단계; 및
상기 온-칩 메모리로부터 외부 메모리로 상기 현재 계층에 대한 상기 출력 벡터를 출력하는 단계를 더 포함하고,
로그 영역에서 정수들의 상응하는 페어들을 더하는 것에 의해 읽혀진 페어 값들을 곱하는 단계는:
R=2N이고 s를 N비트들만큼 오른쪽으로 쉬프트하여 y=를 계산하는 단계;
s%R은 [0, R-1] 범위이고, s의 N개 LSB(least significant bit)들을 추출함으로써 s%R을 계산하는 단계;
룩업 테이블을 이용하여 s%R을 [1, 2) 범위의 양수 x에 맵핑(mapping)하는 단계; 및
y 비트들만큼 x를 왼쪽으로 쉬프트하여 를 계산하는 단계를 포함하는 컨볼루션 신경망의 계층을 처리하는 방법. - 삭제
- 삭제
- 삭제
- 제 1 항에 있어서,
곱셈-및-누적 연산을 계산하는 단계는, 일부 k에 대한 uk에 대해, 를 계산하는 단계를 포함하고,
uk는 상기 출력 벡터이고, vj는 입력 벡터이고, 그리고 wk,j는 상응하는 가중치이고,
Ψ(d, k)는 uk를 계산하는 것의 d번 반복에 대해 선택된 i개 인덱스들의 집합이고, 모든 d번의 반복들에 대한 Ψ(d, k)의 결합(union)은 인덱스들 1, …, J의 전체 집합이고, 그리고
Ω(j, k)는 각 출력 값 uk를 계산하는데 사용되는 상기 입력 벡터의 인덱스들 Ω(1, k), …Ω(j, k)의 부분 집합이고,
그리고 상기 곱셈-및-누적 연산의 결과들을 누적하는 것은 를 계산하는 단계를 포함하는 컨볼루션 신경망의 계층을 처리하는 방법. - 제 1 항에 있어서,
정수 f 및 그것의 상한 fmax를 사전에 결정된 값들로 초기화하는 단계;
f를 증가시키는 단계;
f>fmax면, f를 fmax로 설정하는 단계;
(f-M)만큼 상기 곱셈 결과들을 스케일링하되, M은 상기 곱셈 결과들의 분수 비트(fractional bit)들의 개수인 단계;
스케일링된 곱셈 결과가 L-1 또는 그 이상의 비트들을 요구할 때, L은 덧셈 유닛의 정수 워드 사이즈이고, 오버플로우에 근접한 것을 나타내는 플래그를 참으로 설정하는 단계, 그렇지 않으면 상기 플래그를 거짓으로 설정하는 단계;
상기 플래그가 거짓이고 f<fmax이면, f를 증가시키는 단계;
상기 플래그가 참이면 f를 감소시키고, 상기 감소된 f의 값을 fmax로 설정하는 단계를 더 포함하되,
상기 사전에 결정된 fmax의 값은 상기 사전에 결정된 f의 값보다 크고,
상기 분수 비트는 상기 곱셈 결과가 양의 이진 분수로서 표현될 때 소수점 오른쪽의 비트를 나타내는 컨볼루션 신경망의 계층을 처리하는 방법. - 삭제
- 삭제
- 컨볼루션 신경망의 계산들을 가속하기 위한 디지털 회로에 있어서:
입력 벡터, 가중치 벡터, 및 출력 벡터를 저장하는 외부 메모리; 및
제어 유닛을 포함하되,
상기 제어 유닛은:
처리될 상기 입력 벡터 및 가중치 행렬의 로그 영역 값들을 저장하는 온-칩 메모리;
상기 온-칩 메모리로부터 로그 영역 입력 벡터 값들 및 상응하는 처리되지 않은 로그 영역 가중치 벡터 값들의 페어(pair)들의 상이한 부분 집합들을 선택하고, 복수의 레지스터들에 페어 값들을 저장하는 페어들 선택 유닛; 및
복수의 서브 유닛들을 포함하는 코어 유닛을 포함하되,
각 서브 유닛은 상기 복수의 레지스터들의 하나의 페어의 상기 페어 값들에 대한 곱셈-및-누적 연산을 수행하고,
상기 페어 값들을 곱하는 것은 로그 영역의 정수들의 상응하는 페어들을 더하는 것을 포함하고, 그리고
상기 코어 유닛은 z개 출력 값들의 부분 합들을 동시에 계산하고, z는 상기 출력 벡터의 값들의 총 개수보다 작고, 각 부분 합은 선형 영역 곱셈 결과들의 부분 집합을 포함하고, 그리고 상기 제어 유닛은 z개 출력 값들과 관련된 z개의 상응하는 레지스터들로 상기 부분 합들을 누적하고,
상기 복수의 레지스터들의 각 페어는 로그 영역 입력 값 vΩ(j,k) 및 로그 영역 가중치 값 wk,j을 각각 보유하고, 입력 값 vΩ(j,k)은 J개 구성 요소들을 갖는 입력 벡터의 구성 요소이고, 가중치 값 wk,j는 K X J 가중치 행렬의 k번째 열 벡터의 구성 요소이고, Ω(j,k)는 입력 인덱스들 Ω(1,k), …, Ω(j,k)의 부분 집합이고,
각 서브 유닛은:
vΩ(j,k) X wk,j를 계산하는 곱셈기; 및
서브 유닛들의 곱셈 결과들을 누적하는 덧셈기를 포함하고,
상기 서브 유닛들의 개수 i는 입력 값들의 개수 J보다 작고, 그리고
상기 곱셈기는:
s=v'+w'를 계산하고 출력하는 덧셈기,
s를 N 비트들만큼 오른쪽으로 쉬프트하여 [s/R]를 계산하되, λ=2^(1/R)은 상기 로그 영역의 밑이고 R=2N인 제 1 쉬프트 레지스터;
s의 N개 LSB(least significant bit)들을 추출하여 p=s%R을 계산하는 추출 유닛;
p를 양수로 맵핑하고 x=2^(M+p/R)를 계산하되, x는 1+M 비트들 형태의 무부호 정수인 LUT, y = [s/R]-M을 계산하는 뺄셈기; 및
x를 y 비트들만큼 왼쪽으로 쉬프트하고, v X w 결과를 출력하는 제 2 쉬프트 레지스터를 포함하는 디지털 회로. - 컨볼루션 신경망의 계산들을 가속하기 위한 디지털 회로에 있어서:
복수의 서브 유닛들을 포함하되,
상기 각 서브 유닛은:
로그 영역 입력 값 vΩ(j,k) 및 로그 영역 가중치 값 wk,j을 각각 보유하되, 입력 값 vΩ(j,k) 은 J개 구성 요소들을 갖는 입력 벡터의 구성 요소이고, wk,j는 K X J 가중치 행렬의 k번째 열 벡터의 구성 요소이고, 그리고 Ω(j,k)는 입력 인덱스들 Ω(1,k), …Ω(j,k)의 부분 집합인 레지스터들의 한 페어(pair);
vΩ(j,k) X wk,j를 계산하는 곱셈기;
상기 복수의 서브 유닛들의 곱셈 결과들을 누적하는 덧셈기; 및
곱셈기의 결과 vΩ(j,k) X wk,j의 부호 gj를 추출하고 상기 덧셈기로 σi = vi X wi X gi X 2^f 결과를 출력하는 부호 추출 유닛을 포함하고,
상기 복수의 서브 유닛들의 개수 i는 입력 값들의 개수 J보다 작고,
상기 곱셈기는 적어도 하나의 LUT(look-up-table)를 포함하고,
상기 각 서브 유닛은 정수 p를 x=2^(M+p/R)의 근사치를 계산하는 양수로 맵핑(mapping)하는 상기 적어도 하나의 LUT를 이용하여 입력 값들의 페어(pair)에 대한 곱셈-및-누적 연산을 수행하고, x는 1+M 비트들 형태의 무부호 정수이고, p, R, 및 M은 정수들이고, 그리고 R=2N인 디지털 회로.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/823,091 US10929746B2 (en) | 2017-11-27 | 2017-11-27 | Low-power hardware acceleration method and system for convolution neural network computation |
US15/823,091 | 2017-11-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190062129A KR20190062129A (ko) | 2019-06-05 |
KR102647858B1 true KR102647858B1 (ko) | 2024-03-15 |
Family
ID=66633986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020180064186A KR102647858B1 (ko) | 2017-11-27 | 2018-06-04 | 컨볼루션 신경망 계산을 위한 저전력 하드웨어 가속 방법 및 시스템 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10929746B2 (ko) |
KR (1) | KR102647858B1 (ko) |
Families Citing this family (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210287041A1 (en) * | 2018-03-06 | 2021-09-16 | Axell Corporation | Processing Device, Processing Method, Computer Program, And Processing System |
JP6476531B1 (ja) * | 2018-03-06 | 2019-03-06 | 株式会社ツバサファクトリー | 処理装置、処理方法、コンピュータプログラム及び処理システム |
US11468302B2 (en) | 2018-03-13 | 2022-10-11 | Recogni Inc. | Efficient convolutional engine |
CN110210610B (zh) * | 2018-03-27 | 2023-06-20 | 腾讯科技(深圳)有限公司 | 卷积计算加速器、卷积计算方法及卷积计算设备 |
US11966835B2 (en) | 2018-06-05 | 2024-04-23 | Nvidia Corp. | Deep neural network accelerator with fine-grained parallelism discovery |
US11769040B2 (en) * | 2018-09-10 | 2023-09-26 | Nvidia Corp. | Scalable multi-die deep learning system |
JP7165018B2 (ja) * | 2018-10-03 | 2022-11-02 | キヤノン株式会社 | 情報処理装置、情報処理方法 |
US20200125991A1 (en) * | 2018-10-18 | 2020-04-23 | Facebook, Inc. | Optimization of neural networks using hardware calculation efficiency |
US10990525B2 (en) * | 2018-12-12 | 2021-04-27 | Mipsology SAS | Caching data in artificial neural network computations |
US20210056446A1 (en) * | 2019-08-23 | 2021-02-25 | Nvidia Corporation | Inference accelerator using logarithmic-based arithmetic |
US12033060B2 (en) | 2019-08-23 | 2024-07-09 | Nvidia Corporation | Asynchronous accumulator using logarithmic-based arithmetic |
US11886980B2 (en) | 2019-08-23 | 2024-01-30 | Nvidia Corporation | Neural network accelerator using logarithmic-based arithmetic |
CN110543936B (zh) * | 2019-08-30 | 2022-03-25 | 北京空间飞行器总体设计部 | 一种cnn全连接层运算的多并行加速方法 |
US11663452B2 (en) * | 2019-09-25 | 2023-05-30 | Intel Corporation | Processor array for processing sparse binary neural networks |
CN110555519B (zh) * | 2019-10-08 | 2023-07-28 | 东南大学 | 一种基于符号随机计算的低复杂度卷积神经网络架构 |
EP3809285B1 (en) | 2019-10-16 | 2023-05-10 | Samsung Electronics Co., Ltd. | Method and apparatus with data processing |
WO2021107170A1 (ko) * | 2019-11-26 | 2021-06-03 | 전자부품연구원 | 저전력 딥러닝 가속 장치 |
CN110991619A (zh) * | 2019-12-09 | 2020-04-10 | Oppo广东移动通信有限公司 | 神经网络处理器、芯片和电子设备 |
WO2021125431A1 (ko) * | 2019-12-19 | 2021-06-24 | 주식회사 노타 | 분산 평준화를 통한 딥러닝 모델 초기화 방법 및 장치 |
CN111061513B (zh) * | 2019-12-20 | 2022-02-01 | 支付宝(杭州)信息技术有限公司 | 加速计算设备建模的方法、电子设备及可读存储介质 |
KR20210083624A (ko) | 2019-12-27 | 2021-07-07 | 삼성전자주식회사 | 신경망의 데이터 입력 및 출력을 제어하는 제어 방법 및 장치 |
CN113344170B (zh) * | 2020-02-18 | 2023-04-25 | 杭州知存智能科技有限公司 | 神经网络权重矩阵调整方法、写入控制方法以及相关装置 |
EP4115346A4 (en) * | 2020-03-10 | 2024-03-20 | Aip Semi, Inc. | HARDWARE ARCHITECTURE FOR PROCESSING DATA IN A NEURAL NETWORK |
KR102592708B1 (ko) * | 2020-04-24 | 2023-10-24 | 한국전자통신연구원 | 로그 영역의 연산을 수행하도록 구성된 신경망 가속기 |
CN111797977B (zh) * | 2020-07-03 | 2022-05-20 | 西安交通大学 | 一种用于二值化神经网络的加速器结构及循环展开方法 |
KR102384588B1 (ko) * | 2020-11-03 | 2022-04-08 | 오픈엣지테크놀로지 주식회사 | 신경망 연산방법 및 신경망 가중치 생성방법 |
CN112508174B (zh) * | 2020-12-09 | 2024-03-22 | 东南大学 | 面向权重二值型神经网络的预计算逐列卷积计算单元 |
KR102493980B1 (ko) * | 2020-12-21 | 2023-01-30 | 포항공과대학교 산학협력단 | 머신러닝 기반의 비디오 화질개선 방법 및 장치 |
CN113538266A (zh) * | 2021-07-07 | 2021-10-22 | 南京国电南自电网自动化有限公司 | 一种基于wgan的模糊航拍图像处理方法 |
US20240061650A1 (en) * | 2022-08-18 | 2024-02-22 | Apple Inc. | Floating-Point Execution Circuitry for Subset of Binary Logarithm Input Range |
US12008069B1 (en) | 2023-11-29 | 2024-06-11 | Recogni Inc. | Multi-mode architecture for unifying matrix multiplication, 1×1 convolution and 3×3 convolution |
US12007937B1 (en) | 2023-11-29 | 2024-06-11 | Recogni Inc. | Multi-mode architecture for unifying matrix multiplication, 1×1 convolution and 3×3 convolution |
US12045309B1 (en) | 2023-11-29 | 2024-07-23 | Recogni Inc. | Systems and methods for performing matrix multiplication with a plurality of processing elements |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2135857A1 (en) * | 1994-01-03 | 1995-07-04 | Shay-Ping Thomas Wang | Neural network utilizing logarithmic function and method of using same |
US11244225B2 (en) * | 2015-07-10 | 2022-02-08 | Samsung Electronics Co., Ltd. | Neural network processor configurable using macro instructions |
GB201607713D0 (en) * | 2016-05-03 | 2016-06-15 | Imagination Tech Ltd | Convolutional neural network |
US11003985B2 (en) * | 2016-11-07 | 2021-05-11 | Electronics And Telecommunications Research Institute | Convolutional neural network system and operation method thereof |
KR102356708B1 (ko) * | 2017-09-28 | 2022-01-27 | 삼성전자주식회사 | 컨볼루션 연산을 수행하는 연산 장치 및 연산 방법 |
GB2568086B (en) * | 2017-11-03 | 2020-05-27 | Imagination Tech Ltd | Hardware implementation of convolution layer of deep neutral network |
-
2017
- 2017-11-27 US US15/823,091 patent/US10929746B2/en active Active
-
2018
- 2018-06-04 KR KR1020180064186A patent/KR102647858B1/ko active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
KR20190062129A (ko) | 2019-06-05 |
US20190164043A1 (en) | 2019-05-30 |
US10929746B2 (en) | 2021-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102647858B1 (ko) | 컨볼루션 신경망 계산을 위한 저전력 하드웨어 가속 방법 및 시스템 | |
Valueva et al. | Application of the residue number system to reduce hardware costs of the convolutional neural network implementation | |
CN112074806B (zh) | 用于块浮点计算的***、方法和计算机存储介质 | |
CN108337000B (zh) | 用于转换到较低精度数据格式的自动方法 | |
EP3627397B1 (en) | Processing method and apparatus | |
Pestana et al. | A full featured configurable accelerator for object detection with YOLO | |
CN112183713A (zh) | 神经网络装置和操作神经网络的方法 | |
KR20200061164A (ko) | 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서 | |
CN111240746B (zh) | 一种浮点数据反量化及量化的方法和设备 | |
Langroudi et al. | Positnn framework: Tapered precision deep learning inference for the edge | |
Fan et al. | Reconfigurable acceleration of 3D-CNNs for human action recognition with block floating-point representation | |
US11704543B2 (en) | Neural network hardware acceleration with stochastic adaptive resource allocation | |
JP2022507704A (ja) | 適応量子化方法及び装置、デバイス、媒体 | |
CN112088354A (zh) | 使用共享指数的块浮点计算 | |
EP4318313A1 (en) | Data processing method, training method for neural network model, and apparatus | |
US20230376274A1 (en) | Floating-point multiply-accumulate unit facilitating variable data precisions | |
JP2023084094A (ja) | 面積高効率畳み込みブロック | |
CN110337636A (zh) | 数据转换方法和装置 | |
Salamat et al. | Residue-Net: Multiplication-free neural network by in-situ no-loss migration to residue number systems | |
Chen et al. | Approximate softmax functions for energy-efficient deep neural networks | |
JP2022512211A (ja) | 画像処理方法、装置、車載演算プラットフォーム、電子機器及びシステム | |
Zhan et al. | Field programmable gate array‐based all‐layer accelerator with quantization neural networks for sustainable cyber‐physical systems | |
WO2021253440A1 (en) | Depth-wise over-parameterization | |
Asim et al. | Centered Symmetric Quantization for Hardware-Efficient Low-Bit Neural Networks. | |
CN114298291A (zh) | 一种模型量化处理***及一种模型量化处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
X091 | Application refused [patent] | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |