KR20230000943A - 머신 러닝 가속기 내에서 데이터를 로딩하기 위한 방법들 및 장치들 - Google Patents

머신 러닝 가속기 내에서 데이터를 로딩하기 위한 방법들 및 장치들 Download PDF

Info

Publication number
KR20230000943A
KR20230000943A KR1020220038789A KR20220038789A KR20230000943A KR 20230000943 A KR20230000943 A KR 20230000943A KR 1020220038789 A KR1020220038789 A KR 1020220038789A KR 20220038789 A KR20220038789 A KR 20220038789A KR 20230000943 A KR20230000943 A KR 20230000943A
Authority
KR
South Korea
Prior art keywords
data
machine learning
compressed
parameter data
section
Prior art date
Application number
KR1020220038789A
Other languages
English (en)
Inventor
아르납 라하
디팍 마타이쿠티
데바브라타 모하파트라
상 균 김
가우담 친야
코막 브릭
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20230000943A publication Critical patent/KR20230000943A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/20Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits characterised by logic function, e.g. AND, OR, NOR, NOT circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Advance Control (AREA)

Abstract

데이터를 가속기에 로딩하기 위한 방법, 장치, 시스템 및 제조 물품이 개시된다. 예시적인 장치는 압축된 머신 러닝 파라미터 데이터의 제1 섹션 및 추가량을 프로세서 엔진에 로딩하기 위한 데이터 제공자 회로를 포함한다. 프로세서 엔진 회로는 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행한다. 압축된 로컬 데이터 재사용자 회로는 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정한다. 프로세서 엔진 회로는 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 제2 섹션을 사용하여 머신 러닝 동작을 실행한다.

Description

머신 러닝 가속기 내에서 데이터를 로딩하기 위한 방법들 및 장치들{METHODS AND APPARATUS TO LOAD DATA WITHIN A MACHINE LEARNING ACCELERATOR}
본 개시내용은 일반적으로 머신 러닝에 관한 것이고, 더 구체적으로는 머신 러닝 가속기 내에서 데이터를 로딩하기 위한 방법들 및 장치들에 관한 것이다.
머신 러닝 모델들은 패턴 인식, 자연어 프로세싱, 자동 음성 인식 등에 관한 복잡한 문제들을 해결하는 데에 소중한 유용한 도구이다. 머신 러닝 가속기들은 특정 머신 러닝 계산들을 수행하는 데 필요한 시간의 양을 줄이는 데 도움이 되는 특수 유형들의 하드웨어이다. 머신 러닝 가속기에 의해 제공되는 시간 단축은 특정 머신 러닝 애플리케이션들을 사용하는 전반적인 실행가능성을 상당히 향상시킬 수 있다.
도 1은 예시적인 머신 러닝 가속기의 블록도이다.
도 2는 공지된 데이터 제어기의 블록도이다.
도 3은 도 2의 데이터 제어기에 의해 사용될 수 있는 로딩 기술을 도시하기 위한 예시적인 데이터 세트를 도시한다.
도 4a는 도 1의 예시적인 머신 러닝 가속기에 의해 사용될 수 있는 예시적인 개시된 데이터 제어기의 블록도이다.
도 4b는 도 1의 예시적인 머신 러닝 가속기에 의해 사용될 수 있는 제2 예시적인 개시된 데이터 제어기의 블록도이다.
도 4c는 도 1의 예시적인 머신 러닝 가속기에 의해 사용될 수 있는 제2 예시적인 개시된 데이터 제어기의 블록도이다.
도 5는 도 4a, 도 4c의 예시적인 데이터 제어기들에 의해 사용될 수 있는 로딩 기술을 예시하기 위한 예시적인 데이터 세트를 도시한다.
도 6은 도 1의 머신 러닝 가속기에 의해 사용될 수 있는 예시적인 프로세서 엔진의 블록도이다.
도 7은 도 4a, 도 4c의 압축된 로컬 데이터 재사용자를 구현할 때 실행될 수 있는 예시적인 머신 판독가능한 명령어들을 나타내는 흐름도이다.
도 8은 도 4b, 도 4c의 제로 계산 로드 스키퍼를 구현할 때 실행될 수 있는 예시적인 머신 판독가능한 명령어들을 나타내는 흐름도이다.
도 9는 도 1의 프로세서 엔진들을 구현하기 위해 실행될 수 있는 머신 판독가능한 명령어들을 나타내는 흐름도이다.
도 10은 승산 및 누산(MAC) 동작(910)을 구현하기 위해 실행될 수 있는 머신 판독가능한 명령어들을 나타내는 흐름도이다.
도 11은 일부 예들에서, 어떻게 데이터 제어기로부터 프로세서 엔진으로 데이터를 로딩하는 것이 머신 러닝 가속기에 의한 에너지 소비에 대한 주요 기여자들 중 하나인지를 보여주는 두 개의 파이 차트를 포함한다.
도 12a는 도 4a의 예시적인 압축된 로컬 데이터 재사용자를 사용할 때 메모리 액세스가 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다.
도 12b는 도 4a의 예시적인 압축된 로컬 데이터 재사용자를 사용할 때 메모리 액세스가 대안적으로 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다.
도 13a는 도 4b의 예시적인 제로 계산 로드 스키퍼를 사용할 때 메모리 액세스가 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다.
도 13b는 도 4b의 예시적인 제로 계산 로드 스키퍼를 사용할 때 메모리 액세스가 대안적으로 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다.
도 14는 도 4c의 압축된 로컬 데이터 재사용자와 제로 계산 로드 스키퍼 둘 다를 사용할 때 클록 사이클들이 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다.
도 15는 도 1에 도시된 것과 같은 예시적인 머신 러닝 가속기 내에서 데이터의 로딩 및 사용을 구현하기 위해, 도 7, 도 8, 도 9 및 도 10의 명령어들을 실행하도록 구조화된 예시적인 프로세싱 플랫폼의 블록도이다.
도 16은 도 15의 프로세서 회로의 예시적인 구현의 블록도이다.
도 17은 도 15의 프로세서 회로의 다른 예시적인 구현의 블록도이다.
도 18은 소프트웨어(예를 들어, 도 7, 도 8, 도 9, 및 도 10의 예시적인 머신 판독가능한 명령어들에 대응하는 소프트웨어)를 (예를 들어, 라이선스, 판매 및/또는 사용을 위해) 최종 사용자들 및/또는 소비자들, (예를 들어, 판매, 재판매, 라이선스 및/또는 하위 라이선스를 위해) 소매업체들, 및/또는 (예를 들어, 소매업체들 및/또는 직접 구매 고객들과 같은 다른 최종 사용자들에게 배포될 제품들에 포함하기 위해) OEM(original equipment manufacturer)에 연관된 클라이언트 디바이스들에 배포하기 위한 예시적인 소프트웨어 배포 플랫폼(예를 들어, 하나 이상의 서버)의 블록도이다.
도면들은 비례에 맞지 않는다. 대신에, 도면들에서 층들 또는 영역들의 두께가 확대될 수 있다. 도면들은 깨끗한 선들 및 경계들을 갖는 층들 및 영역들을 보여주지만, 이러한 선들 및/또는 경계들의 일부 또는 전체가 이상화될 수 있다. 실제로, 경계들 및/또는 선들은 관찰될 수 없거나 혼합될 수 있고/거나 불규칙할 수 있다.
일반적으로, 도면(들) 및 첨부된 기재된 설명 전체에 걸쳐 동일하거나 유사한 부분들을 지칭하기 위해 동일한 참조 번호들이 사용될 것이다. 본 명세서에서 사용될 때, 연결 참조들(예를 들어, 부착됨, 결합됨, 연결됨 및 합쳐짐)은 달리 표시되지 않는 한, 이러한 요소들 사이의 상대적 이동 및/또는 연결 참조에 의해 참조되는 요소들 사이의 중간 부재들을 포함할 수 있다. 이와 같이, 연결 참조들은 두 개의 요소가 직접 연결되고/되거나 서로 고정된 관계에 있음을 반드시 추론하지는 않는다. 여기에서 사용될 때, 임의의 부품이 다른 부품과 "접촉"한다고 언급하는 것은 두 개의 부품 사이에 중간 부품이 없음을 의미하는 것으로 정의된다.
달리 구체적으로 언급되지 않는 한 "제1", "제2", "제3" 등과 같은 설명어들은 어떤 식으로든 우선순위, 물리적 순서, 목록 내에서의 배열, 및/또는 순서의 임의의 의미를 전가하거나 달리 나타내지 않고서 여기에서 사용되고, 개시된 예들의 이해를 쉽게 하기 위해 요소들을 구별하기 위한 레이블들 및/또는 임의적 명칭으로만 사용된다. 일부 예에서, 상세한 설명에서는 설명어 "제1"이 요소를 지칭하는 데 사용될 수 있는 반면, 청구항에서는 동일한 요소가 "제2" 또는 "제3"과 같은 상이한 설명어로 참조될 수 있다. 그러한 경우들에서, 그러한 설명어들은 예를 들어 다르게는 동일한 이름을 공유했을 수 있는 요소들을 식별하기 위해서만 사용된다는 것을 이해해야 한다. 여기에서 사용될 때, "대략" 및 "약"은 제조 허용오차들 및/또는 다른 실세계 결함들로 인해 정확하지 않을 수 있는 치수들을 나타낸다. 여기에서 사용될 때, "실질적으로 실시간"은 계산 시간, 전송 등에 대한 실세계 지연들이 있을 수 있음을 인식하여 거의 즉각적인 방식으로의 발생을 나타낸다. 따라서, 달리 명시되지 않는 한, "실질적으로 실시간"은 실시간 +/-1 초를 나타낸다.
머신 러닝 애플리케이션들(예를 들어, 대규모 데이터 세트에 대한 머신 러닝 모델의 훈련)은 완료하는 데 몇 시간으로부터 몇 주까지 얼마든 소요될 수 있는 어렵고 계산 비용이 많이 드는 작업이다. 특정 머신 러닝 애플리케이션은 머신 러닝 애플리케이션을 실행하는 데 필요한 시간의 양을 줄이기 위해 머신 러닝 가속기들이라고 지칭되는 특정 유형들의 하드웨어에서 실행하는 데 더 적합하다. 머신 러닝 가속기들에서 다수의 상이한 유형의 머신 러닝 모델들 및/또는 머신 러닝 아키텍처들이 실행될 수 있다. 여기에 개시된 예들에서, 심층 신경망(DNN) 머신 러닝 모델이 사용된다.
머신 러닝 아키텍처들의 고유한 특성으로 인해, DNN의 수 개의 계층에 연관된 훈련된 머신 러닝 모델 파라미터들은 "희소(sparse)"하며, 이는 머신 러닝 모델 파라미터들 내의 활성화들(activations) 및 가중치들이 상당한 수의 제로를 가짐을 의미한다. 제로 값 활성화들 또는 가중치들은 컨볼루션에서 승산-및-누적(multiply-and-accumulate)(MAC) 동작 동안의 부분 합계 누적(partial sum accumulation)에 기여하지 않는다. 따라서, 제로 값 활성화들 및 가중치들은 DNN 모델의 성공적인 구축, 훈련 또는 학습에 기여하지 않는다. 활성화들 및 가중치 데이터를 로딩하는 것 및 부분 합계 누적을 계산하는 것 둘 다가 상당한 양의 에너지를 사용하기 때문에, 제로 값을 초래할 활성화 및 가중치 데이터를 사용하는 것은 바람직하지 않다.
더욱이, 고도로 희소한 가중치들은 또한, 가중치들이 정류 선형 유닛(Rectified Linear Unit)과 같은 비선형 활성화 함수들을 거친 후, DNN의 이후 계층들에서 활성화들이 희박해지게 한다. 에지 디바이스들에서 추론을 실행하기 위한 네트워크 양자화는 또한 가중치 및 활성화들에서 많은 수의 제로를 초래한다.
가중치들 및 활성화들에서 사용가능한 희소성을 활용함으로써, 머신 러닝 가속기들은 부분 합계 누적 동안 제로를 스킵하여 상당한 희소성 가속 속도 향상을 달성할 수 있다. 그러나, 희소성 가속은 종종 계산 유닛을 항상 비지 상태로 유지하는 속도로 데이터를 로딩할 수 없다는 한계가 있다. 일부 데이터 로딩 접근법들은 희소 데이터의 로딩이 계산을 지연시키지 않도록 희소 가중치들 및 활성화들의 로딩 시간을 감소시킴으로써 희소성 계산 가속 스피드업을 개선할 수 있는 희소성 가중치들을 인코딩하기 위한 희소성-기반 제로 값 계산(Zero Value Compute)(ZVC) 체계와 같은 기술들을 제안함으로써 부하 병목 현상을 해결했다.
도 1의 머신 러닝 가속기를 구현하는 예시적인 방식들이 도 4a, 도 4b, 도 4c 및 도 6에 도시되어 있지만, 도 4a, 도 4b, 도 4c, 및 도 6에 도시된 요소들, 프로세스들 및/또는 디바이스들 중 하나 이상은 임의의 다른 방식으로 결합, 분할, 재배열, 생략, 제거 및/또는 구현될 수 있다. 또한, 도 4a의 예, 도 4b의 예, 도 4c의 예, 도 6의 예, 및/또는 보다 일반적으로 도 1의 예시적인 머신 러닝 가속기는 하드웨어, 소프트웨어, 펌웨어, 및/또는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합에 의해 구현될 수 있다. 따라서, 예를 들어, 도 4a의 예, 도 4b의 예, 도 4c의 예, 도 6의 예, 및/또는 보다 일반적으로 예시적인 머신 러닝 가속기 중 임의의 것은 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로들, 프로그래밍가능한 프로세서(들), 프로그래밍가능한 제어기(들), 그래픽 프로세싱 유닛(들)(GPU(들)), 디지털 신호 프로세서(들)(DSP(들)), 주문형 집적 회로(들)(ASIC(들)), 프로그래밍가능한 로직 디바이스(들)(PLD(들)) 및/또는 필드 프로그래밍가능한 로직 디바이스(들)(FPLD(들))에 의해 구현될 수 있다. 순수한 소프트웨어 및/또는 펌웨어 구현을 포괄하도록 본 특허의 장치 또는 시스템 청구항들 중 임의의 것을 읽을 때, 도 4a의 예, 도 4b의 예, 도 4c의 예, 도 6의 예 중 적어도 하나는 소프트웨어 및/또는 펌웨어를 포함하는 메모리, 디지털 다목적 디스크(DVD), 컴팩트 디스크(CD), Blu-ray 디스크 등과 같은 비-일시적 컴퓨터 판독가능한 저장 디바이스 또는 저장 디스크를 포함하도록 명시적으로 정의된다. 또한, 도 1의 예시적인 머신 러닝 가속기는 도 4a, 도 4b, 도 4c, 및 도 6에 도시된 것들에 더하여 또는 그를 대신하여 하나 이상의 요소, 프로세스 및/또는 디바이스를 포함할 수 있고, 및/또는 도시된 요소들, 프로세스들 및 디바이스들 중 임의의 것 또는 전부 중 둘 이상을 포함할 수 있다. 여기에서 사용될 때, "통신하는"이라는 문구는 그것의 변형을 포함하여, 직접 통신, 및/또는 하나 이상의 중간 컴포넌트를 통한 간접 통신을 포괄하며, 직접적인 물리적(예를 들어, 유선) 통신 및/또는 지속적인 통신을 요구하는 것이 아니라, 오히려 주기적 간격들, 스케줄링된 간격들, 비주기적 간격들, 및/또는 일회성 이벤트들에서의 선택적 통신을 추가로 포함한다.
도시된 예의 머신 러닝 가속기는 로컬 메모리(1513)(예를 들어, 캐시, 레지스터들 등)를 포함한다. 도시된 예의 프로세서 회로(1512)는 버스(1518)에 의해 휘발성 메모리(1514) 및 비휘발성 메모리(1516)를 포함하는 메인 메모리와 통신한다. 휘발성 메모리(1514)는 동기식 동적 랜덤 액세스 메모리(SDRAM), 동적 랜덤 액세스 메모리(DRAM), RAMBUS® 동적 랜덤 액세스 메모리(RDRAM®), 및/또는 임의의 다른 유형의 RAM 디바이스에 의해 구현될 수 있다. 비휘발성 메모리(1516)는 플래시 메모리 및/또는 임의의 다른 원하는 유형의 메모리 디바이스에 의해 구현될 수 있다. 도시된 예의 메인 메모리(1514, 1516)에 대한 액세스는 메모리 제어기(1517)에 의해 제어된다.
여기에 설명된 머신 판독가능한 명령어들은 압축 포맷, 암호화된 포맷, 단편화된 포맷, 컴파일된 포맷, 실행 가능한 포맷, 패키지 포맷 등 중 하나 이상으로 저장될 수 있다. 여기에 설명된 머신 판독가능한 명령어들은 머신 실행가능한 명령어들을 생성, 제조 및/또는 생성하는 데 사용될 수 있는 데이터 또는 데이터 구조(예를 들어, 명령어들의 부분들, 코드, 코드 표현들 등)로서 저장될 수 있다. 예를 들어, 머신 판독가능한 명령어들은 네트워크 또는 네트워크 컬렉션의 동일 또는 상이한 위치들에 위치된 하나 이상의 저장 디바이스 및/또는 컴퓨팅 디바이스(예를 들어, 서버)에 단편화되어 저장될 수 있다(예를 들어, 클라우드에, 에지 디바이스들에, 등). 머신 판독가능한 명령어들은 컴퓨팅 디바이스 및/또는 다른 머신에 의해 직접 판독가능하고 해석가능하고 및/또는 실행가능하도록 하기 위해, 설치, 수정, 적응, 업데이트, 결합, 보완, 구성, 암호 해독, 압축해제, 언팩, 배포, 재할당, 컴파일 등 중 하나 이상을 요구할 수 있다. 예를 들어, 머신 판독가능한 명령어들은 별개의 컴퓨팅 디바이스들에서 개별적으로 압축, 암호화 및 저장되는 복수의 부분에 저장될 수 있으며, 여기서 부분들은 암호 해독, 압축해제 및 결합될 때, 여기에 설명된 것과 같은 프로그램을 함께 형성할 수 있는 하나 이상의 기능을 구현하는 실행가능한 명령어들의 세트를 형성한다.
다른 예에서, 머신 판독가능한 명령어들은 특정 컴퓨팅 디바이스 또는 다른 디바이스에서 명령어들을 실행하기 위해 프로세서 회로에 의해 판독될 수 있지만 라이브러리(예를 들어, 동적 링크 라이브러리(DLL)), 소프트웨어 개발 키트(SDK), 애플리케이션 프로그래밍 인터페이스(API) 등의 추가를 요구할 수 있는 상태로 저장될 수 있다. 다른 예에서, 머신 판독가능한 명령어들 및/또는 대응하는 프로그램(들)이 전체적으로 또는 부분적으로 실행될 수 있기 전에, 머신 판독가능한 명령어들이 구성될 필요가 있을 수 있다(예를 들어, 저장된 세팅들, 데이터 입력, 기록된 네트워크 주소들 등). 따라서, 여기에서 사용되는 머신 판독가능한 매체는 저장될 때, 또는 다르게 정지 중이거나 운송 중일 때, 머신 판독가능한 명령어들 및/또는 프로그램(들)의 특정 포맷 또는 상태에 관계없이 머신 판독가능한 명령어들 및/또는 프로그램(들)을 포함할 수 있다.
여기에 설명된 머신 판독가능한 명령어들은 임의의 과거, 현재 또는 미래의 명령어 언어, 스크립팅 언어, 프로그래밍 언어 등에 의해 표현될 수 있다. 예를 들어, 머신 판독가능한 명령어들은 이하의 언어들: C, C++, Java, C#, Perl, Python, JavaScript, HTML(HyperText Markup Language), SQL(Structured Query Language), Swift 등 중 임의의 것을 사용하여 표현될 수 있다.
도 1은 예시적인 머신 러닝 가속기(100)의 블록도이다. 압축된 머신 러닝 파라미터 데이터(102)는 예시적인 머신 러닝 가속기(100)에 의해 사용된다. 도 1의 예시적인 머신 러닝 가속기(100)는 데이터 제어기(104), 네트워크-온-칩(network on a chip)(NOC)(106), 및 하나 이상의 예시적인 프로세서 엔진(110)을 포함하는 프로세서 엔진 어레이(108)를 포함한다.
압축된 머신 러닝 파라미터 데이터(102)는 심층 피드 포워드(Deep Feed Forward), 심층 신뢰(Deep Belief) 및 심층 컨볼루션 네트워크(Deep Convolutional Networks) 등을 포함하지만 이에 제한되지 않는 신경망을 사용하는 임의의 머신 러닝 프레임워크로부터 올 수 있는 데이터를 나타낸다. 예시적인 머신 러닝 가속기(100)로 전송되기 전에, 압축된 머신 러닝 파라미터 데이터(102)는 임의의 형태의 메모리로부터 올 수 있다. 압축된 머신 러닝 파라미터 데이터(102)는 압축된 활성화 및 가중치 데이터(102A), 및 희소성 비트맵들(102B)을 포함한다.
도 1의 데이터 제어기(104)는 예시적인 머신 러닝 가속기 외부로부터 압축된 머신 러닝 파라미터 데이터(102)를 수용한다. 데이터 제어기(104)는 NOC(106)를 사용하여, 압축된 머신 러닝 파라미터들을 예시적인 프로세서 엔진(들)(110)에 로딩한다. NOC(106)를 통해 예시적인 프로세서 엔진(110)에 데이터를 로딩하는 행위는 에너지 비용이 많이 드는 프로세스이며, 이는 도 11에서 더 탐구된다. 데이터 제어기(104)는 예에 대한 머신 러닝 파라미터 데이터의 배포를 구현하고 예시적인 프로세서 엔진들(110) 사이의 통신을 조정하도록 구조화된 예시적인 프로세서 회로를 포함한다. 도 4a, 도 4b, 도 4c와 같은 예들에서, 데이터 제어기(104)의 예시적인 프로세서 회로는 또한 로딩되는 압축된 머신 러닝 파라미터 데이터(102)의 내용을 변경하는 것, 및/또는 압축된 머신 러닝 파라미터 데이터(102)가 로딩되는 타이밍을 변경하는 것을 구현하도록 구조화된다.
도 1의 NOC(106)는 집적 회로의 임의의 네트워크 기반 통신 서브시스템을 나타낸다. 데이터 제어기(104)는 NOC(106)를 사용하여, 데이터를 예시적인 프로세서 엔진들(110)에 로딩한다.
도 1의 프로세서 엔진 어레이(108)는 예시적인 머신 러닝 가속기(100) 내의 예시적인 프로세서 엔진(들)(110)의 그룹화는 물론, 예시적인 프로세서 엔진들(110) 간의 연결들을 나타낸다.
도 1의 예시적인 프로세서 엔진(110)은 프로세서 엔진 어레이(108) 내의 단일 프로세서 엔진을 나타낸다. 예시적인 프로세서 엔진(110)은 NOC(106)를 통해 데이터 제어기(104)에 의해 배포된 압축된 머신 러닝 파라미터 데이터(102)를 수신한다. 예시적인 프로세서 엔진(110)은 압축된 머신 러닝 파라미터 데이터(102)를 사용하여 실행을 구현하도록 구조화된 예시적인 프로세서 회로를 포함한다.
도 2는 데이터 수신기(202), 로컬 메모리(204), 머신 판독가능한 명령어들(206), 데이터 제공자(208), 및 프로세서 회로(210)를 포함하는 공지된 데이터 제어기(200)의 블록도이다.
도 2의 데이터 수신기(202)는 메모리로부터 압축된 머신 러닝 파라미터 데이터(102)를 수신한다. 데이터 수신기(202)는 압축된 머신 러닝 파라미터 데이터(102)를 로컬 메모리(204)에 저장한다.
도 2의 로컬 메모리(204)는 압축된 머신 러닝 파라미터 데이터(102)를 저장하고, 데이터 수신기(202) 및 데이터 제공자(208)를 구현하기 위해 프로세서 회로(210)에 의해 실행 및/또는 인스턴스화될 수 있는 머신 판독가능한 명령어들(206)을 저장한다.
여기서 사용될 때, 용어 "라운드"는 예시적인 프로세서 엔진(110)이 주어진 양의 압축되지 않은 데이터를 사용하여 실행하는 데 필요한 시간의 양을 지칭할 것이다. 각각의 라운드는 예시적인 프로세서 엔진(110)이 n 비트의 데이터를 사용하여 실행할 것이며, 여기서 n의 값은 라운드들 간에 변경되지 않는다. 추가적으로, 각각의 라운드에서 데이터 제어기(104)는 NOC(106)를 통해 프로세서 엔진(110)에 x 비트의 데이터를 로딩할 수 있다. 각각의 라운드에 로딩되는 데이터의 정확한 양은 (1) x 비트(여기서 x는 라운드들 간에 변경되지 않는 양의 정수) 또는 (2) 0 비트이다.
일부 예들에서, 라운드로서 정의된 시간 프레임 내에서 복수의 클록 사이클이 발생할 수 있다. 클록 사이클들의 수는 머신 러닝 가속기에 의해 사용되는 예시적인 파이프라인 아키텍처에 기초하여 변경될 수 있다. 따라서, 예시적인 데이터 세트가 단일 라운드 동안 로딩되는 경우, 일부 예들에서, 동일한 예시적인 데이터 세트가 복수의 클록 사이클의 과정에 걸쳐 로딩될 수 있다. 마찬가지로, 예시적인 데이터 세트가 단일 라운드에서 프로세서 엔진에 의한 실행을 위해 사용된다면, 일부 예들에서 동일한 예시적인 데이터 세트가 복수의 클록 사이클의 과정에 걸쳐 계산될 수 있다.
도 2의 데이터 제공자(208)는 로컬 메모리(204)로부터 압축된 머신 러닝 파라미터 데이터(102)를 수신한다. 각각의 라운드에서, 데이터 제공자는 NOC(106)를 사용하여, 그것이 수신하는 임의의 압축된 활성화 및 가중치 데이터(102A) 및 임의의 대응하는 양의 희소성 비트맵(102B)을 프로세서 엔진 어레이(108)에 로딩한다.
도 2의 프로세서 회로(210)는 데이터 수신기(202) 및 데이터 제공자(208)를 구현하기 위해 머신 판독가능한 명령어들을 실행 및/또는 인스턴스화한다.
도 2의 데이터 제어기(200)는 주로 캐시와 같은 역할을 하여, 압축된 머신 러닝 파라미터 데이터(102)를 로컬 메모리(204)에 저장한다. 머신 판독가능한 명령어들(206)은 활성화 및 가중치 데이터(102A) 및 희소성 비트맵들(102B) 둘 다가 라운드마다 데이터 제공자(208)에 의해 로딩되도록 구조화된다.
여기서 사용될 때, 용어 "섹션"은 현재 라운드에서 예시적인 프로세서 엔진(110)에 의한 실행을 위해 압축해제되고 사용될 압축된 머신 러닝 파라미터 데이터의 양을 지칭할 것이다. 프로세서 엔진(110)에 의해 각각의 라운드(306)에서 실행되는 압축해제된 데이터의 양은 변하지 않으므로, 프로세서 엔진(110)은 각각의 라운드마다 정확히 한 섹션 분량의 압축된 머신 러닝 파라미터 데이터로부터의 압축해제된 데이터를 사용하여 실행할 것이다.
도 3은 압축된 머신 러닝 파라미터 데이터(102)가 NOC(106)를 통해 데이터 제어기(200)로부터 예시적인 프로세서 엔진(들)(110)에 로딩될 수 있는 방법을 도시하는 예시적인 데이터 세트를 도시한다. 예시적인 데이터 세트는 300이다. 도 3의 테이블은 302로 나타낸 바와 같이 4개의 데이터 로딩 라운드로 구성된다. 각각의 라운드는 희소성 비트맵(304), 해당 라운드에 요구되는 압축해제된 데이터(306), 및 프로세서 엔진(들)(110)에 로딩되는 압축된 데이터(308)를 포함한다. 프로세서 엔진(들)(110)에 로딩되는 압축된 데이터(308)는 굵게 보여진 제1 섹션(310), 및 제2 섹션(312)을 포함한다.
도 3의 예시적인 데이터 세트(300)는 압축된 활성화 및 가중치 데이터(102A), 및 희소성 비트맵들(102B) 둘 다를 포함한다. 압축된 활성화 및 가중치 데이터(102A)는 예시적인 머신 러닝 가속기(100)에 들어가기 전에 알려진 ZVC 방식을 사용하여 압축되었다.
도 3의 희소성 비트맵들(304)은 예시적인 데이터 세트(300)로부터 직접 온 것이다. 각각의 라운드에서, 데이터 제어기(200)는 현재 라운드(302)에 대한 희소성 비트맵(304)을 NOC(106)를 통해 예시적인 프로세서 엔진(110)에 로딩한다. 도 3에 도시된 바와 같이, 각각의 개별 희소성 비트맵(304)의 길이는 16비트이다.
도 3의 현재 라운드(306)에서 요구되는 압축해제된 데이터는 다음 라운드 동안 프로세서 엔진(110)에 의한 실행에 사용될 데이터를 나타낸다. 현재 라운드(306)에서 요구되는 압축해제된 데이터가 다음 라운드에서 사용될 것이기 때문에, 데이터 제어기(104)는 현재 라운드(306)가 끝날 무렵 현재 라운드에서 요구되는 압축해제된 데이터에 대응하는 압축된 머신 러닝 파라미터 데이터(102)를 로딩하도록 요구된다. 현재 라운드(306)에 요구되는 압축해제된 데이터의 길이는 라운드들 간에 변경되지 않는다. 도 3에서, 각각의 라운드에 요구되는 압축해제된 데이터의 길이는 16 더블 워드(즉, 512 비트)이다.
도 3의 각각의 라운드(302)에서 로딩되는 압축된 데이터(308)는 각각의 라운드에서 데이터 제어기(200)에 의해 예시적인 프로세서 엔진(110)에 로딩되는 데이터의 양 및 내용 둘 다를 나타낸다.
도 1의 예시적인 데이터 세트(300)는 공지된 데이터 제어기(200)를 사용하여 로딩된다. 압축된 데이터(308)의 내용은 예시적인 데이터 세트(300)로부터 직접 온다. 라운드(302)에서 로딩될 수 있는 압축된 데이터(308)의 양은 예시적인 데이터 제어기(104) 내의 로컬 메모리의 양 및 유형에 의해 결정된다. 데이터 제어기(200)는 매 라운드마다 결정된 양의 압축된 데이터(308)를 로딩한다.
각각의 라운드에 프로세서 엔진(들)(110)에 로딩되는 압축된 데이터(308)의 양은 종종 해당 라운드(306)에 요구되는 압축해제된 데이터보다 더 많은 데이터를 포함한다. 제1 섹션(310)은 해당 라운드(306)에 요구되는 압축해제된 데이터로 변환될 것이기 때문에, 각각의 라운드에서 로딩되는 압축된 데이터의 제2 섹션(312)은 예시적인 프로세서 엔진(110)에 의한 실행을 위해 사용되지 않을 것이다.
도 4a는 도 1의 예시적인 머신 러닝 가속기(100)에 의해 사용될 수 있는 예시적인 데이터 제어기(4A00)의 블록도이다. 공지된 데이터 제어기(200)와 마찬가지로, 예시적인 데이터 제어기(4A00)는 데이터 수신기(202), 로컬 메모리(204), 및 데이터 제공자(208)를 포함한다. 추가적으로, 예시적인 데이터 제어기(4A00)는 또한 예시적인 머신 판독가능한 명령어들(4A02), 압축된 로컬 데이터 재사용자(4A04), 및 프로세서 회로(4A06)를 포함한다.
도 4a의 로컬 메모리(204)는 데이터 수신기(202), 데이터 제공자(208), 및 예시적인 압축된 로컬 데이터 재사용자(4A04)를 구현하기 위해 프로세서 회로(4A06)에 의해 실행 및/또는 인스턴스화될 수 있는 예시적인 머신 판독가능한 명령어들(4A02)을 저장한다.
도 4a의 예시적인 압축된 로컬 데이터 재사용자(4A04)는 압축된 머신 러닝 파라미터 데이터(102)를 수신하고, 압축된 활성화 및 가중치 데이터(102A)가 데이터 제공자(208)로 송신되어야 하는 때를 결정한다. 데이터 제공자(208)는 예시적인 압축된 로컬 데이터 재사용자(4A04)에 의해 지시될 때만 압축된 활성화 및 가중치 데이터(102A)를 로딩한다. 이 결정은 도 7 및 도 8에서 더 탐구된다.
도 4a의 프로세서 회로(4A06)는 데이터 수신기(202), 데이터 제공자(208), 및 예시적인 압축된 로컬 데이터 재사용자(4A04)를 구현하기 위해 머신 판독가능한 명령어들을 실행 및/또는 인스턴스화한다.
압축된 머신 러닝 파라미터 데이터(102)를 로컬 메모리(204)에 저장함으로써 캐시의 역할을 하는 것 외에도, 예시적인 데이터 제어기(4A00)는 알려진 데이터 제어기(200)보다 더 효율적이다. 예시적인 데이터 제어기(4A00)는 여전히 매 라운드마다 희소성 비트맵들(102B)을 로딩하지만, 매 라운드마다 압축된 활성화 및 가중치 데이터(102A)를 로딩하지 않는다. 이는 예시적인 제어기들 둘 다가 동일한 예시적인 데이터 세트(300)를 로딩하고 있을 때, 예시적인 데이터 제어기(400A)가 공지된 데이터 제어기(200)보다 적은 에너지를 소비하게 한다.
도 4b는 도 1의 예시적인 머신 러닝 가속기(100)에 의해 사용될 수 있는 예시적인 데이터 제어기(4B00)의 블록도이다. 도 2, 도 4a의 다른 예시적인 데이터 제어기들과 마찬가지로, 예시적인 데이터 제어기(4B00)는 데이터 수신기(202), 로컬 메모리(204), 및 데이터 제공자(208)를 포함한다. 예시적인 데이터 제어기(4B00)는 또한 예시적인 머신 판독가능한 명령어들(4B02), 제로 계산 로드 스키퍼(4B04), 및 프로세서 회로(4B06)를 포함한다.
도 4b의 로컬 메모리(204)는 데이터 수신기(202), 데이터 제공자(208), 및 제로 계산 로드 스키퍼(4B04)를 구현하기 위해 프로세서 회로(4B06)에 의해 실행 및/또는 인스턴스화될 수 있는 예시적인 머신 판독가능한 명령어들(4B02)을 저장한다.
여기에서 사용될 때, 압축된 활성화 및 가중치 데이터(102A)를 설명할 때의 용어 "유용한"은 MAC 동작에서 논-제로 결과들을 생성할 압축된 활성화 및 가중치 데이터를 지칭할 것이다. 마찬가지로, 압축된 활성화 및 가중치 데이터(102A)를 설명할 때의 용어 "유용하지 않음"은 MAC 동작에서 논-제로 결과들을 생성하지 않을 압축된 활성화 및 가중치 데이터(102A)를 지칭할 것이다.
도 4b의 예시적인 제로 계산 로드 스키퍼(4B04)는 압축된 머신 러닝 파라미터 데이터(102)를 수신하고, 어느 부분들이 유용하고 어느 부분들이 유용하지 않은지를 결정한다. 이 결정은 도 9에서 더 탐구된다.
도 4b의 프로세서 회로(4B06)는 데이터 수신기(202), 데이터 제공자(208), 및 제로 계산 로드 스키퍼(4B04)를 구현하기 위해 머신 판독가능한 명령어들을 실행 및/또는 인스턴스화한다.
압축된 머신 러닝 파라미터 데이터(102)를 로컬 메모리(204)에 저장함으로써 캐시의 역할을 하는 것 외에도, 예시적인 데이터 제어기(4B00)는 공지된 데이터 제어기(200)보다 더 효율적이다. 앞에서 언급된 바와 같이, 제로 값 활성화 및 가중치 데이터는 DNN 모델의 성공적인 계산에 기여하지 않는다. 따라서, 논-제로 데이터를 갖는 압축된 머신 러닝 파라미터 데이터(102)의 부분들만이 유용하고, 오로지 제로 데이터인 부분들은 유용하지 않다.
공지된 데이터 제어기(200)가 압축된 머신 러닝 파라미터 데이터(102)의 유용한 부분들 및 유용하지 않은 부분들 둘 다를 예시적인 프로세서 엔진(110)에 로딩하는 반면, 예시적인 데이터 제어기(4B00)는 압축된 머신 러닝 파라미터 데이터(102)의 유용한 부분들만을 예시적인 프로세서 엔진(110)에 로딩하기 위해 제로 계산 로드 스키퍼(4B04)를 활용한다.
도 4c는 도 1의 예시적인 머신 러닝 가속기(100)에 의해 사용될 수 있는 예시적인 데이터 제어기(4C00)의 블록도이다. 도 2, 도 4a, 도 4b의 다른 예시적인 데이터 제어기들과 마찬가지로, 예시적인 데이터 제어기(4C00)는 데이터 수신기(202), 로컬 메모리(204), 및 데이터 제공자(208)에 의해 부분적으로 구성된다. 이러한 공지된 컴포넌트들에 추가하여, 예시적인 데이터 제어기(4B00)는 또한 예시적인 머신 판독가능한 명령어들(4C02), 및 예시적인 압축된 로컬 데이터 재사용자(4A04) 및 예시적인 제로 계산 로드 스키퍼(4B04) 둘 다를 포함한다.
도 4c의 로컬 메모리(204)는 데이터 수신기(202), 데이터 제공자(208), 예시적인 압축된 로컬 데이터 재사용자(4A04) 및 제로 계산 로드 스키퍼(4B04)를 구현하기 위해 프로세서 회로에 의해 실행 및/또는 인스턴스화될 수 있는 예시적인 머신 판독가능한 명령어들(4C02)을 저장한다.
도 4c의 프로세서 회로(4C06)는 데이터 수신기(202), 데이터 제공자(208), 예시적인 압축된 로컬 데이터 재사용자(4A04) 및 제로 계산 로드 스키퍼(4B04)를 구현하기 위해 머신 판독가능한 명령어들을 실행 및/또는 인스턴스화한다.
도 4c의 예시적인 데이터 제어기(4C00) 내에서, 압축된 머신 러닝 파라미터 데이터(102)는 예시적인 제로 계산 로드 스키퍼(4B04)에 의해 취득된다. 예시적인 제로 계산 로드 스키퍼(4B04)는 압축된 머신 러닝 파라미터 데이터(102)의 유용한 섹션들만을 예시적인 압축된 로컬 데이터 재사용자(4A04)에게 송신한다. 따라서, 예시적인 데이터 제어기(4C00)는 압축된 머신 러닝 파라미터 데이터(102)의 유용한 섹션들만을 예시적인 프로세서 엔진(들)(110)에 로딩한다. 추가적으로, 유용한 압축된 활성화 및 가중치 데이터(102A)는 매 라운드마다 예시적인 프로세서 엔진(110)에 로딩되지 않는다. 이것은 예시적인 데이터 제어기(4C00)를 도 2, 도 4a, 도 4b의 다른 예시적인 데이터 제어기들보다 더 효율적으로 만든다. 도 4a, 도 4b, 도 4c의 예시적인 데이터 제어기들의 효율 절약에 대한 추가 세부사항은 도 12a, 도 12b, 도 13a, 도 13b, 도 14에 도시된다.
도 5는 압축된 머신 러닝 파라미터 데이터(102)가 도 4a, 도 4c의 예시적인 데이터 제어기들에 의해 로딩될 수 있는 방법을 도시하는 예를 보여준다. 예시적인 데이터 세트는 300이다. 도 5의 테이블은 302로 보여진 바와 같이 4개의 데이터 전송 라운드를 보여준다. 각각의 라운드는 희소성 비트맵(304), 해당 라운드에 요구되는 압축해제된 데이터(306), 프로세서 엔진(들)에 로딩되는 예시적인 압축된 데이터(308)를 포함한다. 예시적인 데이터 세트(300)를 프로세싱하기 위해, 도 4a, 도 4c의 예시적인 데이터 제어기들은 또한 개체수 카운트(population count)(500) 및 포인터 값(502)을 사용한다.
예시적인 개체수 카운트 값(500)은 현재 라운드에서 프로세서 엔진에 의해 요구되는 압축된 데이터의 길이를 나타내는 정수 값이다. 이 예에서, 개체수 카운트는 더블 워드(즉, 32비트 단위)로 제공된다. 다른 예들에서, 상이한 단위들이 사용될 수 있다. 예를 들어, 라운드 0 개체수 카운트는 라운드 0에 대해 4 더블 워드의 압축된 데이터가 요구됨을 나타낸다. 라운드 0에 대한 이러한 예에 대해, 4개의 더블 워드는 16진수로 "0D0C0B0A"로 나열된다. 개체수 카운트 값은 로컬 메모리(204)에 저장된다.
예시적인 포인터 값(502)은 마지막 로딩 이후 얼마나 많은 압축된 활성화 및 가중치 데이터(102A)가 요구되었는지를 나타내는 정수 값이다. 더욱이, 예시적인 데이터 세트(300)에 대한 예시 포인터 값들(502)은 각각의 라운드의 시작에서의 값들이다. 도 4a, 도 4c의 예시적인 압축된 로컬 데이터 재사용자가 압축된 활성화 및 가중치 데이터(102A)를 데이터 제공자(208)에 송신하지 않기로 결정할 때면 언제든, 포인터 값(502)은 0으로 설정된다. 다음으로, 포인터 값은 도 4a, 도 4c의 예시적인 압축된 로컬 데이터 재사용자가 압축된 활성화 및 가중치 데이터(102A)를 데이터 제공자(208)에 송신하는 각각의 라운드에서 증가된다. 이 예에서, 포인터 값은 더블 워드(즉, 32비트 단위)로 제공된다. 다른 예들에서, 상이한 단위들이 사용될 수 있다. 포인터 값은 예시적인 로컬 메모리(204) 내에 저장된다.
도 5의 예시적인 데이터 세트(300)는 도 4a, 도 4c와 같은 예시적인 데이터 제어기를 사용하여 로딩된다. 각각의 라운드에서, 압축된 로컬 데이터 재사용자는 개체수 카운트 값(500) 및 예시적인 포인터 값(502)을 사용하여, 요구되는 압축해제된 데이터(306)가 데이터 제공자(208)에 의해 이미 로딩되었는지를 결정한다. 각각의 라운드에서, 도 4a, 도 4c의 압축된 로컬 데이터 재사용자는 압축된 활성화 및 가중치 데이터(102A)를 데이터 제공자(208)에 송신하거나 송신하지 않을 것이다. 도 4a, 도 4c의 데이터 제어기들은 일부 라운드들에서 압축된 활성화 및 가중치 데이터를 로딩하지 않는 것에 의해, 도 2의 공지된 데이터 제어기보다 더 효율적이다.
도 6은 예시적인 프로세서 엔진(110)의 블록도이다. 예시적인 프로세서 엔진(110)은 데이터 수신기(604), 로컬 메모리(606), 머신 판독가능한 명령어들(608), 승산 및 누적(MAC) 연산자(610), 데이터 제공자(612), 및 프로세서 회로(614)로 구성된다.
도 6의 예시적인 프로세서 엔진은 예시적인 데이터 제어기로부터 압축된 머신 러닝 파라미터 데이터(102)를 수신한다. 앞에서 논의된 바와 같이, 압축된 머신 러닝 파라미터 데이터(102)는 압축된 활성화 및 가중치 데이터(102A), 및 희소성 비트맵 데이터(102B)로 구성된다.
도 6의 예시적인 데이터 수신기(604)는 압축된 머신 러닝 파라미터 데이터(102)를 수신한다. 사용된 예시적인 데이터 제어기에 따라, 압축된 활성화 및 가중치 데이터(102A)는 유용한 섹션들 및 유용하지 않은 섹션들 둘 다를 포함할 수 있다. 사용된 예시적인 데이터 제어기에 따라, 데이터 수신기(604)는 압축된 활성화 및 가중치 데이터를 라운드마다 수신하지 않을 수 있다. 데이터 수신기(604)는 매 라운드마다 희소성 비트맵 데이터를 수신할 것이다. 데이터 수신기(604)는 압축된 머신 러닝 파라미터 데이터(102)를 로컬 메모리(606)에 저장한다.
도 6의 예시적인 로컬 메모리(606)는 압축된 활성화 및 가중치 데이터(102A)의 압축해제, 데이터 수신기(604), MAC 연산자(610), 및 데이터 제공자(612)를 구현하기 위해 프로세서 회로에 의해 실행 및/또는 인스턴스화될 수 있는 머신 판독가능한 명령어들(608)을 저장한다. 추가적으로, 로컬 메모리(606)는 압축된 머신 러닝 파라미터 데이터(102), 및 MAC 연산자(610)로부터의 결과들을 저장한다.
도 6의 예시적인 MAC 연산자(610)는 압축해제된 활성화 및 가중치 데이터가 예시적인 프로세서 엔진(110) 내에서 사용되는 하나의 방식을 나타낸다. 예시적인 MAC 연산자(610)는 활성화 및 가중치 데이터의 상이한 섹션들을 함께 곱하여 복수의 곱을 형성한다. 예시적인 MAC 연산자(610)는 또한 복수의 곱을 합산한다. 예시적인 MAC 연산자(610)에 의해 생성된 복수의 곱의 결과적인 합산은 로컬 메모리(606)에 저장된다.
도 6의 예시적인 데이터 제공자는 로컬 메모리(606)로부터 복수의 곱의 합산을 수신한다. 데이터 제공자(612)는 복수의 곱의 합을 다른 예시적인 프로세서 엔진들(110)에, 로컬 메모리(606)에, 또는 예시적인 머신 러닝 가속기(100) 외부의 임의의 형태의 메모리에 제공할 수 있다.
프로세서 엔진 어레이(108)는 예시적인 머신 러닝 가속기(100) 내에서 주요 프로세싱 회로의 역할을 한다. 따라서, 각각의 예시적인 프로세서 엔진(110)은 압축해제된 활성화 및 가중치 데이터에 대해 MAC 연산들(610)을 수행함으로써 DNN 모델의 훈련 또는 학습에 기여한다.
도 1의 예시적인 머신 러닝 가속기(100)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독가능한 명령어들, 하드웨어 구현 상태 머신들, 및/또는 이들의 임의의 조합을 나타내는 흐름도가 도 7, 도 8, 도 9 및 도 10에 도시되어 있다. 머신 판독가능한 명령어들은 도 15와 관련하여 아래에서 논의되는 예시적인 프로세서 플랫폼(1500)에 보여진 프로세서(1512)와 같은 컴퓨터 프로세서 및/또는 프로세서 회로에 의해 실행될 하나 이상의 실행가능한 프로그램, 또는 실행가능한 프로그램의 부분(들)일 수 있다. 프로그램은 CD-ROM, 플로피 디스크, 하드 드라이브, DVD, 블루레이 디스크, 또는 프로세서(1512)에 연관된 메모리와 같은 비-일시적 컴퓨터 판독가능한 저장 매체에 저장된 소프트웨어로 구현될 수 있지만, 전체 프로그램 및/또는 그 일부는 대안적으로 프로세서(1512) 외의 디바이스에 의해 실행될 수 있고/있거나 펌웨어 또는 전용 하드웨어로 구현될 수 있다. 또한, 예시적인 프로그램이 도 7, 도 8, 도 9 및 도 10에 도시된 흐름도를 참조하여 설명되지만, 예시적인 머신 러닝 가속기(100)를 구현하는 많은 다른 방법들이 대안적으로 사용될 수 있다. 예를 들어, 블록들의 실행 순서가 변경될 수 있고/있거나 설명된 블록들의 일부가 변경, 제거 또는 결합될 수 있다. 추가적으로 또는 대안적으로, 블록들 중 임의의 것 또는 전부는 소프트웨어 또는 펌웨어를 실행하지 않고서 대응하는 동작을 수행하도록 구조화된 하나 이상의 하드웨어 회로(예를 들어, 이산 및/또는 통합 아날로그 및/또는 디지털 회로, FPGA, ASIC, 비교기, 연산 증폭기(op-amp), 로직 회로 등)에 의해 구현될 수 있다. 프로세서 회로는 상이한 네트워크 위치들에 분산될 수 있고, 및/또는 하나 이상의 디바이스에 로컬일 수 있다(예를 들어, 단일 머신 내의 멀티-코어 프로세서, 서버 랙에 걸쳐 분산된 복수의 프로세서 등).
위에서 언급된 바와 같이, 도 7, 도 8, 도 9 및 도 10의 예시적인 프로세스들은 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 컴팩트 디스크, 디지털 다목적 디스크, 캐시, 랜덤 액세스 메모리, 및/또는 정보가 임의의 지속시간 동안(예를 들어, 장기간 동안, 영구적으로, 짧은 순간 동안, 일시적인 버퍼링을 위해, 및/또는 정보 캐싱을 위해) 저장되는 임의의 다른 저장 디바이스 또는 저장 디스크와 같은 비-일시적 컴퓨터 및/또는 머신 판독가능한 매체 상에 저장된 실행가능한 명령어들(예를 들어, 컴퓨터 및/또는 머신 판독가능한 명령어들)을 사용하여 구현될 수 있다. 여기에서 사용될 때, 비-일시적 컴퓨터 판독가능한 매체라는 용어는 임의의 유형의 컴퓨터 판독가능한 저장 디바이스 및/또는 저장 디스크를 포함하고 전파 신호들을 배제하고 전송 매체를 배제하도록 명시적으로 정의된다.
"포함하는(including)" 및 "포함하는(comprising)"(및 이들의 모든 형태 및 시제)은 개방형 용어로서 사용된다. 따라서, 청구항이 임의의 종류의 청구항 기재 내에서 또는 전문(preamble)으로서 임의의 형태의 "포함하다(include)" 또는 "포함하다(comprise)"(예를 들어, 포함하다(comprises, includes), 포함하는(comprising, including), 갖는(having) 등)을 사용할 때마다, 대응하는 청구항 또는 기재의 범위를 벗어나지 않고서 추가적인 요소들, 용어들 등이 존재할 수 있음을 이해해야 한다. 여기에서 사용될 때, "적어도"라는 문구가 예를 들어 청구항의 전문에서 전환 용어로서 사용될 때, 그것은 용어 "포함하는(including)" 및 "포함하는(comprising)"이 개방형으로 종결되는 것과 동일한 방식으로 개방형으로 종결된다. 예를 들어, A, B 및/또는 C와 같은 형태로 사용될 때의 용어 "및/또는"은 (1) A 단독, (2) B 단독, (3) C 단독, (4) A와 B, (5) A와 C, (6) B와 C, (7) A와 B 및 C와 같이, A, B, C의 임의의 조합 또는 서브세트를 나타낸다. 구조들, 컴포넌트들, 항목들, 객체들 및/또는 사물들을 설명하는 맥락으로 여기에서 사용될 때, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다. 마찬가지로, 구조들, 컴포넌트들, 항목들, 객체들 및/또는 사물들을 설명하는 맥락으로 여기에서 사용될 때, "A 또는 B 중 적어도 하나"라는 문구는 라는 문구는 임의의 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다. 프로세스들, 명령어들, 액션들, 행위들 및/또는 단계들의 수행 또는 실행을 설명하는 맥락으로 여기에서 사용될 때, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다. 마찬가지로, 프로세스들, 명령어들, 액션들, 행위들 및/또는 단계들의 수행 또는 실행을 설명하는 맥락으로 여기에서 사용될 때, "A 또는 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다.
여기에서 사용될 때, 단수 참조들(예를 들어, 부정관사("a", "an"), "제1", "제2" 등)는 복수를 배제하지 않는다. 여기에서 사용될 때, 부정관사("a" 또는 "an")로 표현된 엔티티라는 용어는 하나 이상의 해당 엔티티를 나타낸다. 부정관사("a" 또는 "an"), "하나 이상" 및 "적어도 하나"는 여기서 상호교환적으로 사용될 수 있다. 또한, 개별적으로 나열되어 있지만, 복수의 수단, 요소 또는 방법 액션들은 예를 들어 단일 유닛 또는 프로세서에 의해 구현될 수 있다. 추가로, 개별 특징들이 상이한 예들 또는 청구항들에 포함될 수 있지만, 이들은 가능하게는 결합될 수 있으며, 상이한 예들 또는 청구항들에 포함된다고 해서 특징들의 조합이 실현가능하지 않고 및/또는 유리하지 않다는 것을 의미하지는 않는다.
도 7은 도 4a, 도 4c와 같은 예시적인 데이터 제어기들에서 예시적인 압축된 로컬 데이터 재사용자(4A04)를 구현하기 위해 실행될 수 있는 머신 판독가능한 명령어들을 나타내는 흐름도이다. 위에서 설명된 바와 같이, 예시적인 압축된 로컬 데이터 재사용자는 매 라운드마다 압축된 활성화 및 가중치 데이터를 데이터 제공자에게 송신하지 않을 것이다. 예시적인 프로세스(700)는 데이터 제어기가 압축된 머신 러닝 파라미터 데이터(102)를 수신할 때 시작된다. 사용된 예시적인 데이터 제어기에 따라, 압축된 머신 러닝 파라미터 데이터(102)는 로컬 메모리(204) 또는 예시적인 제로 계산 로드 스키퍼(4B04)로부터 올 수 있다(블록(702)).
예시적인 압축된 로컬 데이터 재사용자(4A04)는 현재 라운드에 대한 비트맵 데이터를 데이터 제공자(208)에 송신한다(블록(704)). 예시적인 희소성 비트맵(102B)은 압축된 활성화 및 가중치 데이터(102A)가 해당 라운드에서 송신되는지에 관계없이 각각의 라운드마다 데이터 제공자(208)에게 송신되기 때문에 프로세스의 시작에서 송신될 수 있다.
예시적인 압축된 로컬 데이터 재사용자(4A04)는 예시적인 포인터 값(502)을 0으로 초기화한다(블록(706)). 이 예에서, i의 포인터 값은 예시적인 프로세서 엔진의 로컬 메모리(204) 내의 압축된 활성화 및 가중치 데이터(102A)의 i번째 최하위 더블 워드(즉, 32비트)를 지칭한다. 일부 예들에서, 포인터 값(502)은 i번째 최상위 더블 워드를 참조하거나, 다른 데이터 단위(예를 들어, 비트, 바이트, 워드 등)를 사용하거나, 다른 기술들을 사용하여, 더 많은 양의 데이터 내에서 특정 데이터 단위를 나타낼 수 있다. 예시적인 포인터 값(502)은 예시적인 프로세서 엔진(110)이 다음 라운드에서 소비할 데이터 단위의 시작인 더블 워드가 어느 것인지를 식별한다.
예시적인 압축된 로컬 데이터 재사용자(4A04)는 n 바이트의 압축된 활성화 및 가중치 데이터(102A)를 예시적인 프로세서 엔진(110)에 로딩한다(블록(708)). n의 값은 데이터 제어기(200) 내의 로컬 메모리(204)의 양 및 유형에 의해 결정된다.
예시적인 압축된 로컬 데이터 재사용자(4A04)는 현재 라운드의 희소성 비트맵(304) 내의 하이(high) 비트의 수(즉, 1의 수)를 카운트한다(블록(710)). 도 5에서, 블록(710)의 결과 값은 개체수 카운트 값(500)으로 지칭된다. 주어진 예시적인 라운드에 대해, 개체수 카운트 값(500)은 해당 라운드에서 예시적인 프로세서 엔진(110)에 의해 실행될 데이터의 양을 나타낸다.
예시적인 압축된 로컬 데이터 재사용자(4A04)는 예시적인 포인터 값(502)을 업데이트한다(블록(712)). 이러한 업데이트는 현재 라운드의 개체수 카운트 값(500)에 현재 포인터 값을 더하고, 결과 합계를 새 위치 식별자 값과 동일하게 설정함으로써 발생한다.
예시적인 압축된 로컬 데이터 재사용자(4A04)는 현재 라운드가 마지막 라운드인지를 결정한다(블록(714)). 이러한 결정은 실행될 필요가 있는 압축된 머신 러닝 파라미터 데이터(102)의 양에 기초한다. 현재 라운드가 또한 마지막 라운드인 경우, 예시적인 프로세스(700)는 종료된다.
예시적인 압축된 로컬 데이터 재사용자(4A04)가 현재 라운드가 마지막 라운드가 아니라고 결정하면, 다음 라운드가 시작될 것이다(블록(716)). 이것은 예시적인 프로세서 엔진(110)에 의한 실행에 요구되는 데이터가 변경될 것임을 의미한다.
예시적인 압축된 로컬 데이터 재사용자(4A04)는 신규 및 현재 라운드의 개체수 카운트 값을 결정한다(블록(710)). 이 프로세스는 이전 라운드의 개체수 카운트 값과 동일하지만 상이한 희소성 비트맵(304)을 사용한다.
예시적인 압축된 로컬 데이터 재사용자(4A04)는 신규 및 현재 라운드의 희소성 비트맵을 데이터 제공자에게 송신한다(블록(718)).
예시적인 압축된 로컬 데이터 재사용자(4A04)는 위치 식별자 값과 현재 개체수 카운트 값의 합계가 예시적인 프로세서 엔진(110)에 로딩되는 데이터의 양인 n 이상인지를 결정한다(블록(720)). 720의 예시적인 합계가 n 이상인 경우, 예시적인 압축된 로컬 데이터 재사용자(4A04)는 블록(706)에서 예시적인 프로세스(700)를 계속하고, 거기서 예시적인 포인터 값을 0으로 설정한다. 이는 n 더블 워드의 새로운 데이터가 현재 라운드 동안 예시적인 프로세서 엔진(110)에 로딩될 것임을 의미한다. 720의 예시적인 합계가 n 미만인 경우, 예시적인 압축된 로컬 데이터 재사용자(4A04)는 블록(712)에서 예시적인 프로세스(700)를 계속하고, 여기서 현재 개체수 카운트 값을 현재 포인터 값에 더한다. 720의 예시적인 합계가 n 미만인 경우, 예시적인 프로세서 엔진(110)으로의 데이터 로딩은 현재 라운드에서 발생하지 않는다. 예시적인 프로세스(700)를 구현함으로써 달성된 성능 개선은 도 13a 및 도 13b에 설명된다.
도 8은 도 4b, 도 4c와 같은 제로 계산 로드 스키퍼(4B04)를 갖는 예시적인 데이터 제어기를 구현하기 위해 실행될 수 있는 머신 판독가능한 명령어들을 나타내는 흐름도이다. 예시적인 프로세스(800)는 제로 계산 로드 스키퍼(4B04)가 로컬 메모리(204)로부터 압축된 머신 러닝 파라미터 데이터(102)를 취득할 때 시작된다(블록(802)). 이러한 압축된 머신 러닝 파라미터 데이터(102)는 심층 피드 포워드, 심층 신뢰 및 심층 컨볼루션 네트워크들 등을 포함하지만 그에 제한되지 않는 심층 신경망을 이용하는 임의의 머신 러닝 프레임워크로부터 온 것일 수 있다.
예시적인 제로 계산 로드 스키퍼(4B04)는 블록(802)으로부터의 머신 러닝 파라미터 데이터(102)가 논-제로 MAC 값을 생성할 것인지를 결정한다(블록(808)). 일부 예들에서, 예시적인 제로 계산 로드 스키퍼(4B04)는 블록(802)으로부터의 희소성 비트맵 데이터(102B)로 비트단위(bitwise) AND 함수를 수행함으로써 이러한 결정을 내린다. 이러한 예에서, 비트단위 AND 함수는 활성화 비트맵 및 가중치 비트맵을 갖고, 이들 둘 다는 블록(802)으로부터 희소성 비트맵 데이터(102B)를 구성한다. 압축해제된 활성화 및 가중치 데이터의 각각의 인덱스에 대해 n AND 연산을 수행하고 결과들을 함께 합산함으로써 비트단위 AND 함수가 수행된다. 따라서, n 미만의 임의의 인덱스 i에 대해, 활성화 가중치의 i번째 비트와 가중치 데이터의 i번째 비트 둘 다가 하이 값(예를 들어, 1 값)인 경우, 비트단위 AND 연산의 결과는 논-제로일 것이다. 대안적으로, n 미만인 인덱스 i가 없는 경우- 활성화 가중치의 i번째 비트와 가중치 데이터의 i번째 비트 둘 다가 둘 다 하이 값(예를 들어, 1 값)임 -, 비트단위 AND 연산의 결과는 제로일 것이다.
대안적인 예에서, 제로 계산 로드 스키퍼(4B04)는 블록(802)으로부터의 머신 러닝 파라미터 데이터(102)가 블록(802)으로부터의 압축해제된 활성화 및 가중치 데이터로 비트단위 AND 함수를 수행함으로써 논-제로 MAC 값을 생성할 것인지를 결정한다(블록(808)). 이러한 압축해제는 공지된 제로 값 압축해제 기술들을 사용하여 발생한다.
예시적인 제로 계산 로드 스키퍼(4B04)가 압축해제된 활성화 및 가중치 데이터가 논-제로 MAC 결과들을 생성할 것이라고 결정하는 경우, 블록(802)의 압축된 활성화 및 가중치 데이터가 데이터 제공자에게 송신된다(블록(810)). 예시적인 값이 제로인 경우, 블록(810)은 스킵되고, 데이터는 현재 라운드에서 데이터 제공자에게 송신되지 않는다.
예시적인 제로 계산 로드 스키퍼(4B04)는 현재 라운드가 또한 마지막 라운드인지를 검사한다(블록(714)). 이러한 결정은 실행될 필요가 있는 압축된 머신 러닝 파라미터 데이터(102)의 양에 기초한다. 현재 라운드가 또한 마지막 라운드인 경우, 예시적인 프로세스(800)는 종료된다.
예시적인 제로 계산 로드 스키퍼(4B04)가 현재 라운드가 마지막 라운드가 아니라고 결정하면, 다음 라운드가 시작될 것이다(블록(716)). 이것은 예시적인 프로세서 엔진(110)에 의한 실행에 요구되는 데이터가 변경될 것임을 의미한다. 예시적인 프로세스(800)는 블록(802)에서 계속되고, 여기서 예시적인 제로 계산 로드 스키퍼(4B04)는 로컬 메모리(204)로부터 압축된 머신 러닝 파라미터 데이터(102)를 로딩한다.
도 9는 도 1의 예시적인 프로세서 엔진(110)을 구현하기 위해 실행될 수 있는 머신 판독가능한 명령어들을 나타내는 흐름도이다. 예시적인 프로세스(900)는 예시적인 데이터 수신기(604)가 예시적인 데이터 제어기로부터 현재 라운드에 대한 데이터를 취득하는 것으로 시작한다(블록(902)). 앞에서 논의된 바와 같이, 예시적인 프로세서 엔진(110)에 로딩된 데이터는 항상 희소성 비트맵들(102B)을 포함할 것이지만, 압축된 활성화 및 가중치 데이터(102A)를 포함하지 않을 수 있다. 각각의 라운드에서 예시적인 프로세서 엔진에 로딩되는 데이터의 정확한 내용은 사용된 예시적인 데이터 제어기의 유형에 의해 결정된다.
예시적인 데이터 수신기(604)는 압축된 활성화 및 가중치 데이터(102A)가 현재 라운드에서 수신되었는지를 결정한다(블록(904)). 압축된 활성화 및 가중치 데이터(102A)가 현재 라운드에서 수신된 경우, 예시적인 프로세서 엔진(110)은 현재 라운드의 희소성 비트맵(304) 및 현재 라운드로부터의 활성화 및 가중치 데이터를 사용하여 MAC 동작(906)을 수행할 것이다. 예시적인 데이터 수신기가 압축된 활성화 및 가중치 데이터(102A)가 현재 라운드(904)에서 수신되지 않았다고 결정하면, MAC 연산자(610)는 현재 라운드의 희소성 비트맵(304) 및 이전 라운드로부터의 활성화 및 가중치 데이터를 사용하여 MAC 동작(908)을 수행할 것이다. 예시적인 MAC 동작들(906, 908)에서, MAC 연산자(610)의 결과들은 로컬 메모리(606)에 저장된다.
예시적인 MAC 동작들(906, 908)에서, MAC 연산자(610)는 현재 라운드의 희소성 비트맵(304)을 사용하여 압축해제된 활성화 및 가중치 데이터를 획득한다. 압축해제된 활성화 및 가중치 데이터 내의 각각의 비트는 승산 및 합산 동작 둘 다에서 MAC 연산자(610)에 의해 사용된다. 이러한 예들에서, MAC 동작들(906, 908)에 사용되는 데이터의 압축해제는 공지된 제로 값 압축해제 기술들을 사용하여 발생한다. 이러한 예들에서, 압축해제된 활성화 데이터와 압축해제된 가중치 데이터 둘 다는 길이가 n이다. 일부 예들에서, n의 값은 프로세서 엔진에 의해 각각의 라운드에서 얼마나 많은 압축해제된 데이터가 소비되는지에 기초하여 변경될 수 있다. 이러한 예시적인 MAC 동작들(906, 908)은 도 10에서 더 상세하게 탐구된다.
대안적인 예에서, 예시적인 MAC 연산자는 우선 찾기 로직(find first logic)이라는 명칭의 공지된 기술을 사용할 것이다. 우선 찾기 로직은 현재 라운드의 희소성 비트맵(304)이 활성화 데이터에 대한 희소성 비트맵 및 가중치 데이터에 대한 희소성 비트맵을 포함한다는 사실을 활용한다. 우선 찾기 로직은 현재 라운드의 희소성 비트맵(304)을 사용하여, 압축된 활성화 및 가중치 데이터(102A)의 어느 부분들이 논-제로 값들을 초래할 것인지를 결정한다. 이러한 결정이 이루어진 후, 예시적인 MAC 연산자(610)는 논-제로 값을 초래하는 것으로 결정된 압축된 활성화 및 가중치 데이터(102A)의 부분들에 대해서만 동작한다.
예시적인 프로세서 엔진(110)은 현재 라운드가 또한 마지막 라운드인지를 검사한다(블록(714)). 이러한 결정은 실행될 필요가 있는 압축된 머신 러닝 파라미터 데이터(102)의 양에 기초한다. 현재 라운드가 또한 마지막 라운드인 경우, 예시적인 프로세스(900)는 종료된다.
예시적인 프로세서 엔진(110)이 현재 라운드가 마지막 라운드가 아니라고 결정하는 경우, 다음 라운드가 시작될 것이다(블록(716)). 이는 MAC 동작들(906, 908)에 요구되는 데이터가 변경될 것임을 의미한다. 예시적인 프로세스(900)는 블록(902)에서 계속되고, 여기서 예시적인 프로세서 엔진(110)은 도 4a, 도 4b, 도 4c의 예시적인 데이터 제어기로부터 신규 및 현재 라운드에 대한 데이터를 취득한다.
도 10은 2개의 값 A 및 B를 사용하여 (MAC) 동작을 구현하기 위해 실행될 수 있는 머신 판독가능한 명령어들을 나타내는 흐름도이다. 프로세스(1010)는 예시적인 MAC 연산자(610)가 둘 다의 길이가 n인 두 개의 값 A 및 B를 취득할 때 시작된다(블록(1000)). 일반적으로, MAC 연산자들은 동일한 길이의 임의의 두 개의 값을 계산할 수 있다. 예시적인 프로세스(900)에서, A 및 B는 MAC 동작들(906, 908)로부터의 압축해제된 활성화 및 압축해제된 가중치 데이터를 참조한다.
예시적인 MAC 연산자(610)는 MAC 결과 값을 0으로 초기화한다(블록(1002)). 일부 예들에서, 이 값은 정수, 부동 소수점 등과 같은 다양한 숫자 데이터 유형들로 저장될 수 있다. 일부 예들에서, 데이터 유형의 크기도 변경될 수 있다. MAC 결과는 로컬 메모리(606)에 저장된다.
예시적인 MAC 연산자(610)는 인덱스를 0의 값으로 초기화한다(블록(1004)). 이 예에서, 인덱스 값은 프로세서 엔진의 로컬 메모리(606) 내에 저장된 정수이며, 1100의 A 및 B 값들 내의 특정 비트를 나타내기 위해 사용된다. 예시적인 프로세스(1010)에서, 1104의 인덱스의 값은 i라고도 지칭된다.
예시적인 MAC 연산자(610)는 A 내의 X 바이트의 i번째 최하위 세트와 B 내의 X 바이트의 i번째 최하위 세트를 승산한다(블록(1006)). 일부 예들에서, X 값은 A 및 B의 길이 n에 따라 변경된다. 1006의 예시적인 승산 결과는 로컬 메모리(606) 내에 저장된다.
예시적인 MAC 연산자(610)는 1006의 승산 결과를 MAC 결과의 현재 값에 더하고, 새로운 MAC 결과 값을 로컬 메모리(606)에 저장한다(블록(1008)).
예시적인 MAC 연산자(610)는 A 또는 B의 데이터 중 임의의 것이 함께 승산되지 않았는지 검사한다(1010). 이것은 인덱스 값 i를 A와 B의 총 길이를 n과 비교하여 수행된다. 승산 동작에 사용되지 않은 데이터가 여전히 존재하는 경우, 예시적인 프로세서 엔진은 인덱스 값을 1 추가하고(블록(1012)), 예시적인 프로세서 엔진에 대한 머신 판독가능한 명령어들은 블록(1806)에서 계속 실행되며, 여기서 A 및 B로부터의 더 많은 데이터가 함께 승산된다. 대안적으로, A 및 B 내의 모든 데이터가 이미 함께 승산된 경우, 예시적인 프로세스(1010)가 종료되고, 로컬 메모리(606) 내의 현재 MAC 결과가 MAC 결과로서 사용된다.
도 11은 일부 예들에서, 어떻게 데이터 제어기로부터 프로세서 엔진으로의 데이터 로딩이 머신 러닝 가속기에 의한 에너지 소비에 대한 주요 기여자 중 하나인지를 보여주는 2개의 파이 차트를 포함한다. 도면은 전체 에너지 브레이크다운(1100) 및 프로세서 엔진 에너지 브레이크다운(1102) 둘 다를 갖는다.
도 11의 전체 에너지 브레이크다운(1100)은 예시적인 머신 러닝 가속기에 의해 에너지가 어떻게 소비되는지를 보여준다. 파이 차트는 예시적인 프로세서 엔진(110)을 나타내는 부분과 예시적인 머신 러닝 가속기(100)의 나머지를 나타내는 부분으로 세분된다.
도 11의 프로세서 엔진 에너지 브레이크다운(1202)은 예시적인 머신 러닝 가속기에 의해 에너지가 어떻게 소비되는지를 보여준다. 파이 차트는 예시적인 프로세서 엔진(110)으로의 데이터 로딩을 나타내는 부분, 예시적인 프로세서 엔진(110)에 의한 실행 동안 발생하는 MAC 동작(610)을 나타내는 부분, 및 예시적인 프로세서 엔진(110)에 의한 나머지 에너지 사용량을 나타내는 부분으로 세분된다.
전체 에너지 브레이크다운(1200)은 예시적인 프로세서 엔진(110) 어레이가 예시적인 머신 러닝 가속기에 의해 소비된 전체 에너지의 16.4%를 소비함을 보여준다. 프로세서 엔진 에너지 브레이크다운(1102)은 프로세서 엔진에 데이터를 로딩하는 것과 프로세서 엔진에 의한 실행 동안 MAC 연산을 수행하는 것의 조합이 프로세서 엔진에 의해 소비되는 에너지의 68.19%를 차지한다는 것을 보여준다. 이러한 값들은 이 예에서 데이터 제어기로부터 프로세서 엔진으로 데이터를 로딩하는 것과 프로세서 엔진에 의해 실행되는 MAC 동작이 머신 러닝 가속기에 의한 에너지 소비에 대한 주요 기여자 중 두 가지임을 보여준다. 일부 예들에서, 소비되는 에너지의 백분율 값이 상이할 수 있다.
도 12a는 도 4a의 예시적인 압축된 로컬 데이터 재사용자를 사용할 때 메모리 액세스가 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다(12A00). 수평 축의 데이터 밀도 %는 압축해제된 활성화 및 가중치 데이터의 예시적인 세트 내의 전체 비트 수에 대한 하이 비트(1)의 비율을 나타내는 백분율이다. 수직 축의 %메모리 액세스 감소는 주어진 예시적인 데이터 세트에 대해, 알려진 데이터 제어기(200)와 비교할 때 예시적인 데이터 제어기(4A00)를 사용하여 액세스된 프로세서 엔진의 로컬 메모리(606)가 얼마나 적은지를 보여준다.
그래프(12A00)는, 50% 미만의 데이터 밀도를 갖는 예시적인 데이터 세트들(예를 들어, 하이 비트보다 로우 비트가 더 많은 활성화 및 가중치 데이터)에 대해, 예시적인 데이터 제어기(4A00)가 공지된 데이터 제어기(200)보다 덜 빈번하게 메모리에 액세스한다는 것을 보여준다. 또한, 공지된 데이터 제어기(200)와 비교하여 예시적인 데이터 제어기(4A00)에 의한 메모리 액세스의 양은 데이터 밀도(예를 들어, 예시적인 활성화 및 가중치 데이터 내의 하이 비트들의 수)가 감소함에 따라 감소한다.
도 12b는 도 4a의 예시적인 압축된 로컬 데이터 재사용자를 사용할 때 메모리 액세스가 대안적으로 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다(12B00). 도 12a에서, 임의의 데이터 포인트에 대한 전체 비트에 대한 하이 비트의 비율은 수평 축 상의 그 위치에 의해 직접 표시되었으며, 12B00에서 각각의 데이터 포인트는 전체 비트에 대한 하이 비트의 무작위 비율을 갖는 예시적인 활성화 및 가중치 데이터를 사용한다. 이와 같이, 그래프(12B00)의 수평 축은 무작위 활성화 및 가중치 데이터의 반복이 사용됨을 나타내는 인덱스이다. 그래프(12B00) 의 수직 축인 %메모리 액세스 감소는 주어진 예시적인 데이터 세트에 대해, 동일한 데이터 세트에서 동작하는 공지된 데이터 제어기(200)와 비교할 때 예시적인 데이터 제어기(4A00)를 사용하여 액세스된 프로세서 엔진의 로컬 메모리(606)가 얼마나 적은지를 보여준다.
그래프(13B00)는 무작위 활성화 및 가중치 데이터의 25개 세트를 계산할 때, 예시적인 데이터 제어기(4A00)가 동일한 데이터 세트에 대해 동작하는 공지된 데이터 제어기(200)와 비교할 때 메모리에 평균 65% 더 적게 액세스한다는 것을 보여준다. 일부 예들에서, 액세스되는 메모리의 양은 예시적인 프로세서 엔진들의 아키텍처, 및 무작위 활성화 및 가중치 데이터의 내용에 기초하여 변경될 수 있다.
도 13a는 도 4b의 예시적인 압축된 로컬 데이터 재사용자를 사용할 때 메모리 액세스가 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다(13A00). 그래프(13A00)의 수평 축은 예시적인 활성화 데이터 변경들 내에서 데이터 밀도(즉, 전체 비트에 대한 하이 비트의 비율)가 어떻게 변하는지를 보여준다. '무작위'로 표시된 플로팅된 선(13A02)은 무작위 가중치 데이터를 갖는 예시적인 데이터 세트를 나타낸다. '고정'으로 표시된 플로팅된 선(13A04)은 임의의 주어진 데이터 포인트에 대해, 예시적인 가중치 데이터 내의 전체 비트에 대한 하이 비트의 비율이 예시적인 활성화 데이터 내의 전체 비트에 대한 하이 비트의 비율과 정확히 동일한 예시적인 데이터 세트들을 나타낸다. 그래프(13A00)의 수직 축인 %메모리 액세스 감소는 주어진 예시적인 데이터 세트에 대해, 동일한 데이터 세트에서 동작하는 공지된 데이터 제어기(200)와 비교할 때 예시적인 데이터 제어기(4B00)를 사용하여 액세스된 프로세서 엔진의 로컬 메모리(606)가 얼마나 적은지를 보여준다.
그래프(13A00)는 무작위 가중치 데이터 세트들(13A02) 및 고정 가중치 데이터 세트들(13A04) 둘 다에 대해, 예시적인 데이터 제어기(4B00)를 사용하는 메모리 액세스가 동일한 데이터 세트에 대해 동작하는 공지된 데이터 제어기(200)와 비교할 때 감소된다. 또한, 동일한 데이터 세트에 대해 동작하는 공지된 데이터 제어기(200)와 비교하여 예시적인 데이터 제어기(4B00)에 의한 메모리 액세스의 양은 데이터 밀도(예를 들어, 예시적인 활성화 및 가중치 데이터 내의 하이 비트의 수)가 감소함에 따라 감소한다.
도 13b는 도 4b의 예시적인 압축된 로컬 데이터 재사용자를 사용할 때 메모리 액세스가 대안적으로 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다(13B00). 그래프(13B00)는 그래프(12B00)와 동일한 방식으로 구조화되지만, 그래프(13B00)로부터의 무작위 활성화 및 가중치 데이터는 예시적인 압축된 로컬 데이터 재사용자(4A04)가 아니라 예시적인 제로 계산 로드 스키퍼(4B04)를 갖는 예시적인 머신 러닝 가속기(100)에 의해 계산된다.
그래프(13B00)는 무작위 활성화 및 가중치 데이터의 150개 세트를 계산할 때, 예시적인 데이터 제어기(4B00)가 동일한 데이터 세트에 대해 동작하는 공지된 데이터 제어기(200)와 비교할 때 메모리에 평균 22% 더 적게 액세스한다는 것을 보여준다. 일부 예들에서, 액세스되는 메모리의 양은 예시적인 프로세서 엔진들의 아키텍처, 및 무작위 활성화 및 가중치 데이터의 내용에 기초하여 변경될 수 있다.
도 14는 도 4c의 예시적인 압축된 로컬 데이터 재사용자를 사용할 때 메모리 액세스가 어떻게 감소될 수 있는지를 보여주는 그래프를 포함한다(1400). 수평 축에서, 그래프(1400)는 라운드 내에서 발생할 수 있는 로딩 사이클들의 수가 변화하는 다양한 예시적인 파이프라인 아키텍처들을 보여준다. 수직 축에서, 그래프(1400)는 압축해제된 활성화 및 가중치 데이터의 데이터 밀도에 따라 라운드 변경을 완료하는 데 필요한 계산 사이클들의 수가 어떻게 변하는지를 보여준다.
그래프(1400)의 수평 및 수직 축은 그리드를 만들기 위해 확장될 수 있으며, 여기서 각각의 교점은 주어진 라운드 내에서 고유한 수의 로딩 사이클 및 고유한 수의 계산 사이클을 갖는 예시적인 프로세서 엔진 및 데이터 세트를 나타낸다. 주어진 교점에 대한 로딩 사이클들의 수 및 계산 사이클들의 수는 여기서 교점의 구성으로 지칭된다. 그래프(1400)의 각각의 교점에서, 원 그래프는 백분율을 나타내며, 여기서 백분율은 공지된 데이터 제어기(200)를 사용하지만 동일한 교점의 구성에서 동일한 데이터를 실행하는 데 필요한 계산 사이클들의 수와 비교할 때, 예시적인 데이터 제어기(4C00)를 사용하는 해당 교차점의 구성에 필요한 계산 사이클들이 얼마나 적은지를 나타낸다. 그래프(1400)를 생성하는 데 사용된 예에 대해, 이 백분율은 87.5%만큼 높을 수 있다. 일부 예들에서, 백분율 값들은 예시적인 활성화 및 가중치 데이터의 내용에 기초하여 변경될 수 있다.
도 15는 도 1의 장치를 구현하기 위해 도 7, 도 8, 도 9 및 도 10의 명령어들을 실행하도록 구조화된 예시적인 프로세서 플랫폼(1500)의 블록도이다. 프로세서 플랫폼(1500)은 예를 들어 서버, 개인용 컴퓨터, 워크스테이션, 셀프 러닝 머신(예를 들어, 신경망), 또는 임의의 다른 유형의 컴퓨팅 디바이스일 수 있다.
도시된 예의 프로세서 플랫폼(1500)은 프로세서(1512)를 포함한다. 도시된 예의 프로세서(1512)는 하드웨어이다. 예를 들어, 프로세서(1512)는 임의의 원하는 제품군 또는 제조업체로부터의 하나 이상의 집적 회로, 로직 회로, 마이크로프로세서, GPU, DSP 또는 제어기에 의해 구현될 수 있다. 하드웨어 머신 러닝 가속기는 반도체 기반(예를 들어, 실리콘 기반) 디바이스일 수 있다. 이 예에서, 머신 러닝 가속기는 데이터 제어기(104), NOC(106), 및 프로세서 엔진 어레이(108)를 구현한다.
도시된 예의 프로세서(1512)는 로컬 메모리(1513)(예를 들어, 캐시)를 포함한다. 도시된 예의 프로세서(1512)는 버스(1518)를 통해 휘발성 메모리(1514) 및 비휘발성 메모리(1516)를 포함하는 메인 메모리와 통신한다. 휘발성 메모리(1514)는 동기식 동적 랜덤 액세스 메모리(SDRAM), 동적 랜덤 액세스 메모리(DRAM), RAMBUS® 동적 랜덤 액세스 메모리(RDRAM®) 및/또는 임의의 다른 유형의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비휘발성 메모리(1516)는 플래시 메모리 및/또는 임의의 다른 원하는 유형의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(1514, 1516)에 대한 액세스는 메모리 제어기에 의해 제어된다.
도시된 예의 프로세서 플랫폼(1500)은 또한 인터페이스 회로(1520)를 포함한다. 인터페이스 회로(1520)는 이더넷 인터페이스, USB(Universal Serial Bus), Bluetooth® 인터페이스, NFC(Near Field Communication) 인터페이스, 및/또는 PCI 익스프레스 인터페이스와 같은 임의의 유형의 인터페이스 표준에 의해 구현될 수 있다.
도시된 예에서, 하나 이상의 입력 디바이스(1522)는 인터페이스 회로(1520)에 연결된다. 입력 디바이스(들)(1522)는 사용자가 데이터 및/또는 커맨드들을 프로세서(1512)에 입력하는 것을 허용한다. 입력 디바이스(들)는 예를 들어 오디오 센서, 마이크로폰, 카메라(정지 또는 비디오), 키보드, 버튼, 마우스, 터치 스크린, 트랙 패드, 트랙볼, 아이소포인트 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스(1524)는 또한 도시된 예의 인터페이스 회로(1520)에 연결된다. 출력 디바이스들(1024)은, 예를 들어 디스플레이 디바이스들(예를 들어, 발광 다이오드(LED), 유기 발광 다이오드(OLED), 액정 디스플레이(LCD), 음극선관 디스플레이(CRT), IPS(In-Place Switching) 디스플레이, 터치 스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커에 의해 구현될 수 있다. 따라서, 도시된 예의 인터페이스 회로(1520)는 전형적으로 그래픽 드라이버 카드, 그래픽 드라이버 칩 및/또는 그래픽 드라이버 프로세서를 포함한다.
도시된 예의 인터페이스 회로(1520)는 또한 송신기, 수신기, 송수신기, 모뎀, 주거용 게이트웨이, 무선 액세스 포인트, 및/또는 네트워크(1526)를 통한 외부 머신들(예를 들어, 임의의 종류의 컴퓨팅 디바이스들)과의 데이터 교환을 용이하게 하는 네트워크 인터페이스와 같은 통신 디바이스를 포함한다. 통신은 예를 들어 이더넷 연결, 디지털 가입자 회선(DSL) 연결, 전화선 연결, 동축 케이블 시스템, 위성 시스템, 현장 무선 시스템(line-of-site wireless system), 셀룰러 전화 시스템 등을 통한 것일 수 있다.
도시된 예의 프로세서 플랫폼(1500)은 또한 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(1528)를 포함한다. 이러한 대용량 저장 디바이스들(1528)의 예는 플로피 디스크 드라이브, 하드 드라이브 디스크, 컴팩트 디스크 드라이브, 블루레이 디스크 드라이브, RAID(redundant array of independent disks) 시스템, 및 DVD(digital versatile disk) 드라이브를 포함한다.
도 7, 도 8, 도 9 및 도 10의 머신 실행가능한 명령어들(1532)은 대용량 저장 디바이스(1528), 휘발성 메모리(1514), 비휘발성 메모리(1516), 및/또는 CD 또는 DVD와 같은 이동식 비-일시적 컴퓨터 판독가능한 저장 매체에 저장될 수 있다.
도 16은 도 15의 프로세서 회로(1500)의 예시적인 구현의 블록도이다. 이 예에서, 도 5의 프로세서 회로(1500)는 마이크로프로세서(1600)에 의해 구현된다. 예를 들어, 마이크로프로세서(1600)는 CPU, DSP, GPU, XPU 등과 같은 멀티코어 하드웨어 회로를 구현할 수 있다. 임의의 수의 예시적인 코어(1602)(예를 들어, 1 코어)를 포함할 수 있긴 하지만, 본 예의 마이크로프로세서(1600)는 N개의 코어를 포함하는 멀티코어 반도체 디바이스이다. 마이크로프로세서(1600)의 코어(1602)는 머신 판독가능한 명령어들을 실행하기 위해 독립적으로 동작할 수 있거나 협력할 수 있다. 예를 들어, 펌웨어 프로그램, 임베디드 소프트웨어 프로그램, 또는 소프트웨어 프로그램에 대응하는 머신 코드는 코어들(1602) 중 하나에 의해 실행될 수 있거나 코어들(1602) 중 복수의 코어에 의해 동시에 또는 상이한 시간들에 실행될 수 있다. 일부 예들에서, 펌웨어 프로그램, 임베디드 소프트웨어 프로그램, 또는 소프트웨어 프로그램에 대응하는 머신 코드는 스레드들로 분할되고 코어들(1602) 중 2개 이상에 의해 병렬로 실행된다. 소프트웨어 프로그램은 도 7, 도 8, 도 9, 및 도 10의 흐름도에 의해 표현된 머신 판독가능한 명령어들 및/또는 동작들의 일부 또는 전부에 대응할 수 있다.
코어들(1602)은 예시적인 버스(1604)에 의해 통신할 수 있다. 일부 예들에서, 버스(1604)는 코어들(1602) 중 하나(들)에 연관된 통신을 실행하기 위해 통신 버스를 구현할 수 있다. 예를 들어, 버스(1604)는 I2C(Inter-Integrated Circuit) 버스, SPI(Serial Peripheral Interface) 버스, PCI 버스 또는 PCIe 버스 중 적어도 하나를 구현할 수 있다. 추가적으로 또는 대안적으로, 버스(1604)는 임의의 다른 유형의 컴퓨팅 또는 전기 버스를 구현할 수 있다. 코어들(1602)은 예시적인 인터페이스 회로(1606)에 의해 하나 이상의 외부 디바이스로부터 데이터, 명령어들 및/또는 신호들을 획득할 수 있다. 코어들(1602)은 인터페이스 회로(1606)에 의해 데이터, 명령어들 및/또는 신호들을 하나 이상의 외부 디바이스에 출력할 수 있다. 이 예의 코어들(1602)이 예시적인 로컬 메모리(1620)(예를 들어, L1 데이터 캐시 및 L1 명령어 캐시로 분할될 수 있는 레벨 1(L1) 캐시)를 포함하지만, 마이크로프로세서(1600)는 또한 데이터 및/또는 명령어들에 대한 고속 액세스를 위해 코어들(예를 들어, 레벨 2(L2_cache))에 의해 공유될 수 있는 예시적인 공유 메모리(1610)를 포함한다. 데이터 및/또는 명령어들은 공유 메모리(1610)에 대한 기입 및/또는 그로부터의 판독에 의해 전송(예를 들어, 공유)될 수 있다. 코어들(1602) 각각의 로컬 메모리(1620) 및 공유 메모리(1610)는 캐시 메모리 및 메인 메모리(예를 들어, 도 15의 메인 메모리(1514, 1516))의 복수의 레벨을 포함하는 저장 디바이스들의 계층의 일부일 수 있다. 전형적으로, 계층구조에서의 메모리의 상위 레벨들은 메모리의 하위 레벨들보다 낮은 액세스 시간을 나타내고 작은 저장 용량을 갖는다. 캐시 계층구조의 다양한 레벨들에서의 변경들은 캐시 일관성 정책에 의해 관리(예를 들어, 조정)된다.
각각의 코어(1602)는 CPU, DSP, GPU 등, 또는 임의의 다른 유형의 하드웨어 회로로 지칭될 수 있다. 각각의 코어(1602)는 제어 유닛 회로(1614), 산술 및 로직(AL) 회로(때때로 ALU로 지칭됨)(1616), 복수의 레지스터(1618), L1 캐시(1620), 및 예시적인 버스(1622)를 포함한다. 다른 구조들이 존재할 수 있다. 예를 들어, 각각의 코어(1602)는 벡터 유닛 회로, SIMD(single instruction multiple data) 유닛 회로, 로딩/저장 유닛(LSU) 회로, 분기/점프 유닛 회로, 부동 소수점 유닛(FPU) 회로 등을 포함할 수 있다. 제어 유닛 회로(1614)는 대응하는 코어(1602) 내에서 데이터 이동을 제어(예를 들어, 조정)하도록 구조화된 반도체 기반 회로들을 포함한다. AL 회로(1616)는 대응하는 코어(1602) 내의 데이터에 대해 하나 이상의 수학적 및/또는 로직 연산들을 수행하도록 구조화된 반도체 기반 회로들을 포함한다. 일부 예들의 AL 회로(1616)는 정수 기반 연산들을 수행한다. 다른 예들에서, AL 회로(1616)는 또한 부동 소수점 연산들을 수행한다. 또 다른 예들에서, AL 회로(1616)는 정수 기반 연산들을 수행하는 제1 AL 회로, 및 부동 소수점 연산들을 수행하는 제2 AL 회로를 포함할 수 있다. 일부 예들에서, AL 회로(1616)는 산술 로직 유닛(ALU)으로 지칭될 수 있다. 레지스터들(1618)은 대응하는 코어(1602)의 AL 회로(1616)에 의해 수행된 동작들 중 하나 이상의 결과들과 같은 데이터 및/또는 명령어들을 저장하기 위한 반도체 기반 구조물들이다. 예를 들어, 레지스터들(1618)은 벡터 레지스터(들), SIMD 레지스터(들), 범용 레지스터(들), 플래그 레지스터(들), 세그먼트 레지스터(들), 머신 특정 레지스터(들), 명령어 포인터 레지스터(들), 제어 레지스터(들), 디버그 레지스터(들), 메모리 관리 레지스터(들), 머신 체크 레지스터(들) 등을 포함할 수 있다. 레지스터들(1618)은 도 16에 도시된 바와 같이 뱅크에 배열될 수 있다. 대안적으로, 레지스터들(1618)은 액세스 시간을 단축하기 위해 코어(1602) 전체에 분산되는 것을 포함하는 임의의 다른 배열, 포맷 또는 구조로 조직될 수 있다. 버스(1604)는 I2C 버스, SPI 버스, PCI 버스, 또는 PCIe 버스 중 적어도 하나를 구현할 수 있다.
각각의 코어(1602), 및/또는 보다 일반적으로 마이크로프로세서(1600)는 위에 도시되고 설명된 것들에 대한 추가적인 및/또는 대안적인 구조물들을 포함할 수 있다. 예를 들어, 하나 이상의 클록 회로, 하나 이상의 전원 공급 장치, 하나 이상의 전력 게이트, 하나 이상의 캐시 홈 에이전트(cache home agent)(CHA), 하나 이상의 수렴형/공통 메시 스톱(common mesh stop)(CMS), 하나 이상의 시프터(예를 들어, 배럴 시프터(들)) 및/또는 다른 회로가 있을 수 있다. 마이크로프로세서(1600)는 하나 이상의 패키지에 포함된 하나 이상의 집적 회로(IC)에서, 위에서 설명된 구조물들을 구현하기 위해 상호연결된 다수의 트랜지스터를 포함하도록 제조된 반도체 디바이스이다. 프로세서 회로는 하나 이상의 가속기를 포함하고 및/또는 그와 협력할 수 있다. 일부 예들에서, 가속기들은 범용 프로세서에 의해 수행될 수 있는 것보다 더 빠르고 및/또는 효율적으로 특정 작업들을 수행하기 위해 로직 회로에 의해 구현된다. 가속기들의 예들은 여기에 논의된 것들과 같은 ASIC들 및 FPGA들을 포함한다. GPU 또는 다른 프로그래밍가능한 디바이스들이 또한 가속기일 수 있다. 가속기들은 프로세서 회로에 탑재되고, 프로세서 회로와 동일한 칩 패키지 내에 있고, 및/또는 프로세서 회로와는 별개의 하나 이상의 패키지에 있을 수 있다.
도 17은 도 15의 프로세서 회로(1500)의 다른 예시적인 구현의 블록도이다. 이 예에서, 프로세서(1512)는 FPGA 회로(1700)에 의해 구현된다. FPGA 회로(1700)는 예를 들어 다르게는 대응하는 머신 판독가능한 명령어들을 실행하는 도 16의 예시적인 마이크로프로세서(1600)에 의해 수행될 수 있는 동작들을 수행하기 위해 사용될 수 있다. 그러나, 일단 구성되면, FPGA 회로(1700)는 하드웨어에서 머신 판독가능한 명령어들을 인스턴스화하고, 따라서 종종 대응하는 소프트웨어를 실행하는 범용 마이크로프로세서에 의해 수행될 수 있는 것보다 더 빠르게 동작들을 실행할 수 있다.
더 구체적으로, 위에서 설명된 도 166의 마이크로프로세서(1600)(이는 도 7, 도 8, 도 9 및 도 10의 흐름도들에 의해 표현된 머신 판독가능한 명령어들의 일부 또는 전부를 실행하도록 프로그래밍될 수 있지만 일단 제조되고 나면 상호연결부들 및 로직 회로가 고정되는 범용 디바이스임)와 대조적으로, 도 17의 예의 FPGA 회로(1700)는 예를 들어 도 7, 도 8, 도 9 및 도 10의 흐름도들에 의해 표현된 머신 판독가능한 명령어들의 일부 또는 전부를 인스턴스화하기 위해 제조 후에 상이한 방식들로 구성 및/또는 상호연결될 수 있는 상호연결부 및 로직 회로를 포함한다. 특히, FPGA(1700)는 로직 게이트들, 상호연결부들 및 스위치들의 어레이로 생각될 수 있다. 스위치들은 로직 게이트들이 상호연결부들에 의해 상호연결되는 방식을 변경하여, (FPGA 회로(1700)가 재프로그래밍되지 않은 경우 및 그것이 재프로그래밍될 때까지) 하나 이상의 전용 로직 회로를 효과적으로 형성하도록 프로그래밍될 수 있다. 구성된 로직 회로들은 로직 게이트들이 상이한 방식들로 협력하여, 입력 회로에 의해 수신된 데이터에 대해 상이한 동작들을 수행할 수 있도록 한다. 이러한 동작들은 도 7, 도 8, 도 9 및 도 10의 흐름도들에 의해 표현된 소프트웨어의 일부 또는 전부에 대응할 수 있다. 이와 같이, FPGA 회로(1700)는 ASIC과 유사한 전용 방식으로 해당 소프트웨어 명령어들에 대응하는 동작들을 수행하기 위한 전용 로직 회로들로서, 도 7, 도 8, 도 9 및 도 10의 흐름도에 의해 표현된 머신 판독가능한 명령어들의 일부 또는 전부를 효과적으로 인스턴스화하도록 구조화될 수 있다. 따라서, FPGA 회로(1700)는 도 7, 도 8, 도 9 및 도 10의 머신 판독가능한 명령어들의 일부 또는 전부에 대응하는 동작들을, 범용 마이크로프로세서보다 그것을 실행할 수 있는 것보다 빠르게 수행할 수 있다.
도 17의 예에서, FPGA 회로(1700)는 Verilog와 같은 하드웨어 기술 언어(HDL)에 의해 최종 사용자에 의해 프로그래밍(및/또는 1회 이상 재프로그래밍)되도록 구조화된다. 도 6의 FPGA 회로(1700)는 예시적인 구성 회로(1704) 및/또는 외부 하드웨어(예를 들어, 외부 하드웨어 회로)(1706)로/로부터 데이터를 획득 및/또는 출력하기 위한 예시적인 입력/출력(I/O) 회로(1702)를 포함한다. 예를 들어, 구성 회로(1704)는 FPGA 회로(1700) 또는 그 일부(들)를 구성하기 위해 머신 판독가능한 명령어들을 획득할 수 있는 인터페이스 회로를 구현할 수 있다. 일부 그러한 예들에서, 구성 회로(1704)는 사용자, 머신(예를 들어, 명령어들을 생성하기 위해, 인공 지능/머신 러닝(Artificial Intelligence/Machine Learning)(AI/ML) 모델을 구현할 수 있는 하드웨어 회로(예를 들어, 프로그래밍된 또는 전용 회로)) 등으로부터 머신 판독가능한 명령어들을 획득할 수 있다. 일부 예들에서, 외부 하드웨어(1706)는 도 16의 마이크로프로세서(1600)를 구현할 수 있다. FPGA 회로(1700)는 또한 예시적인 로직 게이트 회로(1708)의 어레이, 복수의 예시적인 구성가능한 상호연결부(1710), 및 예시적인 저장 회로(1712)를 포함한다. 로직 게이트 회로(1708) 및 상호연결부들(1710)은 도 7, 도 8, 도 9 및 도 10의 머신 판독가능한 명령어들의 적어도 일부에 대응할 수 있는 하나 이상의 동작, 및 다른 원하는 동작들을 인스턴스화하도록 구성가능하다. 도 17에 도시된 로직 게이트 회로(1708)는 그룹들 또는 블록들로 제조된다. 각각의 블록은 로직 회로들로 구성될 수 있는 반도체 기반 전기적 구조물들을 포함한다. 일부 예들에서, 전기적 구조물들은 로직 회로들에 대한 기본 빌딩 블록을 제공하는 로직 게이트들(예를 들어, And 게이트들, Or 게이트들, Nor 게이트들 등)을 포함한다. 전기적으로 제어가능한 스위치들(예를 들어, 트랜지스터들)은 원하는 동작들을 수행하기 위한 회로들을 형성하기 위한 전기적 구조물들 및/또는 로직 게이트들의 구성을 가능하게 하기 위해 각각 의 로직 게이트 회로(1708) 내에 존재한다. 로직 게이트 회로(1708)는 룩업 테이블(LUT), 레지스터(예를 들어, 플립플롭 또는 래치), 멀티플렉서 등과 같은 다른 전기적 구조물들을 포함할 수 있다.
도시된 예의 상호연결부들(1710)은 전기적으로 제어가능한 스위치들(예를 들어, 트랜지스터들)을 포함할 수 있는 전도성 경로들, 트레이스들, 비아들 또는 그와 유사한 것이며, 그것의 상태는 원하는 로직 회로들을 프로그래밍하기 위해 하나 이상의 로직 게이트 회로(1708) 사이의 하나 이상의 연결을 활성화 또는 비활성화하도록 프로그래밍(예를 들어, HDL 명령 언어를 사용)에 의해 변경될 수 있다.
도시된 예의 저장 회로(1712)는 대응하는 로직 게이트들에 의해 수행된 동작들 중 하나 이상의 결과(들)를 저장하도록 구조화된다. 저장 회로(1712)는 레지스터들 또는 그와 유사한 것에 의해 구현될 수 있다. 도시된 예에서, 저장 회로(1712)는 액세스를 용이하게 하고 실행 속도를 증가시키기 위해 로직 게이트 회로(1708) 사이에 분산된다.
도 17의 예시적인 FPGA 회로(1700)는 또한 예시적인 전용 동작 회로(1714)를 포함한다. 이 예에서, 전용 동작 회로(1714)는 현장에서 이러한 기능들을 프로그래밍할 필요를 피하기 위해, 일반적으로 사용되는 기능들을 구현하도록 호출될 수 있는 특수 목적 회로(1716)를 포함한다. 이러한 특수 목적 회로(1716)의 예들은 메모리(예를 들어, DRAM) 제어기 회로, PCIe 제어기 회로, 클록 회로, 송수신기 회로, 메모리, 및 승산기-누산기 회로를 포함한다. 다른 유형의 특수 목적 회로가 존재할 수 있다. 일부 예들에서, FPGA 회로(1700)는 또한 예시적인 CPU(1720) 및/또는 예시적인 DSP(1722)와 같은 예시적인 범용 프로그래밍가능한 회로(1718)를 포함할 수 있다. 추가적으로 또는 대안적으로, 다른 동작을 수행하도록 프로그래밍될 수 있는 GPU, XPU 등과 같이 다른 범용 프로그래밍가능한 회로(1718)가 존재할 수 있다.
도 5 및 도 6은 도 4의 프로세서 회로(412)의 2개의 예시적인 구현을 도시하지만, 많은 다른 접근들이 고려된다. 예를 들어, 위에서 언급된 바와 같이, 최신 FPGA 회로는 도 17의 예시적인 CPU(1720) 중 하나 이상과 같은 온보드 CPU를 포함할 수 있다. 따라서, 도 15의 프로세서 회로(1500)는 도 16의 예시적인 마이크로프로세서(1600) 및 도 17의 예시적인 FPGA 회로(1700)를 결합함으로써 추가적으로 구현될 수 있다. 일부 이러한 하이브리드 예들에서, 도 7, 도 8, 도 9 및 도 10의 흐름도들에 의해 표현되는 머신 판독가능한 명령어들의 제1 부분은 도 16의 코어들(1602) 중 하나 이상에 의해 실행될 수 있고, 도 7, 도 8, 도 9 및 도 10의 흐름도들에 의해 표현되는 머신 판독가능한 명령어들의 제2 부분은 도 17의 FPGA 회로(1700)에 의해 실행될 수 있다.
일부 예들에서, 도 5의 프로세서 회로(1500)는 하나 이상의 패키지 내에 있을 수 있다. 예를 들어, 도 16의 프로세서 회로(1600) 및/또는 도 17의 FPGA 회로(1700)는 하나 이상의 패키지 내에 있을 수 있다. 일부 예들에서, XPU는 하나 이상의 패키지 내에 있을 수 있는 도 15의 프로세서 회로(1500)에 의해 구현될 수 있다. 예를 들어, XPU는 하나의 패키지에 CPU, 다른 패키지에 DSP, 또 다른 패키지에 GPU, 또 다른 패키지에 FPGA를 포함할 수 있다.
도 15의 예시적인 컴퓨터 판독가능한 명령어들(1532)과 같은 소프트웨어를 제3자들에게 배포하기 위한 예시적인 소프트웨어 배포 플랫폼(1805)을 도시하는 블록도가 도 18에 도시되어 있다. 예시적인 소프트웨어 배포 플랫폼(1805)은 소프트웨어를 저장하고 다른 컴퓨팅 디바이스들에 전송할 수 있는 임의의 컴퓨터 서버, 데이터 설비, 클라우드 서비스 등에 의해 구현될 수 있다. 제3자들은 소프트웨어 배포 플랫폼을 소유 및/또는 운영하는 엔티티의 고객들일 수 있다. 예를 들어, 소프트웨어 배포 플랫폼을 소유 및/또는 운영하는 엔티티는 도 15의 예시적인 컴퓨터 판독가능한 명령어들(1532)과 같은 소프트웨어의 개발자, 판매자 및/또는 라이선스 제공자일 수 있다. 제3자들은 사용 및/또는 재판매 및/또는 하위 라이선스를 위해 소프트웨어를 구매 및/또는 라이선스하는 소비자, 사용자, 소매업체, OEM 등일 수 있다. 도시된 예에서, 소프트웨어 배포 플랫폼(1805)은 하나 이상의 서버 및 하나 이상의 저장 디바이스를 포함한다. 저장 디바이스들은 컴퓨터 판독가능한 명령어들(1532)을 저장하며, 이는 위에서 설명된 것과 같은 도 2, 도 4a, 도 4b, 도 4c, 도 6의 예시적인 머신 판독가능한 명령어들(206, 4A02, 4B02, 4C02, 608)에 대응할 수 있다. 예시적인 소프트웨어 배포 플랫폼(1805)의 하나 이상의 서버는 네트워크(1810)와 통신하고 있으며, 이는 임의의 하나 이상의 인터넷 및/또는 위에서 설명된 예시적인 네트워크들 중 임의의 것에 대응할 수 있다. 일부 예들에서, 하나 이상의 서버는 상업적 거래의 일부로서 요청 당사자에게 소프트웨어를 전송하라는 요청에 응답한다. 소프트웨어의 배송, 판매 및/또는 라이선스에 대한 지불은 소프트웨어 배포 플랫폼의 하나 이상의 서버 및/또는 제3자 지불 엔티티를 통해 처리될 수 있다. 서버들은 구매자들 및/또는 라이선스 제공자들이 소프트웨어 배포 플랫폼(1805)으로부터 컴퓨터 판독가능한 명령어들(1532)을 다운로드할 수 있게 한다. 예를 들어, 도 2, 도 4a, 도 4b, 도 4c, 도 6의 예시적인 머신 판독가능한 명령어들(206, 4A02, 4B02, 4C02, 608)에 대응할 수 있는 소프트웨어는 예시적인 프로세서 플랫폼(1500)에 다운로드될 수 있고, 이는 머신 러닝 가속기를 구현하기 위해 컴퓨터 판독가능한 명령어들(1532)을 실행하는 것이다. 일부 예들에서, 소프트웨어 배포 플랫폼(1805)의 하나 이상의 서버는 개선, 패치, 업데이트 등이 최종 사용자 디바이스들의 소프트웨어에 배포 및 적용될 것을 보장하기 위해, 소프트웨어(예를 들어, 도 15의 예시적인 컴퓨터 판독가능한 명령어들(1532))에 대한 업데이트를 주기적으로 제안, 전송 및/또는 강제한다.
전술한 것으로부터, 주어진 작업을 수행하기 위해 머신 러닝 가속기에 의해 소비되는 에너지의 양을 감소시키는 예시적인 방법들, 장치들 및 제조 물품들이 개시되었다는 것이 이해될 것이다. 개시된 방법들, 장치들 및 제조 물품들은 압축된 활성화 및 가중치 데이터를 매 라운드마다 프로세서 엔진에 로딩하지 않음으로써, 및/또는 유용한 압축된 머신 러닝 파라미터 데이터만을 프로세서 엔진에 로딩함으로써 효율성을 개선한다. 따라서, 개시된 방법들, 장치들 및 제조 물품들은 컴퓨터의 기능의 하나 이상의 개선(들)에 관한 것이다.
머신 러닝 가속기 내에서 데이터를 로딩하기 위한 예시적인 방법들, 장치들, 시스템들 및 제조 물품들이 본 명세서에 개시된다. 추가 예 및 이들의 조합은 다음을 포함한다:
예 1은 가속기에 데이터를 로딩하기 위한 장치를 포함하고, 장치는 메모리, 및 프로세서 회로를 포함하고, 프로세서 회로는: 중앙 프로세싱 유닛, 그래픽 프로세싱 유닛, 또는 디지털 신호 프로세서 중 적어도 하나 - 중앙 프로세싱 유닛, 그래픽 프로세싱 유닛, 또는 디지털 신호 프로세서 중 적어도 하나는 프로세서 회로 내에서 데이터 이동을 제어하기 위한 제어 회로, 명령어들에 대응하는 하나 이상의 제1 동작을 수행하기 위한 산술 및 로직 회로, 및 장치 내에 명령어들, 하나 이상의 제1 동작의 결과를 저장하기 위한 하나 이상의 레지스터를 가짐 - ; 필드 프로그래밍가능한 게이트 어레이(FPGA) - FPGA는 로직 게이트 회로, 복수의 구성가능한 상호연결부, 및 저장 회로를 포함하고, 로직 게이트 회로 및 상호연결부들은 하나 이상의 제2 동작을 수행하고, 저장 회로는 하나 이상의 제2 동작의 결과를 저장함 - ; 또는 하나 이상의 제3 동작을 수행하기 위한 로직 게이트 회로를 포함하는 주문형 집적 회로(ASIC) 중 하나 이상을 포함하고, 프로세서 회로는 제1 동작, 제2 동작, 또는 제3 동작 중 적어도 하나를 수행하여: 압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하기 위한 데이터 제공자 회로; 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하기 위한 프로세서 엔진 회로; 및 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하기 위한 압축된 로컬 데이터 재사용자 회로 - 프로세서 엔진 회로는 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 제2 섹션을 사용하여 머신 러닝 동작을 실행하는 것임 - 를 인스턴스화한다.
예 2는 예 1의 장치를 포함하고, 여기서 후속 로딩 동작 동안, 데이터 제공자 회로는 프로세서 엔진에서 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하는 것이다.
예 3은 예 1의 장치를 포함하고, 여기서 머신 러닝 동작은 승산-및-누적(MAC) 동작이다.
예 4는 예 3의 장치를 포함하고, 여기서 MAC 동작은 압축해제된 활성화 및 가중치 데이터를 이용하여 실행된다.
예 5는 예 3의 장치를 포함하고, 여기서 MAC은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직을 사용하여 실행된다.
예 6은 예 1의 장치를 포함하고, 여기서 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지의 결정은 포인터 값 및 희소성 비트맵에 기초한다.
예 7은 명령어들을 포함하는 적어도 하나의 비-일시적 머신 판독가능한 매체를 포함하고, 명령어들은 실행될 때, 적어도 하나의 프로세서로 하여금, 적어도: 압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하게 하고; 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하게 하고; 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하게 하고; 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 제2 섹션을 사용하여 머신 러닝 동작을 실행하게 한다.
예 8은 예 7의 적어도 하나의 비-일시적 머신 판독가능한 매체를 포함하고, 여기서 명령어들은 실행될 때, 적어도 하나의 프로세서로 하여금, 후속 로딩 동작 동안, 프로세서 엔진에서 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하게 한다.
예 9는 예 7의 적어도 하나의 비-일시적 머신 판독가능한 매체를 포함하고, 여기서 머신 러닝 동작은 승산-및-누적(MAC) 동작이다.
예 10은 예 9의 적어도 하나의 비-일시적 머신 판독가능한 매체를 포함하고, 여기서 MAC 동작은 압축해제된 활성화 및 가중치 데이터를 이용하여 실행된다.
예 11은 예 9의 적어도 하나의 비-일시적 머신 판독가능한 매체를 포함하고, 여기서 MAC은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직을 사용하여 실행된다.
예 12는 예 7의 적어도 하나의 비-일시적 머신 판독가능한 매체를 포함하고, 여기서 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지의 결정은 포인터 값 및 희소성 비트맵에 기초한다.
예 13은 가속기에 데이터를 로딩하기 위한 장치를 포함하고, 장치는 압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하기 위한 수단; 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하기 위한 수단; 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하기 위한 수단 - 실행하기 위한 수단은 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 제2 섹션을 사용하여 머신 러닝 동작을 실행하는 것임 - 을 포함한다.
예 14는 예 13의 장치를 포함하고, 여기서 로딩하기 위한 수단은, 후속 로딩 동작 동안 프로세서 엔진에서 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하는 것을 더 포함한다.
예 15는 예 13의 장치를 포함하고, 여기서 실행하기 위한 수단은 승산-및-누적(MAC) 동작을 실행하는 것이다.
예 16은 예 15의 장치를 포함하고, 여기서 실행하기 위한 수단은 압축해제된 활성화 및 가중치 데이터를 이용하는 것이다.
예 17은 예 15의 장치를 포함하고, 여기서 MAC 동작을 실행하기 위한 수단은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직을 사용한다.
예 18은 예 13의 장치를 포함하고, 여기서 결정하기 위한 수단은 포인터 값 및 희소성 비트맵에 기초하여 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하는 것이다.
예 19는 가속기에 데이터를 로딩하는 방법을 포함하고, 방법은 압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하는 단계; 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하는 단계; 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하는 단계; 및 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 제2 섹션을 사용하여 머신 러닝 동작을 실행하는 단계를 포함한다.
예 20은 예 19의 방법을 포함하고, 방법은 프로세서 엔진에서 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하는 단계를 더 포함한다.
예 21은 예 19의 방법을 포함하고, 여기서 머신 러닝 동작은 승산-및-누적(MAC) 동작이다.
예 22는 예 21의 방법을 포함하고, 여기서 MAC 동작은 압축해제된 활성화 및 가중치 데이터를 이용한다.
예 23은 예 21의 방법을 포함하고, 여기서 MAC 동작은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직을 사용한다.
예 24는 예 19의 방법을 포함하고, 여기서 제2 섹션이 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지의 결정은 포인터 값 및 희소성 비트맵에 기초한다.
특정한 예시적인 방법들, 장치들 및 제조 물품들이 여기에 개시되었지만, 이 특허의 적용 범위는 이에 제한되지 않는다. 반대로, 본 특허는 본 특허의 청구항들의 범위에 정당하게 속하는 모든 방법들, 장치들 및 제조 물품들을 포함한다.
이하의 청구항들은 이 참조에 의해 이러한 상세한 설명에 통합되며, 각각의 청구항은 그 자체로 본 개시내용의 별도의 실시예로 독립한다.
100: 머신 러닝 가속기
102: 압축된 머신 러닝 파라미터 데이터
102A: 압축된 활성화 및 가중치 데이터
102B: 희소성 비트맵
104: 데이터 제어기
106: NOC
108: 프로세서 엔진 어레이
110: 프로세서 엔진

Claims (24)

  1. 가속기에 데이터를 로딩하기 위한 장치로서,
    메모리; 및
    프로세서 회로
    를 포함하고, 상기 프로세서 회로는:
    중앙 프로세싱 유닛, 그래픽 프로세싱 유닛, 또는 디지털 신호 프로세서 중 적어도 하나 - 상기 중앙 프로세싱 유닛, 그래픽 프로세싱 유닛, 또는 디지털 신호 프로세서 중 적어도 하나는 상기 프로세서 회로 내에서 데이터 이동을 제어하기 위한 제어 회로, 명령어들에 대응하는 하나 이상의 제1 동작을 수행하기 위한 산술 및 로직 회로, 및 상기 장치 내에 상기 명령어들, 상기 하나 이상의 제1 동작의 결과를 저장하기 위한 하나 이상의 레지스터를 가짐 - ;
    필드 프로그래밍가능한 게이트 어레이(Field Programmable Gate Array)(FPGA) - 상기 FPGA는 로직 게이트 회로, 복수의 구성가능한 상호연결부, 및 저장 회로를 포함하고, 상기 로직 게이트 회로 및 상호연결부들은 하나 이상의 제2 동작을 수행하고, 상기 저장 회로는 상기 하나 이상의 제2 동작의 결과를 저장함 - ; 또는
    하나 이상의 제3 동작을 수행하기 위한 로직 게이트 회로를 포함하는 주문형 집적 회로(Application Specific Integrate Circuitry)(ASIC)
    중 하나 이상을 포함하고,
    상기 프로세서 회로는 상기 하나 이상의 제1 동작, 상기 하나 이상의 제2 동작, 또는 상기 하나 이상의 제3 동작 중 적어도 하나를 수행하여:
    압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하기 위한 데이터 제공자 회로;
    상기 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하기 위한 프로세서 엔진 회로; 및
    제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하기 위한 압축된 로컬 데이터 재사용자 회로(compressed local data re-user circuitry) - 상기 프로세서 엔진 회로는 상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 상기 제2 섹션을 사용하여 머신 러닝 동작을 실행하는 것임 -
    를 인스턴스화하는, 장치.
  2. 제1항에 있어서, 후속 로딩 동작 동안, 상기 데이터 제공자 회로는 상기 프로세서 엔진에서 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하는 것인, 장치.
  3. 제1항에 있어서, 상기 머신 러닝 동작은 승산-및-누적(multiply-and-accumulate)(MAC) 동작인, 장치.
  4. 제1항 또는 제3항에 있어서, 상기 MAC 동작은 압축해제된 활성화(activation) 및 가중치 데이터를 이용하여 실행되는, 장치.
  5. 제3항에 있어서, 상기 MAC은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직(find first logic)을 사용하여 실행되는, 장치.
  6. 제1항에 있어서, 상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지의 결정은 포인터 값 및 희소성 비트맵에 기초하는, 장치.
  7. 명령어들을 포함하는 적어도 하나의 머신 판독가능한 매체로서,
    상기 명령어들은 실행될 때, 적어도 하나의 프로세서로 하여금, 적어도:
    압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하게 하고;
    상기 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하게 하고;
    제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하게 하고;
    상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 상기 제2 섹션을 사용하여 머신 러닝 동작을 실행하게 하는,
    적어도 하나의 머신 판독가능한 매체.
  8. 제7항에 있어서, 상기 명령어들은 실행될 때, 상기 적어도 하나의 프로세서로 하여금, 후속 로딩 동작 동안, 상기 프로세서 엔진에서 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하게 하는, 적어도 하나의 머신 판독가능한 매체.
  9. 제7항에 있어서, 상기 머신 러닝 동작은 승산-및-누적(MAC) 동작인, 적어도 하나의 머신 판독가능한 매체.
  10. 제7항 또는 제9항에 있어서, 상기 MAC 동작은 압축해제된 활성화 및 가중치 데이터를 이용하여 실행되는, 적어도 하나의 머신 판독가능한 매체.
  11. 제9항에 있어서, 상기 MAC은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직을 사용하여 실행되는, 적어도 하나의 머신 판독가능한 매체.
  12. 제7항에 있어서, 상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지의 결정은 포인터 값 및 희소성 비트맵에 기초하는, 적어도 하나의 머신 판독가능한 매체.
  13. 가속기에 데이터를 로딩하기 위한 장치로서,
    압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하기 위한 수단;
    상기 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하기 위한 수단;
    제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하기 위한 수단 - 상기 실행하기 위한 수단은 상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 상기 제2 섹션을 사용하여 머신 러닝 동작을 실행하는 것임 -
    을 포함하는 장치.
  14. 제13항에 있어서, 상기 로딩하기 위한 수단은, 후속 로딩 동작 동안 상기 프로세서 엔진에서 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하는 것을 더 포함하는, 장치.
  15. 제13항에 있어서, 상기 실행하기 위한 수단은 승산-및-누적(MAC) 동작을 실행하는 것인, 장치.
  16. 제13항 또는 제15항에 있어서, 상기 실행하기 위한 수단은 압축해제된 활성화 및 가중치 데이터를 이용하는 것인, 장치.
  17. 제15항에 있어서, 상기 MAC 동작을 실행하기 위한 수단은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직을 사용하는, 장치.
  18. 제13항에 있어서, 상기 결정하기 위한 수단은 포인터 값 및 희소성 비트맵에 기초하여 상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하는 것인, 장치.
  19. 가속기에 데이터를 로딩하는 방법으로서,
    압축된 머신 러닝 파라미터 데이터의 제1 섹션, 및 압축된 머신 러닝 파라미터 데이터의 추가량을 프로세서 엔진에 로딩하는 단계;
    상기 압축된 머신 러닝 파라미터 데이터의 제1 섹션을 사용하여 머신 러닝 동작을 실행하는 단계;
    제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지를 결정하는 단계; 및
    상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재할 때 상기 제2 섹션을 사용하여 머신 러닝 동작을 실행하는 단계
    를 포함하는 방법.
  20. 제19항에 있어서, 상기 프로세서 엔진에서 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 포함되지 않은 압축된 머신 러닝 파라미터 데이터의 제3 섹션을 로딩하는 단계를 더 포함하는 방법.
  21. 제19항에 있어서, 상기 머신 러닝 동작은 승산-및-누적(MAC) 동작인, 방법.
  22. 제19항 또는 제21항에 있어서, 상기 MAC 동작은 압축해제된 활성화 및 가중치 데이터를 이용하는, 방법.
  23. 제21항에 있어서, 상기 MAC 동작은 압축된 활성화 및 가중치 데이터, 및 우선 찾기 로직을 사용하는, 방법.
  24. 제19항에 있어서, 상기 제2 섹션이 상기 압축된 머신 러닝 파라미터 데이터의 추가량에 존재하는지의 결정은 포인터 값 및 희소성 비트맵에 기초하는, 방법.
KR1020220038789A 2021-06-25 2022-03-29 머신 러닝 가속기 내에서 데이터를 로딩하기 위한 방법들 및 장치들 KR20230000943A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/359,392 2021-06-25
US17/359,392 US11922178B2 (en) 2021-06-25 2021-06-25 Methods and apparatus to load data within a machine learning accelerator

Publications (1)

Publication Number Publication Date
KR20230000943A true KR20230000943A (ko) 2023-01-03

Family

ID=78081025

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220038789A KR20230000943A (ko) 2021-06-25 2022-03-29 머신 러닝 가속기 내에서 데이터를 로딩하기 위한 방법들 및 장치들

Country Status (4)

Country Link
US (2) US11922178B2 (ko)
EP (1) EP4109345A1 (ko)
KR (1) KR20230000943A (ko)
CN (1) CN115526301A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024185925A1 (ko) * 2023-03-06 2024-09-12 주식회사 유엑스팩토리 컨볼루션 신경망 시스템

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503507B2 (en) * 2017-08-31 2019-12-10 Nvidia Corporation Inline data inspection for workload simplification
US20230161557A1 (en) * 2021-11-24 2023-05-25 Taiwan Semiconductor Manufacturing Company, Ltd. Compute-in-memory devices and methods of operating the same
US11941248B2 (en) * 2021-12-13 2024-03-26 Xilinx, Inc. Compression of sparse tensors

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9153230B2 (en) * 2012-10-23 2015-10-06 Google Inc. Mobile speech recognition hardware accelerator
US20150193971A1 (en) * 2014-01-03 2015-07-09 Motorola Mobility Llc Methods and Systems for Generating a Map including Sparse and Dense Mapping Information
US20160005128A1 (en) * 2014-07-03 2016-01-07 Elsen, Inc. Systems and methods of applying high performance computational techniques to analysis and execution of financial strategies
TWI680409B (zh) * 2017-07-08 2019-12-21 英屬開曼群島商意騰科技股份有限公司 適用於人工神經網路之矩陣及向量相乘的方法
US20190087713A1 (en) * 2017-09-21 2019-03-21 Qualcomm Incorporated Compression of sparse deep convolutional network weights
US11961000B2 (en) * 2018-01-22 2024-04-16 Qualcomm Incorporated Lossy layer compression for dynamic scaling of deep neural network processing
US10970080B2 (en) * 2018-02-08 2021-04-06 Marvell Asia Pte, Ltd. Systems and methods for programmable hardware architecture for machine learning
US11586417B2 (en) 2018-09-28 2023-02-21 Qualcomm Incorporated Exploiting activation sparsity in deep neural networks
US11342933B2 (en) * 2018-12-14 2022-05-24 Advanced Micro Devices, Inc. Lossy significance compression with lossy restoration
US11907827B2 (en) 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
US20200134417A1 (en) 2019-12-24 2020-04-30 Intel Corporation Configurable processor element arrays for implementing convolutional neural networks
US11586601B2 (en) * 2020-02-05 2023-02-21 Alibaba Group Holding Limited Apparatus and method for representation of a sparse matrix in a neural network
US11804851B2 (en) 2020-03-27 2023-10-31 Intel Corporation Methods, systems, articles of manufacture, and apparatus to decode zero-value-compression data vectors
US11928176B2 (en) * 2020-07-30 2024-03-12 Arm Limited Time domain unrolling sparse matrix multiplication system and method

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024185925A1 (ko) * 2023-03-06 2024-09-12 주식회사 유엑스팩토리 컨볼루션 신경망 시스템

Also Published As

Publication number Publication date
US20240231839A1 (en) 2024-07-11
US11922178B2 (en) 2024-03-05
US20210326144A1 (en) 2021-10-21
EP4109345A1 (en) 2022-12-28
CN115526301A (zh) 2022-12-27

Similar Documents

Publication Publication Date Title
KR20230000943A (ko) 머신 러닝 가속기 내에서 데이터를 로딩하기 위한 방법들 및 장치들
US20240022259A1 (en) Methods, systems, articles of manufacture, and apparatus to decode zero-value-compression data vectors
US20220012592A1 (en) Methods and apparatus to perform weight and activation compression and decompression
CN112149792A (zh) 用于优化机器学习模型的执行的方法和设备
US20220222030A1 (en) Methods and apparatus to improve screen sharing based on identification of irrelevant video frames from interactive context
US20220012578A1 (en) Methods, apparatus, and articles of manufacture to increase utilization of neural network (nn) accelerator circuitry for shallow layers of an nn by reformatting one or more tensors
US20240036763A1 (en) Methods, apparatus, and articles of manufacture to increase data reuse for multiply and accumulate (mac) operations
TW202301203A (zh) 用於類神經網路加速器的稀疏張量儲存的方法與設備
KR20240124800A (ko) 스토리지 엘리먼트 포인터들을 사용하여 머신 러닝 연산을 수행하기 위한 방법들 및 장치들
CN116266093A (zh) 基于用户交互的内容保真度调整
US20220011848A1 (en) Methods and apparatus to control an aggressiveness of display panel power savings and fidelity
CN117616428A (zh) 用于在资源受约束的图像识别应用中执行并行双批自蒸馏的方法和装置
US20230325185A1 (en) Methods and apparatus to accelerate matrix operations using direct memory access
JP2022186595A (ja) 再構成可能なサンプラを備えたベイジアン演算ユニット並びにそれを動作させる方法及び装置
CN115856773A (zh) 调整用于源定位的到达时间差距离值的方法和装置
US20230100152A1 (en) Federated learning accelerators and related methods
CN116382884A (zh) 生成要被卸载到加速器电路的命令列表的方法和装置
US20220113781A1 (en) Methods and apparatus for bi-directional control of computing unit frequency
WO2024065530A1 (en) Methods and apparatus to perform artificial intelligence-based sparse computation based on hybrid pattern and dynamic encoding
WO2024108382A1 (en) Methods and apparatus to perform many-to-one feature distillation in neural networks
US20240331705A1 (en) Methods and apparatus to model speaker audio
WO2024036429A1 (en) Paillier cryptosystem with improved performance
WO2024124365A1 (en) Methods and apparatus to perform convert operations using direct memory access
US20240348798A1 (en) Palette intra prediction for video encoding
US20220091895A1 (en) Methods and apparatus to determine execution cost