KR20200062323A - 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템 - Google Patents

다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템 Download PDF

Info

Publication number
KR20200062323A
KR20200062323A KR1020207013515A KR20207013515A KR20200062323A KR 20200062323 A KR20200062323 A KR 20200062323A KR 1020207013515 A KR1020207013515 A KR 1020207013515A KR 20207013515 A KR20207013515 A KR 20207013515A KR 20200062323 A KR20200062323 A KR 20200062323A
Authority
KR
South Korea
Prior art keywords
neural network
processor element
data set
layers
subset
Prior art date
Application number
KR1020207013515A
Other languages
English (en)
Other versions
KR102562715B1 (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 KR20200062323A publication Critical patent/KR20200062323A/ko
Application granted granted Critical
Publication of KR102562715B1 publication Critical patent/KR102562715B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • 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
    • G06N3/0454
    • 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
    • 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)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Advance Control (AREA)

Abstract

적어도 하나의 뉴럴 네트워크 가속기(238)는 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하고, 중간 데이터 세트를 생성하고, 그리고 공유 메모리(612) 내의 공유 메모리 큐(614)에 중간 데이터 세트를 저장한다. 호스트 컴퓨터 시스템(402)의 제1 프로세서 엘리먼트(602)는 뉴럴 네트워크 가속기에 입력 데이터를 제공하고, 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하도록 뉴럴 네트워크 가속기에 시그널링한다. 호스트 컴퓨터 시스템의 제2 프로세서 엘리먼트(604)는 공유 메모리 큐로부터 중간 데이터 세트를 판독하고, 뉴럴 네트워크 가속기가 다른 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하는 동안, 중간 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제2 서브세트의 동작들을 수행하고, 출력 데이터 세트를 생성한다.

Description

다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템
본 개시내용은 일반적으로 뉴럴 네트워크 프로세싱 시스템들에 관한 것이다.
머신 러닝(machine learning)은 컴퓨팅 시스템들이 명시적으로 프로그래밍되지 않고도 작동하도록 유도하는 과학이다. 고전적 머신 러닝은 K-평균 클러스터링, 선형 및 로지스틱 회귀들, 확률적 그래디언트 디센트(stochastic gradient decent), 연관 규칙 러닝 등을 포함하는 다양한 클러스터링 및 분류 기법들을 포함한다. 딥 러닝은 머신 러닝의 더 새로운 최선단(frontier)이다. 딥 러닝은 특징 추출 및 변환을 위해 비선형 프로세싱 유닛들의 다수의 레이어들을 사용하는 머신 러닝 알고리즘들의 부류이다. 딥 러닝 알고리즘들은 비지도식(unsupervised)(예컨대, 패턴 분석) 또는 지도식(supervised)(예컨대, 분류)일 수 있다. 딥 러닝 알고리즘은 ANN(artificial neural network)(본원에서 "뉴럴 네트워크"로 지칭됨)의 레이어들을 사용하여 구현될 수 있다.
일반적으로, 뉴럴 네트워크는 그래프로 연결된 노드들(즉, "뉴런들")의 집합이다. 뉴럴 네트워크의 노드는 가중된 입력들의 합을 컴퓨팅하고, 그 합에 선택적 바이어스를 추가한다. 노드의 출력은 최종 합의 함수("활성화 함수"로 지칭됨)이다. 활성화 함수들의 예는 시그모이드 함수(sigmoid function), 하이퍼볼릭 탄젠트(hyperbolic tangent(tanh))) 함수, ReLU(Rectified Linear Unit) 함수 및 항등 함수를 포함한다. 뉴럴 네트워크 모델들은 종종, 특정 토폴로지를 정의하는 노드들의 레이어들 및 대응하는 가중치들 및 바이어스들로 구조화된다. 가중치들 및 바이어스들은 네트워크 파라미터들로 지칭된다.
일반적으로, 뉴럴 네트워크는 입력 레이어 및 출력 레이어를 포함하고, 선택적으로 입력 레이어와 출력 레이어 사이에 하나 이상의 은닉 레이어들을 포함할 수 있다. 딥 러닝 애플리케이션들에 사용되는 뉴럴 네트워크는 통상적으로 다수의 은닉 레이어들을 포함하며, 이는 DNN(deep neural network)이라는 용어가 생기게 한다. 뉴럴 네트워크의 레이어들은 조밀하게 연결되거나(예컨대, 레이어의 각각의 노드는 이전 레이어의 모든 노드들에 완전히 연결됨) 또는 희박하게 연결될 수 있다(예컨대, 레이어의 각각의 노드는 이전 레이어의 노드들 중 오직 일부분에만 연결됨). CNN(convolutional neural network)은 컨볼루셔널 레이어(convolutional layer)들로 지칭되는 하나 이상의 희박하게 연결된 레이어들을 포함하는 DNN의 타입이다. CNN은 이미지 또는 비디오 데이터를 프로세싱하는 데 매우 적합하다. 다른 타입들의 DNN들은 스피치 및 텍스트 데이터를 프로세싱하는 데 매우 적합한 RNN(recurrent neural network)들을 포함한다.
FPGA(field programmable gate array)들은 소프트웨어로부터 호출되는 함수들을 가속화하는 회로(circuit)들을 구현하는 데 사용되었다. 소프트웨어로부터 호출되는 함수들을 가속화하는 회로들은 하드웨어 가속기들로 지칭된다. 하드웨어 가속기들의 예들은 이미지 프로세싱 소프트웨어로부터 호출될 수 있는 FPGA 회로들로서 구현된 다양한 이미지 필터들을 포함한다. 하드웨어 가속기가 하드웨어 가속기를 개시하는 소프트웨어를 실행하는 호스트 컴퓨터 시스템을 갖는 시스템에서 유익해지도록 하기 위해, 하드웨어 가속기에 의해 제공된 성능 개선이 호스트 컴퓨터 시스템과 하드웨어 가속기 사이에서 데이터를 이동시키는 것과 관련된 프로세싱 오버헤드보다 커야 한다. 하드웨어 가속기보다는 호스트 컴퓨터 시스템이 동작들을 수행하기 위해 요구되는 것보다 호스트 컴퓨터 시스템과 하드웨어 가속기 사이에서 데이터를 이동시키기 위해 요구되는 시간이 더 긴 경우, 더 양호한 구현은 하드웨어 가속기 없이 호스트 컴퓨터 시스템을 포함할 수 있다. 또한, 호스트 컴퓨터 시스템을 기다리는 동안 하드웨어 가속기가 유휴 상태인 경우, 하드웨어 가속기에 의해 제공되는 전체 성능 이점은 감소된다.
개시된 뉴럴 네트워크 프로세싱 시스템은 공유 메모리, 적어도 하나의 뉴럴 네트워크 가속기 및 호스트 컴퓨터 시스템을 포함한다. 뉴럴 네트워크 가속기는 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하도록, 중간 데이터 세트를 생성하도록 그리고 공유 메모리 내의 공유 메모리 큐에 중간 데이터 세트를 저장하도록 구성된다. 호스트 컴퓨터 시스템은 제1 프로세서 엘리먼트 및 제2 프로세서 엘리먼트를 갖는다. 제1 프로세서 엘리먼트는, 제1 프로세서 엘리먼트로 하여금, 뉴럴 네트워크 가속기에 입력 데이터를 제공하게 하고, 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하도록 뉴럴 네트워크 가속기에 시그널링하게 하는 명령들을 실행하도록 구성된다. 제2 프로세서 엘리먼트는, 제2 프로세서 엘리먼트로 하여금, 공유 메모리 큐로부터 중간 데이터 세트를 판독하게 하고, 뉴럴 네트워크 가속기가 다른 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하는 동안, 중간 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제2 서브세트의 동작들을 수행하게 하고, 출력 데이터 세트를 생성하게 하는 명령들을 실행하도록 구성된다.
일부 실시예들에서, 제1 프로세서 엘리먼트로 하여금 적어도 하나의 뉴럴 네트워크 가속기에 입력 데이터를 제공하게 하는 명령들은, 제1 프로세서 엘리먼트로 하여금, 적어도 하나의 뉴럴 네트워크 가속기에 제1 시간에 제1 입력 데이터 세트를 제공하게 하고, 제1 시간 이후의 제2 시간에 제2 입력 데이터 세트를 제공하게 할 수 있다. 제2 프로세서 엘리먼트로 하여금 레이어들의 제2 서브세트의 동작들을 수행하게 하는 명령들은, 적어도 하나의 뉴럴 네트워크 가속기가 제2 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하는 것과 동시에, 제2 프로세서 엘리먼트로 하여금 제1 입력 데이터 세트에 대해 레이어들의 제2 서브세트의 동작들을 수행하게 하는 명령들을 포함할 수 있다.
일부 실시예들에서, 제2 프로세서 엘리먼트로 하여금 공유 메모리 큐로부터 중간 데이터 세트를 판독하게 하는 명령들은, 제2 프로세서 엘리먼트로 하여금, 판독 이후에 공유 메모리 큐가 엠티 상태(empty)라는 것을 제1 프로세서 엘리먼트에 시그널링하게 하는 명령들을 포함할 수 있다.
일부 실시예들에서, 제1 프로세서 엘리먼트는, 적어도 하나의 뉴럴 네트워크 가속기가 입력 데이터에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 수행을 완료하였을 때, 제1 프로세서 엘리먼트로 하여금, 공유 메모리 큐가 풀 상태(full)라는 것을 제2 프로세서 엘리먼트에 시그널링하게 하는 명령들을 실행하도록 추가로 구성될 수 있다. 제2 프로세서 엘리먼트는, 제1 프로세서 엘리먼트로부터의 신호에 대한 응답으로, 제2 프로세서 엘리먼트로 하여금, 공유 메모리 큐로부터 중간 데이터 세트를 판독하게 하는 명령들을 실행하도록 구성될 수 있다.
일부 실시예들에서, 제1 프로세서 엘리먼트는, 제1 프로세서 엘리먼트로 하여금, 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성될 수 있다.
일부 실시예들에서, 제2 프로세서 엘리먼트는, 제2 프로세서 엘리먼트로 하여금, 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성될 수 있다.
일부 실시예들에서, 제1 프로세서 엘리먼트는, 제1 프로세서 엘리먼트로 하여금, 제1 프로세서 엘리먼트 또는 제2 프로세서 엘리먼트 중 어느 것이 변환을 수행하도록 할당되는지를 결정하게 하고, 제1 프로세서 엘리먼트가 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성될 수 있다. 제2 프로세서 엘리먼트는, 제2 프로세서 엘리먼트로 하여금, 제1 프로세서 엘리먼트 또는 제2 프로세서 엘리먼트 중 어느 것이 변환을 수행하도록 할당되는지를 결정하게 하고, 제2 프로세서 엘리먼트가 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성될 수 있다.
일부 실시예들에서, 뉴럴 네트워크는 컨볼루셔널 뉴럴 네트워크일 수 있다.
일부 실시예들에서, 레이어들의 제1 서브세트는 컨볼루셔널 레이어들 및 맥스-풀링 레이어(max-pooling layer)들을 포함할 수 있고, 레이어들의 제2 서브세트는 완전히 연결된 레이어들을 포함할 수 있다.
일부 실시예들에서, 레이어들의 제2 서브세트는 소프트맥스 레이어를 포함할 수 있다.
일부 실시예들에서, 적어도 하나의 뉴럴 네트워크 가속기는 필드 프로그래밍가능한 게이트 어레이 및 그래픽 프로세싱 유닛을 포함할 수 있다.
개시된 방법은 호스트 컴퓨터 시스템의 제1 프로세서 엘리먼트가 뉴럴 네트워크 가속기에 입력 데이터를 제공하는 단계를 포함한다. 제1 프로세서 엘리먼트는 입력 데이터에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하도록 뉴럴 네트워크 가속기에 시그널링하고, 뉴럴 네트워크 가속기는 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행한다. 뉴럴 네트워크 가속기는 중간 데이터 세트를 생성하고, 공유 메모리 내의 공유 메모리 큐에 중간 데이터 세트를 저장한다. 호스트 컴퓨터 시스템의 제2 프로세서 엘리먼트는 공유 메모리 큐로부터 중간 데이터 세트를 판독하고, 뉴럴 네트워크 가속기가 다른 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하는 동안, 중간 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제2 서브세트의 동작들을 수행한다. 제2 프로세서 엘리먼트는 출력 데이터 세트를 생성한다.
일부 실시예들에서, 뉴럴 네트워크 가속기에 입력 데이터를 제공하는 단계는, 제1 프로세서 엘리먼트가 뉴럴 네트워크 가속기에 제1 시간에 제1 입력 데이터 세트를 제공하고, 제1 시간 이후의 제2 시간에 제2 입력 데이터 세트를 제공하는 단계를 포함할 수 있다. 레이어들의 제2 서브세트의 동작들을 수행하는 단계는, 뉴럴 네트워크 가속기가 제2 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하는 것과 동시에, 제1 입력 데이터 세트에 대해 레이어들의 제2 서브세트의 동작들을 수행하는 단계를 포함할 수 있다.
일부 실시예들에서, 공유 메모리 큐로부터 중간 데이터 세트를 판독하는 단계는, 판독 이후에 공유 메모리 큐가 엠티 상태라는 것을 제1 프로세서 엘리먼트에 시그널링하는 단계를 포함할 수 있다.
일부 실시예들에서, 방법은, 뉴럴 네트워크 가속기가 입력 데이터에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 수행을 완료하였을 때 제1 프로세서 엘리먼트가, 공유 메모리 큐가 풀 상태라는 것을 제2 프로세서 엘리먼트에 시그널링하는 단계, 및 제1 프로세서 엘리먼트로부터의 신호에 대한 응답으로, 제2 프로세서 엘리먼트가 공유 메모리 큐로부터 중간 데이터 세트를 판독하는 단계를 더 포함할 수 있다.
일부 실시예들에서, 방법은 제1 프로세서 엘리먼트가 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하는 단계를 더 포함할 수 있다.
일부 실시예들에서, 방법은 제2 프로세서 엘리먼트가 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하는 단계를 더 포함할 수 있다.
일부 실시예들에서, 방법은, 제1 프로세서 엘리먼트가, 제1 프로세서 엘리먼트 또는 제2 프로세서 엘리먼트 중 어느 것이 변환을 수행하도록 할당되거나 구성되는지를 결정하는 단계, 및 제1 프로세서 엘리먼트가 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 제1 프로세서 엘리먼트가 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하는 단계를 더 포함할 수 있다. 추가적으로, 방법은 또한, 제2 프로세서 엘리먼트가, 제1 프로세서 엘리먼트 또는 제2 프로세서 엘리먼트 중 어느 것이 변환을 수행하도록 할당되거나 구성되는지를 결정하는 단계, 및 제2 프로세서 엘리먼트가 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 제2 프로세서 엘리먼트가 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하는 단계를 포함할 수 있다.
일부 실시예들에서, 뉴럴 네트워크는 컨볼루셔널 뉴럴 네트워크일 수 있다.
일부 실시예들에서, 레이어들의 제1 서브세트는 컨볼루셔널 레이어들 및 맥스-풀링 레이어들을 포함할 수 있고, 레이어들의 제2 서브세트는 완전히 연결된 레이어들을 포함할 수 있다.
다른 특징들은 다음의 상세한 설명 및 청구항들을 고려하여 인식될 수 있다.
방법들 및 시스템들의 다양한 양상들 및 특징들은 다음의 상세한 설명의 리뷰 시에 그리고 도면들의 참조 시에 명백해질 것이다.
도 1은 일 예에 따른 뉴럴 네트워크들을 구현하기 위한 시스템을 도시하는 블록 다이어그램이다.
도 2는 일 예에 따른 컴퓨팅 시스템을 도시하는 블록 다이어그램이다.
도 3은 일 예에 따른 가속 회로를 도시하는 블록 다이어그램이다.
도 4는 일 구현에 따른 예시적 뉴럴 네트워크 프로세싱 시스템을 도시한다.
도 5는 도 3에 도시된 예시적 뉴럴 네트워크 가속기의 다른 뷰를 도시한다.
도 6은 제1 프로세서 엘리먼트, 뉴럴 네트워크 가속기, 및 제2 프로세서 엘리먼트 사이의 데이터 흐름 및 제어 시그널링과 함께, 뉴럴 네트워크 프로세싱 시스템을 도시한다.
도 7은 생산자 컴포넌트들 및 소비자 프로세서에 의한 입력 데이터 세트들의 병렬 및 파이프라이닝된(pipelined) 프로세싱을 도시한다.
도 8은 뉴럴 네트워크 프로세싱 시스템에서 생산자로서 함께 동작하는 제1 프로세서 엘리먼트 및 뉴럴 네트워크 가속기에 의해 수행되는 프로세스의 흐름도를 도시한다.
도 9는 뉴럴 네트워크 프로세싱 시스템에서 소비자로서 동작하는 제2 프로세서 엘리먼트에 의해 수행되는 프로세스의 흐름도를 도시한다.
도 10은 다른 예시적 구현에 따른 뉴럴 네트워크 프로세싱 시스템을 도시한다.
도 11은 일 예에 따른 프로그래밍가능한 IC를 도시하는 블록도이다.
도 12는 프로그래밍가능한 IC의 FPGA 구현을 예시한다.
다음의 설명에서, 본원에서 제시된 특정 예들을 설명하기 위해 다수의 특정 세부사항들이 기술된다. 그러나, 당업자에게, 하나 이상의 다른 예들 및/또는 이러한 예들의 변형들이 아래에서 주어지는 모든 특정 세부사항들 없이 실시될 수 있다는 것이 명백해야 한다. 다른 사례들에서, 잘 알려진 특징들은 본원에서의 예들의 설명을 모호하게 하지 않기 위해 상세하게 설명되지 않았다. 예시의 용이함을 위해, 동일한 참조 번호들이 동일한 엘리먼트들 또는 동일한 엘리먼트의 추가적 사례들을 지칭하기 위해 상이한 다이어그램들에서 사용될 수 있다.
개시된 방법들 및 시스템들은 CNN(convolutional neural network)들, RNN(recurrent neural network)들, 및 매트릭스 곱셈 또는 컨볼루션(convolution)과 같은 연산들을 수반하는 다른 뉴럴 네트워크들에 적용가능하다. CNN은 동작들의 레이어들을 갖는 방향성 그래프(directed graph)로서 표현될 수 있다. 각각의 레이어는 CONV(컨볼루션) 또는 이미지-열 변환(image-to-column conversion)("im2col"), 범용 매트릭스 곱셈("GEMM"), 활성화(예컨대, 정류된 선형 유닛, "RELU" 함수), 풀링(예컨대, "맥스풀(maxpool)"), 로컬 응답 정규화(LRN 레이어), 및 내부 제품(예컨대, "완전히 연결된" (FC) 레이어)과 같은 하나 이상의 동작들을 수반할 수 있다. 각각의 레이어에 대한 입력들은, 이미지들 또는 음성 샘플들과 같은 데이터, 및 트레이닝된 가중치들이며, 이들 모두 매트릭스들로서 표현된다.
개시된 구현들은 호스트 컴퓨터 시스템 및 뉴럴 네트워크 가속기를 포함하는 뉴럴 네트워크 프로세싱 시스템에 적합하다. 호스트 컴퓨터 시스템은 뉴럴 네트워크 프로세싱의 전체 흐름을 제어하는 소프트웨어를 실행하고, 뉴럴 네트워크 가속기는 뉴럴 네트워크의 선택된 레이어들에서의 동작들을 위한 하드웨어 가속기이다. 간결함을 위해, 호스트 컴퓨터 시스템은 또한 "호스트"로 지칭될 수 있고, 뉴럴 네트워크 가속기는 또한 또는 대안적으로 "가속 회로", "커널 가속기" 또는 "커널 가속기 회로"로 지칭될 수 있다.
CNN들과 같은 애플리케이션들에서, 본 발명자들은, 뉴럴 네트워크 가속기 상에서 CNN의 일부 레이어들을 구현하고 호스트 상에서 다른 레이어들을 구현함으로써, 성능 이점이 실현될 수 있다는 것을 발견하였다. 그러나, CNN의 순방향 전파의 일부 동작들이 호스트 상에서 실행될 때, 뉴럴 네트워크 가속기는 유휴 상태일 수 있으며, 이는 뉴럴 네트워크 가속기의 이용도 및 동작 효율을 감소시킨다. 개시된 방법들 및 시스템들은 뉴럴 네트워크 가속기에 의한 아이들링(idling)을 거의 제거하고, 호스트와 뉴럴 네트워크 가속기 사이의 워크로드들을 밸런싱(balance)하고 성능을 개선하기 위해 사용자 구성가능한 파라미터를 제공한다.
개시된 접근법들에서, 호스트 및 뉴럴 네트워크 가속기의 제1 프로세서 엘리먼트는 뉴럴 네트워크 가속기의 유휴 시간을 감소시키기 위해 호스트의 제2 프로세서 엘리먼트와 파이프라이닝(pipeline)된다. 제1 프로세서 엘리먼트 및 뉴럴 네트워크 가속기는 함께 생산자로서 기능하고, 뉴럴 네트워크의 레이어들의 제1 서브세트의 뉴럴 네트워크 동작들을 수행한다. 제2 프로세서 엘리먼트는 뉴럴 네트워크 가속기로부터의 프로세싱된 데이터의 소비자로서 기능하고, 뉴럴 네트워크의 레이어들의 제2 서브세트의 동작들을 수행한다. 제1 프로세서 엘리먼트 및 제2 프로세서 엘리먼트는 협력적으로 공유 메모리 큐의 조정된 사용을 통해 뉴럴 네트워크 가속기를 비지 상태로 유지한다. 본원에서 사용되는 바와 같이, "프로세서 엘리먼트"는 컴퓨터 시스템의 프로세서 코어, 이종 프로세서 회로들, 또는 하나 이상의 프로세서 코어들 또는 프로세서 회로들 상에서 실행되는 스레드들일 수 있다.
이제 도면들을 참조하면, 도 1은 일 예에 따른 뉴럴 네트워크들을 구현하기 위한 시스템(100)을 도시하는 블록 다이어그램이다. 시스템(100)은 컴퓨터 시스템(102) 및 하나 이상의 컴퓨터 시스템들(108)을 포함한다. 컴퓨터 시스템(102)은 하나 이상의 설계 툴들(104)을 제공하는 소프트웨어를 실행하도록 구성된 종래의 컴퓨팅 컴포넌트들을 포함한다. 각각의 컴퓨터 시스템(108)은 하나 이상의 뉴럴 네트워크들(110)을 구현한다. 뉴럴 네트워크(들)(110)는 애플리케이션들(112), 가속 라이브러리들(114) 및 하나 이상의 하드웨어 가속기들(116)을 사용하여 구현된다.
일 예에서, 하드웨어 가속기(들)(116)는 FPGA(field programmable gate array)들과 같은 프로그래밍가능한 IC(integrated circuit)들을 포함한다. 가속 라이브러리들(114)은 하드웨어 가속기(들)(116)와 인터페이싱하기 위해 API(application programming interface)들을 제공한다. 가속 라이브러리들(114)은 또한, 뉴럴 네트워크 레이어들 및 다른 타입들의 뉴럴 네트워크 구조들의 사전 정의되고 최적화된 구현들을 포함하여, 뉴럴 네트워크 함수들을 제공하는 라이브러리들을 포함할 수 있다. 따라서, 뉴럴 네트워크(들)(110)는 하드웨어 가속기(들)(116)로 구현된 하드웨어 부분들뿐만 아니라, 가속 라이브러리들(114)로 구현된 소프트웨어 부분들 모두를 포함할 수 있다. 애플리케이션들(112)은 뉴럴 네트워크(들)(116)를 구현하기 위해 하드웨어 가속기(들)(116)를 프로그래밍 및 제어하도록 가속 라이브러리들(114)의 API들을 인보크(invoke)한다.
설계자는 뉴럴 네트워크(들)(110)를 정의하기 위해 설계 툴(들)(104)과 상호 작용한다. 설계 툴(들)(104)은 하드웨어 가속기(들)(116)를 프로그래밍하기 위한 파일들(예컨대, FPGA들을 위한 구성 비트스트림들), 가속 라이브러리들(114)을 제공하는 파일들, 및 애플리케이션들(112)을 제공하는 파일들을 생성할 수 있다. 설계자는 RTL(register transfer language)을 사용하여, 또는 C, C++, OpenCL 등과 같은 프로그래밍 언어 또는 RTL과 프로그래밍가능한 언어(들)의 조합을 사용하여, 뉴럴 네트워크(들)(110)의 하드웨어 부분들을 정의할 수 있다. 사용자는 C, C++, OpenCL 등과 같은 프로그래밍 언어를 사용하여 뉴럴 네트워크(들)(110)의 소프트웨어 부분들을 정의할 수 있다. 설계 툴(들)(104)은 하드웨어 가속기(들)(116)를 프로그래밍하기 위한 파일들 및 가속 라이브러리들(114)을 위한 라이브러리 파일들을 생성하기 위해 소프트웨어-정의된 뉴럴 네트워크들을 컴파일할 수 있다. 설계자는 뉴럴 네트워크(들)(110)의 하드웨어 및 소프트웨어 부분들의 개발을 보조하기 위해 클래스 라이브러리들, 템플릿 라이브러리들 등을 제공하는 라이브러리들(106)을 사용할 수 있다.
사용자는 프로그래밍 언어(예컨대, C, C++, Python 등)를 사용하여 애플리케이션들(112)을 정의할 수 있다. 사용자는 Caffe, TensorFlow™, MXNet 등과 같은 뉴럴 네트워크 프레임워크들 및 라이브러리들을 사용할 수 있다.
도 2는 일 예에 따른 컴퓨팅 시스템(108)을 도시하는 블록 다이어그램이다. 컴퓨팅 시스템(108)은 하드웨어(204) 및 하드웨어(204) 상에서 실행되는 소프트웨어(206)를 포함한다. 하드웨어(204)는 프로세싱 시스템(210), 시스템 메모리(216), 저장 디바이스(들)("스토리지(218)") 및 하드웨어 가속기(116)를 포함한다. 소프트웨어(206)는 OS(operating system)(244), 가속 라이브러리들(114) 및 애플리케이션들(112)을 포함한다. 프로세싱 시스템(210), 시스템 메모리(216) 및 스토리지(218)는 본원에서 참조된 호스트 컴퓨터 시스템을 포함한다.
프로세싱 시스템(210)은 마이크로프로세서(212), 지원 회로들(214) 및 주변 장치 버스(215)를 포함한다. 마이크로프로세서(212)는 x86-기반 프로세서, ARM®-기반 프로세서 등과 같은 임의의 타입의 범용 CPU(central processing unit)일 수 있다. 마이크로프로세서(212)는 하나 이상의 코어들 및 연관된 회로망(circuitry)(예컨대, 캐시 메모리들, MMU(memory management unit)들, 인터럽트 제어기들 등)을 포함할 수 있다. 마이크로프로세서(212)는, 시스템 메모리(216) 및/또는 스토리지(218)에 저장될 수 있고 본원에서 설명된 하나 이상의 동작들을 수행하는 프로그램 코드를 실행하도록 구성된다. 지원 회로들(214)은, 마이크로프로세서(212), 시스템 메모리(216), 스토리지(218), 하드웨어 가속기(116) 또는 임의의 다른 주변 디바이스 사이의 데이터 흐름을 관리하기 위해 마이크로프로세서(212)와 협력하는 다양한 디바이스들을 포함한다. 예컨대, 지원 회로들(214)은 칩셋(예컨대, 노스 브리지(north bridge), 사우스 브리지(south bridge), 플랫폼 호스트 제어기 등), 전압 레귤레이터들, 펌웨어(예컨대, BIOS) 등을 포함할 수 있다. 지원 회로들(214)은 하드웨어 가속기(116)와 같은 다양한 주변 장치들이 연결된 주변 장치 버스(215)와 마이크로프로세서(212) 사이의 데이터 흐름을 관리한다. 일부 예들에서, 마이크로프로세서(212)는 칩셋(예컨대, 노스 브리지, 사우스 브리지 등)의 기능성의 전부 또는 상당 부분을 흡수하는 SiP(System-in-Package), SoC(System-on-Chip) 등일 수 있다. 주변 장치 버스(215)는 PCIe(Peripheral Component Interconnect Express)와 같은 확장 버스 표준을 구현할 수 있다. 이 예에서, 프로세싱 시스템(210)은 하드웨어 가속기(116)와 분리되어 도시된다. 아래에서 추가로 논의되는 다른 예들에서, 프로세싱 시스템(210) 및 하드웨어 가속기(116)는 SoC(System-On-Chip)를 사용하여 동일한 IC(integrated circuit) 상에서 구현될 수 있다.
시스템 메모리(216)는 실행가능한 명령들 및 데이터와 같은 정보가 저장 및 리트리브(retrieve)될 수 있게 하는 디바이스이다. 시스템 메모리(216)는 예컨대, DDR(double-data rate) DRAM(dynamic RAM(random access memory))과 같은 하나 이상의 RAM 모듈들을 포함할 수 있다. 저장 디바이스(218)는 로컬 저장 디바이스들(예컨대, 하나 이상의 하드 디스크들, 플래시 메모리 모듈들, 솔리드 스테이트 디스크(solid state disk)들 및 광학 디스크들), 및/또는 컴퓨팅 시스템(108)이 하나 이상의 네트워크 데이터 저장 시스템들과 통신하는 것을 가능하게 하는 저장 인터페이스를 포함한다. 하드웨어(204)는 컴퓨팅 시스템의 다양한 다른 종래의 디바이스들 및 주변 장치들, 이를테면, 그래픽 카드들, USB(universal serial bus) 인터페이스들 등을 포함할 수 있다.
하드웨어 가속기(116)는 프로그래밍가능한 IC(228), NVM(non-volatile memory)(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)는 일반적으로, 베이스 플랫폼(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(direct memory access) 제어기, 상호 연결부들, 메모리 제어기, 메모리 인터페이스 회로(예컨대, DDR 인터페이스), (부분적 재구성을 지원하기 위한) 디커플러 회로들, 플래시 프로그래머, 디버그 회로들 등을 포함한다. 일부 예들에서, 프로그래밍가능한 영역(236)은 지원 회로들(240) 중 어느 것도 포함하지 않는다. 다른 예들에서, 일부 지원 회로들은 프로그래밍가능한 영역(236)에서 구현된다. 그러한 경우, 프로그래밍가능한 영역(236)은 "확장 프로그래밍가능한 영역"으로 지칭될 수 있다. 어느 경우든, 일 예에서, PCIe 회로들 및 DMA 회로들과 같은 일부 지원 회로들(240)은 항상 정적 영역(234)에 존재한다.
도 3은 일 예에 따른 가속 회로(230)를 도시하는 블록 다이어그램이다. 가속 회로(230)는 지원 회로들(240) 및 뉴럴 네트워크 가속기(238)를 포함한다. 이 예에서, 지원 회로들(240)은 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)는 인터페이스들(330, 331 및 332)을 사용하여 상호 연결부(306)와 통신한다. 특히, 이러한 인터페이스들은 제1 판독 인터페이스(330), 제2 판독 인터페이스(331) 및 판독/기록 인터페이스(332)를 포함한다. 예컨대, 판독 인터페이스(330)는 뉴럴 네트워크 가속기(238)를 제어하기 위한 제어 인터페이스로서 사용될 수 있다. 판독 인터페이스(331)는 메모리 인터페이스들(312) 중 제1 메모리 인터페이스를 통해 RAM(226)으로부터 판독하는 데 사용될 수 있다. 판독/기록 인터페이스(332)는 메모리 인터페이스들(312) 중 제2 메모리 인터페이스를 통해 RAM(226)으로부터 판독 및 기록하는 데 사용될 수 있다.
뉴럴 네트워크 가속기(238)는 상호 연결 인터페이스(340), 제어 로직(342) 및 프로세싱 회로들(341)을 포함한다. 프로세싱 회로들(341)은 포맷터 회로(344) 회로(예컨대, IM2COL), 판독 제어 회로(346), 멀티플렉서(356), "FIFO"(first-in-first-out circuit)들(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-스케일러(364)의 입력에 커플링된다. 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) 상에서 뉴럴 네트워크 동작들을 개시한다. 뉴럴 네트워크 가속기(238)는 RAM(226)에 커플링되며, 그 RAM(226)을 통해 호스트와 뉴럴 네트워크 가속기가 통신한다. 뉴럴 네트워크 가속기는 구성 레지스터들(408)의 세트를 갖는다. 구성 레지스터들은, RAM(226)의 메모리 버퍼들의 어드레스들을 저장하고 범용 매트릭스 곱셈(GEMM)을 위한 매트릭스 차원들 및 컨볼루션을 위한 스트라이드(stride)/윈도우(window)와 같은 뉴럴 네트워크 동작들을 위한 구성 파라미터들을 저장하기 위해 KA 인터페이스(412)에 액세스가능하다.
KA 인터페이스(412)는 호스트(402) 상에서 실행되는 2개의 프로세서 엘리먼트들로서 동작한다. 제1 프로세서 엘리먼트는 뉴럴 네트워크 가속기와의 동작들을 개시하고, 제2 프로세서 엘리먼트는 뉴럴 네트워크 가속기로부터의 출력 데이터를 사용하여 뉴럴 네트워크 프로세싱을 완료한다. 제1 및 제2 프로세서 엘리먼트들 및 뉴럴 네트워크 가속기는 RAM(226) 내의 공유 메모리 큐(도시되지 않음)로부터 동작한다. 제1 프로세서 엘리먼트는 뉴럴 네트워크 가속기에 프로세싱될 데이터를 입력하며, 뉴럴 네트워크 가속기는 입력 데이터에 대해 특정된 뉴럴 네트워크 동작들을 수행하고, 공유 메모리 큐에 출력 데이터를 저장하며, 제1 프로세서 엘리먼트는 공유 메모리 큐가 프로세싱된 데이터로 가득 찼다는 것을 제2 프로세서 엘리먼트에 시그널링하며, 제2 프로세서 엘리먼트는 공유 메모리 큐로부터 프로세싱된 데이터를 판독하고, 그 이후 공유 큐가 엠티 상태라는 것을 제1 프로세서 엘리먼트에 시그널링한다. 일단 제1 프로세서 엘리먼트가, 공유 메모리 큐가 엠티 상태라는 신호를 수신하면, 제1 프로세서 엘리먼트는 뉴럴 네트워크 가속기에 다른 데이터 세트를 입력할 수 있다. 뉴럴 네트워크 가속기가 다음 입력 데이터 세트를 프로세싱하는 동안, 제2 프로세서 엘리먼트는 이전 입력 데이터 세트로부터 발생된 프로세싱된 데이터에 대해 나머지 뉴럴 네트워크 동작들을 수행한다.
개시된 접근법들은 임의의 특정 하드웨어 플랫폼들에 제한되지 않는다. 그러나, 당업자들에게 참조 프레임을 제공할 목적으로, 뉴럴 네트워크 가속기는 Xilinx, Inc.로부터 입수가능한 KINTEX® ULTRASCALE™ 115 디바이스 상에서 구현될 수 있다. RAM(226)은 뉴럴 네트워크 가속기와 함께 인쇄 회로 보드 상에 장착된 DDR SDRAM이며, RAM은 뉴럴 네트워크 가속기에 데이터를 입력하기 위한 하나의 RAM 및 뉴럴 네트워크 가속기로부터의 출력 데이터를 저장하기 위한 다른 RAM과 같은 다수의 RAM 디바이스들을 포함할 수 있다. 호스트(402)와 RAM 사이의 그리고 호스트와 뉴럴 네트워크 가속기 사이의 인터페이스는 PCIE(Peripheral Component Interconnect Express)이다. 뉴럴 네트워크 가속기는 DMA(direct memory access) 채널들을 사용하여 RAM 및 구성 레지스터들(408)에 호스트 메모리 중 일부를 맵핑한다. 호스트 컴퓨터 시스템(402)은 ML 프레임 워크(410) 및 KA 인터페이스(412)를 실행하기에 적합한 임의의 컴퓨터 시스템, 또는 컴퓨터 시스템들의 조합 또는 네트워크일 수 있다. ML 프레임워크들은 TensorFlow™, Caffe 및 MXNet과 같은 프로그래밍 패키지들을 사용하여 특정될 수 있다.
KA 인터페이스(412)는 뉴럴 네트워크 가속기(238)에 의한 프로세싱을 위해 ML 프레임워크(410)로부터 뉴럴 네트워크 요청들을 수신한다. 프로세싱을 위해 뉴럴 네트워크 요청들을 뉴럴 네트워크 가속기에 제출하기 이전에, KA 인터페이스는 뉴럴 네트워크의 레이어들과 연관된 가중치 매트릭스들을 뉴럴 네트워크 가속기와 공유되는 RAM(226)에 기록한다. 모든 가중치 매트릭스들은 인접 블록으로서 공유 메모리에 기록되며, 이는 DMA 동작들 및 오버헤드의 수를 감소시키고, 뉴럴 네트워크의 레이어들에서의 컨볼루션들 또는 매트릭스 곱셈들에 가중치들이 필요할 때 뉴럴 네트워크 가속기가 가중치들을 이용가능하도록 보장한다.
ML 프레임워크(410)로부터 뉴럴 네트워크 요청을 수신한 것에 대한 응답으로, KA 인터페이스(412)는 레이어별 명령들의 그룹을 명령 패키지에 어셈블링(assemble)하고, 명령 패키지를 RAM(226)에 기록한다. 각각의 레이어별 명령은 뉴럴 네트워크의 개개의 레이어의 프로세싱을 특정한다. 또한, 각각의 레이어별 명령은, 공유 메모리에서, 결합된 가중치 매트릭스들의 베이스 어드레스로부터의 가중치 매트릭스의 개개의 오프셋을 특정한다. 뉴럴 네트워크의 각각의 레이어의 프로세싱은 가중치 매트릭스들 중 개개의 가중치 매트릭스에 액세스할 것이다. 레이어별 명령들은 또한 상이한 레이어들에서의 상이한 뉴럴 네트워크 동작들에 대한 구성 파라미터들을 특정한다. 예컨대, 구성 파라미터들은 스케일링 팩터, 컨볼루션 윈도우 및 스트라이드, 맥스풀 프로세싱을 위한 매트릭스 차원들 및 활성화 함수를 특정할 수 있다. 구성 파라미터들은 RAM 내의 명령 패키지의 베이스 어드레스를 더 포함한다. 뉴럴 네트워크의 상이한 레이어들은 뉴럴 네트워크 동작들의 상이한 세트들을 수반할 수 있다.
KA 인터페이스(412)는 뉴럴 네트워크 가속기(238)의 구성 레지스터들(408)에 구성 파라미터들을 추가로 설정한다. 구성 파라미터들은 가중치 매트릭스들의 베이스 어드레스, 입력/출력 데이터 매트릭스들의 베이스 어드레스 및 입력/출력 데이터 매트릭스들의 베이스 어드레스로부터의 오프셋을 포함한다. 가중치 매트릭스는 때때로 "A"로 지칭되고, 입력 데이터 매트릭스는 때때로 "B"로 지칭되고, 출력 데이터 매트릭스는 때때로 "C"로 지칭된다.
명령들의 패키지가 프로세싱될 준비가 되었다는 것을 표시하는, KA 인터페이스(412)로부터의 신호에 대한 응답으로, 뉴럴 네트워크 가속기(238)는 명령 패키지로부터의 레이어별 명령들을 순차적으로 프로세싱한다. 명령들의 패키지는 프로그램 또는 상태 머신을 효과적으로 특정하며, 이에 따라, 뉴럴 네트워크 가속기는 뉴럴 네트워크의 레이어들의 특정된 프로세싱을 수행한다.
도 5는 도 3의 예시적 뉴럴 네트워크 가속기(238)의 다른 뷰를 도시한다. 병합된 가중치 매트릭스들(520)은 호스트에 의해 기록되고 RAM(226)의 인접한 어드레스들에 저장된다. 예시적 애플리케이션에서, 명령 패키지(516) 내의 레이어별 명령들은 뉴럴 네트워크의 레이어들에서 수행될 뉴럴 네트워크 동작들의 세트들 및 스케일링, 맥스풀 차원들 및 활성화 함수에 대한 구성 파라미터들을 특정한다. 뉴럴 네트워크 가속기에 의해 특정 레이어별 프로세싱을 지시하기 위해 명령 패키지 내의 레이어별 명령들 중 상이한 명령들에 뉴럴 네트워크 동작들의 상이한 세트들이 특정될 수 있다.
명령 패키지(516)로부터의 레이어별 명령들을 프로세싱할 시에, 뉴럴 네트워크 가속기는 명령들을 순차적으로 프로세싱한다. 예컨대, 제1 레이어별 명령이 프로세싱되며, 명령 패키지의 제2 레이어별 명령을 프로세싱하는 것이 연속적으로 후속된다. 제1 레이어별 명령을 프로세싱할 시에, 뉴럴 네트워크 가속기(238)는 RAM(226) 내의 B/C 버퍼(518)의 제1 부분으로부터 입력 데이터를 판독하고, 출력 데이터를 RAM 내의 B/C 버퍼의 제2 부분에 기록한다. 제2 레이어별 명령을 프로세싱할 시에, 뉴럴 네트워크 가속기는 B/C 버퍼의 제2 부분으로부터 입력 데이터를 판독하고, 출력 데이터를 B/C 버퍼의 제1 부분에 기록한다. 그 이후, 뉴럴 네트워크 가속기는 각각의 연속적 레이어별 명령으로 입력 및 출력 데이터에 사용되는 B/C 버퍼의 부분들 사이에서 교번한다.
뉴럴 네트워크 가속기(238)는 구성 레지스터(408), 디스패칭 및 어드레싱 로직 회로망(502)(도 3의 판독 및 기록 제어들을 구현함), 포맷터 회로(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)는 후속 레이어들에 부과된 컴퓨테이셔널 요건(computational requirement)들을 감소시키기 위해 컨볼루션 레이어들 사이의 데이터의 공간 사이즈를 감소시킨다. 공간 사이즈의 감소는 또한 과적합(overfitting)을 회피하는 것을 돕는다. 예시적 애플리케이션에서, 풀링 회로는 맥스풀 함수를 구현한다. 디스패치 및 어드레싱 회로는 B/C 버퍼(518)에 출력 매트릭스로서 저장하기 위해 ReLU 및 스케일링 회로(364)로부터의 데이터와 풀링 회로(366)로부터의 데이터 사이에서 선택하도록 멀티플렉서(368)를 제어한다.
도 6은 제1 프로세서 엘리먼트(602), 뉴럴 네트워크 가속기(238), 및 제2 프로세서 엘리먼트(604) 사이의 데이터 흐름 및 제어 시그널링과 함께, 뉴럴 네트워크 프로세싱 시스템을 도시한다. 넘버링된 원들은 시스템에서 기능들 및 제어가 실행되는 순서를 표시하고, 파선들은 데이터 및 제어 신호들의 흐름을 표현한다. 제1 프로세서 엘리먼트(602)가 제2 프로세서 엘리먼트(604)로부터 큐-엠티 신호(1)를 수신할 때, 제1 프로세서 엘리먼트는 뉴럴 네트워크 가속기(238)에 의한 프로세싱을 위해 RAM(608)으로 입력 데이터 세트(610)를 스테이징(stage)하는 것(2)으로 진행될 수 있다. 일단 제1 프로세서 엘리먼트가 입력 데이터 세트를 RAM에 기록하면, 제1 프로세서 엘리먼트는 입력 데이터 세트에 대해 특정된 뉴럴 네트워크 동작들의 수행을 시작하기 위해 뉴럴 네트워크 가속기에 시그널링한다(3).
뉴럴 네트워크 가속기는 RAM(608)으로부터 입력 데이터 세트(610)를 판독하고(4), 뉴럴 네트워크 동작들의 특정된 서브세트를 수행한다. 컨볼루셔널 뉴럴 네트워크의 예시적 구현에서, 뉴럴 네트워크 가속기는 컨볼루셔널 레이어들의 동작들, ReLU 및 맥스-풀링 레이어들을 수행한다. 뉴럴 네트워크 가속기는 또한, 완전히-연결된 레이어들의 동작들을 수행할 수 있다. 그러나, 개선된 성능을 위해, 제2 프로세서 엘리먼트(604)는 완전히-연결된 레이어들의 동작들을 수행한다. 뉴럴 네트워크 가속기는 RAM(612) 내의 공유 메모리 큐(614)에 출력 데이터를 저장하고, 프로세싱이 완료될 때 제1 프로세서 엘리먼트(602)에 완료를 시그널링한다(6). 뉴럴 네트워크 가속기로부터의 출력 데이터는 제2 프로세서 엘리먼트(604)가 출력 데이터를 추가로 프로세싱하는 구현에서 중간 데이터 세트로서 보여질 수 있다. RAM들(608 및 612)은 구현 요건들에 따라, 도 5에 도시된 바와 같은 단일 RAM(226)이거나 또는 물리적으로 분리된 RAM들일 수 있다.
일부 구현들에서, 뉴럴 네트워크의 레이어들의 총 프로세싱은 제1 프로세서 엘리먼트 또는 제2 프로세서 엘리먼트 중 어느 것이 뉴럴 네트워크 가속기로부터의 출력 데이터의 데이터 변환을 수행할 것인지에 대한 사용자 구성을 통해 제1 프로세서 엘리먼트와 제2 프로세서 엘리먼트 사이에서 등화될 수 있다. 뉴럴 네트워크 가속기에 의한 아이들링은 제1 프로세서 엘리먼트와 제2 프로세서 엘리먼트 사이의 프로세싱을 등화시킴으로써 최소화될 수 있다. 호스트 및 뉴럴 네트워크 가속기의 프로세싱이 동일하도록 지향됨에 따라 뉴럴 네트워크 가속기의 이용이 증가된다. 데이터 변환은, 데이터 포맷이 호스트가 입력 데이터를 수신하는 데이터 포맷과 상이할 때 뉴럴 네트워크 가속기가 뉴럴 네트워크 동작들을 더 효율적으로 수행하는 결과이다. 호스트 데이터 포맷은 설정된 ML 프레임워크 포맷들(예컨대, MXNet에서의 행 우선)을 따르는 반면, 뉴럴 네트워크 가속기는 성능을 최대화하기 위해 커스텀 포맷을 사용할 수 있기 때문에, 데이터 포맷 변환이 수행된다. 예컨대, 뉴럴 네트워크 가속기는 뉴럴 네트워크 가속기 및 그것의 매트릭스 곱셈기의 아키텍처에 기초하여 열 우선 포맷, 이미지 행 포맷 또는 다른 포맷을 사용할 수 있다.
사용자가 제1 프로세서 엘리먼트(602)가 데이터 변환을 수행하도록 구성했을 경우, 제1 프로세서 엘리먼트는 공유 메모리 큐(614)에서 출력 데이터를 변환(6.5)하고, 그런 다음, 큐가 풀 상태라는 것을 제2 프로세서 엘리먼트(604)에 시그널링한다(7). 제1 프로세서 엘리먼트로부터 큐-풀 신호를 수신한 것에 대한 응답으로, 제2 프로세서 엘리먼트는 RAM(612) 내의 다른 작업 공간으로 공유 메모리 큐의 컨텐츠들을 복사(8)하고, 그런 다음, 공유 메모리 큐가 엠티 상태라는 것을 제1 프로세서 엘리먼트에 시그널링한다(1). 일단 제2 프로세서 엘리먼트가, 공유 메모리 큐가 엠티 상태라는 것을 시그널링하면, 제2 프로세서 엘리먼트가 이전 입력 데이터 세트에 대해 뉴럴 네트워크 가속기에 의해 생성된 출력 데이터에 대해 뉴럴 네트워크의 레이어들의 지정된 서브세트의 동작들을 수행하는 동안 제1 프로세서 엘리먼트는 프로세싱을 위해 뉴럴 네트워크 가속기에 다른 데이터 세트를 입력할 수 있다. 사용자가 제2 프로세서 엘리먼트가 데이터 변환을 수행하도록 구성했을 경우, 제2 프로세서 엘리먼트는 공유 메모리 큐로부터 복사된 출력 데이터를 변환한다(8.5). 컨볼루셔널 뉴럴 네트워크의 구현에서, 제2 프로세서 엘리먼트는 소프트맥스 레이어의 동작들을 수행한다. 그러나, 제2 프로세서 엘리먼트는 뉴럴 네트워크 가속기에 의해 구현되지 않은 임의의 레이어(예컨대, ReLU 및 맥스-풀)의 동작들을 수행하도록 프로그래밍될 수 있다는 것이 인식될 것이다.
도 7은 생산자 컴포넌트들(702)(프로세서 엘리먼트(602) 및 뉴럴 네트워크 가속기(238)) 및 소비자 프로세서(604)에 의한 입력 데이터 세트들의 병렬 및 파이프라이닝된 프로세싱을 도시한다. 위에서 설명된 바와 같이, 제2/소비자 프로세서는 공유 메모리 큐가 엠티 상태일 때 제1/생산자 프로세서에 시그널링하고, 제1 프로세서 엘리먼트는 공유 메모리 큐가 풀 상태일 때 제2 프로세서 엘리먼트에 시그널링한다. 제1 프로세서 엘리먼트는 공유 메모리 큐가 엠티 상태일 때 입력 데이터 세트의 프로세싱을 개시할 수 있고, 제2 프로세서 엘리먼트는 공유 메모리 큐가 풀 상태일 때 뉴럴 네트워크 가속기로부터의 출력 데이터의 프로세싱을 개시할 수 있다. 가는 선들을 오버레이(overlay)하는 굵은 선 세그먼트들은 연관 컴포넌트들에 의한 활성 프로세싱을 표현하고, 가는 선들은 시간의 경과를 표현한다.
입력 데이터 세트 및 제2 프로세서 엘리먼트(604)가 공유 메모리 큐가 엠티 상태라는 것을 시그널링한 것에 대한 응답으로, 라인 세그먼트(704)에 의해 표현된 바와 같이, 제1 프로세서 엘리먼트는 뉴럴 네트워크 가속기에 제1 데이터 세트를 입력하고, 뉴럴 네트워크 가속기는 뉴럴 네트워크의 레이어들의 서브세트의 동작들을 수행한다. 뉴럴 네트워크 가속기 및 제1 프로세서 엘리먼트가 입력 데이터 세트의 프로세싱을 완료하였을 때, 라인(706)에 의해 도시된 바와 같이, 제1 프로세서 엘리먼트는 공유 메모리 큐가 풀 상태라는 것을 제2 프로세서 엘리먼트에 시그널링한다. 풀 신호에 대한 응답으로, 제2 프로세서 엘리먼트는 공유 메모리 큐로부터 다른 메모리 작업 공간으로 출력 데이터를 즉시 복사하고, 데이터를 복사한 이후에, 라인(708)에 의해 도시된 바와 같이, 큐가 엠티 상태라는 것을 제1 프로세서 엘리먼트에 시그널링한다.
큐-엠티 신호 및 다음 데이터 세트의 이용가능성에 대한 응답으로, 라인 세그먼트(710)에 의해 표현된 바와 같이, 제1 프로세서 엘리먼트는 뉴럴 네트워크 가속기에 다음 데이터 세트를 입력하고, 뉴럴 네트워크 가속기는 뉴럴 네트워크의 레이어들의 서브세트의 동작들을 수행한다. 뉴럴 네트워크 가속기가 다음 입력 데이터 세트를 프로세싱하는 동안, 라인 세그먼트(712)에 의해 도시된 바와 같이, 제2 프로세서 엘리먼트는 제1 입력 데이터 세트로부터 발생한 출력 데이터에 대해 뉴럴 네트워크의 레이어들의 다른 서브세트의 동작들을 동시에 수행한다. 즉, 제1 프로세서 엘리먼트 및 뉴럴 네트워크 가속기가 입력 데이터 세트(N)를 프로세싱하는 것과 동시에, 제2 프로세서 엘리먼트는 뉴럴 네트워크 가속기에 의한 입력 데이터 세트(N-1)의 프로세싱으로부터 발생한 출력 데이터를 프로세싱하며, 여기서 입력 데이터 세트들의 순서는 N-1, N, N+1 등이다.
도 8은 뉴럴 네트워크 프로세싱 시스템에서 생산자로서 함께 동작하는 제1 프로세서 엘리먼트 및 뉴럴 네트워크 가속기에 의해 수행되는 프로세스의 흐름도를 도시한다. 판정 블록(802)에서, 제1 프로세서 엘리먼트는 계속하기 이전에, 제2 프로세서 엘리먼트로부터의 엠티 신호에 의해 표시된 바와 같이, 공유 메모리 큐가 엠티 상태일 때까지 기다린다. 제2 프로세서 엘리먼트가, 공유 메모리 큐가 엠티 상태라는 것을 시그널링한 것에 대한 응답으로, 제1 프로세서 엘리먼트는 블록(804)으로 진행하여, 입력 데이터 세트를 판독하고, 입력 데이터 세트를 뉴럴 네트워크 가속기와 공유된 메모리에 기록한다. 제1 프로세서 엘리먼트는 입력 데이터 세트가 프로세싱에 이용가능할 때 뉴럴 네트워크 가속기에 시그널링하고, 블록(806)에서, 뉴럴 네트워크 가속기가 완료를 시그널링하는 것을 기다린다.
판정 블록(808)은 사용자가 제1 프로세서 엘리먼트가 데이터 변환을 수행하도록 구성했는지 여부를 체크한다. 사용자는, 이를테면, 시스템 시작 시에 또는 시스템 실행 시간 동안 파라미터 값을 입력함으로써, 제1 프로세서 엘리먼트 또는 제2 프로세서 엘리먼트가 데이터 변환을 수행하도록 구성할 수 있다. 사용자가 제1 프로세서 엘리먼트가 데이터 변환을 수행하도록 지정했을 경우, 블록(810)에서, 제1 프로세서 엘리먼트는 공유 메모리 큐에서 출력 데이터를 변환하고, 변환 이후에, 블록(812)에서, 큐가 풀 상태라는 것을 제2 프로세서 엘리먼트에 시그널링한다. 사용자가 제2 프로세서 엘리먼트가 데이터 변환을 수행하도록 지정했을 경우, 제1 프로세서 엘리먼트는 블록(810)을 스킵(skip)한다. 제1 프로세서 엘리먼트는 제2 프로세서 엘리먼트가 공유 메모리 큐를 엠티 상태가 되게 하는 것을 기다리기 위해 블록(802)로 리턴한다.
도 9는 뉴럴 네트워크 프로세싱 시스템에서 소비자로서 동작하는 제2 프로세서 엘리먼트에 의해 수행되는 프로세스의 흐름도를 도시한다. 판정 블록(902)에서, 제2 프로세서 엘리먼트는 계속하기 이전에, 제1 프로세서 엘리먼트로부터의 풀 신호에 의해 표시된 바와 같이, 공유 메모리 큐가 풀 상태일 때까지 기다린다. 제1 프로세서 엘리먼트가, 공유 메모리 큐가 풀 상태라는 것을 시그널링한 것에 대한 응답으로, 제2 프로세서 엘리먼트는 블록(904)으로 진행하여, 공유 메모리 큐로부터 별개의 메모리 작업 공간으로 데이터를 복사한다. 데이터를 복사한 이후에, 제2 프로세서 엘리먼트는 공유 메모리 큐가 엠티 상태라는 것을 제1 프로세서 엘리먼트에 시그널링한다.
판정 블록(906)은 사용자가 제2 프로세서 엘리먼트가 데이터 변환을 수행하도록 구성했는지 여부를 체크한다. 사용자가 제2 프로세서 엘리먼트가 데이터 변환을 수행하도록 지정했을 경우, 블록(908)에서, 제2 프로세서 엘리먼트는 별개의 작업 공간 내의 출력 데이터를 원하는 포맷으로 변환한다. 사용자가 제1 프로세서 엘리먼트가 데이터 변환을 수행하도록 지정했을 경우, 제2 프로세서 엘리먼트는 블록(908)의 프로세싱을 스킵한다.
블록(910)에서, 제2 프로세서 엘리먼트는 뉴럴 네트워크의 레이어들의 서브세트의 동작들을 수행한다. 예시적 구현에서, 제2 프로세서 엘리먼트에 할당된 레이어들의 서브세트는 완전히-연결된 레이어들 및 소프트맥스 레이어를 포함한다.
블록(912)에서, 제2 프로세서 엘리먼트는 출력 데이터를 파싱하고, 파싱된 데이터를 ML 프레임워크로 리턴한다. 예컨대, 제2 프로세서 엘리먼트는 출력 데이터를 파싱하고, 출력 데이터를 사람이 판독가능한 형태로 변환할 수 있다.
도 10은 다른 예시적 구현에 따른 프로세싱 회로망의 이종 클러스터를 갖는 뉴럴 네트워크 프로세싱 시스템(922)을 도시한다. 시스템(922)은 뉴럴 네트워크 가속기들로서 동작하는 CPU 및 FPGA(field programmable gate array) 회로망(926) 및 GPU(graphics processing unit)(928)를 포함한다. CPU는 데이터 준비, 분기를 통한 제어 동작들, 가속기에 전송할 가치가 없는 메모리-바운드(memory-bound) 동작들을 핸들링한다. FPGA는 커스텀 메모리 계층으로부터 또한 이익을 얻을 컴퓨팅-집약적 작업(compute-intensive job)들을 핸들링한다. GPU는 큰 컴퓨팅-집약적 태스크들을 핸들링한다.
FPGA 회로망(926)은, 컴퓨테이션이 다수의 레이어들로 분산되고 각각의 레이어의 컴퓨테이셔널 요건들이 GPU(928)를 잘 이용되게 유지하기에 불충분한 뉴럴 네트워크를 위한 뉴럴 네트워크 가속기로서 유익하다. 커스텀 온-칩 메모리는, 작은 레이어들 사이에서 전환할 때 데이터 지역성(data locality)을 보장하고 그에 의해 컴퓨테이션들을 상당히 가속화하는 것을 도울 수 있다.
GPU(928)는 각각의 레이어들의 컴퓨테이셔널 요건들이 GPU를 비지 상태로 유지하고 GPU의 메모리 및 프로세서 엘리먼트들 사이의 데이터 전달들에 덜 의존하게 유지할 뉴럴 네트워크를 위한 뉴럴 네트워크 가속기로서 유익하다.
도 11은 일 예에 따른 프로그래밍가능한 IC(228)를 도시하는 블록도이다. 프로그래밍가능한 IC(228)는 프로그래밍가능한 로직(3), 구성 로직(25) 및 구성 메모리(26)를 포함한다. 프로그래밍가능한 IC(228)는 NVM(224), RAM(226) 및 다른 회로들(29)과 같은 외부 회로들에 커플링될 수 있다. 프로그래밍가능한 로직(3)은 로직 셀들(30), 지원 회로들(31) 및 프로그래밍가능한 상호 연결부(32)를 포함한다. 로직 셀들(30)은 복수의 입력들의 범용 로직 함수들을 구현하도록 구성될 수 있는 회로들을 포함한다. 지원 회로들(31)은 트랜시버들, 입력/출력 블록들, 디지털 신호 프로세서들, 메모리들 등과 같은 전용 회로들을 포함한다. 로직 셀들(30) 및 지원 회로들(31)은 프로그래밍가능한 상호 연결부(32)를 사용하여 상호 연결될 수 있다. 로직 셀들(30)을 프로그래밍하고, 지원 회로들(31)의 파라미터들을 세팅하고, 그리고 프로그래밍가능한 상호 연결부(32)를 프로그래밍하기 위한 정보는 구성 로직(25)에 의해 구성 메모리(26)에 저장된다. 구성 로직(25)은 비휘발성 메모리(224) 또는 임의의 다른 소스(예컨대, DRAM(226) 또는 다른 회로들(29)로부터의)로부터 구성 데이터를 획득할 수 있다. 일부 예들에서, 프로그래밍가능한 IC(228)는 프로세싱 시스템(2)을 포함한다. 프로세싱 시스템(2)은 마이크로프로세서(들), 메모리, 지원 회로들, IO 회로들 등을 포함할 수 있다. 예컨대, 프로세싱 시스템(2)은 프로세싱 시스템(210)과 유사한 회로들을 포함할 수 있다. 일부 예들에서, 프로세싱 시스템(2)은 도 2의 프로세싱 시스템(210) 대신에 사용될 수 있다. 그러한 경우, 도 2의 전체 컴퓨팅 시스템(108)은 프로그래밍가능한 IC(228)를 사용하여 구현될 수 있으며, 여기서 소프트웨어(206)는 프로세싱 시스템(2) 상에서 실행된다.
도 12는, 트랜시버들(37), 구성가능한 로직 블록("CLB")들(33), 랜덤 액세스 메모리 블록("BRAM")들(34), 입력/출력 블록("IOB")들(36), 구성 및 클록킹 로직("CONFIG/CLOCKS")(42), 디지털 신호 프로세싱 블록("DSP")들(35), 특수화된 입력/출력 블록들("I/O")(41)(예컨대, 구성 포트들 및 클록 포트들), 및 기타 프로그래밍가능한 로직(39), 이를테면, 디지털 클록 관리자들, 아날로그-디지털 변환기들, 시스템 모니터링 로직 등을 포함하는 많은 수의 상이한 프로그래밍가능한 타일들을 포함하는 프로그래밍가능한 IC(228)의 FPGA 구현을 예시한다. FPGA는 또한 PCIe 인터페이스들(40), ADC(analog-to-digital converter)들(38) 등을 포함할 수 있다.
일부 FPGA들에서, 각각의 프로그래밍가능한 타일은, 도 12의 최상부에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내의 프로그래밍가능한 로직 엘리먼트의 입력 및 출력 단자들(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)의 하나의 인스턴스에 추가하여, 입력/출력 로직 엘리먼트("IOL")(47)의 2개의 인스턴스들을 포함할 수 있다. 당업자에게 명백할 바와 같이, 예컨대, I/O 로직 엘리먼트(47)에 연결된 실제 I/O 패드들은 통상적으로 입력/출력 로직 엘리먼트(47)의 영역으로 한정되지 않는다.
도시된 예에서, 다이의 중심 부근의 수평 영역은 구성, 클록 및 다른 제어 로직을 위해 사용된다. 이러한 수평 영역 또는 열(column)로부터 연장되는 수직 열들(51)은 FPGA의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는 데 사용될 수 있다.
도 12에 예시된 아키텍처를 이용하는 일부 FPGA들은, FPGA의 많은 부분을 구성하는 규칙적 열 구조를 방해하는 추가적 로직 블록들을 포함한다. 추가적 로직 블록들은 프로그래밍가능한 블록들 및/또는 전용 로직일 수 있다.
도 12는 오직 예시적 FPGA 아키텍처만을 예시하도록 의도된다는 점이 주목된다. 예컨대, 행 내의 로직 블록들의 수들, 행들의 상대적 폭, 행들의 수 및 순서, 행들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대적 사이즈들, 및 도 12의 최상부에 포함된 상호 연결/로직 구현들은 순수하게 예시적이다. 예컨대, 실제 FPGA에서, 사용자 로직의 효율적 구현을 용이하게 하기 위해, CLB들이 나타나는 곳마다 CLB들의 1개 초과의 인접한 행이 통상적으로 포함되지만, 인접한 CLB 행들의 수는 FPGA의 전체 사이즈에 따라 변한다.
당업자들은 하나 이상의 프로세서들 및 프로그램 코드로 구성된 메모리 어레인지먼트(arrangement)를 포함하는 다양한 대안적 컴퓨팅 어레인지먼트들이 본원에서 개시된 프로세스들 및 데이터 구조들을 호스팅하기에 적합할 것임을 인식할 것이다. 또한, 프로세스들은, 다양한 컴퓨터-판독가능한 저장 매체들 또는 전달 채널들, 이를테면, 자기 또는 광학 디스크들 또는 테이프들, 전자 저장 디바이스들을 통해, 또는 네트워크를 통한 애플리케이션 서비스들로서 제공될 수 있다.
일부 경우들에서, 양상들 및 특징들이 개별 도면들에서 설명될 수 있지만, 하나의 도면으로부터의 특징들은 조합이 명시적으로 도시되지 않거나 또는 조합으로서 명시적으로 설명되지 않더라도 다른 도면의 특징들과 조합될 수 있다는 것이 인식될 것이다.
방법들 및 시스템은 다양한 뉴럴 네트워크 프로세싱 시스템들에 적용가능할 것으로 여겨진다. 다른 양상들 및 특징들은 명세서의 고려사항으로부터 당업자들에게 명백해질 것이다. 명세서 및 도면들은 단지 예들로서 고려되도록 의도되며, 본 발명의 실제 범위는 다음의 청구항들에 의해 표시된다.

Claims (15)

  1. 공유 메모리;
    상기 공유 메모리에 커플링되고, 입력 데이터 세트에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하도록, 중간 데이터 세트를 생성하도록 그리고 상기 공유 메모리 내의 공유 메모리 큐에 상기 중간 데이터 세트를 저장하도록 구성된 적어도 하나의 뉴럴 네트워크 가속기; 및
    상기 공유 메모리에 커플링되고, 제1 프로세서 엘리먼트 및 제2 프로세서 엘리먼트를 갖는 호스트 컴퓨터 시스템을 포함하며,
    상기 제1 프로세서 엘리먼트는 상기 제1 프로세서 엘리먼트로 하여금,
    상기 적어도 하나의 뉴럴 네트워크 가속기에 입력 데이터를 제공하는 동작; 및
    상기 입력 데이터 세트에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 동작들을 수행하도록 상기 적어도 하나의 뉴럴 네트워크 가속기에 시그널링하는 동작을 수행하게 하는 명령들을 실행하도록 구성되며,
    상기 제2 프로세서 엘리먼트는 상기 제2 프로세서 엘리먼트로 하여금,
    상기 공유 메모리 큐로부터 상기 중간 데이터 세트를 판독하는 동작; 및
    상기 뉴럴 네트워크 가속기가 다른 입력 데이터 세트에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 동작들을 수행하는 동안, 상기 중간 데이터 세트에 대해 상기 뉴럴 네트워크의 레이어들의 제2 서브세트의 동작들을 수행하고, 출력 데이터 세트를 생성하는 동작을 수행하게 하는 명령들을 실행하도록 구성되는, 뉴럴 네트워크 프로세싱 시스템.
  2. 제1 항에 있어서,
    상기 제1 프로세서 엘리먼트로 하여금 상기 적어도 하나의 뉴럴 네트워크 가속기에 상기 입력 데이터를 제공하게 하는 명령들은, 상기 제1 프로세서 엘리먼트로 하여금, 상기 적어도 하나의 뉴럴 네트워크 가속기에 제1 시간에 제1 입력 데이터 세트를 제공하게 하고, 상기 제1 시간 이후의 제2 시간에 제2 입력 데이터 세트를 제공하게 하고; 그리고
    상기 제2 프로세서 엘리먼트로 하여금 상기 레이어들의 제2 서브세트의 동작들을 수행하게 하는 명령들은, 상기 적어도 하나의 뉴럴 네트워크 가속기가 상기 제2 입력 데이터 세트에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 동작들을 수행하는 것과 동시에, 상기 제2 프로세서 엘리먼트로 하여금 상기 제1 입력 데이터 세트에 대해 상기 레이어들의 제2 서브세트의 동작들을 수행하게 하는 명령들을 포함하는, 뉴럴 네트워크 프로세싱 시스템.
  3. 제1 항에 있어서,
    상기 제2 프로세서 엘리먼트로 하여금 상기 공유 메모리 큐로부터 상기 중간 데이터 세트를 판독하게 하는 명령들은, 상기 제2 프로세서 엘리먼트로 하여금, 상기 판독 이후에 상기 공유 메모리 큐가 엠티 상태(empty)라는 것을 상기 제1 프로세서 엘리먼트에 시그널링하게 하는 명령들을 포함하는, 뉴럴 네트워크 프로세싱 시스템.
  4. 제3 항에 있어서,
    상기 제1 프로세서 엘리먼트는, 상기 적어도 하나의 뉴럴 네트워크 가속기가 상기 입력 데이터에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 수행을 완료하였을 때, 상기 제1 프로세서 엘리먼트로 하여금, 상기 공유 메모리 큐가 풀 상태(full)라는 것을 상기 제2 프로세서 엘리먼트에 시그널링하게 하는 명령들을 실행하도록 추가로 구성되고; 그리고
    상기 제2 프로세서 엘리먼트는, 상기 제1 프로세서 엘리먼트로부터의 신호에 대한 응답으로, 상기 제2 프로세서 엘리먼트로 하여금, 상기 공유 메모리 큐로부터 상기 중간 데이터 세트를 판독하게 하는 명령들을 실행하도록 구성되는, 뉴럴 네트워크 프로세싱 시스템.
  5. 제1 항에 있어서,
    상기 제1 프로세서 엘리먼트는, 상기 제1 프로세서 엘리먼트로 하여금, 상기 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성되며,
    상기 제2 프로세서 엘리먼트는, 상기 제2 프로세서 엘리먼트로 하여금, 상기 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성되는, 뉴럴 네트워크 프로세싱 시스템.
  6. 제1 항에 있어서,
    상기 제1 프로세서 엘리먼트는 상기 제1 프로세서 엘리먼트로 하여금,
    상기 제1 프로세서 엘리먼트 또는 상기 제2 프로세서 엘리먼트 중 어느 것이 변환을 수행하도록 할당되거나 구성되는지를 결정하게 하고; 그리고
    상기 제1 프로세서 엘리먼트가 상기 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 상기 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성되고,
    상기 제2 프로세서 엘리먼트는 상기 제2 프로세서 엘리먼트로 하여금,
    상기 제1 프로세서 엘리먼트 또는 상기 제2 프로세서 엘리먼트 중 어느 것이 상기 변환을 수행하도록 할당되거나 구성되는지를 결정하게 하고; 그리고
    상기 제2 프로세서 엘리먼트가 상기 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 상기 중간 데이터 세트를 상기 제1 포맷으로부터 상기 제2 포맷으로 변환하게 하는 명령들을 실행하도록 추가로 구성되는, 뉴럴 네트워크 프로세싱 시스템.
  7. 제1 항에 있어서,
    상기 레이어들의 제1 서브세트는 컨볼루셔널 레이어(convolutional layer)들 및 맥스-풀링 레이어(max-pooling layer)들을 포함하고,
    상기 레이어들의 제2 서브세트는 완전히 연결된 레이어들을 포함하는, 뉴럴 네트워크 프로세싱 시스템.
  8. 제7 항에 있어서,
    상기 레이어들의 제2 서브세트는 소프트맥스 레이어(softmax layer)를 포함하는, 뉴럴 네트워크 프로세싱 시스템.
  9. 호스트 컴퓨터 시스템의 제1 프로세서 엘리먼트가 뉴럴 네트워크 가속기에 입력 데이터를 제공하는 단계;
    상기 제1 프로세서 엘리먼트가, 상기 입력 데이터에 대해 뉴럴 네트워크의 레이어들의 제1 서브세트의 동작들을 수행하도록 상기 뉴럴 네트워크 가속기에 시그널링하는 단계;
    상기 뉴럴 네트워크 가속기가 상기 입력 데이터 세트에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 동작들을 수행하는 단계;
    상기 뉴럴 네트워크 가속기가 중간 데이터 세트를 생성하는 단계;
    상기 뉴럴 네트워크 가속기가 공유 메모리 내의 공유 메모리 큐에 상기 중간 데이터 세트를 저장하는 단계;
    상기 호스트 컴퓨터 시스템의 제2 프로세서 엘리먼트가 상기 공유 메모리 큐로부터 상기 중간 데이터 세트를 판독하는 단계;
    상기 뉴럴 네트워크 가속기가 다른 입력 데이터 세트에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 동작들을 수행하는 동안, 상기 제2 프로세서 엘리먼트가 상기 중간 데이터 세트에 대해 상기 뉴럴 네트워크의 레이어들의 제2 서브세트의 동작들을 수행하는 단계; 및
    상기 제2 프로세서 엘리먼트가 출력 데이터 세트를 생성하는 단계를 포함하는, 방법.
  10. 제9 항에 있어서,
    상기 뉴럴 네트워크 가속기에 상기 입력 데이터를 제공하는 단계는, 상기 제1 프로세서 엘리먼트가 상기 뉴럴 네트워크 가속기에 제1 시간에 제1 입력 데이터 세트를 제공하고, 상기 제1 시간 이후의 제2 시간에 제2 입력 데이터 세트를 제공하는 단계를 포함하고; 그리고
    상기 레이어들의 제2 서브세트의 동작들을 수행하는 단계는, 상기 뉴럴 네트워크 가속기가 상기 제2 입력 데이터 세트에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 동작들을 수행하는 것과 동시에, 상기 제1 입력 데이터 세트에 대해 상기 레이어들의 제2 서브세트의 동작들을 수행하는 단계를 포함하는, 방법.
  11. 제9 항에 있어서,
    상기 공유 메모리 큐로부터 상기 중간 데이터 세트를 판독하는 단계는, 상기 판독 이후에 상기 공유 메모리 큐가 엠티 상태라는 것을 상기 제1 프로세서 엘리먼트에 시그널링하는 단계를 포함하는, 방법.
  12. 제9 항에 있어서,
    상기 뉴럴 네트워크 가속기가 상기 입력 데이터에 대해 상기 뉴럴 네트워크의 상기 레이어들의 제1 서브세트의 수행을 완료하였을 때 상기 제1 프로세서 엘리먼트가 상기 공유 메모리 큐가 풀 상태라는 것을 상기 제2 프로세서 엘리먼트에 시그널링하는 단계; 및
    상기 제1 프로세서 엘리먼트로부터의 신호에 대한 응답으로, 상기 제2 프로세서 엘리먼트가 상기 공유 메모리 큐로부터 상기 중간 데이터 세트를 판독하는 단계를 더 포함하는, 방법.
  13. 제12 항에 있어서,
    상기 제1 프로세서 엘리먼트가 상기 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하거나, 또는 상기 제2 프로세서 엘리먼트가 상기 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하는 단계를 더 포함하는, 방법.
  14. 제9 항에 있어서,
    상기 제1 프로세서 엘리먼트가 상기 제1 프로세서 엘리먼트 또는 상기 제2 프로세서 엘리먼트 중 어느 것이 변환을 수행하도록 할당되거나 구성되는지를 결정하는 단계;
    상기 제1 프로세서 엘리먼트가 상기 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 상기 제1 프로세서 엘리먼트가 상기 중간 데이터 세트를 제1 포맷으로부터 제2 포맷으로 변환하는 단계;
    상기 제2 프로세서 엘리먼트가 상기 제1 프로세서 엘리먼트 또는 상기 제2 프로세서 엘리먼트 중 어느 것이 상기 변환을 수행하도록 할당되거나 구성되는지를 결정하는 단계; 및
    상기 제2 프로세서 엘리먼트가 상기 변환을 수행하도록 할당된다는 결정에 대한 응답으로, 상기 제2 프로세서 엘리먼트가 상기 중간 데이터 세트를 상기 제1 포맷으로부터 상기 제2 포맷으로 변환하는 단계를 더 포함하는, 방법.
  15. 제9 항에 있어서,
    상기 레이어들의 제1 서브세트는 컨볼루셔널 레이어들 및 맥스-풀링 레이어들을 포함하고,
    상기 레이어들의 제2 서브세트는 완전히 연결된 레이어들을 포함하는, 방법.
KR1020207013515A 2017-10-17 2018-09-26 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템 KR102562715B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/785,685 US11222256B2 (en) 2017-10-17 2017-10-17 Neural network processing system having multiple processors and a neural network accelerator
US15/785,685 2017-10-17
PCT/US2018/052831 WO2019079006A1 (en) 2017-10-17 2018-09-26 NEURONAL NETWORK PROCESSING SYSTEM HAVING MULTIPLE PROCESSORS AND NEURONAL NETWORK ACCELERATOR

Publications (2)

Publication Number Publication Date
KR20200062323A true KR20200062323A (ko) 2020-06-03
KR102562715B1 KR102562715B1 (ko) 2023-08-01

Family

ID=63858143

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207013515A KR102562715B1 (ko) 2017-10-17 2018-09-26 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템

Country Status (6)

Country Link
US (1) US11222256B2 (ko)
EP (1) EP3698293A1 (ko)
JP (1) JP7196168B2 (ko)
KR (1) KR102562715B1 (ko)
CN (1) CN111226230B (ko)
WO (1) WO2019079006A1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200069346A (ko) * 2017-10-17 2020-06-16 자일링크스 인코포레이티드 대규모 병렬 소프트웨어로 정의된 하드웨어 시스템에서의 정적 블록 스케줄링
WO2022085958A1 (ko) * 2020-10-21 2022-04-28 삼성전자 주식회사 전자 장치 및 그 동작방법
WO2022107929A1 (ko) * 2020-11-19 2022-05-27 한국전자기술연구원 가변 데이터 압축/복원기를 포함하는 딥러닝 가속 장치
US12099869B2 (en) 2020-10-14 2024-09-24 Samsung Electronics Co., Ltd. Layer-wise scheduling on models based on idle times

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN111860815A (zh) * 2017-08-31 2020-10-30 中科寒武纪科技股份有限公司 一种卷积运算方法及装置
WO2019114842A1 (zh) 2017-12-14 2019-06-20 北京中科寒武纪科技有限公司 一种集成电路芯片装置
CN108446096B (zh) * 2018-03-21 2021-01-29 杭州中天微系统有限公司 数据计算系统
US10795729B2 (en) * 2018-04-28 2020-10-06 Cambricon Technologies Corporation Limited Data accelerated processing system
US11740932B2 (en) * 2018-05-04 2023-08-29 Apple Inc. Systems and methods for task switching in neural network processor
JP6912421B2 (ja) * 2018-06-01 2021-08-04 ファナック株式会社 制御装置
KR20200053886A (ko) 2018-11-09 2020-05-19 삼성전자주식회사 뉴럴 프로세싱 유닛, 뉴럴 프로세싱 시스템, 및 어플리케이션 시스템
US12066975B2 (en) 2019-03-15 2024-08-20 Intel Corporation Cache structure and utilization
EP3938893A1 (en) 2019-03-15 2022-01-19 INTEL Corporation Systems and methods for cache optimization
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
WO2020190808A1 (en) 2019-03-15 2020-09-24 Intel Corporation Sparse optimizations for a matrix accelerator architecture
CN111832736B (zh) * 2019-04-19 2024-04-12 伊姆西Ip控股有限责任公司 用于处理机器学习模型的方法、设备和计算机可读存储介质
CN110209506B (zh) * 2019-05-09 2021-08-17 上海联影医疗科技股份有限公司 数据处理系统、方法、计算机设备及可读存储介质
CN116167422A (zh) * 2019-07-31 2023-05-26 华为技术有限公司 一种集成芯片以及处理传感器数据的方法
CN112418389A (zh) * 2019-08-23 2021-02-26 北京希姆计算科技有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
US11397694B2 (en) * 2019-09-17 2022-07-26 Micron Technology, Inc. Memory chip connecting a system on a chip and an accelerator chip
US11366979B2 (en) * 2019-11-14 2022-06-21 Alibaba Group Holding Limited Using selected components of frequency domain image data in artificial intelligence tasks
US11663746B2 (en) * 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US11544113B2 (en) * 2019-11-20 2023-01-03 Google Llc Task scheduling for machine-learning workloads
US11455144B1 (en) 2019-11-21 2022-09-27 Xilinx, Inc. Softmax calculation and architecture using a modified coordinate rotation digital computer (CORDIC) approach
US11861485B2 (en) * 2019-11-22 2024-01-02 Baidu Usa Llc Data format transform method to improve AI engine MAC utilization
US11537864B2 (en) * 2019-11-26 2022-12-27 Apple Inc. Reduction mode of planar engine in neural processor
WO2021137669A1 (ko) * 2019-12-30 2021-07-08 매니코어소프트주식회사 딥러닝을 위한 가속기용 프로그램 생성 방법
US20210216868A1 (en) * 2020-01-08 2021-07-15 Maxim Integrated Products, Inc. Systems and methods for reducing memory requirements in neural networks
IT202000001462A1 (it) * 2020-01-24 2021-07-24 St Microelectronics Srl Apparato per azionare una rete neurale, corrispondente procedimento e prodotto informatico
CN111352896B (zh) * 2020-03-03 2022-06-24 腾讯科技(深圳)有限公司 人工智能加速器、设备、芯片以及数据处理方法
CN113570028A (zh) * 2020-04-28 2021-10-29 超威半导体公司 用于在神经网络中处理数据的静态生成的经编译表示
US11836645B2 (en) * 2020-06-15 2023-12-05 Nvidia Corporation Generating augmented sensor data for testing operational capability in deployed environments
US11783163B2 (en) * 2020-06-15 2023-10-10 Arm Limited Hardware accelerator for IM2COL operation
US11875261B2 (en) 2020-10-16 2024-01-16 Ford Global Technologies, Llc Automated cross-node communication in distributed directed acyclic graph
CN116151345B (zh) * 2023-04-20 2023-09-26 西安紫光展锐科技有限公司 数据传输方法、装置、电子设备及存储介质
CN116451757B (zh) * 2023-06-19 2023-09-08 山东浪潮科学研究院有限公司 一种神经网络模型的异构加速方法、装置、设备及介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170085485A (ko) * 2014-09-13 2017-07-24 어드밴스드 엘리멘탈 테크놀로지스 인코포레이티드 보안 및 신뢰성있는 아이덴티티 기반 컴퓨팅을 위한 방법들 및 시스템들

Family Cites Families (12)

* 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
US8117137B2 (en) * 2007-04-19 2012-02-14 Microsoft Corporation Field-programmable gate array based accelerator system
US8131659B2 (en) 2008-09-25 2012-03-06 Microsoft Corporation Field-programmable gate array based accelerator system
US9153230B2 (en) 2012-10-23 2015-10-06 Google Inc. Mobile speech recognition hardware accelerator
US10037222B2 (en) * 2013-09-24 2018-07-31 University Of Ottawa Virtualization of hardware accelerator allowing simultaneous reading and writing
CN107111663B (zh) 2014-11-12 2021-01-08 赛灵思公司 目标为可编程集成电路的异构型多处理器程序编译
US9218443B1 (en) * 2014-11-12 2015-12-22 Xilinx, Inc. Heterogeneous multiprocessor program compilation targeting programmable integrated circuits
CN106447035B (zh) * 2015-10-08 2019-02-26 上海兆芯集成电路有限公司 具有可变率执行单元的处理器
CN105488565A (zh) * 2015-11-17 2016-04-13 中国科学院计算技术研究所 加速深度神经网络算法的加速芯片的运算装置及方法
US10621486B2 (en) 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US11410024B2 (en) * 2017-04-28 2022-08-09 Intel Corporation Tool for facilitating efficiency in machine learning

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170085485A (ko) * 2014-09-13 2017-07-24 어드밴스드 엘리멘탈 테크놀로지스 인코포레이티드 보안 및 신뢰성있는 아이덴티티 기반 컴퓨팅을 위한 방법들 및 시스템들

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Jiantao Qiu 외 11명,"Going Deeper with Embedded FPGA Platform for Convolutional NeuralNetwork",Proceedings of the 2016 ACM/SIGDA,(2016.02.21.) *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200069346A (ko) * 2017-10-17 2020-06-16 자일링크스 인코포레이티드 대규모 병렬 소프트웨어로 정의된 하드웨어 시스템에서의 정적 블록 스케줄링
US12099869B2 (en) 2020-10-14 2024-09-24 Samsung Electronics Co., Ltd. Layer-wise scheduling on models based on idle times
WO2022085958A1 (ko) * 2020-10-21 2022-04-28 삼성전자 주식회사 전자 장치 및 그 동작방법
WO2022107929A1 (ko) * 2020-11-19 2022-05-27 한국전자기술연구원 가변 데이터 압축/복원기를 포함하는 딥러닝 가속 장치

Also Published As

Publication number Publication date
JP7196168B2 (ja) 2022-12-26
CN111226230A (zh) 2020-06-02
EP3698293A1 (en) 2020-08-26
JP2020537786A (ja) 2020-12-24
WO2019079006A1 (en) 2019-04-25
CN111226230B (zh) 2023-10-03
KR102562715B1 (ko) 2023-08-01
US20190114534A1 (en) 2019-04-18
US11222256B2 (en) 2022-01-11

Similar Documents

Publication Publication Date Title
KR102562715B1 (ko) 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템
KR102578508B1 (ko) 호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱
US11429848B2 (en) Host-directed multi-layer neural network processing via per-layer work requests
KR102650299B1 (ko) 대규모 병렬 소프트웨어로 정의된 하드웨어 시스템에서의 정적 블록 스케줄링
CN111183452B (zh) 用于广义图像处理的图像预处理
US11568218B2 (en) Neural network processing system having host controlled kernel acclerators
JP7382925B2 (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
US10515135B1 (en) Data format suitable for fast massively parallel general matrix multiplication in a programmable IC
US11204747B1 (en) Re-targetable interface for data exchange between heterogeneous systems and accelerator abstraction into software instructions
US10984500B1 (en) Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US11036827B1 (en) Software-defined buffer/transposer for general matrix multiplication in a programmable IC
US20210209462A1 (en) Method and system for processing a neural network

Legal Events

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