KR20210113004A - 뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치 - Google Patents

뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치 Download PDF

Info

Publication number
KR20210113004A
KR20210113004A KR1020200137442A KR20200137442A KR20210113004A KR 20210113004 A KR20210113004 A KR 20210113004A KR 1020200137442 A KR1020200137442 A KR 1020200137442A KR 20200137442 A KR20200137442 A KR 20200137442A KR 20210113004 A KR20210113004 A KR 20210113004A
Authority
KR
South Korea
Prior art keywords
neural network
mapping model
processor
code
calculating
Prior art date
Application number
KR1020200137442A
Other languages
English (en)
Inventor
에거 버나드
김민수
민혜미
Original Assignee
삼성전자주식회사
서울대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사, 서울대학교산학협력단 filed Critical 삼성전자주식회사
Priority to US17/190,832 priority Critical patent/US20210279587A1/en
Priority to CN202110235821.3A priority patent/CN113361704A/zh
Publication of KR20210113004A publication Critical patent/KR20210113004A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Stored Programmes (AREA)

Abstract

뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치가 개시된다. 일 실시예에 따른 코드 생성 방법은, 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보를 수신하는 단계와, 상기 정보 및 상기 뉴럴 네트워크의 구조에 기초하여 상기 뉴럴 네트워크 연산을 수행하는 복수의 프로세싱 엘리먼트에 상기 뉴럴 네트워크 연산을 매핑(mapping)하는 타겟 매핑 모델을 생성하는 단계와, 상기 타겟 매핑 모델에 기초하여 상기 뉴럴 네트워크 연산을 수행하기 위한 코드(code)를 생성하는 단계를 포함한다.

Description

뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치{CODE GENERATION METHOD AND APPRATUS OFR NEURAL NETWORK OPERATION}
아래 실시예들은 뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치에 관한 것이다.
최근 많은 딥 뉴럴 네트워크 가속기(deep neural network accelerator)들과 다양한 딥 뉴럴 네트워크 구조가 연구되고 있다. 딥 뉴럴 네트워크는 연산을 수행할 때 필요한 데이터의 크기가 크기 때문에 온-칩(on-chip) 메모리의 크기가 작은 장치(device)에서는 데이터를 부분적으로 사용하는 것이 필요하다.
연산에 있어 입력, 가중치 및 출력 데이터가 필요하고, 각 데이터들은 너비(또는, 가로), 높이(또는, 세로), 채널(또는, 깊이) 및 개수의 4 개의 차원을 가질 수 있다.
어떤 차원의 데이터를 어떤 크기로 분할하여 로드(load)할지를 결정하는 타일링(tiling) 방법과 타일링된 데이터를 어떤 순서로 로드할지를 결정하는 데이터플로우(dataflow)에 의해 중복 로드의 크기와 횟수 및 장치의 성능이 달라질 수 있다.
일 실시예에 따른 코드 생성 방법은, 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보를 수신하는 단계와, 상기 정보 및 상기 뉴럴 네트워크의 구조에 기초하여 상기 뉴럴 네트워크 연산을 수행하는 복수의 프로세싱 엘리먼트에 상기 뉴럴 네트워크 연산을 매핑(mapping)하는 타겟 매핑 모델을 생성하는 단계와, 상기 타겟 매핑 모델에 기초하여 상기 뉴럴 네트워크 연산을 수행하기 위한 코드(code)를 생성하는 단계를 포함한다.
상기 수신하는 단계는, 상기 복수의 프로세싱 엘리먼트의 수, 상기 프로세싱 엘리먼트의 구조, 메모리 대역폭, 주파수 또는 메모리 크기를 수신하는 단계를 포함할 수 있다.
상기 타겟 매핑 모델을 생성하는 단계는, 상기 정보 및 상기 구조에 기초하여 임의의 매핑 모델에 대응하는 매핑 파라미터를 계산하는 단계와, 상기 매핑 파라미터에 기초하여 상기 타겟 매핑 모델을 결정하는 단계를 포함할 수 있다.
상기 매핑 파라미터를 계산하는 단계는, 상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 임의의 매핑 모델이 달성 가능한 연산 성능을 계산하는 단계와, 상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 상기 임의의 매핑 모델에 요구되는 메모리 접근 크기를 계산하는 단계와, 상기 연산 성능 및 상기 메모리 접근 크기에 기초하여 상기 매핑 파라미터를 계산하는 단계를 포함할 수 있다.
상기 연산 성능을 계산하는 단계는, 상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 복수의 프로세싱 엘리먼트의 이용율(utilization)을 계산하는 단계와, 상기 이용율에 기초하여 상기 연산 성능을 계산하는 단계를 포함할 수 있다.
상기 메모리 접근 크기를 계산하는 단계는, 상기 루프 구조에 기초하여 상기 임의의 매핑 모델의 데이터 중복 로드 횟수를 계산하는 단계와, 상기 데이터 중복 로드 횟수 및 상기 분할 구조에 기초하여 상기 메모리 접근 크기를 계산하는 단계를 포함할 수 있다.
상기 매핑 파라미터에 기초하여 타겟 매핑 모델을 생성하는 단계는, 상기 매핑 파라미터가 최대가 되는 임의의 매핑 모델을 상기 타겟 매핑 모델로 결정하는 단계를 포함할 수 있다.
상기 타겟 매핑 모델을 생성하는 단계는, 상기 뉴럴 네트워크의 분할 구조 및 상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 부적합 매핑 모델(inadequate mapping model)을 프루닝하는 단계를 더 포함할 수 있다.
상기 프루닝하는 단계는, 상기 복수의 프로세싱 엘리먼트의 이용율에 따른 뉴럴 네트워크의 분할 구조에 기초하여 상기 부적합 매핑 모델을 프루닝하는 단계를 포함할 수 있다.
상기 프루닝하는 단계는, 상기 루프 구조의 반복 횟수에 기초하여 상기 부적합 매핑 모델을 프루닝하는 단계를 포함할 수 있다.
일 실시예에 따른 코드 생성 장치는, 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보를 수신하는 수신기와, 상기 정보 및 상기 뉴럴 네트워크의 구조에 기초하여 상기 뉴럴 네트워크 연산을 수행하는 복수의 프로세싱 엘리먼트에 상기 뉴럴 네트워크 연산을 매핑하는 타겟 매핑 모델을 생성하고, 상기 타겟 매핑 모델에 기초하여 상기 뉴럴 네트워크 연산을 수행하기 위한 코드를 생성하는 프로세서를 포함한다.
상기 수신기는, 상기 복수의 프로세싱 엘리먼트의 수, 상기 프로세싱 엘리먼트의 구조, 메모리 대역폭, 주파수 또는 메모리 크기를 수신할 수 있다.
상기 프로세서는, 상기 정보 및 상기 구조에 기초하여 임의의 매핑 모델에 대응하는 매핑 파라미터를 계산하고, 상기 매핑 파라미터에 기초하여 상기 타겟 매핑 모델을 결정할 수 있다.
상기 프로세서는, 상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 임의의 매핑 모델이 달성 가능한 연산 성능을 계산하고, 상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 상기 임의의 매핑 모델에 요구되는 메모리 접근 크기를 계산하고, 상기 연산 성능 및 상기 메모리 접근 크기에 기초하여 상기 매핑 파라미터를 계산할 수 있다.
상기 프로세서는, 상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 복수의 프로세싱 엘리먼트의 이용율(utilization)을 계산하고, 상기 이용율에 기초하여 상기 연산 성능을 계산할 수 있다.
상기 프로세서는, 상기 루프 구조에 기초하여 상기 임의의 매핑 모델의 데이터 중복 로드 횟수를 계산하고, 상기 데이터 중복 로드 횟수 및 상기 분할 구조에 기초하여 상기 메모리 접근 크기를 계산할 수 있다.
상기 프로세서는, 상기 매핑 파라미터가 최대가 되는 임의의 매핑 모델을 상기 타겟 매핑 모델로 결정할 수 있다.
상기 프로세서는, 상기 뉴럴 네트워크의 분할 구조 및 상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 부적합 매핑 모델을 프루닝할 수 있다.
상기 프로세서는, 상기 복수의 프로세싱 엘리먼트의 이용율에 따른 뉴럴 네트워크의 분할 구조에 기초하여 상기 부적합 매핑 모델을 프루닝할 수 있다.
상기 프로세서는, 상기 루프 구조의 반복 횟수에 기초하여 상기 부적합 매핑 모델을 프루닝할 수 있다.
도 1은 일 실시예에 따른 코드 생성 장치의 개략적인 블록도를 나타낸다.
도 2는 뉴럴 네트워크 연산을 위한 프로세싱 엘리먼트의 배치의 예를 나타낸다.
도 3은 도 1에 도시된 코드 생성 장치의 동작을 설명하기 위한 도면이다.
도 4는 하드웨어에 관한 정보의 예를 나타낸다.
도 5는 도 1에 도시된 코드 생성 장치가 수행하는 연산의 예를 나타낸다.
도 6a는 도 5의 연산을 수행하기 위한 코드의 일 예를 나타낸다.
도 6b는 도 5의 연산을 수행하기 위한 코드의 다른 예를 나타낸다.
도 7은 도 1에 도시된 코드 생성 장치가 계산한 달성 가능한 연산 성능을 나타낸다.
도 8은 오프-칩 루프(off-chip loop)의 구성을 나타낸다.
도 9는 프루닝을 위한 타일링 팩터(tiling factor)의 초기화를 나타낸다.
도 10은 프루닝을 위한 루프 제거(loop elimination)을 나타낸다.
도 11은 프루닝을 위한 루프 교환(loop interchange)를 나타낸다.
도 12는 도 1에 도시된 코드 생성 장치가 생성한 코드의 예를 나타낸다.
도 13은 도 1에 도시된 코드 생성 장치의 동작의 순서도를 나타낸다.
실시예들에 대한 특정한 구조적 또는 기능적 설명들은 단지 예시를 위한 목적으로 개시된 것으로서, 다양한 형태로 변경되어 구현될 수 있다. 따라서, 실제 구현되는 형태는 개시된 특정 실시예로만 한정되는 것이 아니며, 본 명세서의 범위는 실시예들로 설명한 기술적 사상에 포함되는 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 이런 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 해석되어야 한다. 예를 들어, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설명된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 실시예들을 첨부된 도면들을 참조하여 상세하게 설명한다. 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조 부호를 부여하고, 이에 대한 중복되는 설명은 생략하기로 한다.
도 1은 일 실시예에 따른 코드 생성 장치의 개략적인 블록도를 나타낸다.
도 1을 참조하면, 코드 생성 장치(10)는 뉴럴 네트워크 연산을 위한 코드를 생성할 수 있다. 코드 생성 장치(10)는 뉴럴 네트워크 관련 정보 및 뉴럴 네트워크 연산을 수행하는 하드웨어 관련 정보에 기초하여 뉴럴 네트워크 연산을 위한 코드(code)를 생성할 수 있다. 코드 생성 장치(10)는 생성한 코드에 기초하여 뉴럴 네트워크 연산을 수행할 수 있다.
코드(또는, 소스 코드(source code)는 컴퓨터 프로그램을 프로그래밍 언어로 기술한 글을 의미할 수 있다. 코드는 하나 이상의 텍스트 파일로 구현될 수 있다.
뉴럴 네트워크(또는 인공 신경망)는 기계학습과 인지과학에서 생물학의 신경을 모방한 통계학적 학습 알고리즘을 포함할 수 있다. 뉴럴 네트워크는 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 의미할 수 있다.
뉴럴 네트워크는 복수의 레이어를 포함할 수 있다. 레이어는 복수의 노드를 포함할 수 있다.
뉴럴 네트워크는 심층 뉴럴 네트워크 (Deep Neural Network)를 포함할 수 있다. 뉴럴 네트워크는 CNN(Convolutional Neural Network), RNN(Recurrent Neural Network), 퍼셉트론(perceptron), FF(Feed Forward), RBF(Radial Basis Network), DFF(Deep Feed Forward), LSTM(Long Short Term Memory), GRU(Gated Recurrent Unit), AE(Auto Encoder), VAE(Variational Auto Encoder), DAE(Denoising Auto Encoder), SAE(Sparse Auto Encoder), MC(Markov Chain), HN(Hopfield Network), BM(Boltzmann Machine), RBM(Restricted Boltzmann Machine), DBN(Depp Belief Network), DCN(Deep Convolutional Network), DN(Deconvolutional Network), DCIGN(Deep Convolutional Inverse Graphics Network), GAN(Generative Adversarial Network), LSM(Liquid State Machine), ELM(Extreme Learning Machine), ESN(Echo State Network), DRN(Deep Residual Network), DNC(Differentiable Neural Computer), NTM(Neural Turning Machine), CN(Capsule Network), KN(Kohonen Network) 및 AN(Attention Network)를 포함할 수 있다.
코드 생성 장치(10)는 수신기(100) 및 프로세서(200)를 포함한다. 코드 생성 장치(10)는 프로세싱 엘리먼트(300) 및 메모리(400)를 더 포함할 수 있다.
수신기(100)는 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보 또는 뉴럴 네트워크 관련 정보를 수신할 수 있다. 수신기(100)는 수신 인터페이스를 포함할 수 있다. 수신기(100)는 뉴럴 네트워크 관련 정보 및 하드웨어에 관한 정보를 분석하여 프로세서(200)로 전송할 수 있다.
하드웨어에 관한 정보는 복수의 프로세싱 엘리먼트(300)의 수, 프로세싱 엘리먼트(300)의 구조, 메모리 대역폭, 주파수 또는 메모리 크기를 포함할 수 있다. 다시 말해, 수신기(100)는 복수의 프로세싱 엘리먼트(300)의 수, 프로세싱 엘리먼트(300)의 구조, 메모리 대역폭, 주파수 또는 메모리 크기를 수신할 수 있다. 하드웨어에 관한 정보는 도 4를 참조하여 자세하게 설명한다.
프로세서(200)는 메모리(400)에 저장된 데이터를 처리할 수 있다. 프로세서(200)는 메모리(400)에 저장된 컴퓨터로 읽을 수 있는 코드(예를 들어, 소프트웨어) 및 프로세서(200)에 의해 유발된 인스트럭션(instruction)들을 실행할 수 있다.
"프로세서(200)"는 목적하는 동작들(desired operations)을 실행시키기 위한 물리적인 구조를 갖는 회로를 가지는 하드웨어로 구현된 데이터 처리 장치일 수 있다. 예를 들어, 목적하는 동작들은 프로그램에 포함된 코드(code) 또는 인스트럭션들(instructions)을 포함할 수 있다.
예를 들어, 하드웨어로 구현된 데이터 처리 장치는 마이크로프로세서(microprocessor), 중앙 처리 장치(central processing unit), 프로세서 코어(processor core), 멀티-코어 프로세서(multi-core processor), 멀티프로세서(multiprocessor), ASIC(Application-Specific Integrated Circuit), FPGA(Field Programmable Gate Array)를 포함할 수 있다.
프로세서(200)는 하드웨어에 관한 정보 및 뉴럴 네트워크의 구조에 기초하여 뉴럴 네트워크 연산을 수행하는 복수의 프로세싱 엘리먼트(300)에 뉴럴 네트워크 연산을 매핑(mapping)하는 타겟 매핑 모델(target mapping model)을 생성할 수 있다.
매핑 모델은 뉴럴 네트워크 연산에 사용되는 입력 데이터, 출력 데이터 또는 가중치의 분할 구조와 뉴럴 네트워크 연산을 수행하기 위한 루프 구조를 포함할 수 있다. 매핑 모델은 복수의 프로세싱 엘리먼트(300)에 뉴럴 네트워크 연산을 할당하는 형태에 관한 정보를 포함할 수 있다.
프로세서(200)는 하드웨어에 관한 정보 및 뉴럴 네트워크의 구조에 기초하여 임의의 매핑 모델에 대응하는 매핑 파라미터를 계산할 수 있다.
프로세서(200)는 뉴럴 네트워크의 분할 구조에 기초하여 임의의 매핑 모델이 달성 가능한 연산 성능을 계산할 수 있다. 프로세서(200)는 뉴럴 네트워크의 분할 구조에 기초하여 복수의 프로세싱 엘리먼트의 이용율(utilization)을 계산할 수 있다. 프로세서(200)는 이용율에 기초하여 연산 성능을 계산할 수 있다.
프로세서(200)는 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 임의의 매핑 모델에 요구되는 메모리 접근 크기를 계산할 수 있다. 프로세서(200)는 루프 구조에 기초하여 임의의 매핑 모델의 데이터 중복 로드 횟수를 계산할 수 있다. 프로세서(200)는 데이터 중복 로드 횟수 및 분할 구조에 기초하여 메모리 접근 크기를 계산할 수 있다.
프로세서(200)는 연산 성능 및 메모리 접근 크기에 기초하여 매핑 파라미터를 계산할 수 있다. 매핑 파라미터의 계산은 도 7을 참조하여 자세하게 설명한다.
프로세서(200)는 매핑 파라미터에 기초하여 타겟 매핑 모델을 결정할 수 있다. 프로세서(200)는 매핑 파라미터가 최대가 되는 임의의 매핑 모델을 타겟 매핑 모델로 결정할 수 있다.
프로세서(200)는 뉴럴 네트워크의 분할 구조 및 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 부적합 매핑 모델(inadequate mapping model)을 프루닝할 수 있다.
프로세서(200)는 복수의 프로세싱 엘리먼트의 이용율에 따른 뉴럴 네트워크의 분할 구조에 기초하여 부적합 매핑 모델을 프루닝할 수 있다. 프로세서(200)는 루프 구조의 반복 횟수에 기초하여 부적합 매핑 모델을 프루닝할 수 있다.
프로세서(200)는 타겟 매핑 모델에 기초하여 뉴럴 네트워크 연산을 수행하기 위한 코드를 생성할 수 있다.
프로세싱 엘리먼트(300)는 생성된 코드에 기초하여 뉴럴 네트워크 연산을 수행할 수 있다. 프로세싱 엘리먼트(300)는 뉴럴 네트워크 연산에 포함되는 단위 연산을 수행할 수 있다. 프로세싱 엘리먼트(300)는 MAC(Multiplier Accumulator)를 포함할 수 있다. 필요에 따라 프로세싱 엘리먼트(300)는 코드 생성 장치(10)의 외부에 구현될 수 있다.
메모리(400)는 프로세서에 의해 실행가능한 인스트럭션들(또는 프로그램)을 저장할 수 있다. 예를 들어, 인스트럭션들은 프로세서의 동작 및/또는 프로세서의 각 구성의 동작을 실행하기 위한 인스트럭션들을 포함할 수 있다.
메모리(400)는 휘발성 메모리 장치 또는 불휘발성 메모리 장치로 구현될 수 있다.
휘발성 메모리 장치는 DRAM(dynamic random access memory), SRAM(static random access memory), T-RAM(thyristor RAM), Z-RAM(zero capacitor RAM), 또는 TTRAM(Twin Transistor RAM)으로 구현될 수 있다.
불휘발성 메모리 장치는 EEPROM(Electrically Erasable Programmable Read-Only Memory), 플래시(flash) 메모리, MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torque(STT)-MRAM), Conductive Bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase change RAM), 저항 메모리(Resistive RAM(RRAM)), 나노 튜브 RRAM(Nanotube RRAM), 폴리머 RAM(Polymer RAM(PoRAM)), 나노 부유 게이트 메모리(Nano Floating Gate Memory(NFGM)), 홀로그래픽 메모리(holographic memory), 분자 전자 메모리 소자(Molecular Eelectronic Memory Device), 또는 절연 저항 변화 메모리(Insulator Resistance Change Memory)로 구현될 수 있다.
도 2는 뉴럴 네트워크 연산을 위한 프로세싱 엘리먼트의 배치의 예를 나타낸다.
도 2를 참조하면, 프로세싱 엘리먼트(300)는 도 2의 예시와 같이 다차원 구조를 가질 수 있다. 프로세서(200)는 프로세싱 엘리먼트(300)에 뉴럴 네트워크 연산을 수행하기 위한 데이터를 어떤 메모리(400)로부터 로드(load)할지 결정할 수 있다. 프로세서(200)는 뉴럴 네트워크 연산을 위한 데이터의 타일링 방식을 조절함으로써 프로세싱 엘리먼트(300)의 이용율을 제어할 수 있다.
프로세서(200)는 뉴럴 네트워크에 포함된 레이어(layer) 마다 적합한 타일링 방식 및 데이터플로우(dataflow)를 결정하고, 결정된 타일링 방식 및 데이터플로우에 기초하여 코드를 생성할 수 있다.
프로세서(200)는 뉴럴 네트워크 연산에 사용되는 코어의 수에 따른 컴퓨팅 파워(computing power), 뉴럴 네트워크 연산에 필요한 데이터의 크기 및 메모리 대역폭(bandwidth)에 기초하여 뉴럴 네트워크 연산을 수행할 때 하드웨어에서 달성 가능한 연산의 최대 성능을 계산할 수 있다.
프로세서(200)는 달성 가능한 연산 성능에 기초하여 매핑 모델을 결정함으로써 프로세싱 엘리먼트(300)의 이용율을 향상시킬 수 있다.
프로세서(200)는 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보에 기초하여 코드를 생성할 수 있다. 프로세서(200)는 프로세싱 엘리먼트(300)의 구조, 주파수 또는 메모리 대역폭 정보를 포함하는 하드웨어 정보에 기초하여 뉴럴 네트워크 연산에 실질적으로 사용되는 프로세싱 엘리먼트(300)의 개수를 계산할 수 있다.
프로세서(200)는 뉴럴 네트워크 연산에 사용되는 전체 코어의 수 및 계산된 프로세싱 엘리먼트(300)의 개수에 기초하여 컴퓨팅 파워를 계산할 수 있다.
프로세서(200)는 타일링된 데이터의 크기, 데이터플로우에 따른 데이터 중복 로드 횟수에 기초하여 메모리(400)에 접근하여 로드하는 데이터의 크기를 계산할 수 있다.
프로세서(200)는 계산한 컴퓨팅 파워와 뉴럴 네트워크 연산을 수행할 때 필요한 로드하는 데이터의 크기에 기초하여 타일링할 데이터의 크기, 데이터플로우에 따라 코드 생성 장치(10)가 뉴럴 네트워크 연산을 수행할 때 달성 가능한 연산 성능의 최대 값을 계산할 수 있다.
프로세서(200)는 메모리 접근 크기 및 달성 가능한 연산 성능에 기초하여 매핑 파라미터를 계산하고, 계산된 매핑 파라미터에 기초하여 타겟 매핑 모델을 결정할 수 있다.
구체적으로, 프로세서(200)는 연산 성능을 메모리 접근 크기로 나눈 값을 매핑 파라미터로 계산하고, 매핑 파라미터가 가장 큰 경우에 대응하는 타일링 방식과 데이터 플로우 방식을 타겟 매핑 모델로 결정할 수 있다.
모든 타일링 방식과 모든 데이터플로우 방식의 조합에 대한 연산 성능을 비교하는 것은 비효율적이기 때문에, 프로세서(200)는 부적절한 매핑 모델을 프루닝(pruning)할 수 있다.
프로세서(200)는 부적절한 매핑 모델을 프루닝함으로써 타겟 매핑 모델을 결정하기 위해 임의의 타겟 모델의 매핑 파라미터를 계산하는데 소요되는 서치 타임(search time)을 감소시킬 수 있다.
프로세서(200)는 매핑 파라미터 값이 작은 타일링 방식 및 데이터 플로우 조합을 프루닝할 수 있다.
프로세서(200)는 생성된 타겟 매핑 모델에 기초하여 코드를 생성할 수 있다. 다시 말해, 프로세서(200)는 타겟 매핑 모델에 포함된 타일링 방식 및 데이터플로우 방식에 기초하여 코드를 생성할 수 있다.
도 3은 도 1에 도시된 코드 생성 장치의 동작을 설명하기 위한 도면이고, 도 4는 하드웨어에 관한 정보의 예를 나타낸다.
도 3 및 도 4를 참조하면, 수신기(100)는 뉴럴 네트워크의 구조 및 하드웨어(또는, 타겟 하드웨어)에 관한 정보를 수신할 수 있다. 수신기(100)는 하드웨어에 관한 정보를 하드웨어 명세(description) 파일의 형태로 수신할 수 있다.
하드웨어 명세 파일은 도 4와 같은 형태를 가질 수 있다. 하드웨어 명세 파일은, 프로세싱 엘리먼트(300)의 수, 프로세싱 엘리먼트(300)의 구조, 메모리 대역폭, 주파수(frequency) 또는 메모리 크기를 포함할 수 있다.
프로세싱 엘리먼트(300)의 구조는 프로세싱 엘리먼트(300)의 배열에 관한 정보를 포함할 수 있다. 예를 들어, 프로세싱 엘리먼트(300)의 구조는 프로세싱 엘리먼트 어레이의 너비(width) 및 높이(height) 정보를 포함할 수 있다.
주파수는 프로세싱 엘리먼트(300)의 동작 주파수를 의미할 수 있다.
도 5는 도 1에 도시된 코드 생성 장치가 수행하는 연산의 예를 나타내고, 도 6a 및 도 6b는 도 5의 연산을 수행하기 위한 코드의 예들을 나타낸다.
도 5 내지 도 6b를 참조하면, 코드 생성 장치(10)는 뉴럴 네트워크 연산을 수행할 수 있다. 코드 생성 장치(10)는 컨볼루션 연산을 수행할 수 있다.
컨볼루션 연산은, 특징맵과 가중치 행렬의 컨볼루션을 수행하는 연산을 의미할 수 있다. 구체적으로, 컨볼루션 연산을 수행하기 위해서, 특징맵과 가중치 행렬의 대응되는 성분을 곱하여 더함으로써 출력 특징맵의 하나의 성분을 생성하는 과정이 반복적으로 수행될 수 있다.
뉴럴 네트워크 연산을 위한 입력 데이터는 특징맵 또는 이미지의 형태를 가질 수 있다. 특징맵은 뉴럴 네트워크에 포함된 레이어에 의해 처리된 이미지를 의미할 수 있다.
입력 특징맵(510)은 채널, 높이 및 너비를 가질 수 있다. IW는 입력 특징맵의 너비를 의미하고, IH는 입력 특징맵의 높이를 의미하고, IC는 입력 특징맵의 채널의 수를 의미할 수 있다.
커널은 입력 특징맵(510)과의 컨볼루션 연산을 수행하기 위한 가중치 행렬을 의미할 수 있다. 커널은 높이(KH) 및 너비(KW)를 가질 수 있고, 입력 특징맵(510)의 채널 수(IC) 또는 출력 특징맵(550)의 채널 수(OC)에 대응되는 채널의 수를 가질 수 있다. 출력 특징맵(550)은 채널, 높이 및 너비를 가질 수 있다. OC는 출력 특징맵의 채널 수를 의미하고, OH는 출력 특징맵의 높이를 의미하고, OW는 출력 특징맵의 너비를 의미할 수 있다.
도 6a 및 도 6b의 예시는 도 5의 컨볼루션 연산을 수행하기 위한 코드를 나타낼 수 있다. 컨볼루션 연산은 도 6a의 예시와 같이 6 중 루프문으로 구성될 수 있다.
코드 생성 장치(10)는 뉴럴 네트워크 연산을 수행하는 하드웨어 정보에 기초하여 도 6a의 루프문을 변경할 수 있다. 코드 생성 장치(10)가 변경한 코드는 입력되는 데이터를 타일링하여 메모리(400)(예를 들어, 온-칩 메모리)에 로드하기 위한 오프-칩 루프 네스트(off-chip loop nest)와, 로드한 데이터를 프로세싱 엘리먼트(300)에서 연산시키기 위해 레지스터 파일로 로드하는 온-칩 루프 네스트(on-chip loop nest) 및 복수의 프로세싱 엘리먼트(300)들이 병렬적으로 연산을 수행하는 병렬화 루프 네스트(parallelization loop nest)를 포함할 수 있다.
오프-칩 루프 네스트의 순서에 따라 로드 순서가 달라질 수 있다. 로드 순서에 따라 데이터플로우를 입력 스테이셔너리(input stationary), 가중치 스테이셔너리(weight stationary) 및 출력 스테이셔너리(output stationary)로 나눌 수 있다.
입력 스테이셔너리는 출력 특징맵의 채널 인덱스를 갖는 루프문을 가장 안쪽에 위치시켜 입력 데이터를 중복으로 로드하지 않는 데이터플로우 방식을 의미할 수 있다.
가중치 스테이셔너리는 출력 특징맵의 너비, 출력 특징맵의 높이 인덱스를 갖는 루프문을 가장 안쪽에 위치시켜 가중치 데이터를 중복으로 로드하지 않는 데이터플로우 방식을 의미할 수 있다.
출력 스테이셔너리는 입력 특장맵의 채널 인덱스를 갖는 루프문을 가장 안쪽에 위치시켜 출력 데이터를 중복으로 로드하지 않는 데이터 플로우 방식을 의미할 수 있다.
도 7은 도 1에 도시된 코드 생성 장치가 계산한 달성 가능한 연산 성능을 나타낸다.
프로세서(200)는 하드웨어에 관한 정보 및 뉴럴 네트워크의 구조에 기초하여 임의의 매핑 모델의 매핑 파라미터를 계산하고, 계산한 매핑 파라미터에 기초하여 타겟 매핑 모델을 결정할 수 있다. 매핑 파라미터는 임의의 매핑 모델이 달성 가능한 연산 성능 및 임의의 매핑 모델에 요구되는 메모리 접근 크기를 포함할 수 있다.
도 7의 예시는, 연산 강도에 따른 달성 가능한 성능을 나타낼 수 있다. 달성 가능한 성능은 시간 당 FLOPS(FLoating point Operations Per Second)의 단위를 가지고, 연산 강도는 바이트당 FLOPS의 단위를 가질 수 있다. FLOPS는 임의의 연산 장치가 1초 동안 수행할 수 있는 부동소수점 연산의 횟수를 의미할 수 있다.
프로세서(200)는 뉴럴 네트워크의 분할 구조에 기초하여 복수의 프로세싱 엘리먼트(300)의 이용율을 계산하고, 이용율에 기초하여 연산 성능을 계산할 수 있다.
구체적으로, 프로세서(200)는 연산 루프(computation roof) 및 연산 강도에 기초하여 달성 가능한 연산 성능을 계산할 수 있다. 프로세서(200)는 연산 루프를 수학식 1과 같이 계산할 수 있다.
Figure pat00001
수학식 1에서 주파수(frequency)는 수신기가 수신한 주파수를 의미하고, 프로세서(200)는 액티브 프로세싱 엘리먼트(active PEs)를 수학식 2와 같이 계산할 수 있다. 액티브 프로세싱 엘리먼트는 뉴럴 네트워크 연산에 실제로 사용되는 프로세싱 엘리먼트를 의미할 수 있다.
Figure pat00002
여기서, 프로세서(200)는 프로세싱 엘리먼트 이용율(PE utilization)을 수학식 3과 같이 계산할 수 있다.
Figure pat00003
여기서, 프로세서(200)는 연산의 수(number of operation)을 수학식 4와 같이 계산하고, 반복의 수(number of iteration)을 수학식 5와 같이 계산할 수 있다. 프로세싱 엘리먼트의 수(number of PEs)는 수신기가 수신한 값을 의미할 수 있다.
Figure pat00004
Figure pat00005
타일링 팩터(tiling factor) 및 언롤링 팩터(unrolling factor)는 매핑 모델에 기초하여 결정될 수 있다. 구체적으로, 프로세서(200)는 타일링 팩터 초기화(tiling factor initialization), 루프 제거(loop elimination), 루프 교환(loop interchange)를 통한 프루닝(pruning)을 통해 타일링 팩 및 언롤링 팩터에 대한 해 공간(solution space)를 줄이고, 줄어든 해 공간 중에서 최적 값을 타일링 팩터 및 언롤링 팩터로 결정할 수 있다.
프로세서(200)는 연산 강도를 수학식 6과 같이 계산할 수 있다.
Figure pat00006
다시 말해, 프로세서(200)는 전체 연산의 수(number of total operation)을 DRAM 접근 크기(DRAM access size)로 나눔으로써 계산할 수 있다.
최종적으로, 프로세서(200)는 수학식 7과 같이 달성 가능한 연산 성능을 계산할 수 있다.
Figure pat00007
다시 말해, 프로세서(200)는 연산 루프 및 연산강도 곱하기 대역폭 중에서 작은 값을 달성 가능한 연산 성능(또는, 달성 가능한 최대 연산 성능)으로 계산할 수 있다.
이하에서, 프로세서(200)가 메모리 접근 크기를 계산하는 과정을 자세하게 설명한다.
프로세서(200)는 루프 구조에 기초하여 임의의 매핑 모델의 데이터 중복 로드 횟수를 계산하고, 데이터 중복 로드 횟수 및 분할 구조에 기초하여 메모리 접근 크기를 계산할 수 있다. 메모리 접근 크기는 DRAM 접근 크기를 포함할 수 있다. 이하에서는, 프로세서(200)가 DRAM 접근 크기를 계산하는 과정을 설명한다.
이하에서 KW, KH, IW, IH, OW, OH는 각각 커널 너비, 커널 높이, 입력 특징맵 너비, 입력 특징맵 높이, 출력 특징맵 너비, 출력 특징맵 높이를 의미할 수 있다. 또한, 아래 첨자 t, p는 각각 타일링 팩터(tilting factor) 및 언롤링 팩터(unrolling factor)를 나타낼 수 있다.
프로세서(200)는 데이터플로우에 따른 데이터 중복 로드 횟수(number of data reload)를 계산하여 타일링된 데이터의 크기(tiled data size)와 곱함으로써 DRAM 접근 크기를 계산할 수 있다. 즉, 프로세서(200)는 수학식 8과 같이 DRAM 접근 크기를 계산할 수 있다.
Figure pat00008
여기서, 프로세서(200)는 수학식 9, 10, 11과 같이 데이터 중복 로드 횟수를 계산할 수 있다. 데이터 중복 로드 횟수는 입력 데이터 중복 로드 횟수, 가중치 중복 로드 횟수 또는 중간 생성된 출력 데이터 중복 로드 횟수를 포함할 수 있다.
Figure pat00009
Figure pat00010
Figure pat00011
수학식 9는 입력 데이터의 중복 로드 횟수(number of input reload)를 계산하는 과정을 나타내고, 수학식 10은 가중치의 중복 로드 횟수(number of weight reload)를 계산하는 과정을 나타내고, 수학식 11은 중간 생성되는 출력 데이터의 중복 로드 횟수(Number of Psum reload를 나타낼 수 있다.
입력 스테이셔너리 데이터플로우 방식에서 입력 데이터 중복 로드 횟수는 1이고, 가중치 스테이셔너리 데이터플로우 방식에서 가중치 중복 로드 횟수는 1이고, 출력 스테이셔너리 데이터플로우 방식에서 중간 생성되는 출력 데이터의 중복 로드 횟수는 1일 수 있다.
프로세서(200)는 매핑 파라미터의 값을
Figure pat00012
와 같이 계산할 수 있다. 프로세서(200)는 에너지 비용(energy cost) 및 연산의 성능을 고려하기 위해 달성 가능한 성능을 메모리 접근 크기(예를 들어, DRAM 접근 크기)로 나눈 값이 가장 큰 값에 대응하는 매핑 모델을 타겟 매핑 모델로 결정할 수 있다.
프로세서(200)는 상술한 방법과 같이 계산한 달성 가능한 연산 성능 및 메모리 접근 크기에 기초하여 임의의 매핑 모델의 매핑 파라미터를 계산하는 과정을 반복할 수 있다. 프로세서(200)는 반복적으로 계산한 매핑 파라미터 중에서 최대의 매핑 파라미터를 갖는 매핑 모델을 타겟 매핑 모델로 결정할 수 있다.
이하에서, 도 8 내지 도 11을 참조하여 코드 생성 장치(10)가 프루닝을 수행하는 과정을 자세하게 설명한다.
도 8은 오프-칩 루프(off-chip loop)의 구성을 나타내고, 도 9는 프루닝을 위한 타일링 팩터(tiling factor)의 초기화를 나타낸다.
도 10은 프루닝을 위한 루프 제거(loop elimination)을 나타내고, 도 11은 프루닝을 위한 루프 교환(loop interchange)를 나타낸다.
도 8 내지 도 11을 참조하면, 프로세서(200)는 뉴럴 네트워크의 분할 구조 및 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 부적합 매핑 모델을 프루닝할 수 있다.
프로세서(200)는 복수의 프로세싱 엘리먼트의 이용율에 따른 뉴럴 네트워크의 분할 구조에 기초하여 부적합 매핑 모델을 프루닝할 수 있다. 프로세서(200)는 루프 구조의 반복 횟수에 기초하여 부적합 매핑 모델을 프루닝할 수 있다.
상술한 바와 같이, 컨벌루션 연산을 수행할 때, 타일링 팩터와 데이터플로우에 따라 달라지는 부분은 오프-칩 루프 네스트일 수 있다. 도 8은 오프-칩 루프의 구성의 예를 나타낼 수 있다. 도 8의 예시에서, 타일링 크기와 데이터플로우 방식에 따라 루프 순서와 OCt, ICt, OHt 또는 OWt 값이 달라질 수 있다.
프로세서(200)는 루프의 순서와 OCt, ICt, OHt 또는 OWt 값을 변경하면서 달성 가능한 연산 성능과 메모리 접근 크기를 계산할 수 있다. 이 때, 데이터플로우에 따라 고려해야하는 루프 순서의 조합의 개수는 4 X 3 X 2 X 1이고, 타일링 크기의 조합의 개수는 OCt×ICt×OHt×OWt일 수 있다.
예를 들어, 출력 특징맵의 채널의 수가 512이고 입력 특징맵의 채널의 수가 256이고, 출력 특징맵의 너비가 56이고, 출력 특징맵의 높이가 56인 레이어에서 고려해야 하는 조합의 수는 24×512×256×56×56으로 대략 1010일 수 있다.
고려해야하는 조합의 개수가 많아서 모든 매핑 모델에 대한 매핑 파라미터를 계산하는 것은 비효율적이기 때문에, 프로세서(200)는 부적합 매핑 모델을 프루닝함으로써 매핑 파라미터를 계산하는 매핑 모델의 수를 감소시킬 수 있다.
도 9의 예시는, 타일링 팩터를 초기화함으로써 프루닝을 수행하는 과정을 나타낼 수 있다. 프로세서(200)는 하드웨어에 관한 정보에 기초하여 프로세싱 엘리먼트 이용율이 미리 결정된 값 이하인 타일링 크기의 매핑 모델은 부적합 매핑 모델로 결정하여 고려 대상에서 제외시킬 수 있다.
예를 들어, 하드웨어의 구조가 도 4와 같을 경우, OCt 및 ICt,가 프로세싱 엘리먼트 어레이의 너비 또는 높이인 32보다 작으면 주어진 프로세싱 엘리먼트(300)를 모두 활용할 수 없기 때문에, 프로세서(200)는 타일링 크기가 32 보다 작은 값은 제외하고, 32 이상인 타일링 크기를 갖는 매핑 모델에 대해서만 매핑 파라미터를 계산할 수 있다.
다시 말해, 프로세서(200)는 하드웨어 구조에 기초하여 미리 결정된 값 이하의 타일링 크기를 갖는 매핑 모델을 부적합 매핑 모델로 결정하여 제외할 수 있다.
프로세서(200)는 도 10의 예시와 같이, 타일링 크기를 최대화함으로써 매핑 파라미터를 계산하지 않아도 되는 매핑 모델에 대한 프루닝을 수행할 수 있다.
도 10의 예시에서, 프로세서(200)는 메모리(400)의 크기가 허용하는 만큼 타일링 크기를 최대화함으로써 고려해야하는 매핑 모델의 수를 줄일 수 있다.
예를 들어, 도 10의 예시와 같이 OHt 또는 OWt값을 OH 또는 OW 값과 동일한 값으로 설정할 경우, OH, OW 인덱스를 갖는 루프는 반복 횟수가 1이 되기 때문에 해당 루프가 없어지는 효과를 얻을 수 있다.
즉, 프로세서(200)는 임의의 루프에 대한 OHt값을 출력 특징맵의 높이와 동일하게 설정하거나, OWt값을 출력 특징맵의 너비 값과 동일하게 설정함으로써, 임의의 루프의 위치에 관계없이 메모리 접근 크기와 달성 가능한 연산 성능에 영향을 미치지 않도록 함으로써 고려대상에서 제외시킬 수 있다.
프로세서(200)는 도 11의 예시와 같이 루프 교환을 통해 부적합 매핑 모델을 프루닝할 수 있다. 루프문의 가장 안쪽에 있는 루프는 데이터 중복 로드 횟수를 증가시키지 않기 때문에 메모리 접근 크기 및 달성 가능한 연산 성능에 영향을 미치지 않을 수 있다.
따라서, 가장 안쪽에 반복 횟수가 가장 큰 루프를 위치시킴으로써 메모리 접근 크기를 줄일 수 있고, 매핑 파라미터를 계산해야 하는 매핑 모델의 수를 감소시킬 수 있다.
도 11의 예시는 도10 과 같이 루프 제거를 통해 OH, OW 루프를 제거하고, 남은 OC 및 IC 루프 중에서 반복 횟수가 큰 루프인 OC 루프를 안쪽으로 교환한 경우를 나타낼 수 있다.
도 12는 도 1에 도시된 코드 생성 장치가 생성한 코드의 예를 나타낸다.
도 12를 참조하면, 프로세서(200)는 생성한 타겟 매핑 모델에 기초하여 뉴럴 네트워크 연산을 수행하기 위한 코드(code)를 생성할 수 있다.
프로세서(200)는 도 5와 같은 연산을 수행하기 위해 결정된 타겟 매핑 모델에 포함된 데이터플로우 및 타일링 크기에 기초하여 특정한 하드웨어에 최적화된 코드를 생성할 수 있다.
뉴럴 네트워크 연산을 수행하려는 하드웨어가 커스터마이즈(customize)된 가속기일 경우, 프로세서(200)는 데이터 플로우 및 타일링 크기를 참조하기 위해 C 코드를 생성할 수 있고, 하드웨어가 GPU(Graphics Processing Unit)일 경우, CUDA(Compute Unified Device Architecture) 코드를 생성할 수 있다.
프로세서(200)는 뉴럴 네트워크 연산을 수행할 하드웨어에 관한 정보 및 뉴럴 네트워크 구조에 기초하여 하드웨어에 최적화된 코드를 자동으로 생성할 수 있다.
사용자는 코드 생성 장치(10)에 연산을 수행하고자 하는 뉴럴 네트워크를 프레임워크의 형태로 입력하고, 하드웨어 명세 파일을 주어진 포멧에 수치만 변경하여 입력함으로써 하드웨어에 최적화된 코드를 생성할 수 있다.
도 13은 도 1에 도시된 코드 생성 장치의 동작의 순서도를 나타낸다.
도 13을 참조하면, 수신기(100)는 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보를 수신할 수 있다(1310). 수신기(100)는 복수의 프로세싱 엘리먼트의 수, 프로세싱 엘리먼트의 구조, 메모리 대역폭, 주파수 또는 메모리 크기를 수신할 수 있다.
프로세서(200)는 하드웨어에 관한 정보 및 뉴럴 네트워크의 구조에 기초하여 뉴럴 네트워크 연산을 수행하는 복수의 프로세싱 엘리먼트(300)에 뉴럴 네트워크 연산을 매핑하는 타겟 매핑 모델을 생성할 수 있다(1330).
프로세서(200)는 하드웨어에 관한 정보 및 뉴럴 네트워크의 구조에 기초하여 임의의 매핑 모델에 대응하는 매핑 파라미터를 계산할 수 있다.
프로세서(200)는 뉴럴 네트워크의 분할 구조에 기초하여 임의의 매핑 모델이 달성 가능한 연산 성능을 계산할 수 있다. 프로세서(200)는 뉴럴 네트워크의 분할 구조에 기초하여 복수의 프로세싱 엘리먼트(300)의 이용율(utilization)을 계산할 수 있고, 이용율에 기초하여 연산 성능을 계산할 수 있다.
프로세서(200)는 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 임의의 매핑 모델에 요구되는 메모리 접근 크기를 계산할 수 있다. 프로세서(200)는 루프 구조에 기초하여 임의의 매핑 모델의 데이터 중복 로드 횟수를 계산하고, 데이터 중복 로드 횟수 및 분할 구조에 기초하여 메모리 접근 크기를 계산할 수 있다.
프로세서(200)는 달성 가능한 연산 성능 및 메모리 접근 크기에 기초하여 매핑 파라미터를 계산할 수 있다.
프로세서(200)는 매핑 파라미터에 기초하여 타겟 매핑 모델을 결정할 수 있다. 프로세서(200)는 매핑 파라미터가 최대가 되는 임의의 매핑 모델을 타겟 매핑 모델로 결정할 수 있다.
프로세서(200)는 뉴럴 네트워크의 분할 구조 및 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 부적합 매핑 모델(inadequate mapping model)을 프루닝할 수 있다.
프로세서(200)는 복수의 프로세싱 엘리먼트의 이용율에 따른 뉴럴 네트워크의 분할 구조에 기초하여 부적합 매핑 모델을 프루닝할 수 있다. 프로세서(200)는 루프 구조의 반복 횟수에 기초하여 부적합 매핑 모델을 프루닝할 수 있다.
프로세서(200)는 생성된 타겟 매핑 모델에 기초하여 뉴럴 네트워크 연산을 수행하기 위한 코드를 생성할 수 있다(1350).
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 컨트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있으며 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
위에서 설명한 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 또는 복수의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 이를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (20)

  1. 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보를 수신하는 단계;
    상기 정보 및 상기 뉴럴 네트워크의 구조에 기초하여 상기 뉴럴 네트워크 연산을 수행하는 복수의 프로세싱 엘리먼트에 상기 뉴럴 네트워크 연산을 매핑(mapping)하는 타겟 매핑 모델을 생성하는 단계; 및
    상기 타겟 매핑 모델에 기초하여 상기 뉴럴 네트워크 연산을 수행하기 위한 코드(code)를 생성하는 단계
    를 포함하는 코드 생성 방법.
  2. 제1항에 있어서,
    상기 수신하는 단계는,
    상기 복수의 프로세싱 엘리먼트의 수, 상기 프로세싱 엘리먼트의 구조, 메모리 대역폭, 주파수 또는 메모리 크기를 수신하는 단계
    를 포함하는 코드 생성 방법.
  3. 제1항에 있어서,
    상기 타겟 매핑 모델을 생성하는 단계는,
    상기 정보 및 상기 구조에 기초하여 임의의 매핑 모델에 대응하는 매핑 파라미터를 계산하는 단계; 및
    상기 매핑 파라미터에 기초하여 상기 타겟 매핑 모델을 결정하는 단계
    를 포함하는 코드 생성 방법.
  4. 제3항에 있어서,
    상기 매핑 파라미터를 계산하는 단계는,
    상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 임의의 매핑 모델이 달성 가능한 연산 성능을 계산하는 단계;
    상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 상기 임의의 매핑 모델에 요구되는 메모리 접근 크기를 계산하는 단계; 및
    상기 연산 성능 및 상기 메모리 접근 크기에 기초하여 상기 매핑 파라미터를 계산하는 단계
    를 포함하는 코드 생성 방법.
  5. 제4항에 있어서,
    상기 연산 성능을 계산하는 단계는,
    상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 복수의 프로세싱 엘리먼트의 이용율(utilization)을 계산하는 단계; 및
    상기 이용율에 기초하여 상기 연산 성능을 계산하는 단계
    를 포함하는 코드 생성 방법.
  6. 제4항에 있어서,
    상기 메모리 접근 크기를 계산하는 단계는,
    상기 루프 구조에 기초하여 상기 임의의 매핑 모델의 데이터 중복 로드 횟수를 계산하는 단계; 및
    상기 데이터 중복 로드 횟수 및 상기 분할 구조에 기초하여 상기 메모리 접근 크기를 계산하는 단계
    를 포함하는 코드 생성 방법.
  7. 제3항에 있어서,
    상기 매핑 파라미터에 기초하여 타겟 매핑 모델을 생성하는 단계는,
    상기 매핑 파라미터가 최대가 되는 임의의 매핑 모델을 상기 타겟 매핑 모델로 결정하는 단계
    를 포함하는 코드 생성 방법.
  8. 제3항에 있어서,
    상기 타겟 매핑 모델을 생성하는 단계는,
    상기 뉴럴 네트워크의 분할 구조 및 상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 부적합 매핑 모델(inadequate mapping model)을 프루닝하는 단계
    를 더 포함하는 코드 생성 방법.
  9. 제8항에 있어서,
    상기 프루닝하는 단계는,
    상기 복수의 프로세싱 엘리먼트의 이용율에 따른 뉴럴 네트워크의 분할 구조에 기초하여 상기 부적합 매핑 모델을 프루닝하는 단계
    를 포함하는 코드 생성 방법.
  10. 제8항에 있어서,
    상기 프루닝하는 단계는,
    상기 루프 구조의 반복 횟수에 기초하여 상기 부적합 매핑 모델을 프루닝하는 단계
    를 포함하는 코드 생성 방법.
  11. 뉴럴 네트워크 연산을 수행하는 하드웨어에 관한 정보를 수신하는 수신기;
    상기 정보 및 상기 뉴럴 네트워크의 구조에 기초하여 상기 뉴럴 네트워크 연산을 수행하는 복수의 프로세싱 엘리먼트에 상기 뉴럴 네트워크 연산을 매핑하는 타겟 매핑 모델을 생성하고, 상기 타겟 매핑 모델에 기초하여 상기 뉴럴 네트워크 연산을 수행하기 위한 코드를 생성하는 프로세서
    를 포함하는 코드 생성 장치.
  12. 제11항에 있어서,
    상기 수신기는,
    상기 복수의 프로세싱 엘리먼트의 수, 상기 프로세싱 엘리먼트의 구조, 메모리 대역폭, 주파수 또는 메모리 크기를 수신하는
    코드 생성 장치.
  13. 제11항에 있어서,
    상기 프로세서는,
    상기 정보 및 상기 구조에 기초하여 임의의 매핑 모델에 대응하는 매핑 파라미터를 계산하고,
    상기 매핑 파라미터에 기초하여 상기 타겟 매핑 모델을 결정하는
    코드 생성 장치.
  14. 제13항에 있어서,
    상기 프로세서는,
    상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 임의의 매핑 모델이 달성 가능한 연산 성능을 계산하고,
    상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 상기 임의의 매핑 모델에 요구되는 메모리 접근 크기를 계산하고,
    상기 연산 성능 및 상기 메모리 접근 크기에 기초하여 상기 매핑 파라미터를 계산하는
    코드 생성 장치.
  15. 제14항에 있어서,
    상기 프로세서는,
    상기 뉴럴 네트워크의 분할 구조에 기초하여 상기 복수의 프로세싱 엘리먼트의 이용율(utilization)을 계산하고,
    상기 이용율에 기초하여 상기 연산 성능을 계산하는
    코드 생성 장치.
  16. 제14항에 있어서,
    상기 프로세서는,
    상기 루프 구조에 기초하여 상기 임의의 매핑 모델의 데이터 중복 로드 횟수를 계산하고,
    상기 데이터 중복 로드 횟수 및 상기 분할 구조에 기초하여 상기 메모리 접근 크기를 계산하는
    코드 생성 장치.
  17. 제13항에 있어서,
    상기 프로세서는,
    상기 매핑 파라미터가 최대가 되는 임의의 매핑 모델을 상기 타겟 매핑 모델로 결정하는
    코드 생성 장치.
  18. 제13항에 있어서,
    상기 프로세서는,
    상기 뉴럴 네트워크의 분할 구조 및 상기 뉴럴 네트워크 연산에 포함된 루프 구조에 기초하여 부적합 매핑 모델을 프루닝하는
    코드 생성 장치.
  19. 제18항에 있어서,
    상기 프로세서는,
    상기 복수의 프로세싱 엘리먼트의 이용율에 따른 뉴럴 네트워크의 분할 구조에 기초하여 상기 부적합 매핑 모델을 프루닝하는
    코드 생성 장치.
  20. 제18항에 있어서,
    상기 프로세서는,
    상기 루프 구조의 반복 횟수에 기초하여 상기 부적합 매핑 모델을 프루닝하는
    코드 생성 장치.
KR1020200137442A 2020-03-05 2020-10-22 뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치 KR20210113004A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US17/190,832 US20210279587A1 (en) 2020-03-05 2021-03-03 Method and apparatus for neural network code generation
CN202110235821.3A CN113361704A (zh) 2020-03-05 2021-03-03 用于神经网络代码生成的方法和设备

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US202062985470P 2020-03-05 2020-03-05
US62/985,470 2020-03-05

Publications (1)

Publication Number Publication Date
KR20210113004A true KR20210113004A (ko) 2021-09-15

Family

ID=77793475

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200137442A KR20210113004A (ko) 2020-03-05 2020-10-22 뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치

Country Status (1)

Country Link
KR (1) KR20210113004A (ko)

Similar Documents

Publication Publication Date Title
KR20210015685A (ko) 이종 컴퓨팅 플랫폼에서 뉴럴 네트워크 모델을 구현하는 방법 및 이를 수행하는 장치
KR20220013896A (ko) 프로세서의 신경망 아키텍처를 결정하기 위한 방법 및 장치
US11803733B2 (en) Method for implementing neural network model in heterogeneous computing platform and apparatus for performing the same
KR20210113004A (ko) 뉴럴 네트워크 연산을 위한 코드 생성 방법 및 장치
KR102607993B1 (ko) 양자화를 이용한 뉴럴 네트워크 연산 방법 및 장치
KR20220096466A (ko) 뉴럴 네트워크 연산을 위한 메모리 관리 방법 및 장치
KR20220124979A (ko) 뉴럴 네트워크 연산 장치 및 방법
US20220261644A1 (en) Method and apparatus for generating task plan based on neural network
US20220253682A1 (en) Processor, method of operating the processor, and electronic device including the same
US20210279587A1 (en) Method and apparatus for neural network code generation
CN115708101A (zh) 预测半导体装置的特性的方法和执行该方法的计算装置
KR20210100335A (ko) 멀티 디바이스 기반 추론 방법 및 장치
KR20210091947A (ko) 뉴럴 네트워크 모델의 분산 처리 방법 및 장치
KR102614909B1 (ko) 희소화를 이용한 뉴럴 네트워크 연산 방법 및 장치
KR102626850B1 (ko) 뉴럴 네트워크 기반 에너지 하베스팅 방법 및 시스템
KR20240023919A (ko) 컴퓨팅 시스템의 성능 모델링 장치 및 방법
KR20220046963A (ko) 뉴럴 네트워크 연산 방법 및 장치
KR20230041450A (ko) 뉴럴 네트워크 연산 방법 및 장치
KR102547997B1 (ko) 효율적인 메모리 접근 방식을 이용한 뉴럴 네트워크 연산 가속 방법 및 장치
KR20220121334A (ko) 뉴럴 네트워크 연산 방법 및 장치
JP7431263B2 (ja) ニューラルネットワーク演算方法及び装置
KR20230063519A (ko) 뉴럴 네트워크 연산 장치 및 방법
US20220284299A1 (en) Method and apparatus with neural network operation using sparsification
KR20220032869A (ko) 뉴럴 네트워크 연산 방법 및 장치
KR20230068864A (ko) 뉴럴 네트워크 연산 장치 및 방법