KR20230104235A - 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법 및 시스템 - Google Patents

워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20230104235A
KR20230104235A KR1020237018879A KR20237018879A KR20230104235A KR 20230104235 A KR20230104235 A KR 20230104235A KR 1020237018879 A KR1020237018879 A KR 1020237018879A KR 20237018879 A KR20237018879 A KR 20237018879A KR 20230104235 A KR20230104235 A KR 20230104235A
Authority
KR
South Korea
Prior art keywords
output values
tensors
bank
processors
output
Prior art date
Application number
KR1020237018879A
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 모펫 인터내셔널 컴퍼니 리미티드
Publication of KR20230104235A publication Critical patent/KR20230104235A/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/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • 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
    • G06N3/045Combinations of networks
    • 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
    • G06N3/048Activation functions
    • 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
    • G06N3/0495Quantised networks; Sparse networks; Compressed networks
    • 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/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Mathematical Analysis (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Multimedia (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Medical Informatics (AREA)
  • Databases & Information Systems (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Complex Calculations (AREA)
  • Image Analysis (AREA)
  • Image Processing (AREA)
  • Measurement Of Velocity Or Position Using Acoustic Or Ultrasonic Waves (AREA)

Abstract

워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한, 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 포함하는, 방법, 시스템 및 장치가 설명된다. 예시적인 방법은, 입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(MAC) 연산을 동시에 수행하도록 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 단계; MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 단계; 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 단계; 뱅크의 각각에 대해, K개의 출력값을 획득하기 위해 뱅크에서 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 단계; 각각의 뱅크의 획득된 K개의 출력값 이외의 하나 이상의 출력값을 0으로서 설정함으로써 뱅크의 각각을 프루닝하는 단계; 및 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 단계를 포함한다.

Description

워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법 및 시스템
본 개시내용은 일반적으로 인공 지능, 더 구체적으로 워크로드 균형 활성화 희소성(workload-balanced activation sparsity)을 가진 컨볼루션 프로세스에 관한 것이다.
신경망(neural network: NN)은 현재 이미지 및 비디오 인식, 추천 시스템, 정렬, 의료 이미지 분석 및 자연 언어 처리와 같은 많은 최신의 인공 지능(artificial intelligence: AI) 애플리케이션을 위한 기반이다. NN은 자율 주행 자동차 및 암 검출에서 복잡한 게임 진행에 이르기까지 다양한 사용 시나리오에서 사용된다. 일반적인 NN은 집약적이고 따라서 비용이 많이 드는(계산 및 에너지 측면에서) 컨볼루션 연산이 수행되는 일련의 컨볼루션 계층을 포함할 수도 있다. 일반적인 컨볼루션 계층은 하나 이상의 활성화(또는 입력) 텐서 및 하나 이상의 가중치 텐서를 수반할 수도 있다.
최근 몇 년 동안, 가중치 텐서를 프루닝하여(pruning) 0이 아닌 가중치의 수를 감소시키는 것과 같이, NN의 컨볼루션 프로세스에 희소성을 도입함으로써 NN의 계산 효율을 개선시키기 위한 다양한 방식이 개발되어 왔다. 일부 기존의 하드웨어 아키텍처는 활성화 희소성을 완전히 무시하거나 또는 병렬 처리 프레임워크를 사용하여 컨볼루션 연산을 수행할 때 워크로드 불균형을 유발할 수도 있는 구조화되지 않은 활성화 희소성을 가정한다. 불균형한 워크로드는 아키텍처의 시스템 확장성 및 성능에 직접적인 영향을 줄 수도 있다. 따라서, 컨볼루션 프로세스의 효율을 개선시키기 위해 워크로드 균형 활성화 희소성을 제공하고 이용하는 새로운 시스템 아키텍처를 구축하는 것이 바람직하다.
본 명세서의 다양한 실시형태는 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 시스템, 방법 및 비일시적인 컴퓨터 판독 가능한 매체를 포함할 수도 있다.
하나의 양상에 따르면, 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법은, 입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(Multiply-Accumulate: MAC) 연산을 동시에 수행하도록 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 단계; MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 단계; 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 단계로서, 뱅크의 각각은 복수의 출력값 중 하나 이상을 포함하는, 하나 이상의 뱅크를 구성하는 단계; 뱅크의 각각에 대해, K개의 출력값을 획득하기 위해 뱅크에서 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 단계로서, K는 양의 정수인, 상단-K 정렬을 수행하는 단계; 각각의 뱅크의 획득된 K개의 출력값 이외의 하나 이상의 출력값을 0으로서 설정함으로써 뱅크의 각각을 프루닝하는 단계; 및 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 단계를 포함한다.
일부 실시형태에서, 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것은, 신경망의 컨볼루션 계층에서 입력 텐서 및 복수의 가중치 텐서를 획득하는 것; 입력 텐서를 복수의 서브-텐서로 세분화하고 복수의 서브-텐서를 복수의 프로세서에 할당하는 것; 및 복수의 가중치 텐서를 복수의 가중치 군으로 세분화하고 복수의 가중치 군을 복수의 프로세서에 할당하는 것을 포함한다.
일부 실시형태에서, 복수의 서브-텐서 및 복수의 가중치 군을 복수의 프로세서에 할당하는 것은, 복수의 프로세서의 각각에 대해, 복수의 서브-텐서 중 하나 이상 및 복수의 가중치 군 중 하나 이상을 프로세서의 내부 버퍼에 저장하는 것을 포함한다.
일부 실시형태에서, 복수의 가중치 군을 복수의 프로세서에 할당하는 것은, 복수의 병렬 처리 사이클의 각각 동안, 동시에 복수의 서브-텐서 및 복수의 가중치 군 중 하나 이상에 기초하여 복수의 프로세서가 MAC 연산을 수행하도록 복수의 가중치 군 중 하나 이상을 복수의 프로세서에 할당하는 것을 포함하는 것을 포함한다.
일부 실시형태에서, 하나 이상의 뱅크의 각각은 복수의 가중치 군 중 하나에 기초하여 생성되는 출력값에 대응한다.
일부 실시형태에서, MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것은, 복수의 병렬 처리 사이클의 각각 동안 복수의 프로세서에 의해 수행되는 MAC 연산의 결과로서 복수의 부분적인 합을 획득하는 것; 복수의 부분적인 합을 가산기 트리 디바이스에 공급하여 하나 이상의 출력값을 획득하는 것; 및 복수의 병렬 처리 사이클 중 하나 이상 동안 누적 버퍼에 하나 이상의 출력값을 저장하여 복수의 출력값을 획득하는 것을 포함한다.
일부 실시형태에서, 뱅크에서 출력값에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것은, 뱅크에서 출력값의 크기에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것을 포함한다.
일부 실시형태에서, 뱅크의 각각은, 0보다 더 큰 높이-치수; 0보다 더 큰 폭-치수; 1보다 더 큰 채널-치수를 포함한다.
일부 실시형태에서, 방법은, 뱅크의 각각에 K개의 0이 아닌 출력값을 각각 K개의 다차원 벡터로서 나타내는 단계를 더 포함하되, K개의 다차원 벡터의 각각은 0이 아닌 출력값 및 뱅크 내 0이 아닌 출력값의 대응하는 채널-치수 식별자를 포함한다.
일부 실시형태에서, 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 것은, 뱅크의 각각의 K개의 다차원 벡터를 조립하여 출력 텐서를 형성하는 것을 포함한다.
일부 실시형태에서, 프루닝된 뱅크의 각각은 뱅크 식별자와 연관되고, 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 것은, 대응하는 뱅크 식별자에 기초하여 뱅크의 각각의 K개의 다차원 벡터를 조립하여 출력 텐서를 형성하는 것을 포함한다.
일부 실시형태에서, 출력 텐서는 희소 텐서이다.
또 다른 양상에 따르면, 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 시스템이 제공된다. 시스템은 하나 이상의 프로세서 및 하나 이상의 프로세서에 결합되고 시스템이 작동을 수행하게 하도록 하나 이상의 프로세서에 의해 실행 가능한 명령어로 구성된 하나 이상의 비일시적인 컴퓨터-판독 가능한 메모리를 포함할 수도 있고, 작동은, 입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(MAC) 연산을 동시에 수행하도록 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것; MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것; 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 것으로서, 뱅크의 각각은 복수의 출력값 중 하나 이상을 포함하는, 하나 이상의 뱅크를 구성하는 것; 뱅크의 각각에 대해, K개의 출력값을 획득하기 위해 뱅크에서 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 것으로서, K는 양의 정수인, 상단-K 정렬을 수행하는 것; 각각의 뱅크의 획득된 K개의 출력값 이외의 하나 이상의 출력값을 0으로서 설정함으로써 뱅크의 각각을 프루닝하는 것; 및 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 것을 포함한다.
추가의 또 다른 양상에 따르면, 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 비일시적인 컴퓨터-판독 가능한 저장 매체가 제공된다. 매체는 하나 이상의 프로세서가 작동을 수행하게 하도록 하나 이상의 프로세서에 의해 실행 가능한 명령어로 구성될 수도 있고, 작동은, 입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(MAC) 연산을 동시에 수행하도록 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것; MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것; 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 것으로서, 뱅크의 각각은 복수의 출력값 중 하나 이상을 포함하는, 하나 이상의 뱅크를 구성하는 것; 뱅크의 각각에 대해, K개의 출력값을 획득하기 위해 뱅크에서 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 것으로서, K는 양의 정수인, 상단-K 정렬을 수행하는 것; 각각의 뱅크의 획득된 K개의 출력값 이외의 하나 이상의 출력값을 0으로서 설정함으로써 뱅크의 각각을 프루닝하는 것; 및 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 것을 포함한다.
본 명세서에 개시된 시스템, 방법 및 비일시적인 컴퓨터 판독 가능한 매체의 이 특징 및 다른 특징, 뿐만 아니라 연산 방법 및 구조체의 관련된 요소의 기능 및 부품의 조합 및 제조 경제는, 유사한 참조 부호가 다양한 도면에서 대응하는 부분을 나타내는, 전부 이 명세서의 일부를 형성하는, 첨부 도면을 참조하여 다음의 설명 및 첨부된 청구범위의 고려 시 더 분명해질 것이다. 그러나, 도면이 단지 예시 및 설명을 위한 것이며 본 발명의 한계를 규정하기 위한 것이 아님을 분명히 이해한다.
도 1은 다양한 실시형태에 따른 예시적인 컨볼루션 신경망(convolutional neural network: CNN)을 예시하는 도면.
도 2는 다양한 실시형태에 따른 예시적인 컨볼루션 프로세스를 예시하는 도면.
도 3은 다양한 실시형태에 따른, 신경망 계층의 예시적인 도면 및 가중치 프루닝과 활성화 프루닝의 예시적인 도면.
도 4는 다양한 실시형태에 따른 워크로드 균형 활성화 프루닝을 위한 예시적인 도면.
도 5는 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 예시적인 시스템 도면.
도 6a는 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 예시적인 시스템 아키텍처를 예시하는 도면.
도 6b는 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 출력 텐서를 생성하기 위한 예시적인 흐름도.
도 7은 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 예시적인 방법을 예시하는 도면.
도 8은 본 명세서에서 설명된 실시형태 중 임의의 실시형태가 구현될 수도 있는 예시적인 컴퓨터 시스템을 예시하는 도면.
본 명세서에서 설명된 실시형태는 신경망에서 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법, 시스템, 장치를 제공한다. 컨볼루션 프로세스는 기본적이지만 입력 데이터에서 특징을 추출하기 위한 계산 비용이 많이 드는 연산을 나타낼 수도 있다. 컨볼루션 프로세스는 일반적으로 신경망 내의 컨볼루션 계층에서 발생한다. 컨볼루션 계층으로의 입력 데이터는 이미지 또는 오디오 파에서 파생된 특징 맵, 또는 이전의 계층으로부터 수신된 활성화 텐서를 포함할 수도 있고, 입력 텐서로서 지칭될 수도 있다. 컨볼루션 계층의 출력은 출력 텐서로서 지칭될 수도 있다. 일부 실시형태에서, 입력 텐서와 출력 텐서는 둘 다 활성화로서 지칭될 수도 있다. 입력 텐서는 특징 맵의 다수의 채널을 포함할 수도 있다. 예를 들어, RGB 이미지는 3개의 채널(적색 채널, 녹색 채널 및 청색 채널)을 가진 입력 텐서로서 표현될 수도 있고, 각각의 채널은 특징 맵(예를 들어, 원래의 RGB 이미지와 동일한 크기이지만 적색, 녹색 또는 청색 색상 중 하나만으로 이루어진 회색조 이미지)을 포함한다. 입력 텐서에서 특징을 추출하기 위해, 하나 이상의 특징 추출기(또한 가중치 텐서 또는 필터로 불림)가 컨볼빙(예를 들어, 활주 또는 이동) 방식으로 입력 텐서에 적용될 수도 있다. 특징 검출기(가중치 텐서 또는 필터)와 입력 텐서 간의 곱셈 및 누적(multiplication and accumulation: MAC) 연산은 각각의 컨볼빙 단계 동안 수행될 수도 있다. 컨볼빙 단계에서 생성된 출력이 후속하여 조립되어 컨볼루션 계층의 출력 텐서를 형성할 수도 있다. 출력 텐서는 신경망에서 다음 계층의 입력 텐서가 될 수도 있다. 일부 경우에, 다수의 입력 텐서가 하나의 컨볼루션 계층에서 처리될 수도 있다.
컨볼루션 프로세스 동안, 입력 텐서 및/또는 가중치 텐서는 계산 비용을 감소시키고 추론 속도를 개선시키기 위해 다수의 0을 도입함으로써 프루닝되거나 또는 희소화될 수도 있다. 예를 들어, 입력 텐서 값의 50% 초과가 0으로 설정될 수도 있다. 컨볼루션 프로세스가 일반적으로 병렬 처리 프레임워크(프로세서, 코어 또는 또 다른 유형의 처리 엔터티의 클러스터)에서 수행되기 때문에, 입력 텐서의 구조화되지 않거나 또는 불균형한 프루닝은 처리 엔터티(processing entity: PE) 간에 워크로드 불균형을 유발할 수도 있고, 이는 불량한 시스템 확장성 및 성능을 초래할 수도 있다. 따라서, 입력 텐서를 프루닝하는 중요한 목적은 병렬 컨볼루션 동안 처리 장치 간의 워크로드의 균형을 포함할 수도 있다.
일부 실시형태에서, 입력 텐서는 컨볼루션 프로세스에 참여하도록 이용 가능한 PE의 수에 따라 먼저 복수의 서브-텐서로 세분화될 수도 있다. 서브-텐서의 각각은 복수의 PE 중 하나에 할당될 수도 있고 PE의 로컬 메모리/버퍼로부터의 스와핑 일 없이 다수의 컨볼루션 프로세스(NN의 다수의 컨볼루션 계층에 대응함) 내내 그 안에 머무를 수도 있다. 각각의 컨볼루션 프로세스 후, PE에 입력으로서 할당된 서브-텐서는 업데이트되어 출력으로 진화될 수도 있고, 이는 그 다음의 컨볼루션 프로세스의 입력으로 사용될 수도 있다. 일부 실시형태에서, 업데이트된 서브-텐서는 메모리 관리 목적을 위해 일시적으로 PE로부터 스와핑되고 그 다음의 반복을 위해 다시 스와핑될 수도 있다.
일부 실시형태에서, 가중치 텐서의 각각은 복수의 가중치 군으로 세분화될 수도 있고, 이의 각각은 서브-텐서(입력 텐서의 일부)가 할당된 로컬 MAC 연산을 수행하기 위해 복수의 PE 중 하나에 저장될 수도 있다. 일부 실시형태에서, 복수의 가중치 군은 컨볼루션 프로세스가 완료될 때까지 다른 서브-텐서와 컨볼빙하기 위해 복수의 PE 간에 로테이션될 수도 있다. 복수의 PE로부터의 출력값은 그 과정에서 누적되어 최종적으로 컨볼루션 프로세스의 출력 텐서로서 조립될 수도 있다.
위에서 설명된 세분화 및 병렬 처리 방식은 또한 확장성이 높다. 일부 실시형태에서, 병렬 처리의 각각의 라운드(또한 반복으로 불림)는 복수의 부분 합을 생성할 수도 있고, 복수의 PE는 각각의 라운드에서 생성된 부분 합을 누적하고 누적된 결과를 출력 텐서로서 조립하기 위해 다수의 라운드에 대한 병렬 처리를 수행할 수도 있다. 일부 실시형태에서, 다수의 라운드에 걸쳐 각각의 PE에 의해 생성된 부분 합은 다른 PE와 데이터를 교환할 필요 없이 출력 텐서의 일부를 생성하기 위해 (각각의 PE 내에서) 직접 누적될 수도 있다.
다음의 설명에서, 본 발명의 구체적이고 비제한적인 실시형태가 도면을 참조하여 설명될 것이다. 본 명세서에 개시된 임의의 실시형태의 특정한 특징 및 양상은 본 명세서에 개시된 임의의 다른 실시형태의 특정한 특징 및 양상과 결합되고/되거나 사용될 수도 있다. 이러한 실시형태가 예시적이고 본 발명의 범위 내에 있는 소수의 실시형태를 단지 예시하는 것임을 또한 이해해야 한다. 본 발명이 속하는 당업자에게 자명한 다양한 변경 및 수정은 첨부된 청구범위에서 추가로 규정된 바와 같이 본 발명의 정신, 범위 및 고려 내에 있는 것으로 간주된다.
도 1은 다양한 실시형태에 따른 예시적인 컨볼루션 신경망(CNN)을 예시한다. CNN은 이미지 이해, 음성 인식, 게임 플레이, 로보틱스를 포함하는 다양한 적용에서 널리 사용되고, 컨볼루션 연산이 발생하는 컨볼루션 계층을 포함하는 계층의 깊은 계층 구조를 사용할 수도 있다. CNN이 예시 목적으로만 사용된다는 점에 유의할 수도 있고, 본 명세서에 개시된 실시형태는 컨볼루션 연산을 수반하는 다른 신경망에 적용될 수도 있다.
도 1에 예시된 예시적인 신경망(100)은 복수의 계층, 예컨대, 제1 컨볼루션 계층(120) 및 제1 정류된 선형 장치(Rectified Linear Unit: ReLU) 계층, 제1 풀링 계층(130), 제2 컨볼루션 계층(140) 및 제2 ReLU 계층, 제2 풀링 계층(150), 평탄화 계층(160), 및 완전히 연결된(fully connected: FC) 계층(170)을 포함한다. 이 예시적인 신경망(100)은 주어진 이미지의 알파벳을 복수의 알려진 알파벳 클래스와 일치시키도록 훈련될 수도 있다. 도 1에 도시된 바와 같이, 문자가 있는 이미지(110)가 신경망(100)에 공급되고 복수의 계층을 통해 변환된다. 마지막 계층(FC 계층(170)은 결국 입력 이미지(110)의 문자와 알려진 알파벳 클래스의 각각 간의 유사도를 나타내는 복수의 점수를 생성한다.
일부 실시형태에서, 입력 이미지(110)는 먼저 입력 텐서로 변환될 수도 있다. 예로서, 입력 이미지(110)가 32×32 픽셀을 포함하고 각각의 픽셀이 3개의 색상 채널(적색, 녹색, 청색)을 갖는다면, 이의 대응하는 입력 텐서의 크기는 32×32×3, 높이는 32, 폭은 32, 깊이(예를 들어, 채널의 수)는 3일 수도 있다. 설명의 용이성을 위해, 3차원 크기가 HWC 포맷으로 불릴 수도 있고, H는 입력 텐서의 높이(예를 들어, 이전의 이미지 실시예에서 32)를 나타내고, W는 입력 텐서의 폭(예를 들어, 이전의 이미지 실시예에서 32)를 나타내고, C는 입력 텐서의 채널의 수(예를 들어, 이전의 이미지 실시예에서 3)를 나타낸다. 일부 경우에, 컨볼루션 계층을 위한 다수의 입력 텐서가 있다면(예를 들어, 컨볼루션 계층에 입력된 다수의 이미지가 있거나, 또는 이전의 계층으로부터 수용된 다수의 입력 활성화 텐서가 있을 때), 각각의 입력 텐서는 NHWC 포맷으로 나타날 수도 있고, N은 입력 텐서의 배치(batch) 내 입력 텐서의 인덱스를 나타낸다. 다음의 설명에서, N은 명시적으로 달리 언급되지 않는 한 명료성을 위해 생략될 수도 있다(예를 들어, 단 하나의 입력 텐서가 있다고 가정함). N>1인 경우를 포함하도록 실시형태를 확장하는 것은 당업자에게 자명할 수도 있다.
일부 실시형태에서, CNN은 다수의 컨볼루션 계층(예를 들어, 도 1의 제1 컨볼루션 계층(120) 및 제2 컨볼루션 계층(140))을 포함할 수도 있다. 컨볼루션 계층은 입력 텐서(예를 들어, 원래 입력 이미지, 또는 이전의 계층으로부터의 입력 텐서)를 우수한 예측/정렬을 얻는 데 중요한 기능을 손실하는 일 없이 처리하기 더 쉬운 형태로 감소시킨다. 하나 이상의 특징 검출기, 예를 들어, 에지 검출기, 이미지 처리에서의 휨 검출기가 컨볼루션 계층의 컨볼루션 프로세스에 수반될 수도 있다. 이러한 특징 검출기는 필터, 가중치 텐서, 커널로서 지칭될 수도 있고, 이는 이 설명에서 상호 교환적으로 사용된다. 필터의 각각은 입력 텐서와 동일한 수의 채널을 가질 수도 있다. 설명의 용이성을 위해, 본 명세서에는 각각의 필터와 입력 텐서의 채널 수가 같은 것을 표현하기 위해 "복수의 채널 공유"라는 용어를 사용한다. 예를 들어, 입력 텐서는 32×32×3 행렬이고 예시적인 필터는 3×3×3 행렬일 수도 있다. 컨볼루션 프로세스의 상세한 설명은 도 2의 설명을 참조할 수도 있다.
일부 실시형태에서, CNN의 컨볼루션 계층에 뒤이어 CNN에 비선형성을 도입하기 위한 비선형 활성화 함수가 후속될 수도 있다. 예시적인 비선형 활성화 함수는 시그모드, 하이퍼볼릭 탄젠트 및 정류 선형 단위(rectified linear unit: ReLU)를 포함한다. 도 1에 도시된 바와 같이, ReLU 함수(또한 ReLU 계층으로서 지칭될 수도 있음)는 컨볼루션 계층(120 및 140)의 각각을 따른다. ReLU 함수는 요소별 활성화 함수를 적용하여 컨볼루션 계층(120 또는 140)에 의해 생성되는 일부 출력(활성화)을 필터링할 수도 있다. 예를 들어, max(0, x) 함수가 사용되어 컨볼루션 출력에서 모든 음의 활성화를 필터링하고 양의 활성화만을 그 다음의 계층에 공급할 수도 있다. ReLU 함수는 출력 활성화의 크기를 변경하지 않을 수도 있지만, 다음의 계층의 계산 효율을 개선시키기 위해 음의 활성화가 모두 0이 되기 때문에, 활성 뉴런의 수를 제한할 수도 있다.
일부 실시형태에서, CNN은 또한 입력 텐서의 차원을 감소시키는 다양한 계산을 제공하기 위해 하나 이상의 풀링 계층을 포함할 수도 있다. 도 1에서, 신경망(100)의 제1 풀링 계층(130) 및 제2 풀링 계층(150)은 각각 공간 차원(높이 및 폭)을 따라 입력 텐서에 대해 다운 샘플링 연산을 수행할 수도 있지만, 일반적으로 깊이 차원(예를 들어, 채널 수)을 변경하지 않는다.
일부 실시형태에서, 신경망의 완전히 연결된(FC) 계층은 이전의 계층(예를 들어, 도 1의 풀링 계층(150) 또는 컨볼루션 계층)으로부터의 출력으로 표현되는 바와 같은 하이 레벨 특징의 비선형 조합을 학습할 수도 있고 이에 따라 클래스 점수를 계산할 수도 있다. 도 1을 참조하면, 풀링 계층(150)으로부터의 출력은 벡터로 (예를 들어, 평탄화 계층(160)에서) 먼저 평탄화될 수도 있고, 그로부터 해당 공간에서 내재된 비학습 함수는 복수의 클래스에 대한 최종 점수를 계산하기 위해 FC 계층(170)에 의해 학습될 수도 있다. 점수의 각각은 입력 이미지의 알파벳과 대응하는 클래스 간의 정량화된 유사도를 나타낼 수도 있다.
도 2는 다양한 실시형태에 따른 예시적인 컨볼루션 프로세스를 예시한다. 신경망의 일반적인 컨볼루션 프로세스는 하나 이상의 입력 텐서와 복수의 필터를 수용(또는 획득)하고 컨볼루션 프로세스를 수행하여 하나 이상의 출력 텐서를 생성하는 것으로 시작할 수도 있다. 명료성을 위해, 도 2의 예시적인 콘볼루션 프로세스(220)는 하나의 입력 텐서(222), 하나의 필터(224) 및 하나의 출력 텐서(225)를 수반한다. 입력 텐서(222)는 높이(H), 폭(W) 및 채널(C) 수로 표시될 수도 있다. 도 2에 도시된 바와 같이, 입력 텐서(222)는 3×3×3 행렬일 수도 있고, 3의 높이, 3의 폭 및 3인 채널 수를 갖는다. 각각의 채널에서 입력 텐서(222)의 높이 및 폭(예를 들어, 3(H)×3(W))은 2-D 입력 특징 맵으로서 지칭될 수도 있다. {h, w, c}의 투플은 채널(c)에서 2-D 입력 특징 맵의 하나의 요소를 가리킬 수도 있다. 예를 들어, {2,1,1}은 채널(1)에서 2-D 입력 특징 맵의 요소를 가리킬 수도 있고, 위치는 {2,1}(예를 들어, 높이 방향 인덱스가 2, 폭 방향 인덱스가 1)로 규정된다. 필터(224)는 높이(R), 폭(S) 및 채널(C) 수로 표시될 수도 있다. 도 2에서, 필터(224)는 1×1×3 행렬일 수도 있다. 각각의 채널에서 필터(224)의 높이 및 폭(예를 들어, 1(R)×1(S))은 커널(필터(224)가 각각 3개의 채널에서 3개의 커널을 가짐)로서 지칭될 수도 있다.
일부 시나리오에서, 컨볼루션 프로세스는 스트라이드 및 패딩을 포함할 수도 있다. 예를 들어, 스트라이드가 1일 때, 필터는 한번에 하나의 픽셀을 컨볼빙(예를 들어, 이동, 활주)하고, 스트라이드가 2일 때, 필터는 픽셀이 활주됨에 따라 한번에 2개의 픽셀을 컨볼빙한다. 더 큰 스트라이드는 공간적으로 더 작은 출력 텐서(출력 텐서에서 더 작은 H×W)를 생성한다. 또 다른 실시예로서, 필터의 공간적 크기(높이×폭)가 1×1(예를 들어, 3×3 또는 5×5)보다 더 클 때, 입력 텐서가 이의 경계 주위를 0으로 패딩하여 필터를 적용하고 출력 텐서의 공간적 크기를 제어하여, 예를 들어, 입력 텐서의 공간적 크기를 보존해서 입력 및 출력 높이와 폭이 동일할 수도 있다. 도 2에서, 패딩이 입력 텐서(222)에 대해 수행되지 않고 스트라이드가 1이라고 가정한다.
도 2에 도시된 컨볼루션 프로세스(220) 동안, MAC 연산이 필터(224) 및 입력 텐서의 각각의 깊이방향 슬라이스, 예컨대, 제1 깊이방향 슬라이스(223)에서 수행되어 내적, 예컨대, 내적(228)을 생성한다. 예를 들어, 입력 텐서(222)의 제1 깊이방향 슬라이스(223)는 입력 텐서(222)의 상단 좌측에서 1×1×3 텐서이다(3개의 회색 큐브). 제1 깊이방향 슬라이스(223)와 필터(224) 둘 다는 1×1×3의 크기를 갖는다. MAC 연산 후, 생성된 내적(228)은 출력 텐서(225)의 부분으로서 조립될 수도 있다. 이와 같이, 출력 텐서(225)는 필터(224)가 입력 텐서(222)의 모든 깊이방향 슬라이스(도 2에서 9개의 슬라이스)를 통해 컨볼빙(예를 들어, 이동)한 후 결정될 수도 있다. 출력 텐서(225)에서 채널의 수는 컨볼루션 동안 적용되는 필터의 수와 동일하다. 컨볼루션 프로세스(220)가 하나의 필터(224)만을 사용하기 때문에, 대응하는 출력 텐서(228)는 하나의 채널만을 갖는다.
비교 시, 컨볼루션 프로세스(260)는 2개의 필터(264 및 265)를 수반한다. 입력 텐서(262)를 통해 필터(264)를 컨볼빙함으로써, 제1 채널의 출력 텐서(268)(예를 들어, 채널(1)의 2-D 출력 특징 맵)의 값이 결정될 수도 있다. 입력 텐서(262)를 통해 필터(265)를 컨볼빙함으로써, 제2 채널의 출력 텐서(268)(예를 들어, 채널(2)의 2-D 출력 특징 맵)의 값이 결정될 수도 있다. 따라서, 결과적으로 발생된 출력 텐서(268)는 2-D 출력 특징 맵의 2개의 채널을 포함한다.
컨볼루션 프로세스 동안 일부 연산이 병렬화될 수도 있다는 것에 유의할 수도 있다. 예를 들어, 상이한 필터가 상이한 출력 채널을 위한 2-D 출력 특징 맵을 생성하기 때문에 필터에서 수행되는 MAC 연산은 또 다른 필터 중 필터와 관계없다. 또 다른 실시예로서, 입력 텐서의 깊이방향 슬라이스는 이들이 각각의 2-D 출력 특징 맵의 상이한 위치에 대한 값을 생성하기 때문에 서로 관계없다. 이론적으로 이상적인 병렬성은 모든 이 연산이 복수의 처리 엔티티(예를 들어, 프로세서, 코어 또는 스레드) 간에 병렬화될 수 있다면 달성될 수도 있다. 그러나, 실세계의 적용이 다수의 필터 및 대량의 입력 텐서를 가질 수도 있기 때문에, 이론적으로 이상적인 병렬성을 추구하는 것은 도달 불가능한 계산력을 가진(예를 들어, 막대한 수의 처리 엔티티 및 메모리 교환 메커니즘을 가진) 하드웨어를 필요로 할 수도 있다. 다음에 개시된 실시형태는 더 확장 가능하고 실용적인 방식인, 주어진 하드웨어의 병렬 처리 능력을 완전히 활용함으로써 이상적인 병렬성을 달성하는 방법(그리고 대응하는 시스템, 저장 매체)을 제공한다.
도 3은 다양한 실시형태에 따른, 신경망 계층의 예시적인 도면(300) 및 가중치 프루닝과 활성화 프루닝의 예시적인 도면(340)을 예시한다. 도면(300)은 신경망 계층, 구체적으로, 컨볼루션 계층의 개략도를 나타낸다. 도 3의 컨볼루션 계층은 (1) 하나 이상의 입력 텐서의 입력값을 나타낼 수도 있는, x1, x2 및 x3으로서 표기되는 복수의 입력 활성화(312)(예를 들어, 입력 텐서의 입력값), (2) 필터/가중치 텐서/특징 추출기의 가중치를 나타낼 수도 있는, W1,1로서 표기되는 하나 이상의 가중치(314), (3) 임의로, 활성화(312)를 (가중치(314)와 함께) 조정하기 위한 하나 이상의 바이어스(316), (3) 뉴런이 활성화되거나 또는 활성화되지 않아야 하는지를 결정하는 활성화 함수(318) 및 (4) y1, y2 및 y3으로서 표기되는 복수의 출력 활성화(320)(예를 들어, 출력 텐서의 출력값)를 포함한다. 도면(300)은 예시적인 목적을 위해 하나의 가중치(314)만을 나타내고 더 많은 가중치를 포함할 수도 있다. 예시적인 활성화 함수(318)는 시그모드, 하이퍼볼릭 탄젠트(TanH), ReLu 또는 또 다른 적합한 활성화 함수를 포함할 수도 있다.
도 3의 도면(340)은 가중치 프루닝(342) 및 활성화 프루닝(344)을 가진 예시적인 신경망을 예시한다. 가중치 프루닝(342) 및 활성화 프루닝(344)은 희소성을 컨볼루션 프로세스에 도입하여 에너지를 감소시키고 더 높은 처리량을 실현시킬 수도 있다. 도시된 바와 같이, 가중치 프루닝(342)이 필터의 0이 아닌 가중치의 수를 감소시킬 수도 있으므로 더 적은 수의 컨볼루션 연산이 입력 활성화(예를 들어, x1, x2, x3)와 가중치 간에 수행되어야 한다. 일부 실시형태에서, 활성화 프루닝(344)은 마스크(예를 들어, t1, t2, t3)를 출력 활성화(예를 들어, y1, y2, y3)에 적용하는 것을 수반할 수도 있다. 마스크는 0으로서 출력 활성화의 일부를 설정할(예를 들어, 출력을 비활성화시킬) 수도 있다. 도 3에서, 마스크(t2)가 출력 활성화(y2)를 0으로서 설정하고, 반면에 마스크(t1 및 t3)는 대응하는 출력 활성화(y1 및 y3)를 변경하지 않는다. 이 방식으로, 결과적인 출력 활성화가 프루닝되어 일부 0인 값을 포함하고, 이는 그 다음의 계층을 위한 계산 비용을 감소시키는 것을 도울 수도 있다.
그러나, 도 3에 예시된 마스크 기반 방법은 0이 아닌 출력 활성화의 균형을 유지(예를 들어, 고르게 분포)하는 것을 실패할 수도 있다. 컨볼루션 프로세스가 일반적으로 다수의 프로세서를 사용하여 병렬 처리 아키텍처에서 실행되기 때문에, 불균형 출력 활성화는 프로세서 간의 워크로드 불균형을 초래할 수도 있고 아키텍처의 확장성 및 처리량을 제한할 수도 있다. 다음의 설명에서, 워크로드 균형 활성화 프루닝 방법 및 아키텍처가 예시적인 실시형태와 함께 설명된다.
도 4는 다양한 실시형태에 따른 워크로드 균형 활성화 프루닝을 위한 예시적인 도면을 예시한다. 예시적인 신경망 계층(400)은 도 3의 예시적인 신경망 계층(300 또는 340)의 또 다른 뷰를 나타낼 수도 있다. 예시적인 신경망 계층(400)은 입력 텐서(X)와 복수의 필터/가중치 텐서 간의 컨볼루션 프로세스로 시작할 수도 있고, 임의로 출력 활성화를 생성하기 전에 바이어스 계층을 수반하여 컨볼루션 결과를 조정할 수도 있다. 예로서 필터(W1) 중 하나를 취하여, 입력 텐서(X)와 필터(W1) 간의 컨볼루션 프로세스(대응하는 바이어스 텐서(B1)와 함께)는 출력 텐서(Y1)의 일부를 생성할 수도 있다.
일부 실시형태에서, 출력 텐서(Y1)의 부분은 표(410)로서 표현된 조밀 활성화 행렬일 수도 있다. 행렬(410)은 행렬이 다수의 0이 아닌 값을 포함할 수도 있기 때문에 "조밀"하다. 일부 실시형태에서, 조밀 행렬(410)은 출력값의 하나 이상의 뱅크를 구성함으로써 균형 잡힌 희소 활성화 행렬(420)으로 프루닝될 수도 있고, 뱅크의 각각은 동일한 수의 0이 아닌 출력값을 포함한다. 도 4에 도시된 바와 같이, 출력값의 2개의 뱅크는 조밀 행렬(410)의 각각의 행에 기초하여 구성될 수도 있다. 조밀 행렬(410)의 각각의 행이 8개의 0이 아닌 출력값을 포함할 수도 있고, 2개의 뱅크가 행을 고르게 분할할 수도 있으므로 각각의 뱅크는 4개의 0이 아닌 출력값을 포함한다.
일부 실시형태에서, 균형 잡힌 방식으로 활성화를 프루닝하기 위해, 각각의 뱅크의 동일한 수의 출력값이 0이 아닌 값으로 유지될 수도 있고, 다른 출력값이 0으로 프루닝될 수도 있다. 일부 실시형태에서, 각각의 뱅크에서 0이 아닌 값으로 유지될 출력값은 상단-K 정렬 작업에 의해 결정될 수도 있다. 각각의 뱅크의 상단-K 정렬 작업은 가장 큰 크기를 가진 K개의 0이 아닌 값을 선택하여 이들의 값을 유지할 수도 있고, 다른 0이 아닌 값은 0으로 설정될 수도 있다. 도 4에 도시된 바와 같이, 제1 뱅크는 조밀 행렬(410)의 상단 좌측 4개의 0이 아닌 값(0.2, 0.1, -0.4 및 0.8)으로 구성될 수도 있다. 제1 뱅크의 상단-2 정렬(예를 들어, K=2)은 이 경우에 -0.4 및 0.8인, 가장 큰 크기(예를 들어, 절대값)를 가진 2개의 0이 아닌 값을 검출할 수도 있다. 후속하여, 제1 뱅크의 -0.4 및 0.8이 유지되지만, 뱅크의 다른 값(0.2 및 0.1)은 0으로 프루닝된다. 동일한 프로세스가 다른 뱅크에서 동시에 실행되어 균형 잡힌 희소 활성화 행렬(420)을 생성할 수도 있다.
위에서 설명된 활성화 프로세스는 원하는 결과를 달성하기 위해 다양한 방식으로 맞춤화될 수도 있다. 예를 들어, K의 값은 더 많은 0이 아닌 활성화가 선호된다면 큰 수로 또는 더 큰 희소성이 선호된다면 작은 수로 구성될 수도 있다. 또 다른 실시예로서, 뱅크의 크기는 0이 아닌 활성화가 출력 텐서에서 분포되는 방식을 결정하도록 구성될 수도 있다.
설명의 명료성을 위해, 계층(400)의 출력 활성화는 H×W×C 출력 텐서(430)로서 표현될 수도 있고, H는 높이 치수이고, W는 폭 치수이고, C는 채널 치수이다. 일부 실시형태에서, 출력 텐서(430)의 치수의 각각은 군으로 세분화될 수도 있다. 예를 들어, 출력 텐서(430)의 H 치수는 3개의 군으로 분할될 수도 있고, 각각의 군은 Hg(높이 군)로서 표기된다. 유사하게, W 치수는 3개의 Wg(폭 군)로 분할될 수도 있고, C 치수는 3개의 Cg(채널 군)로 분할될 수도 있다. 도 4에서, Y1 활성화가 출력 텐서의 최우측 평면(432)에 대응하고, 따라서 최우측 평면(432)이 프루닝 전 조밀 활성화 행렬(410) 또는 프루닝 후 균형 잡힌 희소 활성화 행렬(420)로서 표현될 수도 있다고 가정한다. 도 4는 뱅크의 하나의 예시적인 구성을 나타내고, 각각의 Hg×Wg×Cg 서브-텐서는 뱅크를 형성한다. 예를 들어, 평면(432)의 공유된 Hg×Wg×Cg 부분은 균형 잡힌 희소 행렬(420)의 상단 좌측 뱅크로서 표현될 수도 있는 뱅크로서 지칭될 수도 있다. 구현예에 따라, 뱅크는 Hg, Wg 및 Cg를 상이한 값으로 구성함으로써 상이한 형상을 가질 수도 있다. 일부 실시형태에서, Cg는 1(적어도 2)보다 더 큰 정수로 구성될 수도 있고, Hg는 0보다 더 큰 정수로 구성될 수도 있고, Wg는 0보다 더 큰 정수로 구성될 수도 있다.
도 5는 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 예시적인 시스템 도면을 예시한다. 도 5에 도시된 아키텍처는 신경망이 로딩되고 실행될 때 추론을 수행하도록 설계된 컴퓨터 시스템을 포함한다. 일부 실시형태에서, 이러한 컴퓨터 시스템은 하드웨어 가속기(500)로서 구현된다. 하드웨어 가속기(500)의 일부 컴포넌트는 복수의 처리 엔티티의 병렬 컨볼루션 계산을 용이하게 함으로써 신경망의 처리량 및 에너지 효율을 개선시키는 특정한 방식으로 협력할 수도 있다. 가속기(500)는 단지 예시적이고 더 많거나, 더 적거나 또는 대안적인 컴포넌트를 포함할 수도 있다. 하드웨어 가속기(500)는 재구성 가능한 디바이스, 예컨대, 필드-프로그래밍 가능한 게이트 어레이(field-programmable gate array: FPGA) 또는 응용 주문형 집적 회로(application-specific integrated circuit: ASIC)로서 설계될 수도 있다.
도 5에 도시된 바와 같이, 하드웨어 가속기(500)는 오프-칩 컴포넌트, 예컨대, 호스트 CPU(510)와 이중 데이터 속도(double data rate: DDR) 메모리(520)와의 상호작용 및 가속기(500) 내 작업 흐름을 제어하는 스케줄러(570)를 포함할 수도 있다. 예를 들어, 가속기(500)는 PCIe((peripheral component interconnect express) 물리 계층(physical layer: PHY) 제어기(512)를 통해 호스트 CPU(510), 그리고 DDR 인터페이스(530)를 통해 오프-칩 DDR 메모리(520)와 상호작용할 수도 있다. 가속기(500)는 데이터를 오프-칩 DDR 메모리(520)로부터 DDR 인터페이스(530)를 통해 오프-칩 DDR 메모리(520)와 통신하는 직접 메모리 액세스(direct memory access: DMA) 제어기(540)를 통해 페치할(fetch) 수도 있다. 패치된 데이터는 글로벌 버퍼(550)로 불리는 온-칩 버퍼에 저장되어 병렬 컨볼루션 계산을 준비할 수도 있다. 글로벌 버퍼(550)는 다수의 부분, 예컨대, 입력 버퍼(552), 가중치 버퍼(554) 및 출력 버퍼(556)로 논리적으로 분할될 수도 있다. 입력 버퍼(552)는 입력 텐서와 연관된 데이터를 저장할 수도 있고, 가중치 버퍼(554)는 필터와 연관된 데이터를 저장할 수도 있고, 출력 버퍼(556)는 컨볼루션 계산(예를 들어, 출력 텐서)의 결과와 연관된 데이터를 저장할 수도 있다. 글로벌 버퍼(550)는 희소 처리 장치(Sparse Processing Unit: SPU)(562)의 어레이(560)와 데이터를 교환하여 컨볼루션 계산을 수행할 수도 있다. SPU의 명칭에서 "희소"는 SPU 어레이(560)가 희소성(예를 들어, 희소 입력 텐서 및/또는 희소 필터)을 수반한 컨볼루션 계산을 효율적으로 수행하도록 특히 설계된다는 것을 나타낸다. SPU(562)의 각각은 복수의 처리 엔티티(processing entity: PE)(580)를 포함할 수도 있고, 각각의 PE(580)는 컨볼루션 계산의 단위량을 처리할 수도 있다.
일부 실시형태에서, SPU(562)의 각각은 내부의 복수의 PE(580)에 의해 수행되는 컨볼루션 계산의 출력값을 프루닝하는 모듈을 더 포함할 수도 있다. 예를 들어, 도 5의 "조밀2희소성"은, (복수의 PE(580)에 의해 생성되는) 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 방법으로서, 뱅크의 각각이 복수의 출력값 중 하나 이상의 출력값을 포함하는, 방법; 뱅크의 각각에 대해, K개의 0이 아닌 출력값을 획득하기 위해 뱅크의 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 방법으로서, K가 0보다 더 큰 양의 정수인, 방법; 및 뱅크의 획득된 K개의 0이 아닌 출력값 이외의 하나 이상의 출력값을 0으로서 설정함으로써 뱅크의 각각을 프루닝하는 방법을 사용하여 복수의 PE(580)로부터 출력값을 프루닝할 수도 있다. 일부 실시형태에서, 하나의 K는 신경망의 하나의 계층에 대응할 수도 있다. 즉, 신경망의 상이한 계층은 상이한 K 값을 가질 수도 있다. 계층에 대한 K 값은 기계 학습을 통해 학습될 수도 있다.
일부 실시형태에서, 하나 이상의 뱅크는 크기가 동일하고(예를 들어, 각각의 뱅크는 동일한 수의 출력값을 포함함), 프루닝 후 동일한 수의 0이 아닌 출력값을 포함할 수도 있다. 각각의 뱅크 내 0이 아닌 출력값의 위치가 무작위적일 수도 있지만, 각각의 뱅크 내 0이 아닌 출력값의 총수(예를 들어, 1보다 더 큰 정수 K)는 동일할 수도 있다.
도 6a는 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 출력 텐서를 생성하기 위한 예시적인 시스템 아키텍처(600)를 예시한다. 예시적인 시스템 아키텍처(600)는 컨볼루션 계산을 동시에 수행하도록 구성된 복수의 PE(630), 복수의 PE(630)에 의해 생성된 출력(예를 들어, 부분적인 합)에 대한 추가를 수행하도록 구성된 가산기 트리(640), 가산기 트리(640)에 의해 생성된 출력(예를 들어, 출력 텐서에 조립될 출력값)을 누적하도록 구성된 누산기 버퍼(650), 및 누산기 버퍼(650)에 의해 누적된 출력을 프루닝하도록 구성된 상단-K 정렬 디바이스(660)를 포함할 수도 있다. 상단-K 정렬 디바이스(660)에 의해 수행되는 프루닝 프로세스는 0이 아닌 활성화가 균형 잡힌 방식으로 분포되는 희소 출력 활성화(680)를 생성할 수도 있다. 일부 실시형태에서, 상단-K 정렬 디바이스(660)는 도 5의 "조밀2희소성" 모듈(564)에 대응할 수도 있다. 일부 실시형태에서, 가산기 트리(640)는 디바이스의 일부, 또는 독립형 디바이스를 나타낼 수도 있다.
다음의 설명은 워크로드 균형 활성화 희소성을 가진 출력 텐서가 컨볼루션 계층에 대해 생성되는 방식을 보여주기 위해 컨볼루션 계층에서 예시적인 컨볼루션 프로세스를 사용한다. 일부 실시형태에서, 예시적인 컨볼루션 프로세스는 입력 텐서(610) 및 가중치 텐서(620)에 기초하여 동시에 곱셈-누적(MAC) 연산을 수행하도록 컨볼루션 계층에서의 입력 텐서(610) 및 하나 이상의 가중치 텐서(620)를 복수의 프로세서(PE(630))에 할당하는 것으로 시작할 수도 있다.
일부 실시형태에서, 입력 텐서(610)는 복수의 서브-텐서로 세분화되고 복수의 PE(630)에 할당될 수도 있고, 가중치 텐서(620)는 복수의 가중치 군으로 세분화되고 유사하게 복수의 PE(630)에 할당될 수도 있다. 일부 실시형태에서, 서브-텐서 및 가중치 군의 "할당"은 PE(630)의 내부 버퍼에 이들을 저장하는 것을 나타낼 수도 있다.
일부 실시형태에서, 할당된 서브-텐서 및 가중치 군을 수용한 후, 복수의 PE(630)는 MAC 연산을 동시에 수행하여 복수의 부분적인 합을 획득할 수도 있다. 이 부분적인 합이 가산기 트리(640)에 공급되어 누산기 버퍼(650)에 누적되고 저장될 수도 있는 하나 이상의 출력값을 획득할 수도 있다. 누산기 버퍼(650)의 출력값이 풀 뱅크(full bank)를 형성하는 데 충분할 때, 출력값은 프루닝을 위해 상단-K 정렬 디바이스(660)에 공급될 수도 있다. 일부 실시형태에서, 뱅크의 크기가 미리 결정된다. 뱅크의 예시적인 구성은 도 4의 설명을 참조할 수도 있다. 일부 실시형태에서, 누산기 버퍼(650)의 출력값 중 일부가 가산기 트리(640)에 피드백되어 PE(630)에 의해 새로 생성된 부분적인 합에 추가될 수도 있다. 일부 실시형태에서, 출력값의 풀 뱅크가 상단-K 정렬 디바이스(660)에 공급될 때, 제어기 또는 스케줄러(예를 들어, 도 5의 스케줄러(570))는 뱅크(670)의 대응하는 인덱스를 상단-K 정렬 디바이스(660)로 전송할 수도 있다. 상단-K 정렬 디바이스(660)에 공급되는 출력값의 1개 초과의 뱅크가 있을 때, 제어기 또는 스케줄러는 뱅크 인덱스(670)의 어레이를 상단-K 정렬 디바이스(660)로 전송할 수도 있다.
뱅크의 크기 및 입력 텐서(610)/가중치 텐서(620)의 세분화의 입도에 따라, 누산기 버퍼(650)는 상이한 속도로 출력값의 풀 뱅크를 생성할 수도 있다. 일부 실시형태에서, 복수의 PE(630)는 출력값의 하나의 풀 뱅크를 누적하는 누산기 버퍼(650)에 대한 복수의 사이클(또한 병렬 처리 사이클로 불림) 동안 병렬 컨볼루션 프로세스를 수행해야 할 수도 있다. 일부 실시형태에서, 누산기 버퍼(650)는 각각의 병렬 처리 사이클 동안 복수의 PE(630)에 의해 생성되는 부분적인 합에 기초하여 출력값의 하나 이상의 풀 뱅크를 누적할 수도 있다.
풀 뱅크의 생성 속도와 세분화의 입도 간의 관계의 설명을 간략화하기 위해, 단 하나의 입력 텐서가 있고 뱅크 크기가 K로서 표시된다고 가정한다. 예를 들어, PE가 각각의 병렬 처리 사이클 동안 하나의 가중치 텐서 및 대응하는 입력값을 동시에 처리한다면, 출력값의 하나의 풀 뱅크는 모든 K개의 병렬 처리 사이클 동안 누적될 수도 있다. 또 다른 실시예로서, PE가 각각의 병렬 처리 사이클 동안 K개의 가중치 텐서 및 대응하는 입력값을 동시에 처리한다면, 출력값의 하나의 풀 뱅크는 모든 병렬 처리 사이클 동안 생성될 수도 있다. 추가의 또 다른 실시예로서, PE가 각각의 병렬 처리 사이클 동안 N×K개의 가중치 텐서 및 대응하는 입력값을 동시에 처리한다면, 출력값의 N개의 풀 뱅크는 각각의 병렬 처리 사이클 동안 생성될 수도 있다.
일부 실시형태에서, 상단-K 정렬 디바이스(680)는 뱅크의 출력값의 크기에 대한 상단-K 정렬 논리를 수행하여 가장 큰 크기를 가진 K개의 출력값을 획득한다. 상단-K 정렬 논리는 다음의 소프트웨어 정렬 알고리즘, 즉, 더미-정렬 알고리즘, 합병 정렬 알고리즘, 신속 정렬 알고리즘, 또 다른 적합한 정렬 알고리즘 중 적어도 하나와 결합된 하드웨어 기반 바이토닉 정렬기에 의해 구현될 수도 있다. 일부 실시형태에서, K개의 출력값은 있는 그대로(예를 들어, 원래의 0이 아닌 값으로서) 유지될 수도 있고, 다른 출력값은 0으로서 프루닝될 수도 있다. 각각의 뱅크가 N개의 출력값을 갖는다고 가정하면, 위에서 설명된 프루닝 프로세스는 가장 큰 크기의 K개의 0이 아닌 값 및 (N-K)개의 0인 값을 가진 각각의 뱅크를 남길 수도 있다. 희소성을 뱅크에 받아들이고 0이 아닌 출력값(0이 아닌 활성화)을 균형 잡힌 방식으로 분포시킴으로써, 뱅크로부터 조립된 출력 활성화는 워크로드 균형 활성화 희소성을 가진 입력 텐서를 그 다음의 컨볼루션 계층에 제공할 수도 있다.
일부 실시형태에서, 프루닝된 뱅크는 컨볼루션 계층의 출력 텐서를 구성하도록 조립될 수도 있다. 출력 텐서는 희소하고 균형 잡힌다(예를 들어, 0이 아닌 활성화는 뱅크 간에 균형 잡힌 방식으로 분포된다). 이것은 복수의 PE가 워크로드를 고르게 분포시키게 함으로써 그 다음의 컨볼루션 계층에서 병렬 컨볼루션 처리에 도움이 될 것이다.
도 6b는 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 출력 텐서를 생성하기 위한 예시적인 흐름도를 예시한다. 도 6의 흐름도는 하나의 병렬 처리 사이클 동안 컨볼루션 계층에서 컨볼루션 프로세스의 간략화된 버전을 나타낸다. 간략성 및 명료성을 위해, H×W×C 입력 텐서(610)가 4개의 Hg×Wg×Cg 입력 서브-텐서(예를 들어, 도 6에서 입력 텐서(610)의 음영 처리된 영역)로 이미 세분화되었고, 가중치 군(620)이 입력 서브-텐서와 동일한 치수를 공유하는 4개의 가중치 텐서를 포함하고, MAC 연산을 동시에 수행하기 위해 이용 가능한 4개의 PE(630)가 있다고 가정한다. 이 가정은 실제 사용 경우에 따라 완화되거나 또는 변경될 수도 있고, 작업 흐름에 대한 필수적인 조정이 이에 따라 구현될 수도 있다.
일부 실시형태에서, 하나의 병렬 처리 사이클 동안, PE(630)의 각각은 가중치 군(620)의 하나의 가중치 텐서 및 하나의 입력 서브-텐서를 처리할 수도 있다. 여기서, "처리"는 입력 서브-텐서의 입력값과 가중치 텐서의 가중치 간의 MAC 연산을 수행하는 것을 나타낼 수도 있다. PE(630)는 이들의 국부적 MAC 연산을 동시에 수행할 수도 있다. 일부 실시형태에서, PE(630)는 MAC 연산 후 복수의 부분적인 합을 생성할 수도 있다. 이 부분적인 합은 출력값을 획득하기 위해 다수의 부분적인 합을 함께 추가하는 것과 같이, 필수적인 추가를 수행하도록 가산기 트리 디바이스(632)에 공급될 수도 있다. 일부 실시형태에서, 가산기 트리 디바이스(632)에 의해 생성되는 출력값은 누적을 위해 누산기 버퍼(634)에 공급될 수도 있다. 누산기 버퍼(634)는 출력값의 풀 뱅크(640)를 생성하기 위해 출력값을 계속해서 누적할 수도 있다. 일부 실시형태에서, 뱅크의 크기는 미리 결정될 수도 있다.
일부 실시형태에서, 시스템 아키텍처, 입력/가중치 텐서 세분화 및 워크로드 분포는 출력값의 풀 뱅크를 생성하는 효율을 개선시키는 방식으로 구성될 수도 있다. 도 6에 도시된 실시예에서, 각각의 PE(630)는 병렬 처리 사이클 동안 하나의 출력값을 생성하는, 입력 서브-텐서와 가중치 텐서의 하나의 조합을 처리하고; 병렬 처리 사이클 동안 4개의 PE(630)로부터 생성되는 4개의 출력값은 하나의 뱅크(640)를 형성할 수도 있다. 이 방식으로, 도 6의 예시적인 설정은 각각의 병렬 처리 사이클 후에 출력값의 하나의 뱅크(640)를 생성할 것이다. 일부 실시형태에서, 입력 텐서(610)와 가중치 군(620) 간의 컨볼루션 프로세스가 완료될 때까지 가중치 텐서 및/또는 입력 서브-텐서는 복수의 병렬 처리 사이클 동안 PE(630) 간에 로테이션될 수도 있다. 복수의 병렬 처리 사이클 동안 PE(630)에 의해 생성되는 복수의 뱅크가 프루닝되고 조립되어 컨볼루션 계층의 출력 텐서를 형성할 수도 있다.
일부 실시형태에서, 출력값의 뱅크(640)는 프루닝을 위해 상단-K 정렬 컴포넌트(642)에 공급될 수도 있다. 상단-K 정렬 컴포넌트(642)가 뱅크(640)의 출력값에 대해 상단-k 정렬 작업을 수행하여 가장 큰 크기(예를 들어, 절대값)를 가진 K개의 출력값을 식별할 수도 있다. 구현예에 따라, 상단-K 정렬 컴포넌트(642), 가산기 트리(632) 및 누산기 버퍼(634)는 별개의 디바이스로서 또는 통합된 디바이스의 부분으로서 구현될 수도 있다. 이 K개의 출력값은 이들의 값을 유지할 수도 있고, 뱅크(640)의 다른 출력값은 0으로 프루닝될 수도 있다. 예를 들어, 도 6의 누산기 버퍼(634)로부터 생성되는 뱅크(640)는 4개의 0이 아닌 출력값(음영 처리됨)을 포함할 수도 있고 상단-2 정렬이 수행된 후 희소 뱅크(650)로 프루닝될 수도 있다. 상단-2 정렬은 가장 큰 크기를 가진 4개의 출력값으로부터 2개를 식별할 수도 있고 다른 2개의 값을 0으로서 설정할 수도 있다.
일부 실시형태에서, 뱅크(640)가 상단-K 정렬 작업에 의해 희소 뱅크(650)로 프루닝된 후, 결과적인/희소 뱅크(650) 내 K개의 0이 아닌 값은 내부에서 고르게 분포되기 위해 필요하지 않을 수도 있다. 그러나, 각각의 희소 뱅크(650)가 동일한 수의 0이 아닌 출력값(활성화)을 포함하기 때문에, 모든 희소 뱅크에 기초하여 조립된 출력 텐서는 균형 잡히고 희소할 것이다. 희소 출력 텐서가 그 다음의 컨볼루션 계층을 위한 입력 텐서가 될 때, 복수의 PE는 컨볼루션을 동시에 수행하기 위해 할당된 균형 잡힌 워크로드일 수도 있다(예를 들어, 각각의 PE는 각각의 병렬 처리 사이클 동안 동일한 수의 0이 아닌 입력값을 수용한다).
도 7은 다양한 실시형태에 따른 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 예시적인 방법을 예시한다. 방법(700)은 자원 할당을 최적화하기 위한 디바이스, 장치 또는 시스템에 의해 수행될 수도 있다. 방법(700)은 도 5의 하드웨어 가속기(500)와 같은, 도 1 내지 도 6에 의해 예시된 환경 또는 시스템의 하나 이상의 모듈/컴포넌트에 의해 수행될 수도 있다. 아래에 제공된 방법(700)의 작동은 예시적인 것으로 의도된다. 구현예에 따라, 방법(700)은 다양한 순서로 또는 동시에 수행되는 부가적인, 더 적은 또는 대안적인 단계를 포함할 수도 있다.
블록(710)은 입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(MAC) 연산을 동시에 수행하도록 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것을 포함한다. 일부 실시형태에서, 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것은, 신경망의 컨볼루션 계층에서 입력 텐서 및 복수의 가중치 텐서를 획득하는 것; 입력 텐서를 복수의 서브-텐서로 세분화하고 복수의 서브-텐서를 복수의 프로세서에 할당하는 것; 및 복수의 가중치 텐서를 복수의 가중치 군으로 세분화하고 복수의 가중치 군을 복수의 프로세서에 할당하는 것을 포함한다. 일부 실시형태에서, 복수의 서브-텐서 및 복수의 가중치 군을 복수의 프로세서에 할당하는 것은, 복수의 프로세서의 각각에 대해, 복수의 서브-텐서 중 하나 이상 및 복수의 가중치 군 중 하나 이상을 프로세서의 내부 버퍼에 저장하는 것을 포함한다.
일부 실시형태에서, 복수의 가중치 군을 복수의 프로세서에 할당하는 것은, 복수의 병렬 처리 사이클의 각각 동안, 동시에 복수의 서브-텐서 및 복수의 가중치 군 중 하나 이상에 기초하여 복수의 프로세서가 MAC 연산을 수행하도록 복수의 가중치 군 중 하나 이상을 복수의 프로세서에 할당하는 것을 포함한다. 일부 실시형태에서, 하나 이상의 뱅크의 각각은 복수의 가중치 군 중 하나에 기초하여 생성되는 출력값에 대응한다.
블록(720)은 MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것을 포함한다. 일부 실시형태에서, MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것은, 복수의 병렬 처리 사이클의 각각 동안 복수의 프로세서에 의해 수행되는 MAC 연산의 결과로서 복수의 부분적인 합을 획득하는 것; 복수의 부분적인 합을 가산기 트리 디바이스에 공급하여 하나 이상의 출력값을 획득하는 것; 및 복수의 병렬 처리 사이클 중 하나 이상 동안 누적 버퍼에 하나 이상의 출력값을 저장하여 복수의 출력값을 획득하는 것을 포함한다.
블록(730)은 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 것을 포함하고, 뱅크의 각각은 복수의 출력값 중 하나 이상을 포함한다. 일부 실시형태에서, 뱅크의 각각은, 0보다 더 큰 높이-치수; 0보다 더 큰 폭-치수; 및 0보다 더 큰 채널-치수를 포함한다. 일부 실시형태에서, 방법은 뱅크의 각각에 K개의 0이 아닌 출력값을 각각 K개의 다차원 벡터로서 나타내는 단계를 더 포함할 수도 있고, K개의 다차원 벡터의 각각은 0이 아닌 출력값 및 뱅크 내 0이 아닌 출력값의 대응하는 채널-치수 식별자를 포함한다. 일부 실시형태에서, 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 것은, 뱅크의 각각의 K개의 다차원 벡터를 조립하여 출력 텐서를 형성하는 것을 포함한다.
블록(740)은 뱅크의 각각에 대해, 뱅크에서 하나 이상의 출력값에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것을 포함하고, K는 양의 정수이다. 일부 실시형태에서, 뱅크에서 출력값에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것은, 뱅크에서 출력값의 크기에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것을 포함한다.
블록(750)은 각각의 뱅크에서 획득된 K개의 출력값 이외에 하나 이상의 출력값을 0으로서 설정함으로써 뱅크의 각각을 프루닝하는 것을 포함한다.
블록(760)은 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 것을 포함한다. 일부 실시형태에서, 프루닝된 뱅크의 각각은 뱅크 식별자와 연관되고, 프루닝된 뱅크에 기초하여 컨볼루션 계층의 출력 텐서를 구성하는 것은, 대응하는 뱅크 식별자에 기초하여 뱅크의 각각의 K개의 다차원 벡터를 조립하여 출력 텐서를 형성하는 것을 포함한다. 일부 실시형태에서, 출력 텐서는 희소 텐서이다.
도 8은 본 명세서에서 설명된 실시형태 중 임의의 실시형태가 구현될 수도 있는 예시적인 컴퓨팅 디바이스를 예시한다. 컴퓨팅 디바이스는 도 1 내지 도 7에 도시된 방법 및 시스템의 하나 이상의 컴포넌트를 구현하도록 사용될 수도 있다. 컴퓨팅 디바이스(800)는 정보를 전달하기 위한 버스(802) 또는 다른 통신 기구 및 정보를 처리하기 위해 버스(802)와 결합된 하나 이상의 하드웨어 프로세서(804)를 포함할 수도 있다. 하드웨어 프로세서(들)(804)는 예를 들어, 하나 이상의 범용 마이크로프로세서일 수도 있다.
컴퓨팅 디바이스(800)는 또한 프로세서(들)(804)에 의해 실행될 명령어 및 정보를 저장하기 위해 버스(802)에 결합된, 주 메모리(807), 예컨대, 랜덤-액세스 메모리(random-access memory: RAM), 캐시 및/또는 다른 동적 저장 디바이스를 포함할 수도 있다. 주 메모리(807)는 또한 프로세서(들)(804)에 의해 실행될 명령어의 실행 동안 일시적인 변수 또는 다른 중간 정보를 저장하기 위해 사용될 수도 있다. 이러한 명령어는, 프로세서(들)(804)에 접근 가능한 저장 매체에 저장될 때, 컴퓨팅 디바이스(800)를 명령어에 명시된 연산을 수행하도록 맞춤화되는 특수 목적 기계로 렌더링할 수도 있다. 주 메모리(807)는 비휘발성 매체 및/또는 휘발성 매체를 포함할 수도 있다. 비휘발성 매체는 예를 들어, 광디스크 또는 자기 디스크를 포함할 수도 있다. 휘발성 매체는 동적 메모리를 포함할 수도 있다. 공통 형태의 매체는 예를 들어, 플로피 디스크, 가요성 디스크, 하드 디스크, 솔리드-스테이트 드라이브, 자기 테이프 또는 임의의 다른 자기 데이터 저장 매체, CD-ROM, 임의의 다른 광학 데이터 저장 매체, 홀의 패턴을 가진 임의의 물리적 매체, RAM, DRAM, PROM 및 EPROM, FLASH-EPROM, NVRAM, 임의의 다른 메모리 칩 또는 카트리지 또는 동일한 것의 네트워킹된 버전을 포함할 수도 있다.
컴퓨팅 디바이스(800)는 컴퓨팅 디바이스와 결합하여 컴퓨팅 디바이스(800)가 특수 목적 기계가 되게 하거나 또는 프로그래밍할 수도 있는 맞춤화된 하드 와이어드 로직, 하나 이상의 ASIC 또는 FPGA, 펌웨어 및/또는 프로그램 로직을 사용하여 본 명세서에서 설명된 기법을 구현할 수도 있다. 하나의 실시형태에 따르면, 본 명세서의 기법은 프로세서(들)(804)가 주 메모리(807)에 포함된 하나 이상의 명령어의 하나 이상의 시퀀스를 실행시키는 것에 응답하여 컴퓨팅 디바이스(800)에 의해 수행된다. 이러한 명령어는 또 다른 저장 매체, 예컨대, 저장 디바이스(809)로부터 주 메모리(807)로 판독될 수도 있다. 주 메모리(807)에 포함된 명령어의 시퀀스의 실행은 프로세서(들)(804)가 본 명세서에서 설명된 과정을 수행하게 할 수도 있다. 예를 들어, 본 명세서에 개시된 과정/방법은 주 메모리(807)에 저장된 컴퓨터 프로그램 명령어에 의해 구현될 수도 있다. 이 명령어가 프로세서(들)(804)에 의해 실행될 때, 명령어는 대응하는 도면에 도시되고 위에서 설명된 바와 같은 단계를 수행할 수도 있다. 대안적인 실시형태에서, 하드 와이어드 회로망은 소프트웨어 명령어와 결합하여 또는 그 대신에 사용될 수도 있다.
컴퓨팅 디바이스(800)는 또한 버스(802)에 결합된 통신 인터페이스(810)를 포함한다. 통신 인터페이스(810)는 하나 이상의 네트워크에 연결되는 하나 이상의 네트워크 링크에 양방향 데이터 통신 결합을 제공할 수도 있다. 또 다른 실시예로서, 통신 인터페이스(810)는 근거리 통신망(local area network: LAN) 카드이므로 데이터 통신 연결을 호환성 LAN(또는 WAN과 통신하는 WAN 컴포넌트)에 제공할 수도 있다. 무선 링크가 또한 구현될 수도 있다.
작동 중 일부의 수행이 프로세서 간에 분포될 수도 있고, 단일의 기계 내에 있을 뿐만 아니라 복수의 기계에 걸쳐 배치된다. 일부 예시적인 실시형태에서, 프로세서 또는 프로세서-구현 엔진은 단일의 지리학적 위치에(예를 들어, 가정 환경, 사무실 환경 또는 서버 팜 내에) 위치될 수도 있다. 다른 예시적인 실시형태에서, 프로세서 또는 프로세서-구현 엔진은 복수의 지리학적 위치에 걸쳐 분포될 수도 있다.
전술한 섹션에서 설명된 과정, 방법 및 알고리즘의 각각은 컴퓨터 하드웨어를 포함하는 컴퓨터 프로세서 또는 하나 이상의 컴퓨터 시스템에 의해 실행되는 코드 모듈에 내장되고, 코드 모듈에 의해 완전히 또는 부분적으로 자동화될 수도 있다. 과정 및 알고리즘은 응용 주문형 회로망에서 부분적으로 또는 전적으로 구현될 수도 있다.
본 명세서에 개시된 기능이 소프트웨어 기능성 장치의 형태로 구현되고 독립 제품으로서 판매되거나 또는 사용될 때, 이들은 프로세서 실행 가능한 비휘발성 컴퓨터-판독 가능한 저장 매체에 저장될 수 있다. 현재의 기술에 기여하는 본 명세서에 (전적으로 또는 부분적으로) 개시된 특정한 기술적 해결책 또는 양상은 소프트웨어 제품의 형태로 구현될 수도 있다. 소프트웨어 제품은 컴퓨팅 디바이스(개인용 컴퓨터, 서버, 네트워크 디바이스 등일 수도 있음)가 본 출원의 실시형태의 방법의 모든 또는 일부 단계를 실행하게 하는 복수의 명령어를 포함한 저장 매체에 저장될 수도 있다. 저장 매체는 플래시 드라이브, 휴대용 하드 드라이브, ROM, RAM, 자기 디스크, 광디스크, 프로그램 코드를 저장하도록 작동 가능한 또 다른 매체, 또는 이들의 임의의 조합을 포함할 수도 있다.
특정한 실시형태는 또한 프로세서, 및 시스템이 위에서 개시된 실시형태의 임의의 방법의 단계에 대응하는 작동을 수행하게 하기 위해 프로세서에 의해 실행 가능한 명령어를 저장하는 비일시적인 컴퓨터-판독 가능한 저장 매체를 포함하는 시스템을 제공한다. 특정한 실시형태는 또한 하나 이상의 프로세서가 위에서 개시된 실시형태의 임의의 방법의 단계에 대응하는 작동을 수행하게 하기 위해 하나 이상의 프로세서에 의해 실행 가능한 명령어로 구성된 비일시적인 컴퓨터-판독 가능한 저장 매체를 제공한다.
본 명세서에 개시된 실시형태는 클라이언트와 상호작용하는, 클라우드 플랫폼, 서버 또는 서버 군(이후에 집합적으로 "서비스 시스템")을 통해 구현될 수도 있다. 클라이언트는 단말기 디바이스, 또는 플랫폼에서 사용자에 의해 등록된 클라이언트일 수도 있고, 단말기 디바이스는 모바일 단말기, 개인용 컴퓨터(personal computer: PC), 및 플랫폼 응용 프로그램이 설치될 수도 있는 임의의 디바이스일 수도 있다.
위에서 설명된 다양한 특징 및 과정은 서로 관계 없이 사용될 수도 있거나 또는 다양한 방식으로 결합될 수도 있다. 모든 가능한 조합 및 하위 조합은 본 개시내용의 범위 내에 속하는 것으로 의도된다. 또한, 특정한 방법 또는 과정 블록은 일부 구현예에서 생략될 수도 있다. 본 명세서에서 설명된 방법 및 과정은 또한 임의의 특정한 시퀀스로 제한되지 않고, 이와 관련된 블록 또는 상태는 적합한 다른 시퀀스로 수행될 수 있다. 예를 들어, 설명된 블록 또는 상태는 구체적으로 개시된 순서와 다른 순서로 수행될 수도 있거나, 또는 다수의 블록 또는 상태는 단일의 블록 또는 상태에 결합될 수도 있다. 예시적인 블록 또는 상태는 순차적으로, 동시에 또는 일부 다른 방식으로 수행될 수도 있다. 블록 또는 상태는 개시된 예시적인 실시형태에 추가되거나 또는 그로부터 제거될 수도 있다. 본 명세서에서 설명된 예시적인 시스템 및 컴포넌트는 설명된 것과는 상이하게 구성될 수도 있다. 예를 들어, 요소는 개시된 예시적인 실시형태와 비교하여 추가되거나, 그로부터 제거되거나 또는 재배열될 수도 있다.
본 명세서에서 설명된 예시적인 방법의 다양한 작동은 적어도 부분적으로 알고리즘에 의해 수행될 수도 있다. 알고리즘은 메모리(예를 들어, 위에서 설명된 비일시적인 컴퓨터-판독 가능한 저장 매체)에 저장된 프로그램 코드 또는 명령어에 포함될 수도 있다. 이러한 알고리즘은 기계 학습 알고리즘을 포함할 수도 있다. 일부 실시형태에서, 기계 학습 알고리즘은 기능을 수행하는 컴퓨터를 분명하게 프로그래밍할 수도 있을 뿐만 아니라 기능을 수행하는 예측 모델을 만들기 위해 훈련 데이터로부터 훈련할 수 있다.
본 명세서에서 설명된 예시적인 방법의 다양한 작동은 적어도 부분적으로 관련된 작동을 수행하도록 (예를 들어, 소프트웨어에 의해) 일시적으로 구성되거나 영구적으로 구성되는 하나 이상의 프로세서에 의해 수행될 수도 있다. 일시적으로 또는 영구적으로 구성되든, 이러한 프로세서는 본 명세서에서 설명된 하나 이상의 작동 또는 기능을 수행하도록 작동하는 프로세서-구현 엔진을 구성할 수도 있다.
유사하게, 본 명세서에서 설명된 방법은 특정한 프로세서 또는 하드웨어의 예인 프로세서로 적어도 부분적으로 프로세서-구현될 수도 있다. 예를 들어, 방법의 작동 중 적어도 일부는 하나 이상의 프로세서 또는 프로세서-구현 엔진에 의해 수행될 수도 있다. 게다가, 하나 이상의 프로세서는 또한 "클라우드 컴퓨팅" 환경에서 또는 "서비스형 소프트웨어"(software as a service: SaaS)로서 관련된 작동의 수행을 지원하도록 작동할 수도 있다. 예를 들어, 작동 중 적어도 일부는 컴퓨터의 군(프로세서를 포함하는 기계의 예로서)에 의해 수행될 수도 있고, 이 작동은 네트워크(예를 들어, 인터넷)를 통해 그리고 하나 이상의 적절한 인터페이스(예를 들어, 애플리케이션 프로그램 인터페이스(Application Program Interface: API))를 통해 접근 가능하다.
작동 중 일부의 수행이 프로세서 간에 분포될 수도 있고, 단일의 기계 내에 있을 뿐만 아니라 복수의 기계에 걸쳐 배치된다. 일부 예시적인 실시형태에서, 프로세서 또는 프로세서-구현 엔진은 단일의 지리학적 위치에(예를 들어, 가정 환경, 사무실 환경 또는 서버 팜 내에) 위치될 수도 있다. 다른 예시적인 실시형태에서, 프로세서 또는 프로세서-구현 엔진은 복수의 지리학적 위치에 걸쳐 분포될 수도 있다.
본 명세서 전반에 걸쳐, 복수의 경우는 단일의 경우로서 설명된 컴포넌트, 작동 또는 구조를 구현할 수도 있다. 하나 이상의 방법의 개별적인 작동이 별개의 작동으로서 예시되고 설명되지만, 개별적인 작동 중 하나 이상이 동시에 수행될 수도 있고, 작동이 예시된 순서로 수행되는 것을 요구하지 않는다. 예시적인 구성에서 별개의 컴포넌트로서 제공되는 구조 및 기능은 결합된 구조 또는 컴포넌트로서 구현될 수도 있다. 유사하게, 단일의 컴포넌트로서 제공되는 구조 및 기능은 별개의 컴포넌트로서 구현될 수도 있다. 이러한 다른 변형, 변경, 추가 및 개선은 본 명세서의 주제의 범위 내에 속한다.
본 명세서에서 사용될 때, "또는"은 달리 분명히 나타내거나 또는 문맥에 의해 달리 나타내지 않는 한, 포괄적이고 배타적이지 않다. 따라서, 본 명세서에서, "A, B 또는 C"는 달리 분명히 나타내거나 또는 문맥에 의해 달리 나타내지 않는 한, "A, B, A 및 B, A 및 C, B 및 C, 또는 A, B 및 C"를 의미한다. 게다가, "그리고"는 달리 분명히 나타내거나 또는 문맥에 의해 달리 나타내지 않는 한, 연결성 및 별개성이 있다. 따라서, 본 명세서에서, "A 및 B"는 달리 분명히 나타내거나 또는 문맥에 의해 달리 나타내지 않는 한, "공동으로 또는 각각, A 및 B"를 의미한다. 게다가, 복수의 경우는 단일의 경우로서 본 명세서에서 설명된 자원, 작동 또는 구조에 대해 제공될 수도 있다. 부가적으로, 다양한 자원, 작동, 엔진 및 데이터 저장소 간의 경계는 다소 임의적이고, 특정한 작동은 특정한 예시적인 구성의 맥락에서 예시된다. 기능의 다른 할당이 구상되고 본 개시내용의 다양한 실시형태의 범위 내에 속할 수도 있다. 일반적으로, 예시적인 구성에서 별개의 자원으로서 제공된 구조 및 기능은 결합된 구조 또는 자원으로서 구현될 수도 있다. 유사하게, 단일의 자원으로서 제공된 구조 및 기능은 별개의 자원으로서 구현될 수도 있다. 이러한 다른 변형, 변경, 추가 및 개선은 첨부된 청구범위에 의해 제공된 바와 같이 본 개시내용의 실시형태의 범위 내에 속한다. 따라서, 명세서 및 도면은 제한적인 의미보다 예시적인 것으로 여겨진다.
용어 "포함한다(include)" 또는 "포함한다(comprise)"가 후속하여 공표된 특징부의 존재를 나타내기 위해 사용되지만, 이것은 다른 특징부의 추가를 배제하지 않는다. 조건부 언어, 예컨대, 특히, "can", "could", "might" 또는 "may"는 달리 구체적으로 언급되거나 또는 달리 사용되는 바와 같이 맥락 내에서 이해되지 않는 한, 일반적으로 특정한 실시형태가 특정한 특징부, 요소 및/또는 단계를 포함하지만, 다른 실시형태가 이들을 포함하지 않는다는 것을 의미하는 것으로 의도된다. 따라서, 이러한 조건부 언어는 일반적으로 특징부, 요소 및/또는 단계가 하나 이상의 실시형태에 대해 임의의 방식으로 요구되거나 또는 하나 이상의 실시형태가 사용자 입력 또는 프롬프트를 사용하거나 또는 사용하는 일 없이, 이 특징부, 요소 및/또는 단계가 임의의 특정한 실시형태에 포함되거나 또는 수행되는지를 결정하기 위한 로직을 반드시 포함한다는 것을 암시하는 것으로 의도되지 않는다.
주제의 개요가 특정한 예시적인 실시형태를 참조하여 설명되었지만, 본 개시내용의 실시형태의 더 넓은 범위로부터 벗어나는 일 없이 이 실시형태에 대한 다양한 수정 및 변경이 이루어질 수도 있다. 주제의 이러한 실시형태는 단지 편의를 위해 그리고 실제로 1개 초과가 개시되면 임의의 단일의 개시내용 또는 개념으로 본 출원의 범위를 자발적으로 제한하려는 의도 없이 용어 "발명"에 의해 여기에서 개별적으로 또는 집합적으로 본 명세서에서 언급될 수도 있다.
본 명세서에서 예시된 실시형태는 당업자가 개시된 교시내용을 실시하게 하도록 충분히 상세히 설명된다. 본 개시의 범위를 벗어나는 일 없이 구조적 그리고 논리적 치환 및 변경이 이루어질 수 있도록 다른 실시형태가 사용되고 그로부터 도출될 수도 있다. 따라서, 상세한 설명은 제한적인 의미로 받아들여져서는 안 되며, 다양한 실시형태의 범위는 첨부된 청구범위와 함께 이러한 청구범위에 부여된 등가물의 전체 범위에 의해서만 규정된다.

Claims (20)

  1. 컴퓨터-구현 방법으로서,
    컨볼루션 계층의 입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(Multiply-Accumulate: MAC) 연산을 동시에 수행하도록 상기 입력 텐서 및 상기 가중치 텐서를 복수의 프로세서에 할당하는 단계;
    상기 MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 단계;
    상기 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 단계로서, 상기 뱅크의 각각은 상기 복수의 출력값 중 하나 이상을 포함하는, 상기 하나 이상의 뱅크를 구성하는 단계;
    상기 뱅크의 각각에 대해, K개의 출력값을 획득하기 위해 상기 뱅크에서 상기 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 단계로서, K는 양의 정수인, 상기 상단-K 정렬을 수행하는 단계;
    각각의 뱅크의 획득된 K개의 출력값 이외의 상기 하나 이상의 출력값을 0으로서 설정함으로써 상기 뱅크의 각각을 프루닝하는(pruning) 단계; 및
    프루닝된 뱅크에 기초하여 상기 컨볼루션 계층의 출력 텐서를 구성하는 단계
    를 포함하는, 컴퓨터-구현 방법.
  2. 제1항에 있어서, 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것은,
    신경망의 상기 컨볼루션 계층에서 입력 텐서 및 복수의 가중치 텐서를 획득하는 것;
    상기 입력 텐서를 복수의 서브-텐서로 세분화하고 상기 복수의 서브-텐서를 복수의 프로세서에 할당하는 것; 및
    상기 복수의 가중치 텐서를 복수의 가중치 군으로 세분화하고 상기 복수의 가중치 군을 상기 복수의 프로세서에 할당하는 것
    을 포함하는, 컴퓨터-구현 방법.
  3. 제2항에 있어서, 상기 복수의 서브-텐서 및 상기 복수의 가중치 군을 복수의 프로세서에 할당하는 것은, 상기 복수의 프로세서의 각각에 대해, 상기 복수의 서브-텐서 중 하나 이상 및 상기 복수의 가중치 군 중 하나 이상을 상기 프로세서의 내부 버퍼에 저장하는 것을 포함하는, 컴퓨터-구현 방법.
  4. 제2항에 있어서, 상기 복수의 가중치 군을 상기 복수의 프로세서에 할당하는 것은,
    복수의 병렬 처리 사이클의 각각 동안, 동시에 상기 복수의 서브-텐서 및 상기 복수의 가중치 군 중 하나 이상에 기초하여 상기 복수의 프로세서가 상기 MAC 연산을 수행하도록 상기 복수의 가중치 군 중 하나 이상을 상기 복수의 프로세서에 할당하는 것을 포함하는 것을 포함하는, 컴퓨터-구현 방법.
  5. 제4항에 있어서, 상기 하나 이상의 뱅크의 각각은 상기 복수의 가중치 군 중 하나에 기초하여 생성되는 출력값에 대응하는, 컴퓨터-구현 방법.
  6. 제1항에 있어서, 상기 MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것은,
    복수의 병렬 처리 사이클의 각각 동안 상기 복수의 프로세서에 의해 수행되는 상기 MAC 연산의 결과로서 복수의 부분적인 합을 획득하는 것;
    상기 복수의 부분적인 합을 가산기 트리 디바이스에 공급하여 하나 이상의 출력값을 획득하는 것; 및
    상기 복수의 병렬 처리 사이클 중 하나 이상 동안 누적 버퍼에 상기 하나 이상의 출력값을 저장하여 상기 복수의 출력값을 획득하는 것
    을 포함하는, 컴퓨터-구현 방법.
  7. 제1항에 있어서, 상기 뱅크에서 상기 출력값에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것은,
    상기 뱅크에서 상기 출력값의 크기에 대한 상단-K 정렬을 수행하여 상기 K개의 출력값을 획득하는 것을 포함하는, 컴퓨터-구현 방법.
  8. 제1항에 있어서, 상기 뱅크의 각각은,
    0보다 더 큰 높이-치수;
    0보다 더 큰 폭-치수;
    1보다 더 큰 채널-치수
    를 포함하는, 컴퓨터-구현 방법.
  9. 제1항에 있어서, 상기 뱅크의 각각에 K개의 0이 아닌 출력값을 각각 K개의 다차원 벡터로서 나타내는 단계를 더 포함하되,
    상기 K개의 다차원 벡터의 각각은 0이 아닌 출력값 및 상기 뱅크 내 상기 0이 아닌 출력값의 대응하는 채널-치수 식별자를 포함하는, 컴퓨터-구현 방법.
  10. 제9항에 있어서, 상기 프루닝된 뱅크에 기초하여 상기 컨볼루션 계층의 상기 출력 텐서를 구성하는 것은,
    상기 뱅크의 각각의 상기 K개의 다차원 벡터를 조립하여 상기 출력 텐서를 형성하는 것을 포함하는, 컴퓨터-구현 방법.
  11. 제9항에 있어서, 상기 프루닝된 뱅크의 각각은 뱅크 식별자와 연관되고,
    상기 프루닝된 뱅크에 기초하여 상기 컨볼루션 계층의 상기 출력 텐서를 구성하는 것은,
    상기 대응하는 뱅크 식별자에 기초하여 상기 뱅크의 각각의 상기 K개의 다차원 벡터를 조립하여 상기 출력 텐서를 형성하는 것을 포함하는, 컴퓨터-구현 방법.
  12. 제1항에 있어서, 상기 출력 텐서는 희소 텐서인, 컴퓨터-구현 방법.
  13. 하나 이상의 프로세서 및 상기 하나 이상의 프로세서에 결합되고 시스템이 작동을 수행하게 하도록 상기 하나 이상의 프로세서에 의해 실행 가능한 명령어로 구성된 하나 이상의 비일시적인 컴퓨터-판독 가능한 메모리를 포함하는 시스템으로서, 상기 작동은,
    입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(MAC) 연산을 동시에 수행하도록 컨볼루션 계층의 상기 입력 텐서 및 상기 가중치 텐서를 복수의 프로세서에 할당하는 것;
    상기 MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것;
    상기 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 것으로서, 상기 뱅크의 각각은 상기 복수의 출력값 중 하나 이상을 포함하는, 상기 하나 이상의 뱅크를 구성하는 것;
    상기 뱅크의 각각에 대해, K개의 출력값을 획득하기 위해 상기 뱅크에서 상기 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 것으로서, K는 양의 정수인, 상기 상단-K 정렬을 수행하는 것;
    각각의 뱅크의 획득된 K개의 출력값 이외의 상기 하나 이상의 출력값을 0으로서 설정함으로써 상기 뱅크의 각각을 프루닝하는 것; 및
    프루닝된 뱅크에 기초하여 상기 컨볼루션 계층의 출력 텐서를 구성하는 것
    을 포함하는, 시스템.
  14. 제13항에 있어서, 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것은,
    신경망의 상기 컨볼루션 계층에서 입력 텐서 및 복수의 가중치 텐서를 획득하는 것;
    상기 입력 텐서를 복수의 서브-텐서로 세분화하고 상기 복수의 서브-텐서를 복수의 프로세서에 할당하는 것; 및
    상기 복수의 가중치 텐서를 복수의 가중치 군으로 세분화하고 상기 복수의 가중치 군을 상기 복수의 프로세서에 할당하는 것
    을 포함하는, 시스템.
  15. 제13항에 있어서, 상기 MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것은,
    복수의 병렬 처리 사이클의 각각 동안 상기 복수의 프로세서에 의해 수행되는 상기 MAC 연산의 결과로서 복수의 부분적인 합을 획득하는 것;
    상기 복수의 부분적인 합을 가산기 트리 디바이스에 공급하여 하나 이상의 출력값을 획득하는 것; 및
    상기 복수의 병렬 처리 사이클 중 하나 이상 동안 누적 버퍼에 상기 하나 이상의 출력값을 저장하여 상기 복수의 출력값을 획득하는 것
    을 포함하는, 시스템.
  16. 제13항에 있어서, 상기 뱅크에서 상기 출력값에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것은,
    상기 뱅크에서 상기 출력값의 크기에 대한 상단-K 정렬을 수행하여 상기 K개의 출력값을 획득하는 것을 포함하는, 시스템.
  17. 하나 이상의 프로세서가 작동을 수행하게 하도록 상기 하나 이상의 프로세서에 의해 실행 가능한 명령어로 구성된 비일시적인 컴퓨터-판독 가능한 저장 매체로서, 상기 작동은,
    입력 텐서 및 가중치 텐서에 기초하여 곱셈-누적(MAC) 연산을 동시에 수행하도록 컨볼루션 계층의 상기 입력 텐서 및 상기 가중치 텐서를 복수의 프로세서에 할당하는 것;
    상기 MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것;
    상기 복수의 출력값에 기초하여 출력값의 하나 이상의 뱅크를 구성하는 것으로서, 상기 뱅크의 각각은 상기 복수의 출력값 중 하나 이상을 포함하는, 상기 하나 이상의 뱅크를 구성하는 것;
    상기 뱅크의 각각에 대해, K개의 출력값을 획득하기 위해 상기 뱅크에서 상기 하나 이상의 출력값에 대한 상단-K 정렬을 수행하는 것으로서, K는 양의 정수인, 상기 상단-K 정렬을 수행하는 것;
    각각의 뱅크의 획득된 K개의 출력값 이외의 상기 하나 이상의 출력값을 0으로서 설정함으로써 상기 뱅크의 각각을 프루닝하는 것; 및
    프루닝된 뱅크에 기초하여 상기 컨볼루션 계층의 출력 텐서를 구성하는 것
    을 포함하는, 비일시적인 컴퓨터-판독 가능한 저장 매체.
  18. 제17항에 있어서, 컨볼루션 계층의 입력 텐서 및 가중치 텐서를 복수의 프로세서에 할당하는 것은,
    신경망의 상기 컨볼루션 계층에서 입력 텐서 및 복수의 가중치 텐서를 획득하는 것;
    상기 입력 텐서를 복수의 서브-텐서로 세분화하고 상기 복수의 서브-텐서를 복수의 프로세서에 할당하는 것; 및
    상기 복수의 가중치 텐서를 복수의 가중치 군으로 세분화하고 상기 복수의 가중치 군을 상기 복수의 프로세서에 할당하는 것
    을 포함하는, 비일시적인 컴퓨터-판독 가능한 저장 매체.
  19. 제17항에 있어서, 상기 MAC 연산의 결과에 기초하여 복수의 출력값을 획득하는 것은,
    복수의 병렬 처리 사이클의 각각 동안 상기 복수의 프로세서에 의해 수행되는 상기 MAC 연산의 결과로서 복수의 부분적인 합을 획득하는 것;
    상기 복수의 부분적인 합을 가산기 트리 디바이스에 공급하여 하나 이상의 출력값을 획득하는 것; 및
    상기 복수의 병렬 처리 사이클 중 하나 이상 동안 누적 버퍼에 상기 하나 이상의 출력값을 저장하여 상기 복수의 출력값을 획득하는 것
    을 포함하는, 비일시적인 컴퓨터-판독 가능한 저장 매체.
  20. 제17항에 있어서, 상기 뱅크에서 상기 출력값에 대한 상단-K 정렬을 수행하여 K개의 출력값을 획득하는 것은,
    상기 뱅크에서 상기 출력값의 크기에 대한 상단-K 정렬을 수행하여 상기 K개의 출력값을 획득하는 것을 포함하는, 비일시적인 컴퓨터-판독 가능한 저장 매체.
KR1020237018879A 2020-11-06 2021-11-05 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법 및 시스템 KR20230104235A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/091,216 US20220147826A1 (en) 2020-11-06 2020-11-06 Method and system for convolution with workload-balanced activation sparsity
US17/091,216 2020-11-06
PCT/CN2021/129141 WO2022095984A1 (en) 2020-11-06 2021-11-05 Method and system for convolution with workload-balanced activation sparsity

Publications (1)

Publication Number Publication Date
KR20230104235A true KR20230104235A (ko) 2023-07-07

Family

ID=81454090

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237018879A KR20230104235A (ko) 2020-11-06 2021-11-05 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법 및 시스템

Country Status (7)

Country Link
US (1) US20220147826A1 (ko)
EP (1) EP4226286A4 (ko)
JP (1) JP2024502225A (ko)
KR (1) KR20230104235A (ko)
CN (1) CN116547643A (ko)
TW (2) TW202328986A (ko)
WO (1) WO2022095984A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022016257A1 (en) * 2020-07-21 2022-01-27 The Governing Council Of The University Of Toronto System and method for using sparsity to accelerate deep learning networks

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11055063B2 (en) * 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
US11544545B2 (en) * 2017-04-04 2023-01-03 Hailo Technologies Ltd. Structured activation based sparsity in an artificial neural network
US11275996B2 (en) * 2017-06-21 2022-03-15 Arm Ltd. Systems and devices for formatting neural network parameters
US20190392287A1 (en) * 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
CN111160516B (zh) * 2018-11-07 2023-09-05 杭州海康威视数字技术股份有限公司 一种深度神经网络的卷积层稀疏化方法及装置
CN109948794A (zh) * 2019-02-28 2019-06-28 清华大学 神经网络结构化剪枝方法、剪枝装置和电子设备
WO2020190772A1 (en) * 2019-03-15 2020-09-24 Futurewei Technologies, Inc. Neural network model compression and optimization
US11763156B2 (en) * 2019-11-15 2023-09-19 Microsoft Technology Licensing, Llc Neural network compression based on bank-balanced sparsity
US20200134417A1 (en) * 2019-12-24 2020-04-30 Intel Corporation Configurable processor element arrays for implementing convolutional neural networks
US20220101118A1 (en) * 2020-09-30 2022-03-31 Moffett Technologies Co., Limited Bank-balanced-sparse activation feature maps for neural network models

Also Published As

Publication number Publication date
EP4226286A4 (en) 2024-04-10
US20220147826A1 (en) 2022-05-12
TW202328986A (zh) 2023-07-16
JP2024502225A (ja) 2024-01-18
TWI804041B (zh) 2023-06-01
EP4226286A1 (en) 2023-08-16
TW202230228A (zh) 2022-08-01
CN116547643A (zh) 2023-08-04
WO2022095984A1 (en) 2022-05-12

Similar Documents

Publication Publication Date Title
KR102636710B1 (ko) 계층적 가중치 희소 컨볼루션 프로세싱을 위한 방법 및 시스템
US11461632B2 (en) Method and apparatus for adapting parameters of neural network
US11763156B2 (en) Neural network compression based on bank-balanced sparsity
US11763150B2 (en) Method and system for balanced-weight sparse convolution processing
KR20200043617A (ko) 고효율 연산 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법
KR20230104235A (ko) 워크로드 균형 활성화 희소성을 가진 컨볼루션을 위한 방법 및 시스템
US11875263B2 (en) Method and apparatus for energy-aware deep neural network compression
US11636569B1 (en) Matrix transpose hardware acceleration
TWI813414B (zh) 用於最佳化神經網路訓練之電腦實施之方法、系統及非暫時性電腦可讀取儲存媒體
US20240086719A1 (en) Sparse encoding and decoding at mixture-of-experts layer
CN116261736A (zh) 用于双稀疏卷积处理和并行化的方法和系统