KR20200110092A - 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치 - Google Patents

복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치 Download PDF

Info

Publication number
KR20200110092A
KR20200110092A KR1020190030203A KR20190030203A KR20200110092A KR 20200110092 A KR20200110092 A KR 20200110092A KR 1020190030203 A KR1020190030203 A KR 1020190030203A KR 20190030203 A KR20190030203 A KR 20190030203A KR 20200110092 A KR20200110092 A KR 20200110092A
Authority
KR
South Korea
Prior art keywords
neural network
npu
modules
accelerator
neuromorphic
Prior art date
Application number
KR1020190030203A
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 KR1020190030203A priority Critical patent/KR20200110092A/ko
Publication of KR20200110092A publication Critical patent/KR20200110092A/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/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
    • 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

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)
  • Advance Control (AREA)

Abstract

본 발명의 실시 예에 따른 전자 장치는 복수의 NPU들 및 적어도 하나의 응용 프로그램의 뉴럴 네트워크를 복수의 NPU들 중 NPU에 할당하도록 구성되는 메인 CPU를 포함하되, 뉴럴 네트워크가 할당된 NPU는 복수의 모듈들을 포함하는 가속기 및 뉴럴 네트워크를 복수의 모듈들 중 적어도 하나의 모듈에 할당하도록 구성되는 뉴로모픽 CPU를 포함한다.

Description

복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치{ELECTRONIC DEVICE FOR EXECUTING A PLURALIRY OF NEURAL NETWORKS}
본 발명은 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치에 관한 것이다.
생물학적인 뉴럴 네트워크와 유사한 인공 뉴럴 네트워크(artificial neural network; ANN)에 기반하는 인공지능 기술이 이미지 인식, 음성 인식, 번역, 검색, 딥러닝, 데이터 수집 및 분석, 자율 주행 등과 같은 다양한 분야에서 사용되고 있다. 그러나, 범용 CPU(Central Processing Unit)는 뉴럴 네트워크를 실행하는데 필요한 대량의 데이터 처리에 적합하지 않을 수 있고, 이미지 처리를 위한 GPU(Graphical Processing Unit)가 뉴럴 네트워크를 실행하는데 사용될 수 있으나, 뉴런 집적도 대비 전력 효율이 높고 인공지능 연산을 담당하는 NPU(Neuromorphic Processing Unit)가 뉴럴 네트워크를 실행하는데 주로 사용되고 있다.
인공지능 기술이 발전함에 따라 다중 뉴럴 네트워크들을 실행하는 것이 요구되며, 이에 NPU 내에 집적되는 뉴런들의 개수가 증가하고 NPU 내 가속기의 연산 능력도 증가하고 있다. 따라서, 한정된 하드웨어 자원을 효율적으로 활용하여 다중 뉴럴 네트워크들을 실행하는 NPU가 필요하다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치를 제공할 수 있다.
본 발명의 실시 예에 따른 전자 장치는 복수의 NPU들 및 적어도 하나의 응용 프로그램의 뉴럴 네트워크를 복수의 NPU들 중 NPU에 할당하도록 구성되는 메인 CPU를 포함하되, 뉴럴 네트워크가 할당된 NPU는 복수의 모듈들을 포함하는 가속기 및 뉴럴 네트워크를 복수의 모듈들 중 적어도 하나의 모듈에 할당하도록 구성되는 뉴로모픽 CPU를 포함한다.
본 발명의 다른 실시 예에 따른 전자 장치는 복수의 모듈들을 포함하는 가속기 및 상기 가속기를 제어하도록 구성되는 뉴로모픽 CPU를 포함하는 NPU 및 복수의 뉴럴 네트워크들을 NPU에 할당하도록 구성되는 메인 CPU를 포함하되, 뉴로모픽 CPU는 복수의 뉴럴 네트워크들 중 제 1 뉴럴 네트워크를 복수의 모듈들 중 제 1 모듈들에 할당하고 그리고 복수의 뉴럴 네트워크들 중 제 2 뉴럴 네트워크를 복수의 모듈들 중 제 2 모듈들에 할당하도록 구성되는 스케줄러를 실행하도록 더 구성된다.
본 발명의 실시 예에 따른 전자 장치는 뉴럴 네트워크와 NPU 간의 친화도 및 NPU 내 가속기의 자원 이용률에 기초하여 복수의 뉴럴 네트워크들을 병렬로 실행할 수 있다. 이에, NPU 내 가속기의 자원 이용률이 증가하고 응용 프로그램의 성능이 향상될 수 있다.
도 1은 본 발명의 실시 예에 따른 전자 장치의 블록도를 예시적으로 도시한다.
도 2는 도 1의 뉴럴 네트워크를 예시적으로 도시한다.
도 3a 내지 도 3d는 도 1의 재구성 가능한 가속기의 블록도들을 예시적으로 도시한다.
도 4는 도 1의 전자 장치가 복수의 뉴럴 네트워크들을 할당하고 처리하는 동작을 예시적으로 도시한다.
도 5는 도 4의 NPU 스케줄러의 동작의 순서도를 예시적으로 도시한다.
도 6은 도 4의 NPU 스케줄러가 도 5의 S120 및 S130 단계들에 따라 NPU를 선택하는 동작을 예시적으로 도시한다.
도 7은 도 4의 가속기 스케줄러의 동작의 순서도를 예시적으로 도시한다.
도 8은 도 4의 가속기 스케줄러가 도 7의 S210 내지 S240 단계들에 따라 뉴럴 네트워크를 가속기에 할당하는 동작을 예시적으로 도시한다.
아래에서는, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 쉽게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 발명의 실시 예에 따른 전자 장치의 블록도를 예시적으로 도시한다. 전자 장치(100)는 생물학적인 뉴럴 네트워크와 유사한 인공 뉴럴 네트워크(artificial neural network; ANN)를 포함하는 응용 프로그램을 저장하고 실행할 수 있다. 전자 장치(100)는 예를 들어, 컴퓨팅 장치, 컴퓨터, 서버, 임베디드(embedded) 장치, 임베디드 보드, 반도체 장치, 모바일 장치, ASIC(Application Specific Integrated Circuit), FPGA(Field Programmable Gate Array), SoC(System on Chip), AP(Application Processor) 등일 수 있다. 전자 장치(100)에 의해 실행될 수 있는 도 1의 응용 프로그램은 이미지 인식, 음성 인식, 번역, 검색, 딥러닝, 데이터 수집 및 분석, 자율 주행 등과 같은 다양한 인공지능 응용들을 위한 것일 수 있다.
예를 들어, 응용 프로그램은 사용자에 의해 Python, Java 등과 같은 다양한 프로그래밍 언어들에 기초하여 작성될 수 있다. 응용 프로그램은 Pytorch, Caffe, Tensorflow 등과 같은 딥러닝 프레임워크 또는 SparkML, Python ML 패키지 등과 같은 머신러닝 라이브러리를 이용하여 작성될 수 있다. 실행 변환기는 응용 프로그램 파일을 기계어로 변환할 수 있는 컴파일러(compiler), 운영체제(OS)로부터 응용 프로그램 파일을 읽을 수 있는 로더(loader) 등을 포함할 수 있다. 전자 장치(100)는 딥러닝 프레임워크 및 실행 변환기에 기초하여 생성된 응용 프로그램을 실행할 수 있다. 전자 장치(100)는 메인 CPU(Main Central Processing Unit; 110), 메인 메모리(Main Memory; 120), NPU(Neuromorphic Processing Unit 또는 Neural Processing Unit; 130), 및 버스(140)를 포함할 수 있다.
메인 CPU(110)는 전자 장치(100)의 전반적인 동작을 제어할 수 있다. 메인 CPU(110)는 하나 이상의 응용 프로그램(들)(적어도 하나의 응용 프로그램)을 메인 메모리(120)에 로드하고 실행할 수 있다. 메인 CPU(110)는 응용 프로그램을 실행하기 위한 하드웨어 구성 요소들을 포함할 수 있다. 예를 들어, 메인 CPU(110)는 응용 프로그램의 명령어들을 인출(fetch)하는 인출 회로, 명령어들을 저장하는 레지스터들, 그리고 산술 연산, 논리 연산, 또는 쉬프트(shift) 연산 등을 실행하는 ALU(Arithmetic Logic Unit) 등을 포함할 수 있다. 메인 CPU(110)는 아날로그 회로, 디지털 회로, 논리 회로, 플립-플롭(flip-flop) 등을 이용하여 하드웨어 방식으로 구현될 수 있다. 메인 CPU(110)는 하나 이상일 수 있다.
메인 CPU(110)는 응용 프로그램의 명령어들 중 뉴럴 네트워크와 관련된 명령어들을 제외한 일반적인 명령어들(CPU 테스크(CPU Task))을 실행하고 처리할 수 있다. 메인 CPU(110)는 NPU(130)가 뉴럴 네트워크와 관련된 명령어들을 실행하고 처리하도록 NPU(130)를 제어할 수 있다. 메인 CPU(110)는 적어도 하나의 응용 프로그램을 실행하면서, 적어도 하나의 응용 프로그램에 포함된 뉴럴 네트워크를 NPU(130)에 할당할 수 있다.
여기서, 하나의 응용 프로그램은 하나의 뉴럴 네트워크를 포함할 수 있거나 복수의 뉴럴 네트워크들을 포함할 수 있다. 메인 CPU(110)는 복수의 뉴럴 네트워크들을 하나의 NPU(130)에 할당할 수 있거나 복수의 뉴럴 네트워크들을 복수의 NPU들(130)에 할당할 수 있다. 어느 경우든, 메인 CPU(110)는 적어도 하나의 NPU(130)를 이용하여 복수의 뉴럴 네트워크들을 병렬로 실행할 수 있다.
메인 메모리(120)는 메인 CPU(110)와 통신할 수 있다. 메인 메모리(120)는 메인 CPU(110)의 제어에 따라 하나 이상의 응용 프로그램(들), 메인 CPU(110)에 의한 응용 프로그램의 실행 결과, NPU(130)에 의한 응용 프로그램의 실행 결과 등을 저장할 수 있다. 예를 들어, 메인 메모리(120)는 SRAM(Static Random Access Memory), DRAM(Dynamic Random Access Memory) 등과 같은 휘발성 메모리 또는 낸드 플래시 메모리, 노어 플래시 메모리, RRAM(Resistive Random Access Memory), FRAM(Ferroelectric Random Access Memory), PRAM(Phase Change Random Access Memory), MRAM(Magnetic Random Access Memory) 등과 같은 불휘발성 메모리를 포함할 수 있으나, 본 발명의 범위는 이에 한정되지 않는다.
실시 예에 있어서, 도시되진 않았으나, 전자 장치(100)는 메인 메모리(120)와 다른 보조 메모리를 더 포함하거나 외부의 보조 메모리와 더 통신할 수 있다. 보조 메모리는 메인 메모리(120)에 저장된 데이터를 저장하고 백업하는데 사용될 수 있다. 예를 들어, 보조 메모리는 SSD(Solid State Drive), HDD(Hard Disk Drive), 메모리 카드 등을 포함할 수 있다.
NPU(130)는 메인 CPU(110)에 대한 코프로세서(coprocessor)와 유사하게, 메인 CPU(110)의 제어에 기초하여 응용 프로그램에 포함된 뉴럴 네트워크를 실행할 수 있다. NPU(130)는 인공지능 응용들을 위해 설계된 전용의 하드웨어 장치(프로세서, 회로, TPU(Tensor Processing Unit) 등)일 수 있다. NPU(130)는 뉴럴 네트워크의 매트릭스 연산, 벡터 연산, 컨볼루션(convolution) 연산, MAC(Multiply-Accumulate) 연산, 활성화(Activation) 연산, 정규화(Normalization) 연산, 풀링(Pooling) 연산, 딥러닝 연산, 추론 연산 등을 실행할 수 있다. 전자 장치(100)는 하나 이상의 NPU들(130)을 포함할 수 있다. 복수의 NPU들(130) 각각은 메인 CPU(110)로부터 할당된 복수의 뉴럴 네트워크들을 병렬로 실행할 수 있다.
NPU(130)는 뉴로모픽 CPU(N-CPU; 131), 뉴로모픽 메모리(N-메모리; 132), 및 가속기(133)를 포함할 수 있다. 뉴로모픽 CPU(131)와 뉴로모픽 메모리(132)는 뉴럴 CPU 및 뉴럴 메모리로도 각각 지칭될 수 있다. 뉴로모픽 CPU(131)와 뉴로모픽 메모리(132)는 메인 CPU(110)와 메인 메모리(120)와 별개로 NPU(130) 내에서 하드웨어 방식으로 구현될 수 있다. 뉴로모픽 CPU(131)는 메인 CPU(110)와 유사한 CPU일 수 있고 NPU(130) 내에 포함될 수 있다. 뉴로모픽 CPU(131)는 NPU(130)로 할당, 입력, 또는 제공되는 복수의 뉴럴 네트워크들을 관리하기 위한 회로를 포함할 수 있다.
또는, 뉴로모픽 CPU(131)는 NPU(130)의 가속기(133)를 관리하고 제어하는 소프트웨어 프로그램을 실행할 수 있다. 뉴로모픽 CPU(131)는 이 소프트웨어 프로그램을 실행함으로써, NPU(130)로 할당되는 복수의 뉴럴 네트워크들을 가속기(133)에 할당할 수 있다. 뉴로모픽 메모리(132)는 뉴로모픽 CPU(131)의 제어에 따라 가속기(133)를 관리하고 제어하는 소프트웨어 프로그램, 가속기(133)의 정보, 뉴럴 네트워크들의 정보 등을 저장할 수 있다. 뉴로모픽 메모리(132)는 전술한 휘발성 메모리 또는 불휘발성 메모리를 포함할 수 있다.
가속기(133)는 뉴럴 네트워크의 연산을 실행하기 위한 뉴럴 네트워크의 복수의 뉴런들을 포함할 수 있다. 전술한대로 뉴럴 네트워크의 연산은 매트릭스 연산, 벡터 연산, 컨볼루션 연산, MAC 연산, 활성화 연산, 노멀라이제이션 연산, 풀링 연산, 딥러닝 연산, 추론 연산 등일 수 있다. 복수의 뉴런들 각각은 다른 뉴런들로부터 입력 신호들을 수신하고, 입력된 신호들에 기초하여 출력 신호를 생성하고, 그리고 출력 신호를 다른 뉴런으로 전송할 수 있다. 복수의 뉴런들 각각은 PE(Processing Element)일 수 있다. 복수의 뉴런들은 시스톨릭 어레이(Systolic Array)의 형태로 배열될 수 있고 시스톨릭 어레이를 구성할 수 있다. 가속기(133)는 뉴로모픽 CPU(131)의 제어에 따라 복수의 뉴럴 네트워크들을 병렬로 실행할 수 있다.
버스(140)는 메인 CPU(110), 메인 메모리(120), 및 NPU(130) 간의 통신에 사용되는 물리적인 경로들을 포함할 수 있다. 버스(140)는 사전에 정의된 메인 CPU(110), 메인 메모리(120), 및 NPU(130) 간의 규약에 따라 정의되는 신호들을 전송하는데 사용될 수 있다.
도 2는 도 1의 뉴럴 네트워크를 예시적으로 도시한다. 응용 프로그램에 포함되는 뉴럴 네트워크는 복수의 뉴런들을 포함할 수 있다. 복수의 뉴런들은 복수의 레이어들(도 2를 참조하면, 제 1 내지 제 K 레이어들, K는 1 이상의 정수)을 구성할 수 있다.
제 1 레이어는 입력 레이어에 해당하고 제 1 레이어의 뉴런들은 입력 데이터를 수신하고 제 2 레이어의 뉴런들로 데이터를 전송할 수 있다. 제 2 내지 제 K-1 레이어들 각각은 히든(hidden) 레이어에 해당할 수 있다. 제 2 내지 제 K-1 레이어들 각각의 뉴런들은 이전 레이어로부터 데이터를 수신하고 다음 레이어로 데이터를 전송할 수 있다. 제 K 레이어는 출력 어레이에 해당하고 제 K 레이어의 뉴런들은 출력 데이터를 생성할 수 있다. 예를 들어, 뉴런들 각각은 뉴런들 간의 시냅스들의 강도들을 나타내는 가중치들, 그리고 바이어스들에 기초하여 수신된 데이터를 처리하고 다른 뉴런으로 데이터를 전송할 수 있다.
도 3a 내지 도 3d는 도 1의 재구성 가능한 가속기의 블록도들을 예시적으로 도시한다. 도 3a 내지 도 3d의 가속기들(133a~133d) 각각은 도 1의 가속기(133)에 해당한다. 예를 들어, 가속기(133)는 뉴로모픽 CPU(131)의 제어에 따라 가속기들(133a~133d)로 재구성될 수 있다. 가속기들(133a~133d) 각각은 복수의 뉴런들(134)을 포함할 수 있다. 도 3a 내지 도 3d에서, 복수의 뉴런들(134)이 8 X 8 시스톨릭 어레이에 따라 배열된 것으로 도시되었으나, 시스톨릭 어레이의 크기는 N X N (N은 1 이상의 정수) 또는 M X N (M은 1 이상의 정수이고 N과 동일하거나 상이함)일 수 있고 그리고 복수의 뉴런들(134)의 개수는 이에 한정되지 않는다. 또한, 복수의 뉴런들(134)는 2차원의 평면에서 배열되거나 혹은 3차원의 공간에서 배열될 수도 있다.
복수의 뉴런들(134) 각각은 뉴럴 네트워크의 연산을 위해 곱셈기, 덧셈기, 뺄샘기, 레지스터, 플립 플롭, 논리 회로, 아날로그 회로, 디지털 회로 등을 포함할 수 있고 하드웨어 방식으로 구현될 수 있다. 복수의 뉴런들(134) 각각은 인접 뉴런들 또는 버퍼 메모리(136a~136d)로부터 데이터를 수신하고, 수신된 데이터를 처리하고, 그리고 처리된 데이터를 인접 뉴런들로 출력할 수 있다.
도 3a를 참조하면, 복수의 뉴런들(134)은 16개의 복수의 모듈들(135a)로 분할될 수 있다. 복수의 모듈들(135a) 각각의 크기는 2 X 2일 수 있다. 도 3b를 참조하면, 복수의 뉴런들(134)은 4개의 복수의 모듈들(135b)로 분할될 수 있다. 복수의 모듈들(135b) 각각의 크기는 4 X 4일 수 있다. 도 3c를 참조하면, 복수의 뉴런들(134)은 8개의 복수의 모듈들(135a)과 2개의 복수의 모듈들(135b)로 분할될 수 있다. 도 3d를 참조하면, 복수의 뉴런들(134)은 하나의 모듈(135d)을 구성할 수도 있다. 모듈(135d)의 크기는 시스톨릭 어레이의 크기와 동일한 8 X 8일 수 있다.
모듈들(135a, 135b, 135d) 각각은 서브 모듈 또는 서브 가속기로도 지칭될 수 있다. 모듈들(135a, 135b, 135d) 각각은 뉴럴 네트워크를 실행할 수 있다. 도 3a의 16개의 복수의 모듈들(135a)은 16개의 복수의 뉴럴 네트워크들을 병렬로 실행할 수 있다. 도 3b의 4개의 복수의 모듈들(135b)은 4개의 복수의 뉴럴 네트워크들을 병렬로 실행할 수 있다. 도 3c의 8개의 복수의 모듈들(135c)과 2개의 복수의 모듈들(135b)은 10개의 복수의 뉴럴 네트워크들을 병렬로 실행할 수 있다. 도 3d의 하나의 모듈(135d)은 하나의 뉴럴 네트워크를 실행할 수 있다. 모듈의 크기는 도 3a 내지 도 3d에 도시된 것에 한정되지 않으며, I X J (I는 1 이상 M 이하의 정수, J는 1 이상 N 이하의 정수이고 I와 동일하거나 상이함)일 수 있다.
뉴로모픽 CPU(131)는 복수의 뉴럴 네트워크들 각각을 실행하는데 필요한 복수의 뉴런들(134)의 개수에 따라 복수의 뉴런들(134)을 하나 이상의 모듈들(135a, 135b, 135d)로 재구성할 수 있고 NPU(130)의 가속기(133)는 뉴로모픽 CPU(131)에 의해 재구성되는 하나 이상의 모듈들(135a, 135b, 135d)을 포함할 수 있다. 복수의 뉴런들(134)은 도 3a의 도시와 같이 서로 동일한 크기를 갖는 복수의 모듈들(135a)로 또는 도 3b의 도시와 같이 서로 동일한 크기를 갖는 복수의 모듈들(135b)로 분할될 수 있다. 또는, 복수의 뉴런들(134)은 도 3c의 도시와 같이 서로 상이한 크기들을 갖는 복수의 모듈들(135a, 135b)로 분할될 수도 있다. 뉴로모픽 CPU(131)는 뉴럴 네트워크를 가속기(133)의 적어도 하나의 모듈(135a, 135b, 135d)에 할당할 수 있다.
가속기들(133a~133d)은 버퍼 메모리들(136a~136d)을 각각 포함할 수 있다. 버퍼 메모리들(136a~136d) 각각은 하나 이상의 뉴럴 네트워크들을 실행하기 위해 복수의 뉴런들(134)로 입력되는 데이터를 저장할 수 있다. 버퍼 메모리들(136a~136d) 각각은 복수의 뉴런들(134)을 통해 처리된 데이터를 저장할 수 있다. 버퍼 메모리들(136a~136d) 각각은 복수의 뉴런들(134)과 인접하게 배치될 수 있다.
실시 예에 있어서, 도 3a 내지 도 3d에서 도시된대로, 가속기들(133a~133d) 각각은 버퍼 메모리들(136a~136d) 각각과 그리고 버퍼 메모리들(136a~136d) 각각과 인접하게 배치되는 뉴런들(134) 간에 데이터 또는 신호를 전송하기 위한 제어 경로들을 포함할 수 있다. 가속기들(133a~133d) 각각은 뉴런들(134) 간에 데이터 또는 신호를 전송하기 위한 제어 경로들을 포함할 수 있다.
도시되진 않았으나, 가속기들(133a~133d)은 뉴로모픽 CPU(131)의 제어에 따라 모듈들(135a, 135b, 135d)을 선택하기 위한 제어 경로들을 더 포함할 수 있다. 예를 들어, 가속기(133)는 사전에 정의된 가장 작은 크기의 모듈의 크기를 기준으로, 16개의 복수의 모듈들(135a)을 각각 선택하기 위한 제어 경로들을 포함할 수 있다. 가속기(133a)는 16개의 복수의 모듈들(135a)을 각각 선택하기 위한 제어 경로들을 포함할 수 있다. 가속기(133b)도 16개의 복수의 모듈들(135a)을 각각 선택하기 위한 제어 경로들을 포함하고 그리고 4개의 모듈들(135a)을 선택하기 위한 제어 경로를 통해 1개의 모듈(135b)을 선택할 수 있다. 가속기(133c)도 16개의 복수의 모듈들(135a)을 각각 선택하기 위한 제어 경로들을 포함하고 그리고 4개의 모듈들(135a)을 선택하기 위한 제어 경로를 통해 1개의 모듈(135b)을 선택할 수 있다. 가속기(133d)도 16개의 복수의 모듈들(135a)을 각각 선택하기 위한 제어 경로들을 포함하고 그리고 16개의 모듈들(135a)을 선택하기 위한 제어 경로를 통해 1개의 모듈(135d)을 선택할 수 있다.
뉴로모픽 CPU(131)는 가속기(133)의 제어 경로들을 통해 복수의 모듈들(135a) 중 적어도 하나를 선택함으로써 가속기(133)를 가속기들(133a, 133b, 133c, 133d)로 재구성할 수 있다. 가속기(133)가 재구성되는 예시들은 도 3a 내지 도 3d에서 도시된 것으로 한정되지 않는다.
도 4는 도 1의 전자 장치가 복수의 뉴럴 네트워크들을 할당하고 처리하는 동작을 예시적으로 도시한다. 도 4에서 도시 및 설명의 편의를 위해 전자 장치(100)의 메인 CPU(110)와 1개의 NPU(130)만이 예시적으로 도시되었고 전자 장치(100)가 하나 이상의 응용 프로그램들을 실행함에 따라 5개의 뉴럴 네트워크들(NN1~NN5)을 실행하는 것으로 가정하였으나, 본 발명의 범위는 이에 한정되지 않는다.
메인 CPU(110)는 NPU 스케줄러(111)를 실행하거나, 구현하거나, 또는 포함할 수 있다. NPU 스케줄러(111)는 복수의 뉴럴 네트워크들을 수신 및 저장하는 큐(Queue)를 관리하거나 포함할 수 있다. 큐는 순환 버퍼일 수 있고, 레지스터, 저장 소자, 메모리 등을 이용하여 구현될 수 있다. 예를 들어, NPU 스케줄러(111)의 큐는 메인 CPU(110) 또는 메인 메모리(120)에서 구현될 수 있다. 큐는 복수의 뉴럴 네트워크들을 실행하기 위한 정보 또는 데이터(예를 들면, 뉴럴 네트워크의 입력 데이터, 가중치들, 바이어스들, 출력 데이터, 제어 정보 등이 저장되는 메모리의 주소 정보, 뉴럴 네트워크를 식별하기 위한 정보 등)를 저장할 수 있다. NPU 스케줄러(111)는 큐에 저장된 복수의 뉴럴 네트워크들을 복수의 NPU들로 할당할 수 있다. 예를 들어, NPU 스케줄러(111)는 FIFO(First In, First Out) 방식으로 하나의 뉴럴 네트워크를 복수의 NPU들 중 어느 하나에 할당할 수 있다.
예를 들어, NPU 스케줄러(111)는 하드웨어 방식으로 메인 CPU(110) 내에서 구현될 수 있다. 다른 예를 들어, NPU 스케줄러(111)는 메인 메모리(120)에 저장 및 로드되고 그리고 메인 CPU(110)에 의해 실행되는 프로그램 코드 내의 소프트웨어 구성 요소일 수 있다. 어느 경우든, NPU 스케줄러(111)는 뉴럴 네트워크를 복수의 NPU들 중 어느 하나에 할당할지 결정할 수 있다. 또한, NPU 스케줄러(111)는 뉴럴 네트워크가 NPU에 할당되는 시점을 결정할 수 있다. 도 4에서, NPU 스케줄러(111)는 5개의 뉴럴 네트워크들(NN1~NN5) 중 3개의 뉴럴 네트워크들(NN1~NN3)을 NPU(130)에 할당할 수 있고 나머지 2개의 뉴럴 네트워크들(NN4, NN5)은 다른 NPU(미도시; NPU(130)와 동일하게 구현)에 할당할 수 있다. 물론, NPU 스케줄러(111)에 의해 NPU(130)로 할당된 뉴럴 네트워크들의 개수는 이에 한정되지 않는다.
뉴로모픽 CPU(131)는 가속기 스케줄러(137), 가속기 메모리 관리자(138), 및 검증 관리자(139)를 포함할 수 있다. 예를 들어, 가속기 스케줄러(137), 가속기 메모리 관리자(138), 및 검증 관리자(139) 각각은 하드웨어 방식으로 뉴로모픽 CPU(131) 내에서 구현될 수 있다. 다른 예를 들어, 가속기 스케줄러(137), 가속기 메모리 관리자(138), 및 검증 관리자(139) 각각은 뉴로모픽 메모리(132)에 저장 및 로드되고 그리고 뉴로모픽 CPU(131)에 의해 실행되는 프로그램 코드 내의 소프트웨어 구성 요소일 수 있다.
가속기 스케줄러(137)는 NPU 스케줄러(111)와 유사하게 복수의 뉴럴 네트워크들을 수신 및 저장하는 큐를 포함할 수 있다. 큐는 뉴로모픽 CPU(131) 또는 뉴로모픽 메모리(132) 내에서 구현될 수 있다. 가속기 스케줄러(137)는 큐에 저장된 복수의 뉴럴 네트워크들을 가속기(133)에 할당할 수 있다. 예를 들어, 가속기 스케줄러(137)는 FIFO 방식으로 하나의 뉴럴 네트워크를 가속기(133a, 133b, 133c)의 복수의 모듈들(135a, 135b) 중 어느 하나에 또는 가속기(133d)의 모듈(135d)에 할당할 수 있다. 또한, 가속기 스케줄러(137)는 뉴럴 네트워크가 모듈에 할당되는 시점을 결정할 수 있다. 가속기 스케줄러(137)는 3개의 뉴럴 네트워크들(NN1~NN3)을 가속기(133)에 할당할 수 있고 그리고 가속기(133)는 3개의 뉴럴 네트워크들(NN1~NN3)을 병렬로 또는 동시에 실행할 수 있다. 복수의 모듈들(135a, 135b, 135d)은 가속기 스케줄러(137)에 의해 공유될 수 있다.
가속기 메모리 관리자(138)는 뉴럴 네트워크를 저장하는 공간을 확보할 수 있다. 가속기 메모리 관리자(138)는 뉴럴 네트워크의 입력 데이터, 가중치들, 바이어스들, 출력 데이터 등을 저장하기 위한 뉴로모픽 메모리(132)의 공간을 확보할 수 있다. 가속기 메모리 관리자(138)는 가속기 스케줄러(137)의 큐를 저장하기 위한 뉴로모픽 메모리(132)의 공간을 확보할 수 있다. 예를 들어, 가속기 스케줄러(137)는 가속기 메모리 관리자(138)가 뉴럴 네트워크를 저장하는 공간을 확보하지 못하면 그 뉴럴 네트워크를 가속기(133)에 할당하지 않고 다른 뉴럴 네트워크를 가속기(133)에 할당할 수 있다. 가속기 스케줄러(137)는 가속기 메모리 관리자(138)에 의해 뉴럴 네트워크를 저장하는 공간이 확보된 이후에 또는 뉴로모픽 메모리(132)에 뉴럴 네트워크를 실행하는데 필요한 공간이 존재하면, 그 뉴럴 네트워크를 가속기(133)에 할당할 수 있다.
검증 관리자(139)는 가속기 스케줄러(137)로 입력된 복수의 뉴럴 네트워크들과 복수의 뉴럴 네트워크들과 관련된 데이터(입력 데이터, 가중치들, 바이어스들 등)가 승인된 것인지 또는 유효한 것인지 여부를 판별할 수 있다. 검증 관리자(139)가 뉴럴 네트워크 또는 뉴럴 네트워크와 관련된 데이터가 승인되지 않은 것으로 판별하면, 가속기 스케줄러(137)는 그 뉴럴 네트워크를 더 이상 큐에 저장하지 않을 수 있다. 예를 들어, 검증 관리자(139)는 MAC(Message Authentication Code) 방식 또는 PKI(Public Key Infrastructure) 방식에 따라 검증 동작을 수행할 수 있다.
전자 장치(100)는 다중 뉴럴 네트워크들을 병렬로 실행함으로써 NPU(130) 내 뉴런들의 이용률을 높일 수 있다. 전자 장치(100)는 다중 뉴럴 네트워크들을 복수의 NPU들(130)에 할당하고(NPU 스케줄러(111)) 그리고 복수의 NPU들(130) 각각은 복수의 뉴럴 네트워크들을 가속기(133)에 할당할 수 있다(가속기 스케줄러(137)). NPU 스케줄러(111)의 스케줄링 동작은 첫 번째 레벨(L1)에 해당하고 가속기 스케줄러(137)의 스케줄링 동작은 첫 번째 레벨의 하위 레벨인 두 번째 레벨(L2)에 해당한다. NPU 스케줄러(111)와 가속기 스케줄러(137)는 계층적으로 구성될 수 있다(L1, L2).
전자 장치(100)는 q개의 NPU들(130)을 포함할 수 있다(NPU = {NPU1, NPU2, …, NPUp, …, NPUq}). q는 1 이상의 정수이고 p는 1 이상 q 이하이다. q개의 NPU들(130) 각각은 재구성 가능한 r개의 모듈들(서브 가속기들)을 포함할 수 있다(NPUp = Ur NPUq{ACCr}). r은 1 이상의 정수이다. 메인 CPU(110)가 하나의 응용 프로그램 또는 하나 이상의 응용 프로그램들을 실행함에 따라, 메인 CPU(110)는 s개의 뉴럴 네트워크들을 실행할 수 있다(APP = {NN1, NN2, …, NNs}). s는 1 이상의 정수이다. s개의 뉴럴 네트워크들 각각은 시스톨릭 어레이 형태로 배열되는 뉴런들의 차수(dimension), 크기, 또는 어레이를 갖는다(dimension(NNs) = X x Y). X 및 Y 각각은 1 이상의 정수이고 서로 동일하거나 상이하다. 예를 들어, 뉴럴 네트워크의 차수는 뉴럴 네트워크를 실행하는데 필요하고 시스톨릭 어레이의 형태로 배열되는 X x Y 만큼의 뉴런들을 나타낼 수 있다.
뉴럴 네트워크는 NPU에 대한 친화도(Affinity)를 가질 수 있다(affinity(NNt) = NPUu|…|NPUv). t는 1 이상 s 이하이다. u, v 각각은 1 이상 q 이하이다. 만약, 뉴럴 네트워크가 하나 이상의 NPU들에 대하여 친화도를 갖고 있으면, 뉴럴 네트워크는 친화도를 갖는 NPU들 중 어느 하나에 할당될 수 있다. 친화도는 뉴럴 네트워크가 복수의 NPU들 중 어느 NPU에 의해 실행되는 것이 적합한지를 나타낼 수 있다. 하나의 뉴럴 네트워크에 대해 친화도를 갖는 NPU는 하나 이상일 수도 있다. 사용자는 응용 프로그램을 작성할 때 q개의 NPU들(130)과 s개의 뉴럴 네트워크들 간의 친화도를 사전에 결정할 수 있다. 사용자에 의해 결정된 친화도는 메인 메모리(120) 또는 다른 메모리 장치에 저장되거나, 사용자에 의해 작성된 응용 프로그램 내에 정의될 수도 있다.
도 5는 도 4의 NPU 스케줄러의 동작의 순서도를 예시적으로 도시한다. 도 5는 도 1 및 도 4를 참조하여 설명될 것이다. NPU 스케줄러(111)의 동작은 제 1 레벨 스케줄링 동작으로 지칭될 수 있다.
S110 단계에서, NPU 스케줄러(111)는 큐에 저장된 뉴럴 네트워크의 친화도를 조사하거나 확인할 수 있다. NPU 스케줄러(111)의 큐는 복수의 뉴럴 네트워크들을 저장할 수 있고, NPU 스케줄러(111)는 FIFO 방식으로 큐에 저장된 복수의 뉴럴 네트워크들 중 하나를 선택하거나 인출하고, 그리고 선택된 뉴럴 네트워크의 친화도를 조사할 수 있다. 물론, NPU 스케줄러(111)가 복수의 뉴럴 네트워크들 중 하나를 선택하는 방법은 상술한 것으로 한정되지 않는다.
S120 단계에서, NPU 스케줄러(111)는 선택된 뉴럴 네트워크가 복수의 NPU들(130)에 대해 친화도를 갖는지를 확인할 수 있다. 전자 장치(100)의 모든 NPU들(130) 중에서 하나의 NPU(130)만이 선택된 뉴럴 네트워크에 대한 친화도를 가질 수도 있거나 또는 전자 장치(110)의 모든 NPU들(130) 중에서 복수의 NPU들(130)이 선택된 뉴럴 네트워크에 대한 친화도를 가질 수도 있다.
복수의 NPU들(130)이 선택된 뉴럴 네트워크에 대한 친화도를 가지면(예), S130 단계에서, NPU 스케줄러(111)는 복수의 NPU들(130) 중에서 가속기(133)의 자원 이용률이 가장 낮은 NPU(130)를 선택할 수 있다. 자원 이용률은 가속기(133)의 뉴런들을 분할하는 복수의 모듈들 중 사용중인 모듈들의 개수에 따라 계산될 수 있다. 예를 들어, 복수의 모듈들의 개수가 a이고 사용중인 모듈들의 개수가 b이면, 자원 이용률은 100 X b/a [%] 일 수 있다. 또는, 자원 이용률은 가속기(133)의 모든 뉴런들 중 사용중인 뉴런들의 개수에 따라 계산될 수도 있다.
NPU 스케줄러(111)는 선택된 뉴럴 네트워크를 실행하기 위한 시점에서 복수의 NPU들(130)의 가속기들(133)의 자원 이용률들을 서로 비교할 수 있다. 복수의 NPU들(130)이 아닌 하나의 NPU(130)만 선택된 뉴럴 네트워크에 대한 친화도를 가지면(아니오), S140 단계에서, NPU 스케줄러(111)는 친화도를 갖는 하나의 NPU(130)를 선택할 수 있다. S150 단계에서, NPU 스케줄러(111)는 선택된 뉴럴 네트워크를 S130 단계 또는 S140 단계를 통해 선택된 하나의 NPU(130)에 할당할 수 있다.
NPU 스케줄러(111)는 S110 내지 S150 단계들을 수행함으로써, 큐에 입력된 뉴럴 네트워크의 친화도에 따라, 뉴럴 네트워크를 복수의 NPU들(130) 중 하나에 할당할 수 있다. NPU 스케줄러(111)는 S110 내지 S150 단계들을 반복적으로 수행하고 큐에 입력된 모든 뉴럴 네트워크들을 하나의 NPU(130) 또는 복수의 NPU들(130)에 할당할 수 있다.
도 6은 도 4의 NPU 스케줄러가 도 5의 S120 및 S130 단계들에 따라 NPU를 선택하는 동작을 예시적으로 도시한다. NPU 스케줄러(111)는 큐에 저장된 뉴럴 네트워크(NN6)를 복수의 NPU들 중 어느 하나에 할당하는 것으로 가정한다. 제 1 NPU(130_1) 및 제 2 NPU(130_2)가 뉴럴 네트워크(NN6)에 대한 친화도를 갖는 것으로 가정한다. 제 1 NPU(130_1) 및 제 2 NPU(130_2) 각각의 뉴런들은 도 3a에서 전술한 복수의 모듈들(135a)로 분할되는 것으로 가정한다. 음영으로 표시된 모듈(135a)은 사용 중이고 그렇지 않은 모듈(135a)은 사용 중이 아닌 유휴 상태인 것으로 가정한다. 전자 장치(100)의 나머지 구성 요소들의 도시는 설명의 편의를 위해 생략되었다.
NPU 스케줄러(111)는 뉴럴 네트워크(NN6)가 어느 NPU와 친화도를 갖는지 조사할 수 있다(S110 단계 참조). NPU 스케줄러(111)는 제 1 NPU(130_1) 및 제 2 NPU(130_2)가 뉴럴 네트워크(NN6)에 대한 친화도를 갖는 것을 확인하고 제 1 NPU(130_1) 및 제 2 NPU(130_2)를 선택할 수 있다(S120 단계 참조). NPU 스케줄러(111)는 제 1 NPU(130_1)의 자원 이용률을 확인할 수 있다(S130 단계 참조). 제 1 NPU(130_1)의 자원 이용률은 62.5 % (= 100 X 10/16)이다. NPU 스케줄러(111)는 제 2 NPU(130_2)의 자원 이용률을 확인할 수 있다. 제 2 NPU(130_2)의 자원 이용률은 25 % (= 100 X 4/16)이다. NPU 스케줄러(111)는 제 1 NPU(130_1)의 자원 이용률과 제 2 NPU(130_2)의 자원 이용률을 비교하고 상대적으로 낮은 자원 이용률을 갖는 제 2 NPU(130_2)를 선택할 수 있다(즉, 가장 낮은 자원 이용률을 갖는 NPU를 선택). S150 단계에서, NPU 스케줄러(111)는 뉴럴 네트워크(NN6)를 제 2 NPU(130_2)에 할당할 수 있다.
도 7은 도 4의 가속기 스케줄러의 동작의 순서도를 예시적으로 도시한다. 도 7은 도 1 및 도 4를 참조하여 설명될 것이다. 가속기 스케줄러(137)의 동작은 제 2 레벨 스케줄링 동작으로 지칭될 수 있다.
S210 단계에서, 가속기 스케줄러(137)는 큐에 저장된 뉴럴 네트워크를 선택하거나 페치할 수 있다. 가속기 스케줄러(137)의 큐에 저장된 뉴럴 네트워크는 도 5의 S150 단계를 통해 NPU 스케줄러(111)에 의해 할당된 것이다. 가속기 스케줄러(137)는 선택된 뉴럴 네트워크의 최대 배열 차수를 확인할 수 있다. 최대 배열 차수는 선택된 뉴럴 네트워크를 실행하는데 필요한 가속기(133) 내 뉴런들(134)의 크기 또는 모듈들의 크기일 수 있다.
S220 단계에서, 가속기 스케줄러(137)는 선택된 뉴럴 네트워크의 연산이 실행 준비 중인지를 확인할 수 있다. 예를 들어, 가속기 스케줄러(137)는 가속기 메모리 관리자(138)가 선택된 뉴럴 네트워크를 위한 메모리 공간을 확보했는지 여부를 확인할 수 있다. 가속기 스케줄러(137)는 가속기 메모리 관리자(138)가 선택된 뉴럴 네트워크를 위한 메모리 공간을 확보하였으면 선택된 뉴럴 네트워크의 연산이 실행 준비 중인 것으로 판단할 수 있다. 가속기 스케줄러(137)는 가속기 메모리 관리자(138)가 선택된 뉴럴 네트워크를 위한 메모리 공간을 확보하지 못했으면 선택된 뉴럴 네트워크의 연산이 실행 준비 중이 아닌 것으로 판단할 수 있다.
선택된 뉴럴 네트워크의 연산이 실행 준비 중이면(예), S230 단계에서, 가속기 스케줄러(137)는 선택된 뉴럴 네트워크를 가속기(133)에 할당할 수 있는지를 확인할 수 있다. 가속기 스케줄러(137)는 선택된 뉴럴 네트워크의 최대 배열 차수 및 가속기(133)의 자원 이용률에 기초하여 선택된 뉴럴 네트워크를 가속기(133)에 할당할 수 있는지를 결정할 수 있다. 예를 들어, 가속기 스케줄러(137)는 선택된 뉴럴 네트워크의 최대 배열 차수에 해당하고 사용 중이 아닌 모듈들이 가속기(133) 내에 존재하는지를 확인할 수 있다. 가속기 스케줄러(137)는 가속기(133)의 복수의 모듈들(135a, 135b, 135c) 중 선택된 뉴럴 네트워크의 차수에 해당하는 적어도 하나의 모듈이 사용 중인지를 확인할 수 있다. 가속기 스케줄러(137)는 가속기(133)의 복수의 모듈들(135a, 135b, 135c)의 개수에 대한 사용 중인 모듈들의 개수의 비율(즉, 자원 이용률)에 따라, 선택된 네트워크를 사용 중인 모듈들을 제외한 나머지 모듈들 중 적어도 하나의 모듈에 할당할 수 있다.
선택된 뉴럴 네트워크를 가속기(133)에 할당할 수 있으면(예), S240 단계에서, 가속기 스케줄러(137)는 선택된 뉴럴 네트워크를 가속기(133)에 할당할 수 있다. 그리고, 가속기 스케줄러(137)는 선택된 뉴럴 네트워크를 가속기(133)에 할당함에 따라 가속기(133)의 상태(예를 들어, 가속기(133)의 자원 이용률)를 업데이트할 수 있다.
선택된 뉴럴 네트워크의 연산이 실행 준비 중이 아니거나(아니오) 또는 선택된 뉴럴 네트워크를 가속기(133)에 할당할 수 없으면(아니오), S250 단계에서, 가속기 스케줄러(137)는 선택된 뉴럴 네트워크를 다시 큐에 입력할 수 있고 큐는 뉴럴 네트워크를 다시 저장할 수 있다. 가속기 스케줄러(137)는 선택된 뉴럴 네트워크를 가속기(133)에 할당하지 않을 수 있다. S260 단계에서, 가속기 스케줄러(137)는 가속기(133)에 이전에 할당된 뉴럴 네트워크들의 연산들 중 종료된 연산이 있는지를 확인할 수 있다. 종료된 연산이 없으면(아니오), 가속기 스케줄러(137)는 S210 내지 S250 단계들의 동작들을 반복할 수 있다. 종료된 연산이 있으면(예), S270 단계에서, 가속기 스케줄러(137)는 종료된 연산을 가속기(133)로부터 할당 해제할 수 있다. 그리고, 가속기 스케줄러(137)는 종료된 연산에 대한 뉴럴 네트워크를 가속기(133)의 복수의 모듈로부터 할당 해제함에 따라, 가속기(133)의 상태를 업데이트할 수 있다. 가속기 스케줄러(137)는 종료된 연산에 대한 뉴럴 네트워크를 가속기(133)의 복수의 모듈로부터 할당 해제하고 그 다음 새로운 뉴럴 네트워크를 그 복수의 모듈들에 할당할 수 있다.
가속기 스케줄러(137)는 S210 내지 S270 단계들을 수행함으로써, 큐에 입력된 뉴럴 네트워크를 가속기(133)의 복수의 모듈들 중 적어도 하나에 할당할 수 있다. 가속기 스케줄러(137)는 S210 내지 S270 단계들을 반복적으로 수행하고 큐에 입력된 모든 뉴럴 네트워크들을 가속기(133)에 할당할 수 있다.
도 8은 도 4의 가속기 스케줄러가 도 7의 S210 내지 S240 단계들에 따라 뉴럴 네트워크를 가속기에 할당하는 동작을 예시적으로 도시한다. NPU(130)의 뉴로모픽 CPU(131)의 가속기 스케줄러(137)는 큐에 저장된 뉴럴 네트워크들(NN7, NN8, NN9)을 FIFO 방식으로 가속기(133)에 할당할 수 있다. 예를 들어, 도 8을 참조하면, 가속기 스케줄러(137)는 뉴럴 네트워크들(NN7, NN8)을 가속기(133)의 복수의 모듈들에 할당할 수 있다(①, ②). 그 다음, 가속기 스케줄러(137)는 뉴럴 네트워크(NN9)를 가속기(133)의 복수의 모듈들에 할당할 것이다. NPU(130)의 가속기(133)의 뉴런들은 도 3a에서 전술한 복수의 모듈들(135a)로 분할되는 것으로 가정한다. 음영으로 표시된 모듈(135a)은 사용 중이고 그렇지 않은 모듈(135a)은 사용 중이 아닌 유휴 상태인 것으로 가정한다. NPU(130)의 나머지 구성 요소들의 도시는 설명의 편의를 위해 생략되었다.
S210 단계에서, 가속기 스케줄러(137)는 큐에 저장된 뉴럴 네트워크(NN9)를 선택할 수 있다. 예를 들어, 가속기 스케줄러(137)는 뉴럴 네트워크(NN9)의 최대 배열 차수가 2 X 3 인 것을 확인할 수 있다. S220 단계에서, 가속기 스케줄러(137)는 뉴럴 네트워크(NN9)의 연산이 실행 준비 중인지를 확인할 수 있다. 가속기 메모리 관리자(138)는 뉴럴 네트워크(NN9)를 위한 메모리 공간을 확보할 수 있다. S230 단계에서, 가속기 스케줄러(137)는 뉴럴 네트워크(NN9)를 가속기(133)에 할당할 수 있는지를 확인할 수 있다. 도 8을 참조하면, 뉴럴 네트워크(NN9)의 최대 배열 차수에 해당하는 모듈들이 가속기(133)에 존재한다. S240 단계에서, 가속기 스케줄러(137)는 뉴럴 네트워크(NN9)를 가속기(133)에 할당할 수 있다(③).
도 8을 참조하면, 가속기 스케줄러(137)에 의해 뉴럴 네트워크들(NN7, NN8, NN9)이 각각 할당된 복수의 모듈들은 서로 상이하다. 예를 들어, 뉴럴 네트워크(NN7)가 할당된 제 1 모듈들, 뉴럴 네트워크(NN8)가 할당된 제 2 모듈들, 그리고 뉴럴 네트워크(NN9)가 할당된 제 3 모듈들 각각은 독립적으로 또는 병렬로 할당받은 뉴럴 네트워크의 연산을 실행할 수 있다.
위에서 설명한 내용은 본 발명을 실시하기 위한 구체적인 예들이다. 본 발명에는 위에서 설명한 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 쉽게 변경할 수 있는 실시 예들도 포함될 것이다. 또한, 본 발명에는 상술한 실시 예들을 이용하여 앞으로 쉽게 변형하여 실시할 수 있는 기술들도 포함될 것이다.
100: 전자 장치;
110: 메인 CPU;
120: 메인 메모리;
130: NPU;
140: 버스;

Claims (18)

  1. 복수의 NPU(Neuromorphic Processing Unit)들; 및
    적어도 하나의 응용 프로그램의 뉴럴 네트워크를 상기 복수의 NPU들 중 NPU에 할당하도록 구성되는 메인 CPU(Central Processing Unit)를 포함하되,
    상기 뉴럴 네트워크가 할당된 상기 NPU는:
    복수의 모듈들을 포함하는 가속기; 및
    상기 뉴럴 네트워크를 상기 복수의 모듈들 중 적어도 하나의 모듈에 할당하도록 구성되는 뉴로모픽 CPU를 포함하는 전자 장치.
  2. 제 1 항에 있어서,
    상기 메인 CPU는 상기 뉴럴 네트워크와 상기 NPU들 간의 친화도(affinity)에 따라 상기 뉴럴 네트워크를 상기 복수의 NPU들 중 상기 NPU에 할당하도록 더 구성되는 전자 장치.
  3. 제 1 항에 있어서,
    상기 메인 CPU는:
    상기 뉴럴 네트워크와 상기 NPU들 간의 친화도에 따라 상기 복수의 NPU들 중 제 1 및 제 2 NPU들을 선택하고, 그리고
    상기 제 1 NPU의 가속기의 복수의 모듈들 중 사용 중인 모듈들의 개수에 따라 계산되는 제 1 자원 이용률과 상기 제 2 NPU의 가속기의 복수의 모듈들 중 사용 중인 모듈들의 개수에 따라 계산되는 제 2 자원 이용률을 비교하여 상기 뉴럴 네트워크를 상기 제 1 및 제 2 NPU들 중 하나에 할당하도록 더 구성되고, 그리고
    상기 제 1 및 제 2 NPU들 중 상기 하나는 상기 복수의 NPU들 중 상기 NPU인 전자 장치.
  4. 제 1 항에 있어서,
    상기 뉴로모픽 CPU는 상기 복수의 모듈들 중 상기 적어도 하나의 모듈을 선택함으로써 상기 가속기를 재구성하도록 더 구성되는 전자 장치.
  5. 제 1 항에 있어서,
    상기 뉴로모픽 CPU는:
    상기 뉴럴 네트워크를 실행하는데 필요한 차수(dimension)를 확인하고,
    상기 복수의 모듈들 중 상기 차수에 해당하는 상기 적어도 하나의 모듈이 사용 중인지를 확인하고, 그리고
    상기 적어도 하나의 모듈이 사용 중이 아니면 상기 뉴럴 네트워크를 상기 적어도 하나의 모듈에 할당하도록 더 구성되는 전자 장치.
  6. 제 5 항에 있어서,
    상기 뉴로모픽 CPU는 상기 적어도 하나의 모듈이 사용 중이면 상기 뉴럴 네트워크를 상기 적어도 하나의 모듈에 할당하지 않도록 더 구성되는 전자 장치.
  7. 제 5 항에 있어서,
    상기 뉴로모픽 CPU는 상기 NPU에 할당되는 상기 뉴럴 네트워크를 저장하고 그리고 상기 적어도 하나의 모듈이 사용 중이면 상기 뉴럴 네트워크를 다시 저장하는 큐를 실행하도록 더 구성되는 전자 장치.
  8. 제 1 항에 있어서,
    상기 NPU는 뉴로모픽 메모리를 더 포함하고,
    상기 뉴로모픽 CPU는:
    상기 뉴로모픽 메모리가 상기 뉴럴 네트워크를 실행하는데 필요한 공간을 갖는지 여부를 확인하고, 그리고
    상기 뉴로모픽 메모리에 상기 공간이 있으면, 상기 뉴럴 네트워크를 상기 적어도 하나의 모듈에 할당하도록 더 구성되는 전자 장치.
  9. 제 1 항에 있어서,
    상기 뉴로모픽 CPU는 상기 NPU에 할당되는 상기 뉴럴 네트워크와 상기 뉴럴 네트워크와 관련된 데이터가 승인된 것인지 여부를 판별하도록 더 구성되는 전자 장치.
  10. 제 1 항에 있어서,
    상기 메인 CPU는:
    상기 뉴럴 네트워크인 제 1 뉴럴 네트워크를 상기 NPU인 제 1 NPU에 할당하고, 그리고
    상기 적어도 하나의 응용 프로그램의 제 2 뉴럴 네트워크를 상기 복수의 NPU들 중 제 2 NPU에 할당하도록 더 구성되는 전자 장치.
  11. 제 1 항에 있어서,
    상기 메인 CPU는:
    상기 뉴럴 네트워크인 제 1 뉴럴 네트워크를 상기 NPU에 할당하고, 그리고
    제 2 뉴럴 네트워크를 상기 NPU에 할당하도록 더 구성되는 전자 장치.
  12. 제 11 항에 있어서,
    상기 뉴로모픽 CPU는:
    상기 제 1 뉴럴 네트워크를 상기 복수의 모듈들 중 상기 적어도 하나의 모듈에 할당하고, 그리고
    상기 제 2 뉴럴 네트워크를 상기 적어도 하나의 모듈을 제외한 나머지 모듈들 중 적어도 하나의 모듈에 할당하도록 더 구성되는 전자 장치.
  13. 복수의 모듈들을 포함하는 가속기 및 상기 가속기를 제어하도록 구성되는 뉴로모픽 CPU(Central Processing Unit)를 포함하는 NPU(Neuromorphic Processing Unit); 및
    복수의 뉴럴 네트워크들을 상기 NPU에 할당하도록 구성되는 메인 CPU를 포함하되,
    상기 뉴로모픽 CPU는 상기 복수의 뉴럴 네트워크들 중 제 1 뉴럴 네트워크를 상기 복수의 모듈들 중 제 1 모듈들에 할당하고 그리고 상기 복수의 뉴럴 네트워크들 중 제 2 뉴럴 네트워크를 상기 복수의 모듈들 중 제 2 모듈들에 할당하도록 구성되는 스케줄러를 실행하도록 더 구성되는 전자 장치.
  14. 제 13 항에 있어서,
    상기 가속기 내에서 상기 제 1 모듈들과 상기 제 2 모듈들은 서로 다른 전자 장치.
  15. 제 13 항에 있어서,
    상기 제 1 모듈들과 상기 제 2 모듈들은 상기 제 1 뉴럴 네트워크와 상기 제 2 뉴럴 네트워크를 독립적으로 실행하는 전자 장치.
  16. 제 13 항에 있어서,
    상기 스케줄러는 상기 복수의 모듈들의 개수에 대한 상기 제 1 및 제 2 모듈들의 개수의 비율에 따라 상기 복수의 뉴럴 네트워크들 중 제 3 네트워크를 상기 복수의 모듈들 중 상기 제 1 및 제 2 모듈들을 제외한 나머지 모듈들에 할당할지 여부를 확인하도록 더 구성되는 전자 장치.
  17. 제 13 항에 있어서,
    상기 NPU는 뉴로모픽 메모리를 더 포함하고, 그리고
    상기 뉴로모픽 CPU는 상기 뉴로모픽 메모리가 상기 복수의 뉴럴 네트워크들을 실행하는데 필요한 공간을 갖는지 여부를 확인하도록 구성되는 메모리 관리자를 실행하도록 더 구성되는 전자 장치.
  18. 제 13 항에 있어서,
    상기 뉴로모픽 CPU는 상기 복수의 뉴럴 네트워크들과 상기 복수의 뉴럴 네트워크들과 관련된 데이터가 승인된 것인지 여부를 판별하도록 구성되는 뉴럴 네트워크 검증 관리자를 실행하도록 더 구성되는 전자 장치.
KR1020190030203A 2019-03-15 2019-03-15 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치 KR20200110092A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190030203A KR20200110092A (ko) 2019-03-15 2019-03-15 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190030203A KR20200110092A (ko) 2019-03-15 2019-03-15 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치

Publications (1)

Publication Number Publication Date
KR20200110092A true KR20200110092A (ko) 2020-09-23

Family

ID=72708833

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190030203A KR20200110092A (ko) 2019-03-15 2019-03-15 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치

Country Status (1)

Country Link
KR (1) KR20200110092A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220188609A1 (en) * 2020-12-16 2022-06-16 Plantronics, Inc. Resource aware neural network model dynamic updating

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220188609A1 (en) * 2020-12-16 2022-06-16 Plantronics, Inc. Resource aware neural network model dynamic updating

Similar Documents

Publication Publication Date Title
US11681564B2 (en) Heterogeneous computing-based task processing method and software and hardware framework system
US10963300B2 (en) Accelerating dataflow signal processing applications across heterogeneous CPU/GPU systems
KR20210148586A (ko) 스케줄러, 스케줄러의 동작 방법 및 이를 포함한 가속기 시스템
US20190146837A1 (en) Distributed real-time computing framework using in-storage processing
KR20210108749A (ko) 가속기, 가속기의 동작 방법 및 이를 포함한 가속기 시스템
US20240086359A1 (en) Dynamic allocation of arithmetic logic units for vectorized operations
US20230305967A1 (en) Banked memory architecture for multiple parallel datapath channels in an accelerator
Chen et al. Towards efficient allocation of graph convolutional networks on hybrid computation-in-memory architecture
US11494321B1 (en) State buffer memloc reshaping
KR20220045026A (ko) 신경망 계산 가속화를 위한 하드웨어 회로
US11494326B1 (en) Programmable computations in direct memory access engine
KR20200110092A (ko) 복수의 뉴럴 네트워크들을 실행하기 위한 전자 장치
US8914778B2 (en) Data placement for execution of an executable
US20170192821A1 (en) Distributed real-time computing framework using in-storage processing
CN114008589A (zh) 用于在顺序处理器上进行多次执行的动态代码加载
WO2023018477A1 (en) Parallel processing architecture using distributed register files
US11372677B1 (en) Efficient scheduling of load instructions
CN110415162B (zh) 大数据中面向异构融合处理器的自适应图划分方法
US10997277B1 (en) Multinomial distribution on an integrated circuit
US11625269B1 (en) Scheduling for locality of reference to memory
US11809849B1 (en) Global modulo allocation in neural network compilation
Ramkumar Making the Most of Serverless Accelerators
US20220147398A1 (en) Method and apparatus for lightweight and parallelization of accelerator task scheduling
US20230388373A1 (en) Load Balancing System for the Execution of Applications on Reconfigurable Processors
US11797280B1 (en) Balanced partitioning of neural network based on execution latencies

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right