KR102578508B1 - 호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱 - Google Patents

호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱 Download PDF

Info

Publication number
KR102578508B1
KR102578508B1 KR1020207013441A KR20207013441A KR102578508B1 KR 102578508 B1 KR102578508 B1 KR 102578508B1 KR 1020207013441 A KR1020207013441 A KR 1020207013441A KR 20207013441 A KR20207013441 A KR 20207013441A KR 102578508 B1 KR102578508 B1 KR 102578508B1
Authority
KR
South Korea
Prior art keywords
neural network
layer
processing
shared memory
instructions
Prior art date
Application number
KR1020207013441A
Other languages
English (en)
Other versions
KR20200069338A (ko
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 KR20200069338A publication Critical patent/KR20200069338A/ko
Application granted granted Critical
Publication of KR102578508B1 publication Critical patent/KR102578508B1/ko

Links

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
    • 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
    • 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/08Learning methods

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)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Advance Control (AREA)
  • Image Analysis (AREA)
  • Complex Calculations (AREA)

Abstract

뉴럴 네트워크 시스템에서의 프로세싱을 위한 개시된 방법들 및 시스템들에서, 호스트 컴퓨터 시스템(402)은 뉴럴 네트워크의 복수의 계층들과 연관된 복수의 가중치 행렬들을 뉴럴 네트워크 가속기(238)와 공유되는 메모리(226)에 기록한다(602). 호스트 컴퓨터 시스템은 추가로 복수의 계층별 명령어들을 명령어 패키지로 어셈블링한다(610). 각각의 계층별 명령어는 뉴럴 네트워크의 복수의 계층들의 각자의 계층, 및 공유 메모리 내의 가중치 행렬들의 각자의 오프셋들의 프로세싱을 지정한다. 호스트 컴퓨터 시스템은 입력 데이터 및 명령어 패키지를 공유 메모리에 기록한다(612, 614). 뉴럴 네트워크 가속기는 공유 메모리로부터 명령어 패키지를 판독하고(702) 명령어 패키지의 복수의 계층별 명령어들을 프로세싱한다(702 내지 712).

Description

호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱
본 개시내용은 일반적으로 뉴럴 네트워크 프로세싱(neural network processing)에 관한 것이다.
머신 러닝은 컴퓨팅 시스템들이 명시적으로 프로그래밍됨이 없이 작동하도록 유도하는 과학이다. 고전적인 머신 러닝은, K-평균 클러스터링, 선형 및 로지스틱 회귀, 확률적 경사 하강법, 연관 규칙 학습 등을 포함한, 다양한 클러스터링 및 분류 기술들을 포함한다. 딥 러닝은 머신 러닝에서의 더 새로운 미개척 분야이다. 딥 러닝은 특징 추출 및 변환을 위해 다수의 계층들의 비선형 프로세싱 유닛들을 사용하는 머신 러닝 알고리즘들의 한 부류이다. 딥 러닝 알고리즘은 비지도(unsupervised)(예를 들어, 패턴 분석) 또는 지도(supervised)(예를 들어, 분류)일 수 있다. 딥 러닝 알고리즘은 인공 뉴럴 네트워크(artificial neural network; ANN)(본 명세서에서 "뉴럴 네트워크"라고 지칭됨)의 계층들을 사용하여 구현될 수 있다.
일반적으로, 뉴럴 네트워크는 그래프로 연결된 노드들(즉, "뉴런들")의 집합체이다. 뉴럴 네트워크 내의 노드는 가중 입력들의 합을 계산하고 합에 선택적인 바이어스를 가산한다. 노드의 출력은 최종 합의 함수("활성화 함수"라고 지칭됨)이다. 예시적인 활성화 함수들은 시그모이드 함수, 쌍곡 탄젠트(hyperbolic tangent; tanh) 함수, 정류 선형 유닛(Rectified Linear Unit; ReLU) 함수, 및 항등 함수가 있다. 뉴럴 네트워크 모델들은 종종, 특정 토폴로지를 정의하는 노드들의 계층들, 및 대응하는 가중치들 및 바이어스들로 구성된다. 가중치들 및 바이어스들은 네트워크 파라미터들이라고 지칭된다.
일반적으로, 뉴럴 네트워크는 입력 계층 및 출력 계층을 포함하고, 선택적으로 입력 계층과 출력 계층 사이에 하나 이상의 은닉 계층을 포함할 수 있다. 딥 러닝 응용들에서 사용되는 뉴럴 네트워크는 전형적으로 많은 은닉 계층들을 포함하며, 이로부터 딥 뉴럴 네트워크(deep neural network; DNN)라는 용어가 생긴다. 뉴럴 네트워크의 계층들은 밀집 연결될(densely connected) 수 있거나(예를 들어, 계층에서의 각각의 노드가 이전 계층에서의 모든 노드들에 완전 연결됨(fully connected)) 또는 희소 연결될(sparsely connected) 수 있다(예를 들어, 계층에서의 각각의 노드가 이전 계층에서의 노드들 중의 일 부분에만 연결됨). 컨볼루션 뉴럴 네트워크(convolutional neural network; CNN)는, 컨볼루션 계층들이라고 지칭되는, 하나 이상의 희소 연결 계층를 포함하는 DNN의 한 유형이다. CNN은 이미지 또는 비디오 데이터를 프로세싱하는 데 아주 적합하다. 다른 유형들의 DNN들은 음성 및 텍스트 데이터를 프로세싱하는 데 아주 적합한 순환 뉴럴 네트워크(recurrent neural network; RNN)를 포함한다.
필드 프로그래머블 게이트 어레이들(field programmable gate arrays; FPGA들)은 소프트웨어로부터 호출되는 함수들을 가속화하는 회로들을 구현하는 데 사용되어 왔다. 소프트웨어로부터 호출되는 함수들을 가속화하는 회로들은 하드웨어 가속기들이라고 지칭된다. 하드웨어 가속기들의 예들은 이미지 프로세싱 소프트웨어로부터 호출될 수 있는 FPGA 회로들로서 구현되는 다양한 이미지 필터들을 포함한다.
FPGA 기반 구현은 호스트 컴퓨터 시스템에 의한 FPGA 액세스가능 메모리로의 가중치들 및 입력 데이터의 전송, 및 호스트 컴퓨터 시스템으로의 출력 데이터의 전송을 수반한다. 호스트 컴퓨터 시스템과 FPGA 가속기 사이의 데이터의 전송은 성능을 저하시킬 수 있다. CPU 또는 GPU 상에서와 같은 다른 통상적으로 사용되는 뉴럴 네트워크(neural network; NN) 구현들과 비교하여, FPGA 기반 구현이 유리할 수 있는데, 그 이유는 FPGA 회로가 GPU보다 빠르게 데이터를 프로세싱할 수 있고 프로세스에서 더 적은 전력을 소비할 수 있기 때문이다.
뉴럴 네트워크 시스템에서의 개시된 프로세싱 방법은, 호스트 컴퓨터 시스템에 의해, 뉴럴 네트워크의 복수의 계층들과 연관된 복수의 가중치 행렬들을 뉴럴 네트워크 가속기와 공유되는 메모리에 기록하는(writing) 단계를 포함한다. 호스트 컴퓨터 시스템은 추가로 복수의 계층별 명령어들을 명령어 패키지로 어셈블링(assembling)한다. 각각의 계층별 명령어는 뉴럴 네트워크의 복수의 계층들의 각자의 계층, 및 공유 메모리 내의 가중치 행렬들의 각자의 오프셋들의 프로세싱을 지정한다. 호스트 컴퓨터 시스템은 입력 데이터 및 명령어 패키지를 공유 메모리에 기록한다. 뉴럴 네트워크 가속기는 공유 메모리로부터 명령어 패키지를 판독(read)하고 명령어 패키지의 복수의 계층별 명령어들을 프로세싱한다.
개시된 뉴럴 네트워크 프로세싱 시스템은 공유 메모리, 공유 메모리에 커플링된 호스트 컴퓨터 시스템, 및 공유 메모리에 커플링된 뉴럴 네트워크 가속기를 포함한다. 호스트 컴퓨터 시스템은 실행될 때 호스트 컴퓨터 시스템으로 하여금 뉴럴 네트워크의 복수의 계층들과 연관된 복수의 가중치 행렬들을 공유 메모리에 기록하게 하는 명령어들로 구성된다. 호스트 컴퓨터 시스템은 또한 복수의 계층별 명령어들을 명령어 패키지로 어셈블링하도록 프로그래밍된다. 각각의 계층별 명령어는 뉴럴 네트워크의 복수의 계층들의 각자의 계층, 및 공유 메모리 내의 가중치 행렬들의 각자의 오프셋들의 프로세싱을 지정한다. 호스트 컴퓨터 시스템은 입력 데이터 및 명령어 패키지를 공유 메모리에 기록한다. 뉴럴 네트워크 가속기는 공유 메모리로부터 명령어 패키지를 판독하고 명령어 패키지의 복수의 계층별 명령어들을 프로세싱하도록 구성된다.
이하의 상세한 설명 및 청구범위를 고려하면 다른 특징들이 인식될 것이다.
방법 및 시스템의 다양한 양태들 및 특징들은 이하의 상세한 설명의 검토 시에 그리고 도면의 참조 시에 명백해질 것이다:
도 1은 예에 따른 뉴럴 네트워크들을 구현하기 위한 시스템을 묘사하는 블록 다이어그램이다;
도 2는 예에 따른 컴퓨팅 시스템을 묘사하는 블록 다이어그램이다;
도 3은 예에 따른 가속 회로를 묘사하는 블록 다이어그램이다;
도 4는 일 구현에 따른 예시적인 뉴럴 네트워크 프로세싱 시스템을 도시한다;
도 5는 도 3에 도시된 예시적인 뉴럴 네트워크 가속기의 다른 뷰를 도시한다;
도 6은 계층별 명령어들의 패키지를 프로세싱하고 가중치들, 입력 데이터, 및 계층별 명령어들의 패키지를 프로세싱을 위해 뉴럴 네트워크 가속기에 제공하도록 뉴럴 네트워크 가속기를 구성하는 데 KA 인터페이스에 의해 수행되는 프로세스의 플로차트를 도시한다;
도 7은 뉴럴 네트워크 명령어들의 패키지를 프로세싱할 때 뉴럴 네트워크 가속기에 의해 수행되는 프로세스의 플로차트를 도시한다;
도 8은 5개의 뉴럴 네트워크 계층에 대한 예시적인 가중치 행렬들의 어드레싱 및 예시적인 입력/출력 버퍼("B/C 버퍼")의 어드레싱을 도시한다;
도 9는 예에 따른 프로그래밍가능 IC를 묘사하는 블록 다이어그램이다;
도 10은 프로그래밍가능 IC의 FPGA 구현을 예시한다.
이하의 설명에서, 본 명세서에서 제시되는 특정 예들을 설명하기 위해 다수의 특정 세부사항들이 기재된다. 그렇지만, 본 기술분야의 통상의 기술자에게는, 이러한 예들의 하나 이상의 다른 예 및/또는 변형이 아래에서 주어지는 모든 특정 세부사항들 없이 실시될 수 있음이 명백할 것이다. 다른 예들에서, 잘 알려진 특징들은 본 명세서에서의 예들의 설명을 모호하게 하지 않기 위해 상세히 설명되지 않았다. 예시의 편의를 위해, 동일한 요소들 또는 동일한 요소들의 부가의 인스턴스들을 지칭하기 위해 상이한 다이어그램들에서 동일한 참조 번호들이 사용될 수 있다.
개시된 구현들은 호스트 컴퓨터 시스템 및 뉴럴 네트워크 가속기를 포함하는 뉴럴 네트워크 프로세싱 시스템과 연관된 오버헤드 및 레이턴시를 감소시킨다. 이 시스템들 및 방법들은 호스트 컴퓨터 시스템과 뉴럴 네트워크 가속기 사이에서 공유되는 메모리로 및 메모리로부터 데이터를 전송하는 것에 수반되는 직접 메모리 액세스(direct memory access, DMA) 동작들의 횟수를 최소화한다. 호스트 컴퓨터 시스템은 프로세싱을 위해 뉴럴 네트워크의 모든 계층들에 의해 요구되는 입력 데이터 및 파라미터들 모두를 어셈블링하고 뉴럴 네트워크 가속기에 의한 프로세싱의 개시 이전에 공유 메모리에의 데이터 및 파라미터들의 집합체를 확정한다. 몇 개의 DMA 동작으로, 뉴럴 네트워크 가속기는 뉴럴 네트워크를 완전히 통과하는 데 필요한 데이터 및 구성 파라미터들을 가지며, 이에 의해 오버헤드 및 레이턴시를 감소시킨다.
개시된 방법들 및 시스템들은 컨볼루션 뉴럴 네트워크들(CNN들), 순환 뉴럴 네트워크들(RNN들) 및 행렬 곱셈 또는 컨볼루션(convolution)과 같은 연산들을 수반하는 다른 뉴럴 네트워크들에 적용가능하다. 간략함을 위해, 호스트 컴퓨터 시스템은 또한 "호스트"라고 지칭될 수 있고, 뉴럴 네트워크 가속기는 또한 또는 대안적으로 "가속 회로", "커널 가속기" 또는 "커널 가속기 회로"라고 지칭될 수 있다.
개시된 시스템들 및 방법들의 예시적인 응용은 컨볼루션 뉴럴 네트워크(CNN)이다. CNN은 연산들의 계층들을 갖는 유향 그래프(directed graph)로서 표현될 수 있다. 각각의 계층은, CONV(Convolution), 또는 이미지-대-열 변환("im2col"), 일반 행렬 곱셈(general matrix multiplication)("GEMM"), 활성화(예를 들어, 정류 선형 유닛, "ReLU" 함수), 풀링(예를 들어, "maxpool"), 지역 응답 정규화(local response normalization)(LRN 계층), 및 내적(inner product)(예를 들어, "완전 연결"(FC) 계층)과 같은, 하나 이상의 연산을 수반할 수 있다. 각각의 계층에 대한 입력들은, 이미지들 또는 음성 샘플들과 같은, 데이터 및 트레이닝된 가중치들이며, 모두가 행렬들로서 표현된다. 개시된 시스템들 및 방법들에서, 뉴럴 네트워크 가속기가 입력 데이터의 뉴럴 네트워크 프로세싱을 개시하기 전에 뉴럴 네트워크의 모든 계층들별로 프로세싱될 모든 가중치 행렬들, 구성 파라미터들, 및 입력 데이터가 호스트로부터 뉴럴 네트워크 가속기에 제공된다.
개시된 시스템들 및 방법들의 하나의 특징에서, 뉴럴 네트워크의 상이한 계층들에서의 컨볼루션 또는 행렬 곱셈에 사용되는 개별 가중치 행렬들은 단일 데이터 블록으로 병합되고 공유 메모리의 연속적인 어드레스 공간에 저장된다. 결합된 가중치 행렬들은 뉴럴 네트워크 가속기가 요구된 가중치들에 순차적으로(sequentially) 액세스할 수 있게 해주며, 이는 비-연속적인 어드레스들에 액세스하는 것보다 효율적이다. 연속적인 어드레스 공간은 또한 커널 프로세서가 뉴럴 네트워크의 하나의 계층의 프로세싱으로부터 다음 계층의 프로세싱으로 전환할 때 새로운 가중치 행렬이 로딩되기를 기다릴 필요 없이 액세스를 가능하게 해준다.
다른 특징에서, 호스트 컴퓨터 시스템은 뉴럴 네트워크 가속기에 의한 프로세싱을 제어하기 위해 다수의 계층별 명령어들의 패키지를 생성한다. 뉴럴 네트워크 가속기에 의한 프로세싱은 그에 의해 뉴럴 네트워크 응용에 따라 커스터마이즈될 수 있다. 그에 부가하여, 계층별 명령어들의 패키지는 뉴럴 네트워크의 계층들을 통해 입력 데이터를 프로세싱할 때 호스트와 뉴럴 네트워크 가속기 사이의 상호작용들의 횟수를 감소시킨다. 계층별 명령어들의 패키지는 각각의 계층별 명령어에 의한 적절한 가중치 행렬에 대한 빠른 참조를 제공하기 위해 가중치 행렬들의 블록에 대한 오프셋들을 추가로 지정한다.
입력 데이터("B 행렬") 및 출력 데이터("C 행렬")를 저장하기 위해 뉴럴 네트워크의 계층들 사이에서 버퍼가 공유된다. 공유 "B/C 버퍼"는 하나의 계층의 결과들을 다음 계층의 입력 버퍼에 복사할 필요성을 회피함으로써 메모리 요구사항들을 감소시키고 뉴럴 네트워크 가속기의 효율성을 개선시킨다. 프로세싱이 하나의 계층으로부터 다음 계층으로 전환될 때 뉴럴 네트워크 가속기는 B 행렬에 대해 사용되는 B/C 버퍼의 부분과 C 행렬에 대해 사용되는 B/C 버퍼의 부분 사이를 왔다갔다 한다.
이제 도면들을 참조하면, 도 1은 예에 따른 뉴럴 네트워크들을 구현하기 위한 시스템(100)을 묘사하는 블록 다이어그램이다. 시스템(100)은 컴퓨터 시스템(102) 및 하나 이상의 컴퓨터 시스템(108)을 포함한다. 컴퓨터 시스템(102)은 하나 이상의 설계 툴(104)을 제공하는 소프트웨어를 실행하도록 구성된 종래의 컴퓨팅 컴포넌트들을 포함한다. 각각의 컴퓨터 시스템(108)은 하나 이상의 뉴럴 네트워크(110)를 구현한다. 뉴럴 네트워크(들)(110)는 애플리케이션들(112), 가속 라이브러리들(114), 및 하나 이상의 하드웨어 가속기(116)를 사용하여 구현된다.
예에서, 하드웨어 가속기(들)(116)는, 필드 프로그래밍가능 게이트 어레이들(FPGA들)과 같은, 프로그래밍가능 집적 회로들(IC들)을 포함한다. 가속 라이브러리들(114)은 하드웨어 가속기(들)(116)와 인터페이싱하기 위해 애플리케이션 프로그래밍 인터페이스들(application programming interfaces; API들)을 제공한다. 가속 라이브러리들(114)은, 뉴럴 네트워크 계층들 및 다른 유형들의 뉴럴 네트워크 구조들의 미리 정의되고 최적화된 구현들을 포함하여, 뉴럴 네트워크 함수들을 제공하는 라이브러리들을 또한 포함할 수 있다. 따라서, 뉴럴 네트워크(들)(110)는 하드웨어 가속기(들)(116)에 구현되는 하드웨어 부분들은 물론, 가속 라이브러리들(114)에 구현되는 소프트웨어 부분들 둘 다를 포함할 수 있다. 애플리케이션들(112)은 뉴럴 네트워크(들)(116)를 구현하도록 하드웨어 라이브러리들(116)을 프로그래밍 및 제어하기 위해 가속 라이브러리들(114)의 API들을 호출한다.
설계자는 뉴럴 네트워크(들)(110)를 정의하기 위해 설계 툴(들)(104)과 상호작용한다. 설계 툴(들)(104)은 하드웨어 가속기(들)(116)를 프로그래밍하기 위한 파일들(예를 들어, FPGA들을 위한 구성 비트스트림들), 가속 라이브러리들(114)을 제공하는 파일들, 및 애플리케이션들(112)을 제공하는 파일들을 생성할 수 있다. 설계자는 레지스터 전송 언어(register transfer language; RTL)를 사용하여 또는, C, C++, OpenCL 등과 같은, 프로그래밍 언어, 또는 RTL과 프로그래밍가능 언어(들)의 조합을 사용하여 뉴럴 네트워크(들)(110)의 하드웨어 부분들을 정의할 수 있다. 사용자는, C, C++, OpenCL 등과 같은, 프로그래밍 언어를 사용하여 뉴럴 네트워크(들)(110)의 소프트웨어 부분들을 정의할 수 있다. 설계 툴(들)(104)은 소프트웨어 정의(software-defined) 뉴럴 네트워크들을 컴파일하여 하드웨어 가속기(들)(116)를 프로그래밍하기 위한 파일들 및 가속 라이브러리들(114)을 위한 라이브러리 파일들을 생성한다. 설계자는 뉴럴 네트워크(들)(110)의 하드웨어 부분들 및 소프트웨어 부분들을 개발하는 것을 돕기 위해 클래스 라이브러리들, 템플릿 라이브러리들 등을 제공하는 라이브러리들(106)을 사용할 수 있다.
사용자는 프로그래밍 언어(예를 들어, C, C++, Python 등)를 사용하여 애플리케이션들(112)을 정의할 수 있다. 사용자는, Caffe, TensorFlow, MXNet 등과 같은, 뉴럴 네트워크 프레임워크들 및 라이브러리들을 사용할 수 있다.
도 2는 예에 따른 컴퓨팅 시스템(108)을 묘사하는 블록 다이어그램이다. 컴퓨팅 시스템(108)은 하드웨어(204) 및 하드웨어(204) 상에서 실행되는 소프트웨어(206)를 포함한다. 하드웨어(204)는 프로세싱 시스템(210), 시스템 메모리(216), 저장 디바이스들("스토리지(218)"), 및 하드웨어 가속기(116)를 포함한다. 소프트웨어(206)는 운영 체제(OS)(244), 가속 라이브러리들(114), 및 애플리케이션들(112)을 포함한다. 프로세싱 시스템(210), 시스템 메모리(216), 및 스토리지(218)는 본 명세서에서 언급된 바와 같은 호스트 컴퓨터 시스템을 구성한다.
프로세싱 시스템(210)은 마이크로프로세서(212), 지원 회로들(214), 및 주변기기 버스(215)를 포함한다. 마이크로프로세서(212)는, x86 기반 프로세서, ARM® 기반 프로세서 등과 같은, 임의의 유형의 범용 중앙 프로세싱 유닛(CPU)일 수 있다. 마이크로프로세서(212)는 하나 이상의 코어 및 연관된 회로부(예를 들어, 캐시 메모리들, 메모리 관리 유닛들(memory management units; MMU들), 인터럽트 제어기들 등)를 포함할 수 있다. 마이크로프로세서(212)는 본 명세서에서 설명되는 하나 이상의 동작을 수행하고 시스템 메모리(216) 및/또는 스토리지(218)에 저장될 수 있는 프로그램 코드를 실행하도록 구성된다. 지원 회로들(214)은 마이크로프로세서(212), 시스템 메모리(216), 스토리지(218), 하드웨어 가속기(116), 또는 임의의 다른 주변 디바이스 사이의 데이터 흐름을 관리하기 위해 마이크로프로세서(212)와 협력하는 다양한 디바이스들을 포함한다. 예를 들어, 지원 회로들(214)은 칩세트(예를 들어, 노스 브리지, 사우스 브리지, 플랫폼 호스트 제어기 등), 전압 레귤레이터들, 펌웨어(예를 들어, BIOS) 등을 포함할 수 있다. 지원 회로들(214)은, 하드웨어 가속기(116)와 같은, 다양한 주변기기들에 접속되는 주변기기 버스(215)와 마이크로프로세서(212) 사이의 데이터 흐름을 관리한다. 일부 예들에서, 마이크로프로세서(212)는 칩세트(예를 들어, 노스 브리지, 사우스 브리지등)의 기능성의 전부 또는 상당 부분을 흡수하는 시스템-인-패키지(System-in-Package; SiP), 시스템-온-칩(System-on-Chip; SoC) 등일 수 있다. 주변기기 버스(215)는, PCIe(Peripheral Component Interconnect Express)와 같은, 확장 버스 표준을 구현할 수 있다. 이 예에서, 프로세싱 시스템(210)은 하드웨어 가속기(116)와 별개로 도시되어 있다. 아래에서 추가로 논의되는 다른 예들에서, 프로세싱 시스템(210)과 하드웨어 가속기(116)는 시스템-온-칩(SoC)을 사용하여 동일한 집적 회로(IC) 상에 구현될 수 있다.
시스템 메모리(216)는, 실행가능 명령어들 및 데이터와 같은, 정보가 저장되고 검색될 수 있게 해주는 디바이스이다. 시스템 메모리(216)는, 예를 들어, 더블 데이터 레이트(DDR) 동적 RAM(DRAM)과 같은, 하나 이상의 랜덤 액세스 메모리(RAM) 모듈을 포함할 수 있다. 저장 디바이스(218)는 로컬 저장 디바이스들(예를 들어, 하나 이상의 하드 디스크, 플래시 메모리 모듈, 솔리드 스테이트 디스크, 및 광학 디스크) 및/또는 컴퓨팅 시스템(108)이 하나 이상의 네트워크 데이터 저장 시스템과 통신할 수 있게 해주는 스토리지 인터페이스를 포함한다. 하드웨어(204)는, 그래픽 카드들, 범용 직렬 버스(USB) 인터페이스들 등과 같은, 컴퓨팅 시스템의 다양한 다른 종래의 디바이스들 및 주변기기들을 포함할 수 있다.
하드웨어 가속기(116)는 프로그래밍가능 IC(228), 비휘발성 메모리(224), 및 RAM(226)을 포함한다. 프로그래밍가능 IC(228)는 FPGA 등 또는 FPGA 등을 갖는 SoC일 수 있다. NVM(224)은, 플래시 메모리 등과 같은, 임의의 유형의 비휘발성 메모리를 포함할 수 있다. RAM(226)은 DDR DRAM 등을 포함할 수 있다. 프로그래밍가능 IC(228)는 NVM(224) 및 RAM(226)에 커플링된다. 프로그래밍가능 IC(228)는 또한 프로세싱 시스템(210)의 주변기기 버스(215)에 커플링된다.
OS(244)는, Linux®, Microsoft Windows®, Mac OS® 등과 같은, 본 기술분야에서 알려진 임의의 상용 운영 체제일 수 있다. 가속 라이브러리들(114)은 하드웨어 가속기(116)의 커맨드 및 제어를 위한 API들을 제공하는 드라이버들 및 라이브러리들을 포함한다. 애플리케이션들(112)은 뉴럴 네트워크(들)를 구현하기 위해 가속 라이브러리들(114)의 API들을 호출하는 마이크로프로세서(212) 상에서 실행되는 소프트웨어를 포함한다.
동작 중에, 프로그래밍가능 IC(228)는 가속 회로(230)로 구성된다. 가속 회로(230)는 일반적으로 베이스 플랫폼(base platform)(230A) 및 뉴럴 네트워크 가속기(230B)를 포함한다. 예를 들어, 가속 회로(230)는 정적 영역(234) 및 프로그래밍가능 영역(236)을 사용하여 구현될 수 있다. 정적 영역(234)은 주변기기 버스(215), NVM(224), 및 RAM(226)에 인터페이스를 제공하기 위한 지원 회로들(240)을 포함한다. 프로그래밍가능 영역(236)은 하나 이상의 뉴럴 네트워크 가속기("커널(들)(238)")를 포함할 수 있다. 베이스 플랫폼(230A)은 정적 영역(234)을 사용하여 구현되고, 뉴럴 네트워크 가속기(230B)는 프로그래밍가능 영역(236)을 사용하여 구현된다. 다른 예에서, 베이스 플랫폼(230A)은 또한 프로그래밍가능 영역(236)의 일 부분을 사용하여 구현될 수 있다. 따라서, 일부 예들에서, 프로그래밍가능 영역(236)은 또한 일부 인터페이스 회로들을 포함한다. 일부 예들에서, 가속 회로(230)는 하나 초과의 프로그래밍가능 영역(236)을 포함할 수 있으며, 이들 각각은 뉴럴 네트워크 가속기(들)(238)로 개별적으로 구성될 수 있다.
정적 영역(234)은 그의 회로부가 프로그래밍가능 영역(236)의 재구성들에 걸쳐 일정하게 유지된다는 점에서 "정적"이다. 예에서, 지원 회로들(240)은 PCIe 엔드포인트 회로들, 직접 메모리 액세스(DMA) 제어기, 인터커넥트들(interconnects), 메모리 제어기, 메모리 인터페이스 회로(예를 들어, DDR 인터페이스), (부분 재구성을 지원하기 위한) 디커플러(decoupler) 회로들, 플래시 프로그래머, 디버그 회로들 등을 포함한다. 일부 예들에서, 프로그래밍가능 영역(236)은 지원 회로들(240) 중 어느 것도 포함하지 않는다. 다른 예들에서, 일부 지원 회로들은 프로그래밍가능 영역(236)에서 구현된다. 그러한 경우에, 프로그래밍가능 영역(236)은 "확장 프로그래밍가능 영역"이라고 지칭될 수 있다. 어느 경우든지, 하나의 예에서, PCIe 회로들 및 DMA 회로들과 같은, 일부 지원 회로들(240)은 항상 정적 영역(234)에 존재한다.
도 3은 예에 따른 가속 회로(230)를 묘사하는 블록 다이어그램이다. 가속 회로(230)는 지원 회로들(240) 및 뉴럴 네트워크 가속기(238)를 포함한다. 이 예에서, 지원 회로들(240)은 PCIe 엔드포인트 회로("PCIe 엔드포인트(302)"), PCIe DMA 제어기(304), 인터커넥트 회로들("인터커넥트(306)"), 메모리 제어기들(310), 및 메모리 인터페이스들(312)을 포함한다. 지원 회로들(240)은, 명확성을 위해 생략된, 다른 회로들(예를 들어, 디커플러 회로들, 디버그 회로들 등)을 포함할 수 있다. PCIe 엔드포인트(302)는 주변기기 버스(215)에 대한 물리적 인터페이스를 제공한다. PCIe DMA 제어기(304)는 RAM(226) 및 뉴럴 네트워크 가속기(238)에 대한 DMA 동작들을 용이하게 한다. 인터커넥트(306)는 PCIe DMA 제어기(304)를 메모리 제어기들(310) 및 뉴럴 네트워크 가속기(238)에 커플링시킨다. 메모리 제어기들(310)은 메모리 인터페이스들(312)에 커플링된다. 메모리 인터페이스들(312)은 RAM(226)에 커플링된다.
동작 중에, 가속 라이브러리들(114)은 PCIe DMA 제어기(304)를 통해 직접적으로 RAM(226)에 액세스할 수 있다. 가속 라이브러리들(114)은 또한 PCIe DMA 제어기(304)를 통해 뉴럴 네트워크 가속기(238)에 액세스할 수 있다. 뉴럴 네트워크 가속기(238)는 메모리 제어기(310)를 통해 RAM(226)에 액세스할 수 있다. 시스템 메모리(216)와 RAM(226) 사이의 DMA 동작들을 사용하여 소프트웨어(206)와 뉴럴 네트워크 가속기(238) 사이에서 데이터가 교환될 수 있다.
이 예에서, 뉴럴 네트워크 가속기(238)는 인터커넥트(306)와 통신하기 위해 인터페이스들(330, 331, 및 332)을 사용한다. 특히, 이러한 인터페이스들은 제1 판독 인터페이스(330), 제2 판독 인터페이스(331), 및 판독/기록 인터페이스(332)를 포함한다. 예를 들어, 판독 인터페이스(330)는 뉴럴 네트워크 가속기(238)를 제어하기 위한 제어 인터페이스로서 사용될 수 있다. 판독 인터페이스(331)는 메모리 인터페이스들(312) 중 제1 인터페이스를 통해 RAM(226)으로부터 판독하는 데 사용될 수 있다. 판독/기록 인터페이스(332)는 메모리 인터페이스들(312) 중 제2 인터페이스를 통해 RAM(226)으로부터 판독하고 기록하는 데 사용될 수 있다.
뉴럴 네트워크 가속기(238)는 인터커넥트 인터페이스(304), 제어 로직(342), 및 프로세싱 회로들(341)을 포함한다. 프로세싱 회로들(341)은 포맷터 회로(344)(예를 들어, IM2COL), 판독 제어 회로("판독 제어(346)"), 멀티플렉서(356), 선입 선출(first-in-first-out) 회로들("FIFO들(358)"), 행렬 곱셈기 어레이(362), ReLU-스케일러 회로(364), 풀링 회로(366)(예를 들어, maxpool), 멀티플렉서(368), FIFO들(354), 기록 제어 회로("기록 제어(352)"), 캐시(348), 판독 제어 회로("판독 제어(350)"), 및 FIFO들(360)을 포함한다. 인터커넥트 인터페이스(340)는 인터페이스들(330, 331, 및 332), 제어 로직(342), 및 프로세싱 회로들(341)에 커플링된다. 인터커넥트 인터페이스(340)는 제어 로직(342)과 인터페이스(330) 사이는 물론, 프로세싱 회로들(341)과 인터페이스들(331 및 332) 사이의 통신을 용이하게 하기 위해 스위치들, 클록 변환기들 등을 포함할 수 있다.
이 예에서, 인터커넥트 인터페이스(340)는 포맷터 회로(344), 판독 제어 회로(346), 캐시(348), 및 기록 제어 회로(352)의 입력들에 커플링된다. 포맷터 회로(344) 및 판독 제어 회로(346)의 출력들은 멀티플렉서(356)의 입력들에 커플링된다. 멀티플렉서(356)의 출력은 FIFO들(358)의 입력에 커플링된다. FIFO들(358)의 출력은 행렬 곱셈기 어레이(362)의 제1 입력에 커플링된다. 캐시(348)의 출력은 판독 제어 회로(350)의 입력에 커플링된다. 판독 제어 회로(350)의 출력은 FIFO들(360)의 입력에 커플링된다. FIFO들(360)의 출력은 행렬 곱셈기 어레이(362)의 제2 입력에 커플링된다. 행렬 곱셈기 어레이(362)의 출력은 ReLU-스케일러(362)의 입력에 커플링된다. ReLU-스케일러(364)의 출력은 풀링 회로(366)의 입력 및 멀티플렉서(368)의 입력에 커플링된다. 풀링 회로(366)의 출력은 멀티플렉서(368)의 다른 입력에 커플링된다. 멀티플렉서(368)의 출력은 FIFO들(354)의 입력에 커플링된다. FIFO들(354)의 출력은 기록 제어 회로(352)에 커플링된다.
동작 중에, 행렬 곱셈기 어레이(362)는 뉴럴 네트워크를 구현하기 위해 행렬 곱셈 연산들을 수행한다. 행렬 곱셈기 어레이(362)의 입력들은 FIFO들(358)로부터 입력 활성화 행렬들을 수신하고 FIFO들(360)로부터 가중치 행렬들을 수신한다. 입력 활성화 행렬들은 판독 제어 회로(346)를 사용하여 RAM(226)으로부터 직접적으로 판독될 수 있다. 대안적으로, 입력 활성화들은 RAM(226)으로부터 판독되고 행렬 승산기 어레이(362)로의 입력을 위해 포맷터 회로(344)에 의해 프로세싱될 수 있다. 가중치 행렬들은 판독 제어 회로(350)에 의해 RAM(226)으로부터 판독되고 캐시(348)에 캐싱될 수 있다. ReLU-스케일러(364)는 활성화 함수를 수행하고 행렬 곱셈기 어레이(362)의 출력을 스케일링할 수 있다. 풀링 회로(366)는 행렬 곱셈기 어레이(362)의 스케일링된 출력에 대해 맥스 풀링 함수를 구현할 수 있다. 일 예에서, 풀링 회로(366)는 CLB들 또는 다른 구성가능 로직을 사용하여 구현된다. 풀링 회로(366) 또는 ReLU-스케일러(364)의 출력 중 어느 하나가 FIFO들(354)에 저장될 수 있다. 기록 제어 회로(352)는 FIFO들 내의 데이터를 RAM(226)에 기록한다. 제어 로직(342)은, 포맷터 회로(344), 판독 제어 회로(346), 멀티플렉서들(356 및 368), 판독 제어 회로(350), ReLU-스케일러(364), 풀링 회로(366), 및 기록 제어 회로(352)와 같은, 프로세싱 회로들(341) 내의 다양한 회로들을 제어한다.
도 4는 일 구현에 따른 예시적인 뉴럴 네트워크 프로세싱 시스템(400)을 도시한다. 이 시스템은 뉴럴 네트워크 가속기(238)에 통신가능하게 커플링되는 호스트 컴퓨터 시스템(402)을 포함한다. 호스트 컴퓨터 시스템(402)은 도 2에 도시된 바와 같은 프로세싱 시스템(210), 시스템 메모리(216), 및 스토리지(218)를 포함할 수 있다. 호스트 컴퓨터 시스템(402)은 머신 러닝(ML) 프레임워크(410) 및 뉴럴 네트워크 가속기(KA) 인터페이스(412)에 의해 구체적으로 프로그래밍된다. 도 1의 애플리케이션들(112)에 대응하는 ML 프레임워크 프로그램은 특정의 뉴럴 네트워크 응용, 예를 들어, 이미지 또는 음성 프로세싱을 지정하고, 도 1에서와 같은 가속 라이브러리들로서 구현될 수 있는 KA 인터페이스는 ML 프레임워크로부터의 뉴럴 네트워크 프로세싱에 대한 요청들에 응답하여 뉴럴 네트워크 가속기들 상에서 뉴럴 네트워크 연산들을 개시한다. 뉴럴 네트워크 가속기(238)는 RAM(406)에 커플링되고, RAM(406)을 통해 호스트와 뉴럴 네트워크 가속기가 통신한다. 뉴럴 네트워크 가속기는 구성 레지스터들(408)의 세트를 갖는다. 구성 레지스터들은 메모리 버퍼들의 어드레스들을 RAM(226)에 저장하기 위해 그리고, 일반 행렬 곱셈(GEMM)을 위한 행렬 차원들 및 컨볼루션을 위한 스트라이드(stride)/윈도(window)와 같은, 뉴럴 네트워크 연산들을 위한 구성 파라미터들을 위해 KA 인터페이스(412)에 액세스가능하다.
개시된 접근법들은 임의의 특정 하드웨어 플랫폼들로 제한되지 않는다. 그렇지만, 본 기술분야의 통상의 기술자에게 기준 프레임을 제공하기 위해, 뉴럴 네트워크 가속기는 Xilinx, Inc.로부터 이용가능한 KINTEX® ULTRASCALE™ 115 디바이스 상에서 구현될 수 있다. RAM(226)은 뉴럴 네트워크 가속기와 함께 인쇄 회로 보드 상에 장착된 DDR SDRAM이다. 호스트(402)와 RAM 사이, 그리고 호스트와 뉴럴 네트워크 가속기 사이의 인터페이스는 PCIe(Peripheral Component Interconnect Express)이다. 뉴럴 네트워크 가속기는 직접 메모리 액세스(DMA) 채널들을 사용하여 호스트 메모리의 일부를 RAM 및 구성 레지스터들(408)에 매핑한다. 호스트 컴퓨터 시스템(402)은 ML 프레임워크(410) 및 KA 인터페이스(412)를 실행하기에 적합한 임의의 컴퓨터 시스템 또는 컴퓨터 시스템들의 조합 또는 네트워크일 수 있다. ML 프레임워크들은 TensorFlow™, Caffe, 및 MXNet과 같은 프로그래밍 패키지들을 사용하여 지정될 수 있다.
KA 인터페이스(412)는 뉴럴 네트워크 가속기(238)에 의한 프로세싱을 위해 ML 프레임워크(410)로부터 뉴럴 네트워크 요청들을 수신한다. 프로세싱을 위해 뉴럴 네트워크 요청들을 뉴럴 네트워크 가속기에 제출하기 전에, KA 인터페이스는 뉴럴 네트워크 가속기와 공유되는 RAM(226)에 뉴럴 네트워크의 계층들과 연관된 가중치 행렬들을 기록한다. 가중치 행렬들 모두는 연속적인 블록으로서 공유 메모리에 기록되며, 이는 DMA 동작들의 횟수 및 오버헤드를 감소시키고 뉴럴 네트워크의 계층들에서의 컨볼루션들 또는 행렬 곱셈들을 위해 가중치들이 필요할 때 가중치들이 뉴럴 네트워크 가속기에 이용가능하도록 보장한다.
ML 프레임워크(410)로부터 뉴럴 네트워크 요청을 수신한 것에 응답하여, KA 인터페이스(412)는 계층별 명령어들의 그룹을 명령어 패키지로 어셈블링하고 명령어 패키지를 RAM(226)에 기록한다. 각각의 계층별 명령어는 뉴럴 네트워크의 각자의 계층의 프로세싱을 지정한다. 그에 부가하여, 각각의 계층별 명령어는 공유 메모리에서의 결합된 가중치 행렬들의 베이스 어드레스(base address)로부터의 가중치 행렬의 각자의 오프셋을 지정한다. 뉴럴 네트워크의 각각의 계층의 프로세싱은 가중치 행렬들의 각자의 가중치 행렬에 액세스할 것이다. 계층별 명령어는 또한 상이한 계층들에서의 상이한 뉴럴 네트워크 연산들에 대한 구성 파라미터들을 지정한다. 예를 들어, 구성 파라미터들은 스케일링 인자, 컨볼루션 윈도 및 스트라이드, maxpool 프로세싱을 위한 행렬 차원들, 및 활성화 함수를 지정할 수 있다. 구성 파라미터들은 RAM에서의 명령어 패키지의 베이스 어드레스를 더 포함한다. 뉴럴 네트워크의 상이한 계층들은 상이한 뉴럴 네트워크 연산 세트들을 수반할 수 있다.
KA 가속기는 추가로 뉴럴 네트워크 가속기의 구성 레지스터들(408)에서 구성 파라미터들을 확정한다. 구성 파라미터들은 가중치 행렬들의 베이스 어드레스, 입력/출력 데이터 행렬들의 베이스 어드레스, 및 입력/출력 데이터 행렬들의 베이스 어드레스로부터의 오프셋을 포함한다. 가중치 행렬은 때때로 "A"라고 지칭되고, 입력 데이터 행렬은 때때로 "B"라고 지칭되며, 출력 데이터 행렬은 때때로 "C"라고 지칭된다.
명령어들의 패키지가 프로세싱될 준비가 되었음을 나타내는 KA 인터페이스(412)로부터의 신호에 응답하여, 뉴럴 네트워크 가속기(238)는 명령어 패키지로부터의 계층별 명령어들을 연속적으로(serially) 프로세싱한다. 명령어들의 패키지는 프로그램 또는 상태 머신(state machine) - 이에 따라 뉴럴 네트워크 가속기는 뉴럴 네트워크의 계층들의 지정된 프로세싱을 수행함 - 을 효과적으로 지정한다.
도 5는 도 3의 예시적인 뉴럴 네트워크 가속기(238)의 다른 뷰를 도시한다. 병합된 가중치 행렬들(520)이 호스트에 의해 기록되고 RAM(226)의 연속적인 어드레스들에 저장된다. 예시적인 응용에서, 명령어 패키지(516) 내의 계층별 명령어들은 뉴럴 네트워크의 계층들에서 수행될 뉴럴 네트워크 연산 세트들 및 스케일링, maxpool 차원들, 및 활성화 함수에 대한 구성 파라미터들을 지정한다. 뉴럴 네트워크 가속기에 의한 특정 계층별 프로세싱을 지시하기 위해 명령어 패키지 내의 계층별 명령어들 중 상이한 계층별 명령어들에 상이한 뉴럴 네트워크 연산 세트들이 지정될 수 있다.
명령어 패키지(516)로부터의 계층별 명령어들을 프로세싱할 때, 뉴럴 네트워크 가속기는 명령어들을 연속적으로 프로세싱한다. 예를 들어, 제1 계층별 명령어가 프로세싱되고 뒤이어 잇달아(in succession) 명령어 패키지의 제2 계층별 명령어를 프로세싱한다. 제1 계층별 명령어를 프로세싱할 때, 뉴럴 네트워크 가속기(238)는 RAM(226) 내의 B/C 버퍼(518)의 제1 부분으로부터 입력 데이터를 판독하고 RAM 내의 B/C 버퍼의 제2 부분에 출력 데이터를 기록한다. 제2 계층별 명령어를 프로세싱할 때, 뉴럴 네트워크 가속기는 B/C 버퍼의 제2 부분으로부터 입력 데이터를 판독하고 B/C 버퍼의 제1 부분에 출력 데이터를 기록한다. 뉴럴 네트워크 가속기는 그 후에 각각의 연속적인 계층별 명령어에 대해 입력 및 출력 데이터에 사용되는 B/C 버퍼의 부분들 사이를 왔다갔다.
뉴럴 네트워크 가속기(238)는 구성 레지스터들(408), (도 3의 판독 제어 및 기록 제어를 구현하는) 디스패치 및 어드레싱 로직 회로부(502), 포맷터 회로(344), 컨볼루션 또는 행렬 곱셈기 회로부(362), ReLU(rectifier liner unit) 및 스케일링 회로(364), 및 풀링 회로부(366)를 포함한다. 멀티플렉서들(356 및 368)은 지정된 뉴럴 네트워크 연산들에 따라 디스패치 및 어드레싱 로직에 의해 제어된다. 구성 레지스터들 내의 구성 데이터는 포맷터 회로, 행렬 곱셈기 회로부, ReLU-스케일링 회로, 및 풀링 회로부에 대한 구성 파라미터들을 제공한다.
디스패치 및 어드레싱 회로(502)는 명령어 패키지(516)로부터 계층별 명령어를 판독하고 작업 요청에서 언급된 데이터를 사용하여 지정된 뉴럴 네트워크 연산들을 개시한다. 디스패치 및 어드레싱 회로는 계층별 명령어에 지정된 파라미터들에 따라, RAM(226)으로부터 판독되는 입력 데이터와 포맷터 회로(344)로부터의 포맷팅된 데이터 중에서 선택하기 위해 멀티플렉서(356)를 제어한다. 포맷터 회로(344)는 입력 데이터를 ML 프레임워크에 의해 제공되는 포맷으로부터 컨볼루션 또는 행렬 곱셈기 회로(362)에 적합한 포맷으로 변환한다. 예를 들어, 일 구현에서, 포맷터 회로는 이미지 데이터를 열 데이터로 변환한다(im2col). 다른 구현에서, 포맷터 회로는 행 우선(row-major) 또는 열 우선(column-major) 포맷을 계산 어레이 지오메트리(compute array geometry)와 매칭하는 커스텀 하이브리드 행/열 우선 포맷으로 변환한다. 컨볼루션 또는 행렬 곱셈기 회로부(362)는 입력 데이터와 가중치 행렬들(520)로부터 선택된 가중치 행렬 사이의 행렬 곱셈을 수행한다. 일 구현에서, 행렬 곱셈 회로(362)는 곱셈기-누산기 회로들의 시스톨릭 어레이(systolic array)이다. ReLU 회로(364)는 뉴럴 네트워크에 대한 활성화 함수 및 스케일링 함수를 구현한다. 예시적인 응용에서, 풀링 회로(366)는 후속 계층들에 부과되는 계산 요구사항들을 감소시키기 위해 컨볼루션 계층들 사이의 데이터의 공간적 크기를 감소시킨다. 공간적 크기의 감소는 또한 오버피팅을 피하는 데 도움을 준다. 예시적인 응용에서, 풀링 회로는 maxpool 함수를 구현한다. 디스패치 및 어드레싱 회로는 B/C 버퍼(518)에 출력 행렬로서 저장하기 위해 ReLU 및 스케일링 회로(364)로부터의 데이터와 풀링 회로(366)로부터의 데이터 중에서 선택하도록 멀티플렉서(368)를 제어한다.
도 6은 계층별 명령어들의 패키지를 프로세싱하고 가중치들, 입력 데이터, 및 계층별 명령어들의 패키지를 프로세싱을 위해 뉴럴 네트워크 가속기에 제공하도록 뉴럴 네트워크 가속기를 구성하는 데 KA 인터페이스에 의해 수행되는 프로세스의 플로차트를 도시한다.
블록(602)에서, KA 인터페이스는 뉴럴 네트워크의 계층들의 연산들을 수행하는 데 필요한 가중치 행렬들을 수집한다. 가중치 행렬들은 ML 프레임워크(410)에서의 뉴럴 네트워크의 규격으로부터 획득될 수 있다. 뉴럴 네트워크의 각각의 계층은 연관된 가중치 행렬을 갖는다. KA 인터페이스는 RAM(226)의 연속적인 어드레스 공간의 블록에 가중치 행렬들의 집합체를 기록한다.
블록(604)에서 KA 인터페이스(412)는 B/C 버퍼의 크기를 결정한다. 예시적인 구현에서, KA 인터페이스는 ML 프레임워크(410)에 의해 기재된 바와 같은 뉴럴 네트워크의 규격을 스캔한다. 규격을 스캔할 때, KA 인터페이스는 뉴럴 네트워크의 상이한 계층들에 B 행렬 및 C 행렬의 정의들이 있는지 탐색하고 B 행렬 및 C 행렬의 최대 크기를 결정한다. B/C 버퍼의 크기는 B 행렬 및 C 행렬의 최대 크기의 두 배로 계산된다. 뉴럴 네트워크 가속기가, 이미지들의 배치(batch)와 같은, 다수의 입력 데이터 세트들을 프로세싱하는 응용에서, B/C 버퍼의 크기는:
2 * max (B, C) * num-sets
일 수 있고, 여기서 max (B, C)는 B 행렬 및 C 행렬의 최대 크기이고, num-sets는 이미지의 RGB 채널들과 같은 입력 데이터 세트들의 개수이다.
블록(606)에서, KA 인터페이스는 가중치 행렬들, 명령어 패키지, 및 B/C 버퍼의 RAM(226)에서의 베이스 어드레스들로 뉴럴 네트워크 가속기를 구성한다. 뉴럴 네트워크 가속기는 베이스 어드레스들을 구성 레지스터들(408)에 기록함으로써 구성될 수 있다.
블록(608)에서 KA 인터페이스는 뉴럴 네트워크의 계층들을 통해 입력 데이터 세트(들)를 실행하라는 커맨드를 ML 프레임워크로부터 수신한다. 커맨드에 응답하여, 블록(610)에서, KA 인터페이스는 계층별 명령어들을 명령어들의 패키지로 어셈블링하고, 계층별 명령어들은 ML 프레임워크에 의해 정의된 뉴럴 네트워크의 규격에 기초하여 생성된다. 예를 들어, 특정의 응용에서, ML 프레임워크는 다음과 같이 계층들에서의 뉴럴 네트워크 연산들을 정의한다:
Convolution 1
ReLu 1
MaxPool 1
Convolution 2
ReLu 2
MaxPool 2
Convolution 3
ReLu 3
Convolution 4
ReLu 4
Convolution 5
ReLu 5
MaxPool 5
FC 6
FC 7
FC 8
여기서 각각의 정수는 뉴럴 네트워크에서의 계층을 나타낸다. 계층들이 알고리즘적 설명에서는 1부터 넘버링될 수 있고, 특정 구현에서는 0부터 넘버링할 수 있다. 양쪽 설명들은 상호교환가능하다. 뉴럴 네트워크 계층들의 정의에 기초하여, KA 인터페이스는 명령어 패키지에 포함시킬 계층별 명령어들을 준비한다. 예를 들어, 전술한 예시적인 뉴럴 네트워크 정의에 기초한 Alexnet 컨볼루션 뉴럴 네트워크의 계층 2에 대한 계층별 명령어는 다음과 같다:
M: 192
N: 5832
K: 1600
scaleFPGAC: 26
A_offset: 24567
do im2col: 2
batch size: 8
img ch:64 w:27 w_padded:32 h:27
out w:27 w_padded:32
maxpool: 2
relu: true
예시적인 계층별 명령어에서, M과 연관된 값은 가중치 행렬 A에서의 행들의 개수 및 출력 행렬 C에서의 행들의 개수를 지정한다. N과 연관된 값은 이미지 행렬 B 및 출력 행렬 C의 열들의 개수를 지정한다. K와 연관된 값은 A의 열들과 B의 행들을 지정한다. scaleFPGAC와 연관된 값은 계층 3에서 사용하기 위해 계층 2로부터의 계산된 값들을 스케일링하는 데 사용되는 스케일링 인자를 지정한다. A_offset과 연관된 값은 계층 2에 대한 가중치 행렬이 발견되는 가중치 행렬들(520)의 베이스 어드레스로부터의 오프셋을 지정한다.
파라미터 "do im2col: 2"는 계층 2 지오메트리 이미지-대-열 포맷팅이 수행되어야 한다는 것을 지정한다. 파라미터 "batch size: 8"은 8개의 입력 데이터 세트가 프로세싱되어야 한다는 것을 지정한다. 파라미터 "img ch:64 w:27 w_padded:32 h:27"은 계층 2에서 입력 데이터 세트 내의 채널들의 개수를 지정한다. 파라미터 "out w:27 w_padded:32"는 계산 어레이에 의해 필요하게 되는 데이터 크기들에 맞게 정렬시키기 위해 입력 데이터의 패딩을 지정한다. 파라미터 "maxpool: 2"는 계층 2 maxpool 연산이 수행되어야 한다는 것을 지정한다. 파라미터 "relu: true"는 계층 1 relu 연산이 수행되어야 한다는 것을 지정한다.
일단 계층별 명령어들이 뉴럴 네트워크의 모든 계층들에 대해 어셈블링되면, 블록(612)에서, KA 인터페이스는 계층별 명령어들의 패키지를 RAM(226)에 기록한다. 블록(614)에서, KA 인터페이스는 입력 데이터를 RAM 내의 B/C 버퍼에 기록하고, 일단 명령어 패키지 및 입력 데이터가 RAM에 기록되면, 블록(616)에서, KA 인터페이스는 뉴럴 네트워크를 통해 입력 데이터를 프로세싱하기 시작(commence)하도록 뉴럴 네트워크 가속기에 시그널링한다. 뉴럴 네트워크 가속기가 프로세싱의 완료를 시그널링한 것에 응답하여, 블록(618)에서, KA 인터페이스는 RAM 내의 B/C 버퍼로부터 출력 데이터를 판독한다.
도 7은 뉴럴 네트워크 명령어들의 패키지를 프로세싱할 때 뉴럴 네트워크 가속기에 의해 수행되는 프로세스의 플로차트를 도시한다. 블록(702)에서, 뉴럴 네트워크 가속기(238)는 명령어 패키지(516)로부터 계층별 명령어를 판독한다. 블록(704)에서, 지정된 가중치 행렬의 어드레싱 및 입력 데이터 및 출력 데이터의 B/C 버퍼에 대한 어드레스들이 뉴럴 네트워크 가속기에 의해 확정된다. 가중치 행렬의 어드레스는 병합된 가중치 행렬들(520)의 베이스 어드레스 및 계층별 명령어에 의해 지정된 오프셋으로서 결정된다.
B/C 버퍼는 입력 데이터와 출력 데이터 둘 다를 저장하는 데 사용되고, 뉴럴 네트워크의 하나의 계층으로부터의 출력 데이터는 다음 후속 계층에 대한 입력 데이터이다. 베이스 입력 어드레스는 현재 계층에 대한 B/C 버퍼에서의 입력 데이터의 베이스 어드레스를 참조하고, 베이스 출력 어드레스는 현재 계층에 대한 B/C 버퍼에서의 출력 데이터의 베이스 어드레스를 참조한다. 프로세싱이 하나의 계층으로부터 다음 후속 계층으로 전환될 때, 베이스 입력 어드레스와 베이스 출력 어드레스에 대해 사용되는 어드레스들이 스와핑된다. 어드레스 스와핑 스킴은 뉴럴 네트워크 가속기를 하나의 계층의 프로세싱으로부터 다음 계층의 프로세싱으로 전환시킬 때 데이터의 복사를 없애준다.
블록(706)에서, 뉴럴 네트워크 가속기는 지정된 파라미터들을 사용하여 계층별 명령어에 지정된 뉴럴 네트워크 연산들을 수행한다. 위에서 나타낸 예시적인 계층별 명령어에서, 컨볼루션 연산, 행렬 곱셈 연산, im2col 연산, maxpool 연산, 및 relu 연산이 수행된다. 뉴럴 네트워크 가속기는 결정 블록(708)에서 프로세싱될 계층별 명령어들이 더 있는지 여부를 결정한다. 만약 그렇다면, 블록(710)에서, 뉴럴 네트워크 가속기는 명령어 패키지로부터 다음 명령어를 판독하고, 다음 명령어에 대해 셋업하기 위해 블록(704)으로 돌아간다. 그렇지 않으면, 입력 데이터의 뉴럴 네트워크 가속기 프로세싱이 완료되고, 블록(712)에서, 뉴럴 네트워크 가속기가 완료를 호스트에게 시그널링한다.
도 8은 0 내지 4로 넘버링된, 5개의 뉴럴 네트워크 계층에 대한 예시적인 가중치 행렬들(802)의 어드레싱 및 예시적인 입력/출력 버퍼("B/C 버퍼")(804)의 어드레싱을 도시한다. 가중치 행렬들(802)의 베이스 어드레스는 "weights base"로서 라벨링되고, 계층 0 가중치들은 weights base에서 시작하여 저장된다. 계층 1 내지 계층 4에 대한 가중치 행렬들은 weights base로부터의 각각의 오프셋들에서 시작하여 저장된다. 계층 1 오프셋은 "L1offset"이고 계층 2 오프셋은 "L2offset"이며, 이하 마찬가지이다. B/C 버퍼의 첫 번째 부분의 베이스 어드레스로서 사용되는 B/C 버퍼의 베이스 어드레스는 "B/C base"로서 라벨링되고, B/C 버퍼의 두 번째 부분의 어드레스는 B/C base + BCoffset에 있다.
블록들(806, 808, 810, 812, 및 814)은, 제각기, 계층 0 내지 계층 4에서 지정된 뉴럴 네트워크 연산들을 수행할 때 뉴럴 네트워크 가속기(238)에 의해 수행되는 프로세싱을 나타낸다. A, B, 및 C는 각각의 계층에 대한 어드레스 입력들을 보여준다. A는 가중치 행렬의 베이스 어드레스이고, B는 입력 데이터 행렬의 베이스 어드레스이며, C는 출력 데이터 행렬의 베이스 어드레스이다.
계층 0의 경우, 가중치 행렬의 베이스 어드레스는 weights base이고, 입력 행렬의 베이스 어드레스는 B/C base이며, 출력 행렬의 베이스 어드레스는 B/C base + BCoffset이다. 계층 1로 이동하면, 계층 1 명령어는 L1 offset을 계층 1에 대한 가중치 행렬의 오프셋으로서 지정할 것이고, 계층 1에 대한 가중치 행렬의 베이스 어드레스는 weights base + L1 offset일 것이다. 계층별 명령어에서의 지정된 오프셋에 따라 각각의 계층에서의 입력에 대해 가중치 행렬의 베이스 어드레스가 조정된다.
계층 0으로부터 계층 1로 전환할 때 B 행렬과 C 행렬의 어드레스들이 스와핑되고, 계층 0으로부터의 출력은 계층 1에 대한 입력이 된다. 계층 0에 대한 입력을 위해 사용되는 B/C 버퍼의 부분은 계층 1로부터의 출력을 위한 부분이 된다. 구체적으로는, 입력 행렬의 베이스 어드레스는 B/C base + BCoffset으로 변경되고, 출력 행렬의 베이스 어드레스는 B/C base로 변경된다. 이 예에서, 짝수 번호의 계층들은 B/C base에 위치된 B/C 버퍼의 부분으로부터 데이터를 입력하고 B/C base + BCoffse에 위치된 B/C 버퍼의 부분으로 데이터를 출력한다. 홀수 번호의 계층들은 B/C base + BC offset에 위치된 B/C 버퍼의 부분으로부터 데이터를 입력하고 B/C base에 위치된 B/C 버퍼의 부분으로 데이터를 출력한다.
도 9은 예에 따른 프로그래밍가능 IC(228)를 묘사하는 블록 다이어그램이다. 프로그래밍가능 IC(228)는 프로그래밍가능 로직(3), 구성 로직(25), 및 구성 메모리(26)를 포함한다. 프로그래밍가능 IC(228)는, NVM(224), RAM(226), 및 다른 회로들(29)과 같은, 외부 회로들에 커플링될 수 있다. 프로그래밍가능 로직(3)은 로직 셀들(30), 지원 회로들(31), 및 프로그래밍가능 인터커넥트(32)를 포함한다. 로직 셀들(30)은 복수의 입력들의 일반적인 로직 함수들을 구현하도록 구성될 수 있는 회로들을 포함한다. 지원 회로들(31)은, 트랜시버들, 입력/출력 블록들, 디지털 신호 프로세서들, 메모리들 등과 같은, 전용 회로들을 포함한다. 로직 셀들과 지원 회로들(31)은 프로그래밍가능 인터커넥트(32)를 사용하여 상호접속될 수 있다. 로직 셀들(30)을 프로그래밍하기 위한, 지원 회로들(31)의 파라미터들을 설정하기 위한, 그리고 프로그래밍가능 인터커넥트(32)를 프로그래밍하기 위한 정보는 구성 로직(25)에 의해 구성 메모리(26)에 저장된다. 구성 로직(25)은 비휘발성 메모리(224) 또는 임의의 다른 소스(예를 들어, DRAM(226) 또는 다른 회로들(29))로부터 구성 데이터를 획득할 수 있다. 일부 예들에서, 프로그래밍가능 IC(228)는 프로세싱 시스템(2)을 포함한다. 프로세싱 시스템(2)은 마이크로프로세서(들), 메모리, 지원 회로들, IO 회로들 등을 포함할 수 있다. 예를 들어, 프로세싱 시스템(2)은 프로세싱 시스템(210)과 유사한 회로들을 포함할 수 있다. 일부 예들에서, 프로세싱 시스템(2)은 프로세싱 시스템(210) 대신에 사용될 수 있다. 그러한 경우에, 전체 컴퓨팅 시스템(108)은 프로그래밍가능 IC(228)를 사용하여 구현될 수 있으며, 여기서 소프트웨어(206)는 프로세싱 시스템(2) 상에서 실행된다.
도 10는 트랜시버들(37), 구성가능 로직 블록들("CLB들")(33), 랜덤 액세스 메모리 블록들("BRAM들")(34), 입/출력 블록들("IOB들")(36), 구성 및 클로킹 로직("구성/클록들")(42), 디지털 신호 프로세싱 블록들("DSP들")(35), 특수 입/출력 블록들("I/O")(41)(예를 들어, 구성 포트들 및 클록 포트들), 및 디지털 클록 관리자들, 아날로그-디지털 변환기들, 시스템 모니터링 로직 등과 같은 다른 프로그래밍가능 로직(39)을 포함한 많은 수의 상이한 프로그래밍가능 타일들을 포함하는 프로그래밍가능 IC(228)의 FPGA 구현을 예시한다. FPGA는 PCIe 인터페이스들(40), 아날로그-디지털 변환기들(ADC)(38) 등을 또한 포함할 수 있다.
일부 FPGA들에서, 각각의 프로그래밍가능 타일은, 도 10의 상부에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내의 프로그래밍가능 로직 요소의 입력 및 출력 단자들(48)에 대한 접속들을 갖는 적어도 하나의 프로그래밍가능 인터커넥트 요소("INT")(43)를 포함할 수 있다. 각각의 프로그래밍가능 인터커넥트 요소(43)는 동일한 타일 또는 다른 타일들에서 인접한 프로그래밍가능 인터커넥트 요소(들)의 인터커넥트 세그먼트들(49)에 대한 접속들을 또한 포함할 수 있다. 각각의 프로그래밍가능 인터커넥트 요소(43)는 로직 블록들(도시되지 않음) 사이의 일반적인 라우팅 자원들의 인터커넥트 세그먼트들(50)에 대한 접속들을 또한 포함할 수 있다. 일반적인 라우팅 자원들은 인터커넥트 세그먼트들(예컨대, 인터커넥트 세그먼트들(50))의 트랙들을 포함하는 로직 블록들(도시되지 않음)과 인터커넥트 세그먼트들을 접속시키기 위한 스위치 블록들(도시되지 않음) 사이의 라우팅 채널들을 포함할 수 있다. 일반적인 라우팅 자원들의 인터커넥트 세그먼트들(예컨대, 인터커넥트 세그먼트들(50))은 하나 이상의 로직 블록에 걸쳐 있을 수 있다. 일반적인 라우팅 자원들과 합쳐진 프로그래밍가능 인터커넥트 요소들(43)은 예시된 FPGA를 위한 프로그래밍가능 인터커넥트 구조("프로그래밍가능 인터커넥트")를 구현한다.
예시적인 구현에서, CLB(33)는 사용자 로직 및 단일 프로그래밍가능 인터커넥트 요소("INT")(43)를 구현하도록 프로그래밍될 수 있는 구성가능 로직 요소("CLE")(44)를 포함할 수 있다. BRAM(34)은 하나 이상의 프로그래밍가능 인터커넥트 요소에 부가하여 BRAM 로직 요소("BRL")(45)를 포함할 수 있다. 전형적으로, 타일에 포함되는 인터커넥트 요소들의 개수는 타일의 높이에 의존한다. 묘사된 예에서, BRAM 타일은 5개의 CLB와 동일한 높이를 갖지만, 다른 개수들(예컨대, 4개)이 또한 사용될 수 있다. DSP 타일(35)은 적절한 개수의 프로그래밍가능 인터커넥트 요소들에 부가하여 DSP 로직 요소("DSPL")(46)를 포함할 수 있다. IOB(36)는, 예를 들어, 프로그래밍가능 인터커넥트 요소(43)의 하나의 인스턴스에 부가하여 2개의 입/출력 로직 요소("IOL")(47)의 2개의 인스턴스를 포함할 수 있다. 본 기술분야의 통상의 기술자에게 명백할 것인 바와 같이, 예를 들어, I/O 로직 요소(47)에 접속되는 실제 I/O 패드들은 전형적으로 입/출력 로직 요소(47)의 영역으로 한정되지 않는다.
묘사된 예에서, 다이의 중심 부근의 수평 영역은 구성, 클록, 및 다른 제어 로직에 사용된다. 이 수평 영역 또는 열로부터 연장되는 수직 열들(51)은 FPGA의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는 데 사용된다.
도 10에 예시된 아키텍처를 이용하는 일부 FPGA들은 FPGA의 대부분을 구성하는 규칙적인 열 구조를 방해하는 부가의 로직 블록들을 포함한다. 부가의 로직 블록들은 프로그래밍가능 블록들 및/또는 전용 로직일 수 있다.
도 10이 단지 예시적인 FPGA 아키텍처를 예시하는 것으로 의도되어 있다는 점에 유의한다. 예를 들어, 행에 있는 로직 블록들의 개수들, 행들의 상대 폭, 행들의 개수 및 순서, 행들에 포함된 로직 블록들의 유형들, 로직 블록들의 상대 크기들, 및 도 10의 상부에 포함된 인터커넥트/로직 구현들은 순전히 예시적인 것이다. 예를 들어, 실제 FPGA에서는, 사용자 로직의 효율적 구현을 용이하게 하기 위해, CLB들이 나타날 때마다 하나 초과의 인접한 CLB 행이 전형적으로 포함되지만, 인접한 CLB 행들의 개수는 FPGA의 전체 크기에 따라 달라진다.
다수의 비제한적인 예들이 아래에서 제공된다. 일 예에서, 뉴럴 네트워크 시스템에서의 프로세싱 방법이 제공될 수 있다. 그러한 방법은, 호스트 컴퓨터 시스템에 의해, 뉴럴 네트워크의 복수의 계층들과 연관된 복수의 가중치 행렬들을 뉴럴 네트워크 가속기와 공유되는 메모리에 기록하는 단계; 호스트 컴퓨터 시스템에 의해 복수의 계층별 명령어들을 명령어 패키지로 어셈블링하는 단계 - 각각의 계층별 명령어는 뉴럴 네트워크의 복수의 계층들의 각자의 계층, 및 공유 메모리 내의 가중치 행렬들의 각자의 오프셋들의 프로세싱을 지정함 - ; 호스트 컴퓨터 시스템에 의해 입력 데이터 및 명령어 패키지를 공유 메모리에 기록하는 단계; 뉴럴 네트워크 가속기에 의해 공유 메모리로부터 명령어 패키지를 판독하는 단계; 및 뉴럴 네트워크 가속기에 의해 명령어 패키지의 복수의 계층별 명령어들을 프로세싱하는 단계를 포함할 수 있다.
어떤 그러한 방법에서, 복수의 가중치 행렬들을 기록하는 단계는 복수의 계층별 명령어들의 프로세싱 이전에 복수의 가중치 행렬들 모두를 공유 메모리에 기록하는 단계를 포함할 수 있다.
어떤 그러한 방법에서, 복수의 가중치 행렬들을 기록하는 단계는 복수의 계층별 명령어들의 프로세싱 이전에 복수의 가중치 행렬들 모두를 공유 메모리 내의 연속적인 어드레스 공간에 기록하는 단계를 포함할 수 있다.
어떤 그러한 방법은 가중치 행렬들의 공유 메모리에서의 베이스 어드레스를 나타내는 파라미터를 호스트 컴퓨터 시스템으로부터 뉴럴 네트워크 가속기에 전달하는 단계를 더 포함할 수 있다.
어떤 그러한 방법에서, 복수의 계층별 명령어들을 프로세싱하는 단계는: 명령어 패키지의 제1 계층별 명령어를 프로세싱하고 뒤이어 잇달아 제2 계층별 명령어를 프로세싱하는 단계; 제1 계층별 명령어를 프로세싱할 때 공유 메모리의 제1 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 메모리의 제2 부분에 기록하는 단계; 및 제2 계층별 명령어를 프로세싱할 때 공유 메모리의 제2 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 메모리의 제1 부분에 기록하는 단계를 포함할 수 있다.
어떤 그러한 방법은: 공유 버퍼의 제1 부분의 공유 메모리에서의 어드레스를 나타내는 제1 파라미터 및 공유 버퍼의 제2 부분의 공유 버퍼에서의 오프셋을 나타내는 제2 파라미터를 호스트 컴퓨터 시스템으로부터 뉴럴 네트워크 가속기에 전달하는 단계를 더 포함할 수 있고; 여기서 복수의 계층별 명령어들을 프로세싱하는 단계는: 명령어 패키지의 제1 계층별 명령어를 프로세싱하고 뒤이어 잇달아 제2 계층별 명령어를 프로세싱하는 단계; 제1 계층별 명령어를 프로세싱할 때 공유 버퍼의 제1 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 버퍼의 제2 부분에 기록하는 단계; 및 제2 계층별 명령어를 프로세싱할 때 공유 버퍼의 제2 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 버퍼의 제1 부분에 기록하는 단계를 포함할 수 있다.
어떤 그러한 방법은: 호스트 컴퓨터 시스템에 의해 뉴럴 네트워크의 규격으로부터, 뉴럴 네트워크의 복수의 계층들에서 참조되는 입력 행렬들 및 출력 행렬들의 크기들의 최댓값에 기초하여 공유 버퍼의 크기를 결정하는 단계를 더 포함할 수 있다.
어떤 그러한 방법에서, 복수의 계층별 명령어들을 어셈블링하는 단계는, 계층별 명령어들 중 하나 이상에서, 스케일링, maxpool 차원들, 및 활성화 함수에 대한 구성 파라미터들을 지정하는 단계를 포함할 수 있다.
어떤 그러한 방법에서, 복수의 계층별 명령어들 중 제1 계층별 명령어와 제2 계층별 명령어는 상이한 뉴럴 네트워크 연산 세트들을 지정한다.
어떤 그러한 방법에서, 복수의 계층별 명령어들을 프로세싱하는 단계는 명령어 패키지 내의 복수의 계층별 명령어들을 명령어 패키지에서의 출현(appearance) 순으로 프로세싱하는 단계를 포함할 수 있다.
어떤 그러한 방법에서, 복수의 계층별 명령어들을 프로세싱하는 단계는 명령어 패키지 내의 n개의 명령어에 대해 i+1번째 명령어의 실행을 시작하기 전에 i번째 명령어의 실행을 완료하는 프로세싱 단계를 포함할 수 있고 1 <= i <= n이다.
어떤 그러한 방법에서, 복수의 계층별 명령어들을 프로세싱하는 단계는 명령어 패키지에 의해 정의되는 상태 머신에 대한 유한 상태 머신 천이 테이블(finite state machine transition table)을 평가하는(evaluating) 단계를 포함할 수 있다.
다른 예에서, 뉴럴 네트워크 프로세싱 시스템이 제공될 수 있다. 그러한 뉴럴 네트워크 프로세싱 시스템은: 공유 메모리; 공유 메모리에 커플링된 호스트 컴퓨터 시스템 - 호스트 컴퓨터 시스템은 실행될 때 호스트 컴퓨터 시스템으로 하여금: 뉴럴 네트워크의 복수의 계층들과 연관된 복수의 가중치 행렬들을 공유 메모리에 기록하게 하고; 복수의 계층별 명령어들을 명령어 패키지로 어셈블링하게 하며 - 각각의 계층별 명령어는 뉴럴 네트워크의 복수의 계층들의 각자의 계층, 및 공유 메모리 내의 가중치 행렬들의 각자의 오프셋들의 프로세싱을 지정함 - ; 입력 데이터 및 명령어 패키지를 공유 메모리에 기록하게 하는 명령어들로 구성될 수 있음 - ; 및 공유 메모리 및 호스트 컴퓨터 시스템에 커플링된 뉴럴 네트워크 가속기 - 뉴럴 네트워크 가속기는: 공유 메모리로부터 명령어 패키지를 판독하고; 명령어 패키지의 복수의 계층별 명령어들을 프로세싱하도록 구성될 수 있음 - 를 포함할 수 있다.
어떤 그러한 뉴럴 네트워크 프로세싱 시스템에서, 호스트 컴퓨터 시스템으로 하여금 복수의 가중치 행렬들을 기록하게 하는 명령어들은 호스트 컴퓨터 시스템으로 하여금 뉴럴 네트워크 가속기에 의한 복수의 계층별 명령어들의 프로세싱 이전에 복수의 가중치 행렬들 모두를 공유 메모리에 기록하게 하는 명령어들을 포함할 수 있다.
어떤 그러한 뉴럴 네트워크 프로세싱 시스템에서, 호스트 컴퓨터 시스템으로 하여금 복수의 가중치 행렬들을 기록하게 하는 명령어들은 호스트 컴퓨터 시스템으로 하여금 뉴럴 네트워크 가속기에 의한 복수의 계층별 명령어들의 프로세싱 이전에 복수의 가중치 행렬들 모두를 공유 메모리 내의 연속적인 어드레스 공간에 기록하게 하는 명령어들을 포함할 수 있다.
어떤 그러한 뉴럴 네트워크 프로세싱 시스템에서, 호스트 컴퓨터 시스템은 실행될 때 호스트 컴퓨터 시스템으로 하여금 가중치 행렬들의 공유 메모리에서의 베이스 어드레스를 나타내는 파라미터를 뉴럴 네트워크 가속기에 전달하게 하는 명령어들로 추가로 구성될 수 있다.
어떤 그러한 뉴럴 네트워크 프로세싱 시스템에서, 뉴럴 네트워크 가속기는, 복수의 계층별 명령어들을 프로세싱할 때, 명령어 패키지의 제1 계층별 명령어 및 제2 계층별 명령어를 잇달아 프로세싱하고; 제1 계층별 명령어를 프로세싱할 때 공유 메모리의 제1 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 메모리의 제2 부분에 기록하며; 제2 계층별 명령어를 프로세싱할 때 공유 메모리의 제2 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 메모리의 제1 부분에 기록하도록 구성될 수 있다.
어떤 그러한 뉴럴 네트워크 프로세싱 시스템에서, 호스트 컴퓨터 시스템은 실행될 때 호스트 컴퓨터 시스템으로 하여금: 뉴럴 네트워크의 규격으로부터, 뉴럴 네트워크의 복수의 계층들에서 참조되는 입력 행렬들 및 출력 행렬들의 크기들의 최댓값에 기초하여 공유 버퍼의 크기를 결정하게 하고; 공유 버퍼의 제1 부분의 공유 메모리에서의 어드레스를 나타내는 제1 파라미터 및 공유 버퍼의 제2 부분의 공유 버퍼에서의 오프셋을 나타내는 제2 파라미터를 뉴럴 네트워크 가속기에 전달하게 하는 명령어들로 추가로 구성될 수 있고; 뉴럴 네트워크 가속기는, 복수의 계층별 명령어들을 프로세싱할 때, 명령어 패키지의 제1 계층별 명령어 및 제2 계층별 명령어를 잇달아 프로세싱하고; 제1 계층별 명령어를 프로세싱할 때 공유 버퍼의 제1 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 버퍼의 제2 부분에 기록하며; 제2 계층별 명령어를 프로세싱할 때 공유 버퍼의 제2 부분으로부터 입력 데이터를 판독하고 출력 데이터를 공유 버퍼의 제1 부분에 기록하도록 추가로 구성될 수 있다.
어떤 그러한 뉴럴 네트워크 프로세싱 시스템에서, 호스트 컴퓨터 시스템으로 하여금 복수의 계층별 명령어들을 어셈블링하게 하는 명령어들은, 계층별 명령어들 중 하나 이상에서, 컨볼루션, 행렬 곱셈, 스케일링, maxpool 차원들, 및 활성화 함수에 대한 구성 파라미터들을 지정하게 하는 명령어를 포함할 수 있다.
어떤 그러한 뉴럴 네트워크 프로세싱 시스템에서, 뉴럴 네트워크 가속기는, 복수의 계층별 명령어들을 프로세싱할 때, 명령어 패키지 내의 복수의 계층별 명령어들을 명령어 패키지에서의 출현 순으로 프로세싱하도록 추가로 구성될 수 있다.
양태들 및 특징들이 일부 경우들에서 개별 도면들에서 설명될 수 있지만, 조합이 명시적으로 도시되지 않거나 명시적으로 조합으로서 설명되어 있지 않더라도 하나의 도면으로부터의 특징들이 다른 도면의 특징들과 조합될 수 있다는 것이 이해될 것이다.
이 방법들 및 시스템들은 뉴럴 네트워크 프로세싱을 위한 다양한 시스템들에 적용가능한 것으로 생각된다. 명세서를 고려하면 다른 양태들 및 특징들이 본 기술분야의 통상의 기술자에게 명백할 것이다. 이 방법들 및 시스템들은 소프트웨어를 실행하도록 구성된 하나 이상의 프로세서로서, ASIC(application specific integrated circuit)으로서, 또는 프로그래밍가능 로직 디바이스 상의 로직으로서 구현될 수 있다. 본 명세서 및 도면들이 예들로서만 간주되고, 본 발명의 진정한 범위가 이하의 청구항들에 의해 지시되는 것으로 의도된다.

Claims (15)

  1. 방법에 있어서,
    호스트 컴퓨터 시스템에 의해, 뉴럴 네트워크(neural network)의 복수의 계층들과 연관된 복수의 가중치 행렬(weight matrix)들을 데이터 블록으로 병합하는(merging) 단계;
    상기 호스트 컴퓨터 시스템에 의해, 상기 복수의 가중치 행렬들을 갖는 상기 데이터 블록을 뉴럴 네트워크 가속기(neural network accelerator)와 공유되는 공유 메모리(shared memory) 내의 연속적인 어드레스 공간(contiguous address space)에 기록하는(writing) 단계;
    상기 호스트 컴퓨터 시스템에 의해 복수의 계층별 명령어(per-layer instruction)들을 명령어 패키지로 어셈블링(assembling)하는 단계 - 각각의 계층별 명령어는 상기 뉴럴 네트워크의 상기 복수의 계층들 중 각자의 계층의 프로세싱을 지정(specifying)하고, 상기 공유 메모리 내의 상기 복수의 가중치 행렬들 중 일 가중치 행렬의 각자의 오프셋을 지정함 - ;
    상기 호스트 컴퓨터 시스템에 의해 입력 데이터 및 상기 명령어 패키지를 상기 공유 메모리에 기록하는 단계;
    상기 뉴럴 네트워크 가속기에 의해 상기 공유 메모리로부터 상기 명령어 패키지를 판독하는 단계; 및
    상기 뉴럴 네트워크 가속기에 의해 상기 명령어 패키지의 복수의 계층별 명령어들을 잇달아(in succession) 프로세싱하는 단계
    를 포함하고, 상기 프로세싱하는 단계는,
    각 계층별 명령어를 프로세싱할 때, 상기 공유 메모리로부터 입력 데이터를 판독하고, 출력 데이터를 상기 공유 메모리에 기록하는 단계; 및
    제1 계층별 명령어의 프로세싱을 완료한 뒤에 그리고 상기 복수의 계층별 명령어들 중 제2 계층별 명령어의 프로세싱을 시작(commence)하기 전에, 상기 입력 데이터가 판독되는 상기 공유 메모리의 제1 주소를 상기 출력 데이터가 기록되는 상기 공유 메모리의 제2 주소로 스와핑(swapping)하는 단계를 포함하고,
    상기 복수의 가중치 행렬들을 갖는 상기 데이터 블록의 상기 기록은 상기 복수의 계층별 명령어들의 상기 프로세싱 이전인 것인, 방법.
  2. 삭제
  3. 제1항에 있어서, 상기 가중치 행렬들의 공유 메모리 내의 베이스 어드레스를 나타내는 파라미터를 상기 호스트 컴퓨터 시스템으로부터 상기 뉴럴 네트워크 가속기에 전달하는(communicating) 단계
    를 더 포함하는, 방법.
  4. 삭제
  5. 제1항에 있어서, 상기 복수의 계층별 명령어들을 프로세싱하는 단계는, 상기 명령어 패키지 내의 상기 복수의 계층별 명령어들을 상기 명령어 패키지에서의 출현(appearance) 순으로 프로세싱하는 단계를 포함하는 것인, 방법.
  6. 제1항에 있어서, 상기 복수의 계층별 명령어들을 프로세싱하는 단계는, 명령어 패키지 내의 n개의 명령어에 대해 i+1번째 명령어의 실행을 시작(commence)하기 전에 i번째 명령어의 실행을 완료하는 단계를 포함하고, 1 <= i <= n인 것인, 방법.
  7. 삭제
  8. 뉴럴 네트워크 프로세싱 시스템에 있어서,
    공유 메모리;
    상기 공유 메모리 및 호스트 컴퓨터 시스템에 연결되는 뉴럴 네트워크 가속기를 포함하고,
    상기 호스트 컴퓨터 시스템은,
    뉴럴 네트워크의 복수의 계층들과 연관된 복수의 가중치 행렬들을 데이터 블록으로 병합하도록;
    상기 복수의 가중치 행렬들을 갖는 상기 데이터 블록을 상기 공유 메모리 내의 연속적인 어드레스 공간에 기록하도록;
    복수의 계층별 명령어들을 명령어 패키지로 어셈블링하도록 - 각각의 계층별 명령어는 상기 뉴럴 네트워크의 상기 복수의 계층들 중 각자의 계층의 프로세싱을 지정하고, 상기 공유 메모리 내의 상기 복수의 가중치 행렬들 중 일 가중치 행렬의 각자의 오프셋을 지정함 - ;
    입력 데이터 및 상기 명령어 패키지를 상기 공유 메모리에 기록하도록 구성되고,
    상기 뉴럴 네트워크 가속기는,
    상기 공유 메모리로부터 상기 명령어 패키지를 판독하도록;
    상기 명령어 패키지의 복수의 계층별 명령어들을 잇달아 프로세싱하도록 구성되고, 상기 프로세싱하는 것은,
    각 계층별 명령어를 프로세싱할 때, 상기 공유 메모리로부터 입력 데이터를 판독하고, 출력 데이터를 상기 공유 메모리에 기록하는 것, 그리고
    제1 계층별 명령어의 프로세싱을 완료한 뒤에 그리고 상기 복수의 계층별 명령어들 중 제2 계층별 명령어의 프로세싱을 시작하기 전에, 상기 입력 데이터가 판독되는 상기 공유 메모리의 제1 주소를 상기 출력 데이터가 기록되는 상기 공유 메모리의 제2 주소로 스와핑하는 것을 포함하고,
    상기 호스트 컴퓨터 시스템은, 상기 뉴럴 네트워크 가속기에 의한 상기 복수의 계층별 명령어들의 상기 프로세싱 이전에, 상기 복수의 가중치 행렬들을 갖는 상기 데이터 블록을 기록하도록 구성되는 것인, 뉴럴 네트워크 프로세싱 시스템.
  9. 삭제
  10. 제8항에 있어서, 상기 호스트 컴퓨터 시스템은 또한, 상기 가중치 행렬들의 공유 메모리 내의 베이스 어드레스를 나타내는 파라미터를 상기 뉴럴 네트워크 가속기에 전달하도록 구성되는 것인, 뉴럴 네트워크 프로세싱 시스템.
  11. 삭제
  12. 제8항에 있어서, 상기 호스트 컴퓨터 시스템은, 상기 복수의 계층별 명령어들 중 하나 이상에서, 컨볼루션, 행렬 곱셈, 스케일링, 맥스풀 차원(maxpool dimension)들, 및 활성화 함수에 대한 구성 파라미터들을 지정하도록 구성되는 것인, 뉴럴 네트워크 프로세싱 시스템.
  13. 제8항에 있어서, 상기 뉴럴 네트워크 가속기는 상기 복수의 계층별 명령어들을 프로세싱할 때 또한, 상기 명령어 패키지 내의 상기 복수의 계층별 명령어들을 상기 명령어 패키지에서의 출현 순으로 프로세싱하도록 구성되는 것인, 뉴럴 네트워크 프로세싱 시스템.
  14. 삭제
  15. 삭제
KR1020207013441A 2017-10-17 2018-10-16 호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱 KR102578508B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/785,800 2017-10-17
US15/785,800 US11620490B2 (en) 2017-10-17 2017-10-17 Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
PCT/US2018/056112 WO2019079319A1 (en) 2017-10-17 2018-10-16 NEURONAL MULTICOUCHE NETWORK PROCESSING BY A NEURONAL NETWORK ACCELERATOR USING CONTAINED HOST COMMUNICATION WEIGHTS AND A LAYERED INSTRUCTION PACKAGE

Publications (2)

Publication Number Publication Date
KR20200069338A KR20200069338A (ko) 2020-06-16
KR102578508B1 true KR102578508B1 (ko) 2023-09-13

Family

ID=64110172

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207013441A KR102578508B1 (ko) 2017-10-17 2018-10-16 호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱

Country Status (6)

Country Link
US (1) US11620490B2 (ko)
EP (1) EP3698296A1 (ko)
JP (1) JP7196167B2 (ko)
KR (1) KR102578508B1 (ko)
CN (1) CN111226231A (ko)
WO (1) WO2019079319A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
US11386644B2 (en) * 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
US10565285B2 (en) * 2017-12-18 2020-02-18 International Business Machines Corporation Processor and memory transparent convolutional lowering and auto zero padding for deep neural network implementations
US11250107B2 (en) 2019-07-15 2022-02-15 International Business Machines Corporation Method for interfacing with hardware accelerators
US11573828B2 (en) * 2019-09-16 2023-02-07 Nec Corporation Efficient and scalable enclave protection for machine learning programs
US11501145B1 (en) * 2019-09-17 2022-11-15 Amazon Technologies, Inc. Memory operation for systolic array
KR102463123B1 (ko) * 2019-11-29 2022-11-04 한국전자기술연구원 뉴럴 네트워크 가속기의 효율적인 제어, 모니터링 및 소프트웨어 디버깅 방법
US11132594B2 (en) * 2020-01-03 2021-09-28 Capital One Services, Llc Systems and methods for producing non-standard shaped cards
CN111461315A (zh) * 2020-03-31 2020-07-28 中科寒武纪科技股份有限公司 计算神经网络的方法、装置、板卡及计算机可读存储介质
CN111461316A (zh) * 2020-03-31 2020-07-28 中科寒武纪科技股份有限公司 计算神经网络的方法、装置、板卡及计算机可读存储介质
US11783163B2 (en) * 2020-06-15 2023-10-10 Arm Limited Hardware accelerator for IM2COL operation
CN112613605A (zh) * 2020-12-07 2021-04-06 深兰人工智能(深圳)有限公司 神经网络加速控制方法、装置、电子设备及存储介质
CN112580787B (zh) * 2020-12-25 2023-11-17 北京百度网讯科技有限公司 神经网络加速器的数据处理方法、装置、设备及存储介质
CN113326479A (zh) * 2021-05-28 2021-08-31 哈尔滨理工大学 一种基于fpga的k均值算法的实现方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6346825B1 (en) 2000-10-06 2002-02-12 Xilinx, Inc. Block RAM with configurable data width and parity for use in a field programmable gate array
WO2014204615A2 (en) * 2013-05-22 2014-12-24 Neurala, Inc. Methods and apparatus for iterative nonspecific distributed runtime architecture and its application to cloud intelligence
US10339041B2 (en) 2013-10-11 2019-07-02 Qualcomm Incorporated Shared memory architecture for a neural simulator
US11099918B2 (en) 2015-05-11 2021-08-24 Xilinx, Inc. Accelerating algorithms and applications on FPGAs
US10083395B2 (en) 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor
US10417555B2 (en) * 2015-05-29 2019-09-17 Samsung Electronics Co., Ltd. Data-optimized neural network traversal
JP6983154B2 (ja) * 2015-10-28 2021-12-17 グーグル エルエルシーGoogle LLC 計算グラフの処理
US9875104B2 (en) * 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10802992B2 (en) * 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
CN107239823A (zh) 2016-08-12 2017-10-10 北京深鉴科技有限公司 一种用于实现稀疏神经网络的装置和方法
US10489702B2 (en) * 2016-10-14 2019-11-26 Intel Corporation Hybrid compression scheme for efficient storage of synaptic weights in hardware neuromorphic cores
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10949736B2 (en) * 2016-11-03 2021-03-16 Intel Corporation Flexible neural network accelerator and methods therefor
CN110050267B (zh) * 2016-12-09 2023-05-26 北京地平线信息技术有限公司 用于数据管理的系统和方法
GB2568776B (en) * 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
L. R. Long. "A Framework for FPGA-based Acceleration of Neural Network Inference with Limited Numerical Precision via High-level Synthesis with Streaming Functionality". Thesis, University of Toronto*
S Liu 등. "Cambricon: An Instruction Set Architecture for Neural Networks". 2016 ACM/IEEE 43rd Annual International Symposium on Computer Architecture. IEEE*

Also Published As

Publication number Publication date
EP3698296A1 (en) 2020-08-26
US20190114529A1 (en) 2019-04-18
JP7196167B2 (ja) 2022-12-26
US11620490B2 (en) 2023-04-04
CN111226231A (zh) 2020-06-02
JP2020537785A (ja) 2020-12-24
WO2019079319A1 (en) 2019-04-25
KR20200069338A (ko) 2020-06-16

Similar Documents

Publication Publication Date Title
KR102578508B1 (ko) 호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱
KR102562715B1 (ko) 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템
US11429848B2 (en) Host-directed multi-layer neural network processing via per-layer work requests
EP3698313B1 (en) Image preprocessing for generalized image processing
US11568218B2 (en) Neural network processing system having host controlled kernel acclerators
JP7337053B2 (ja) 超並列ソフトウェア定義ハードウェアシステムにおける静的ブロックスケジューリング
US10515135B1 (en) Data format suitable for fast massively parallel general matrix multiplication in a programmable IC
US10354733B1 (en) Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
US10984500B1 (en) Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US11204747B1 (en) Re-targetable interface for data exchange between heterogeneous systems and accelerator abstraction into software instructions
US10943039B1 (en) Software-driven design optimization for fixed-point multiply-accumulate circuitry
US11036827B1 (en) Software-defined buffer/transposer for general matrix multiplication in a programmable IC
Perepelitsyn et al. Technological Stack for Implementation of AI as a Service based on Hardware Accelerators
KR20200069353A (ko) 신경 네트워크 가속화를 위한 머신 러닝 런타임 라이브러리

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant