KR20210013707A - 메타데이터를 사용하여 신경망에서 기회주의적 로드 밸런싱을 위한 방법 및 시스템 - Google Patents

메타데이터를 사용하여 신경망에서 기회주의적 로드 밸런싱을 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20210013707A
KR20210013707A KR1020207035787A KR20207035787A KR20210013707A KR 20210013707 A KR20210013707 A KR 20210013707A KR 1020207035787 A KR1020207035787 A KR 1020207035787A KR 20207035787 A KR20207035787 A KR 20207035787A KR 20210013707 A KR20210013707 A KR 20210013707A
Authority
KR
South Korea
Prior art keywords
metadata
neurons
neural network
neuron
scheduler
Prior art date
Application number
KR1020207035787A
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 KR20210013707A publication Critical patent/KR20210013707A/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/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
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • 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/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • 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/5083Techniques for rebalancing the load in a distributed system
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Image Processing (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

메타데이터를 사용하여 심층 신경망(DNN)에서 기회주의적 로드 밸런싱을 위한 방법 및 시스템. DNN 시스템의 주어진 구조적, 기능적 또는 계산적 양태에 대해 대표 계산 비용이 캡처, 획득 또는 결정된다. 대표 계산 비용은 DNN 시스템의 주어진 구조적, 기능적 또는 계산적 양태에 대한 메타데이터로 구현된다. 일 구현에서, 계산된 계산 비용은 메타데이터로 구현된다. 스케줄러는 실행 준비가 된 후속 레이어들에 뉴런들이 있는지 여부를 검출한다. 스케줄러는 메타데이터 및 뉴런 가용성을 사용하여 컴퓨팅 리소스와 사용 가능한 리소스에 걸쳐 스케줄링 및 로드 밸런싱을 수행한다.

Description

메타데이터를 사용하여 신경망에서 기회주의적 로드 밸런싱을 위한 방법 및 시스템
관련 출원에 대한 상호 참조
본 출원은 2018년 6월 26일에 출원된 미국 정규 특허 출원 번호 제16/019,374호의 이익을 주장하며, 그 내용은 본원에 참조로 포함된다.
심층 신경망(deep neural networks, DNN)은 많은 인공 지능(artificial intelligence) 및 기계 학습 어플리케이션에 사용된다. 이러한 DNN은 명목상 입력 레이어(layer)와 출력 레이어 사이에 여러 숨겨진 레이어들을 포함한다. 최근 DNN은 이미지, 비디오 및 음성 인식 처리 및 분석에서 다양한 예측 문제들에 대한 용량과 정확도를 높이는 레이어들을 사용하기 시작하였다. 그러나 DNN이 깊을 수록 성능 문제가 점점 더 커진다.
예를 들어, DNN들은 계산 비용이 매우 많이 든다. 신경망(neural network) 대한 훈련 작업을 수행하는 데 며칠, 몇 주 또는 몇 달이 걸리는 것은 드문 일이 아니다. 이러한 DNN들은 대규모 병렬이며 효과적으로 해결하려면 대용량 처리(large throughput) 디바이스들이 필요하다. 그러나 현재 대부분의 DNN들은 레이어들 간에 직렬화된다. 많은 DNN들에는 이러한 레이어들이 100개 이상 있으므로 병렬 처리가 증가하는 데 상당한 제한이 있다.
"레이어-융합(layer-fusion)"이라는 일반적인 기술 중 하나는 둘 이상의 레이어들을 동시 계산에 노출하는 것을 허용하지만 이를 위해서는 명시적인 프로그래밍이 필요하다. 프로그래머는 레이어들 전반에 걸쳐 전체 계산에 컴파일러(compiler)를 노출한다. 그러나 레이어-융합은 엄격하지 않고 기회주의적(opportunistic)이며 현재 어떤 컴파일러도 후속 레이어들이 더 일찍 계산을 시작하도록 보증하기에 충분한 계산 요구를 가질 수 있음을 식별 할 수 있는 기능이 없다. 또한 이 접근 방식은 어렵다. 프로그래머는 컴파일러를 레이어들에 걸쳐 전체 계산에 노출해야 한다. 이것은 프로그래밍하기 매우 어려운 것으로 간주되며 직관적이지 않다(즉, 레이어들의 추상 개념이 프로세스에서 손실될 수 있음). 고도로 최적화된 라이브러리들에서 레이어 융합의 특수 구현을 제외하고 레이어는 암시적으로 직렬화된다.
최적화된 경우에도, 이 네트워크는 실질적으로 다른 연결성, 네트워크 아키텍처, 다른 하드웨어 기능 등을 가진 다른 많은 네트워크들로 이전할 수 없다. 또한, 최적화 프로세스는 오류가 발생하기 쉽고 시간이 많이 걸리며 구현 비용이 많이 든다. 또한, 여러 레이어들이 융합된 경우에도, 전체 계산 그래프가 표시되지 않고 융합된 레이어들만 노출된다. 마지막으로, 가지치기(pruning)와 같은 런타임(runtime) 동안 신경망에 대한 동적 편집은 이 접근 방식에 의해 영향을 받을 수 없다. 가지치기는 가지치기된 레이어의 계산 강도를 변경하기 때문에 이것은 중요하다.
첨부된 도면과 관련하여 예시로서 주어진 다음 설명으로부터 보다 상세한 이해를 얻을 수 있으며, 여기서:
도 1은 특정 구현에 따른 예시적인 디바이스의 블록도이고;
도 2는 특정 구현에 따른 도 1의 디바이스의 블록도이고;
도 3은 특정 구현에 따른 이기종 시스템 아키텍처(Heterogeneous System Architecture, HSA) 플랫폼의 블록도이고;
도 4는 특정 구현에 따른 큐(queue) 구조를 예시하는 예시적인 시스템의 블록도이고;
도 5a는 특정 구현에 따른 커맨드 패킷 처리의 예시적인 블록도이고;
도 5b는 특정 구현에 따른 커맨드 패킷 및 간접 버퍼(indirect buffer, IB) 커맨드 패킷을 포함하는 예시적인 요소를 도시하고;
도 5c는 특정 구현에 따른 예시적인 간접 버퍼이고;
도 6은 심층 신경망(deep neural network, DNN)의 두 개의 대표적인 레이어들을 예시하고;
도 7은 특정 구현에 따른 DNN 시스템에서 계산 커널(computation kernel)을 사용하여 계산 비용을 결정하기 위한 예시적인 블록도이며; 그리고
도 8은 특정 구현에 따른 메타데이터를 사용하여 DNN에서 기회주의적 로드 밸런싱을 위한 방법에 대한 순서도이다.
본원에서는 메타데이터를 사용하여 심층 신경망(DNN)에서 기회주의적 로드 밸런싱(load balancing)을 위한 방법 및 시스템을 설명한다. DNN 계산의 병렬성은 전체 계산 그래프 또는 적어도 그 일부를 하드웨어 스케줄러, 컴파일러, 디스패처 또는 운영 체제(O/S) 스케줄러(통칭 "스케줄러")에 노출함으로써 완전히 영향을 받게 된다. 일 구현에서, 계산 커널, 뉴런, 계층 또는 기타 아키텍처, 기능 또는 계산 측면, DNN의 부분, 특성 및/또는 특징은 메타데이터로 태깅되어, 스케줄러가 계산 복잡성을 보다 효과적이고 지능적으로 예측하고 기존 리소스들에 걸쳐 로드 밸런싱을 할 수 있다. 이러한 메타데이터는 계산 커널의 계산 복잡성에 대한 기본 정보를 제공하여 정확한 로드 밸런싱을 허용한다. 예를 들어, 규칙성과 빈도로 반복되는 계산을 나타내는 컨볼루션 신경망(convolutional neural networks)은 특히 개선된 로드 밸런싱 및 작업 스케줄링에 적합하다. 그러나 이 방법은 규칙적인 계산 패턴을 가진 다른 유형의 네트워크에 적용할 수 있다. 구현에서, 이 방법은 데이터 흐름과 유사한 아키텍처에 적용할 수 있으며, 전체 계산 그래프를 명시적으로 노출하면 DNN에 내재된 병렬성을 완전히 영향을 줄 수 있다.
도 1은 본 개시의 하나 이상의 특징들이 구현될 수 있는 예시적인 디바이스(100)의 블록도이다. 디바이스(100)는 예를 들어 컴퓨터, 게임 디바이스, 핸드 헬드 디바이스, 셋톱 박스, 텔레비전, 휴대폰 또는 태블릿 컴퓨터를 포함한다. 디바이스(100)는 프로세서(102), 메모리(104), 저장소(106), 하나 이상의 입력 디바이스들(108) 및 하나 이상의 출력 디바이스들(110)을 포함한다. 디바이스(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함한다. 디바이스(100)는 도 1에 도시되지 않은 추가 구성 요소들을 포함하는 것으로 이해된다.
다양한 대안들에서, 프로세서(102)는 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU), 동일한 다이에 위치한 CPU 및 GPU, 또는 하나 이상의 프로세서 코어들을 포함하고, 여기서 각 프로세서 코어는 CPU 또는 GPU일 수 있다. 다양한 대안들에서, 메모리(104)는 프로세서(102)와 동일한 다이에 위치하거나 프로세서(102)와 별도로 위치된다. 메모리(104)는 휘발성 또는 비-휘발성 메모리, 예를 들어 랜덤 액세스 메모리(RAM), 동적 RAM 또는 캐시를 포함한다.
저장소(106)는 고정 또는 이동식 저장소, 예를 들어, 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광 디스크 또는 플래시 드라이브를 포함한다. 입력 디바이스(108)는, 제한 없이, 키보드, 키패드, 터치 스크린, 터치 패드, 감지기, 마이크로폰, 가속도계, 자이로스코프, 생체인식 스캐너 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호 전송 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다. 출력 디바이스(110)는, 제한없이, 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 조명들, 안테나 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호 전송 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스(108)와 통신하고, 프로세서(102)가 입력 디바이스(108)로부터 입력을 수신하도록 허용한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스(110)와 통신하고, 프로세서(102)가 출력 디바이스(110)에 출력을 전송하도록 허용한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적 구성 요소들이고, 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않는 경우 디바이스(100)는 동일한 방식으로 동작할 것이라는 점에 유의한다. 출력 드라이버(116)는 디스플레이 디바이스(118)에 결합된 가속 처리 디바이스("APD")(116)를 포함한다. APD는 프로세서(102)로부터 컴퓨팅 커맨드 및 그래픽 렌더링 커맨드를 수용하고, 이러한 컴퓨팅 및 그래픽 렌더링 커맨드를 처리하고, 디스플레이를 위해 디스플레이 디바이스(118)에 픽셀 출력을 제공한다.
아래에서 더 상세히 설명되는 바와 같이, APD(116)는 단일-명령-다중-데이터(single-instruction-multiple-data, "SIMD") 패러다임에 따라 계산을 수행하기 위한 하나 이상의 병렬 처리 유닛들을 포함한다. 그러므로, 비록 다양한 기능들이 APD(116)에 의해 또는 이와 함께 수행되는 것으로 본원에서 설명되지만, 다양한 대안들에서, APD(116)에 의해 수행되는 것으로 설명된 기능들은 추가적으로 또는 대안적으로 일부 경우에 호스트 프로세서(예를 들어, 프로세서(102))에 의해 구동되지 않는 그리고 일부 구현에서 디스플레이 디바이스(118)에(그래픽) 출력을 제공하는 유사한 기능을 갖는 다른 컴퓨팅 디바이스에 의해 수행된다. 예를 들어, SIMD 패러다임에 따라 처리 작업을 수행하는 임의의 처리 시스템은 본원에 설명된 기능을 수행할 수 있다고 고려된다. 대안적으로, SIMD 패러다임에 따라 처리 작업을 수행하지 않는 컴퓨팅 시스템이 본원에 설명된 기능을 수행하는 것으로 고려된다.
도 2는 디바이스(100)의 블록도로서, APD(116)에서 처리 작업의 실행과 관련된 추가 세부 사항을 예시한다. 프로세서(102)는, 시스템 메모리(104)에서, 프로세서(102)에 의한 실행을 위한 하나 이상의 제어 로직 모듈들을 유지한다. 제어 로직 모듈들은 운영 체제(120), 커널 모드 드라이버(122) 및 어플리케이션(126)을 포함한다. 이들 제어 로직 모듈들은 프로세서(102) 및 APD(116)의 동작의 다양한 특징들을 제어한다. 예를 들어, 운영 체제(120)는 하드웨어와 직접 통신하고 프로세서(102)에서 실행되는 다른 소프트웨어를 위해 하드웨어에 대한 인터페이스를 제공한다. 커널 모드 드라이버(122)는 예를 들어 APD(116)의 다양한 기능들에 액세스하기 위해 프로세서(102)에서 실행되는 소프트웨어(예를 들어, 어플리케이션(126))에 어플리케이션 프로그래밍 인터페이스("API")를 제공함으로써 APD(116)의 동작을 제어한다. 커널 모드 드라이버(122)는 또한 APD(116)의 구성 요소들(아래에서 더 자세히 논의되는 SIMD 유닛들(138)과 같은)을 처리함으로써 실행을 위해 프로그램을 컴파일링하는 적시(just-in-time) 컴파일러를 포함한다.
APD(116)는 병렬 처리 및/또는 비-순차 처리에 적합한 그래픽 동작들 및 비-그래픽 동작들과 같은 선택된 기능들에 대한 명령 및 프로그램을 실행한다. APD(116)는 프로세서(102)로부터 수신된 커맨드에 기초하여 픽셀 연산, 기하학적 계산, 디스플레이 디바이스(118)에 이미지를 렌더링하는 것과 같은 그래픽 파이프라인 동작들을 실행하기 위해 사용된다. APD(116)는 또한 프로세서(102)로부터 수신된 커맨드에 기초하여 비디오, 물리 시뮬레이션, 전산 유체 역학 또는 기타 작업과 관련된 동작들과 같은 그래픽 동작들과 직접 관련되지 않은 컴퓨팅 처리 동작들을 실행한다.
APD(116)는 SIMD 패러다임에 따라 병렬 방식으로 프로세서(102)의 요청에서 동작을 수행하는 하나 이상의 SIMD 유닛들(138)을 포함하는 컴퓨팅 유닛(132)을 포함한다. SIMD 패러다임은 다수의 처리 요소들이 단일 프로그램 제어 흐름 유닛과 프로그램 카운터(program counter)를 공유하여 동일한 프로그램을 실행하지만 다른 데이터로 해당 프로그램을 실행할 수 있는 패러다임이다. 일 예시에서, 각 SIMD 유닛(138)은 16개의 레인(lane)들을 포함하고, 각 레인은 SIMD 유닛(138)의 다른 레인들과 동시에 동일한 명령을 실행하지만 다른 데이터로 해당 명령을 실행한다. 모든 레인들이 주어진 명령을 실행할 필요가 없는 경우에는 예측과 함께 레인들을 끌 수 있다. 예측은 또한 다른(divergent) 제어 흐름으로 프로그램을 실행하는 데 사용될 수 있다. 보다 구체적으로, 제어 흐름이 개별 레인에 의해 수행되는 계산을 기반으로 하는 조건부 브랜치들(branches) 또는 기타 명령들이 있는 프로그램의 경우, 현재 실행되지 않는 제어 흐름 경로에 대응하는 레인들의 예측 및 다른 제어 흐름 경로의 직렬 실행을 통해 임의의 제어 흐름이 가능하다. 일 구현에서, 컴퓨팅 유닛들(132) 각각은 로컬 L1 캐시를 가질 수 있다. 일 구현에서, 다수의 컴퓨팅 유닛들(132)은 L2 캐시를 공유한다.
컴퓨팅 유닛(132)에서 실행의 기본 유닛은 작업-항목(work-item)이다. 각 작업-항목은 특정 레인에서 병렬로 실행될 프로그램의 단일 인스턴스 생성(instantiation)을 나타낸다. 작업-항목들은 단일 SIMD 처리 유닛(138)에서 "웨이브프론트(wavefront)"로서 동시에 실행될 수 있다. 하나 이상의 웨이브프론트들이 동일한 프로그램을 실행하도록 지정된 작업-항목들의 모음을 포함하는 "작업 그룹(work group)"에 포함된다. 작업 그룹은 작업 그룹을 구성하는 웨이브프론트들 각각을 실행함으로써 실행된다. 대안들에서, 웨이브프론트들은 단일 SIMD 유닛(138)에서 순차적으로 실행되거나 또는 다른 SIMD 유닛들(138)에서 부분적으로 또는 완전히 병렬로 실행된다. 웨이브프론트는 단일 SIMD 유닛(138)에서 동시에 실행될 수 있는 작업 항목들의 가장 큰 집합으로 생각될 수 있다. 그러므로, 프로세서(102)로부터 수신된 커맨드가 단일 SIMD 유닛(138)에서 동시에 실행될 수 없을 정도로 특정 프로그램이 병렬화 될 것임을 나타내는 경우, 그 프로그램은 두 개 이상의 SIMD 유닛들(138)로 병렬화되거나 동일한 SIMD 유닛(138)으로 직렬화되는(또는 필요에 따라 병렬화 및 직렬화 모두) 두 개 이상의 웨이브프론트들 분할된다. 스케줄러(136)는 상이한 컴퓨팅 유닛들(132) 및 SIMD 유닛들(138) 상의 다양한 웨이브프론트들을 스케줄링하는 것과 관련된 동작들을 수행한다.
컴퓨팅 유닛(132)에 의해 제공되는 병렬성(parallelism)은 픽셀 값 계산, 정점 변환 및 기타 그래픽 동작과 같은 그래픽 관련 동작에 적합하다. 따라서, 일부 경우에, 프로세서(102)로부터 그래픽 처리 커맨드를 수용하는 그래픽 파이프라인(134)은 병렬 실행을 위해 컴퓨팅 작업을 컴퓨팅 유닛들(132)에 제공한다.
컴퓨팅 유닛(132)은 또한 그래픽과 관련이 없거나 그래픽 파이프라인(134)의 "정상" 동작의 일부로서 수행되지 않는(예를 들어, 그래픽 파이프라인(134)의 동작을 위해 수행되는 처리를 보충하기 위해 수행되는 사용자 지정(custom) 동작) 계산 작업을 수행하는데 사용된다. 프로세서(102)에서 실행되는 어플리케이션(126) 또는 다른 소프트웨어는 실행을 위해 그러한 계산 작업을 정의하는 프로그램을 APD(116)로 전송한다.
도 3은 도 1 및 도 2의 디바이스에 부분적으로 기초한 이기종 시스템 아키텍처(Heterogeneous System Architecture, HSA) 플랫폼(300)을 도시한다. HSA 플랫폼(300)은 시스템 메모리(350)에 연결되거나 그와 통신하는(통칭 "연결된") HSA 가속 처리 유닛(Accelerated Processing Unit, APU)(310)를 포함한다. HSA APU(310)는 멀티-코어 CPU(320), 다중 HSA 컴퓨팅 유닛들(H-CU)(332, 334, 336)이 있는 GPU(330) 및 HSA 메모리 관리 유닛(HMMU 또는 HSA MMU)(340)을 포함한다. CPU(320)는 도 3에 도시된 코어들(322, 324, 326, 328)를 갖는, 임의의 수의 코어들을 포함한다. GPU(330)는 세 개가 도 3에 도시되어 있지만 임의의 수의 H-CU들을 포함한다. HSA가 개시된 구현에서 논의되고 제시되는 동안, 본 시스템 및 방법은 동종 또는 이종 시스템에서 활용될 수 있다. 시스템 메모리(350)는 코히어런트(coherent) 시스템 메모리(352) 및 비-코히어런트 시스템 메모리(357) 중 하나 또는 둘 다를 포함한다.
HSA(300)는 기본 컴퓨팅 요소들에 대한 통합 뷰(unified view)를 제공한다. HSA(300)를 사용하면 프로그래머는 각각의 최고 속성들을 활용하면서 CPU들(320)을 원활하게 통합하고, GPU들(330)이 있는 레이턴시 컴퓨팅 유닛들이라고도 지칭되며, 또한 처리량 컴퓨팅 유닛으로도 지칭되는 어플리케이션을 기록할 수 있다. HSA(300)는 프로그래머가 GPU(330)의 병렬 프로세서를 기존의 다중-스레드 CPU(320)에 대한 피어(peer)로 활용할 수 있도록 한다. 피어 디바이스는 다른 디바이스와 동일한 메모리 코히어런시(coherency) 도메인을 공유하는 HSA 디바이스로 정의된다.
HSA(300)의 디바이스들은 도 4 내지 도 6을 참조하여 자세히 설명되는 것처럼 큐(queue)들을 사용하여 서로 통신한다. 큐들은 HSA 아키텍처의 필수적인 부분이다. 큐는 생산자가 소비자에 대한 요청 또는 작업을 배치하는 물리적 메모리 영역이다. HSA 하드웨어의 복잡성에 따라, 큐들은 소프트웨어 또는 하드웨어의 조합으로 관리될 수 있다. 하드웨어 관리 큐들은 레이턴시 프로세서(예를 들어, CPU(320)) 큐들에서 실행되는 어플리케이션이, 개입하는 운영 체제 호출이 필요하지 않으면서, 처리량 프로세서(throughput processor)(예를 들어, GPU(330))들에 직접 작동한다는 점에서 상당한 성능 이점이 있다. 이를 통해 HSA(300)의 디바이스들 사이의 매우 짧은 레이턴시 통신이 가능하다.
도 4는 큐 구조를 예시하는 예시적인 시스템(400)의 블록도이다. 시스템(400)은 CPU(405), 시스템 메모리(415), 드라이버(410), 그래픽 처리 장치(GPU)(420) 및 통신 인프라 또는 버스(425)를 포함한다. 당업자는 시스템(400)이 도 4에 도시된 것에 추가하거나 그와 다른 소프트웨어, 하드웨어 및 펌웨어 구성 요소를 포함한다는 것을 이해할 것이다. 시스템(400)은 도 4에 도시되지 않은 추가 구성 요소들을 포함하는 것으로 이해된다.
CPU(405), GPU(420) 및 시스템 메모리(415)는 도 1 내지 도 3과 관련하여 설명된 바와 같이 구현될 수 있다. CPU(405)는 운영 체제(미도시) 및 하나 이상의 어플리케이션들을 실행하고, 시스템(400)을 위한 제어 프로세서이다. CPU(405)에서 실행되는 운영 체제는 시스템(400)과 관련된 작업의 수행을 제어하고, 액세스를 용이하게 하며, 조정한다. 드라이버(410)(예를 들어, 그래픽 드라이버)는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 임의의 조합을 포함한다. 일 구현에서, 드라이버(410)는 전적으로 소프트웨어로 구현된다. 드라이버(410)는 GPU(420)에 액세스하기 위하여 CPU(405) 및 CPU(405)에서 실행되는 어플리케이션을 위한 인터페이스 및/또는 어플리케이션 프로그래밍 인터페이스(API)를 제공한다. 버스(425)는 시스템(400)의 구성 요소들 사이의 결합을 제공하고 주변 구성 요소 상호 연결(Peripheral Component Interconnect, PCI), 향상된 그래픽 포트(Advanced Graphics Port, AGP) 등과 같은 하나 이상의 통신 버스들을 포함한다.
GPU(420)는 본원에 설명된 그래픽 가속 기능 및 다른 컴퓨팅 기능을 시스템(400)에 제공한다. GPU(420)는 다중 커맨드 프로세서(command processor, CP), CP 1. . . CP n(430) 및 다중 엔진들, 엔진 1. . .엔진 n(435), 예를 들면 3D 엔진들, 통합 비디오 디코더(UVD) 엔진들, 디지털 권한 관리(digital rights management, DRM) 직접 메모리 액세스(direct memory access , DMA) 엔진 등을 포함한다.
CP 1. . . CP n(430)은 GPU(420) 내의 처리를 제어하며, 엔진 1. . . 엔진 n(435)에 연결된다. 각 CP 1. . . CP n(430)는 엔진 1. . . Engine n(435)과 연관되며, 각 쌍은 엔진 블록(EB), EB 1. . . EB n(437)이다. 다른 실시 예에서, CP 1. . . CP n(430)는 단일 커맨드 프로세서이다. 일반적으로 CP 1.. . CP n(430)은 CPU(405)로부터 실행될 명령들을 수신하고 GPU(420)의 엔진 1. . . 엔진 n(435)에서 이러한 명령들의 실행을 조정한다. 어떤 경우에는, CP 1. . . CP n(430)은, CPU(405)로부터 수신된 각 커맨드에 대응하는, GPU(420)에서 실행될 하나 이상의 커맨드들을 생성한다. CP 1. . . CP n(430)의 기능을 구현하는 로직 명령들은 하드웨어, 펌웨어 또는 소프트웨어 또는 이들의 조합으로 구현된다.
메모리(415)는 하나 이상의 메모리 디바이스들을 포함하고 동적 랜덤 액세스 메모리(DRAM) 또는 데이터의 비-지속적 저장에 사용되는 유사한 메모리 디바이스일 수 있다. 메모리(415)는 CPU(405)가 커맨드를 GPU(420)에 통신하는 하나 이상의 메모리 버퍼들(445)를 포함한다. 메모리 버퍼들(445)은 적절하게 엔진들(435) 또는 엔진 블록들(437)에 대응한다. 메모리 버퍼들(445)은 작업 항목들 또는 커맨드 패킷들의 효율적인 큐잉(queuing)에 적합한 큐들, 링 버퍼(ring buffer)들 또는 다른 데이터구조들로서 구현된다. 큐의 경우, 커맨드 패킷들은 순환 방식으로 메모리 버퍼들(445)에 배치되고 그로부터 제거된다. 예시를 위한 목적으로, 메모리 버퍼들(445)은 본원에서 큐 1. . . 큐 n(445)로 지칭된다.
메모리(415)는 간접 버퍼들(455)을 포함한다. 간접 버퍼들(455)은 실제 커맨드(actual command)(예를 들어, 명령어, 데이터, 포인터 및 비-포인터)를 보유한다. 예를 들어, CPU(405)가 GPU(420)에 커맨드 패킷을 통신할 때, 커맨드 패킷은 간접 버퍼(455)에 저장되고 그 간접 버퍼(455)에 대한 포인터(pointer)가 큐 1. . . 큐 n(445)에 삽입된다. 아래에 설명되는 바와 같이, 특정 간접 버퍼들(455)는 뉴런 데이터(neuron data)를 보유한다. 즉, 다수의 간접 버퍼들이 다른 목적들로 사용된다. 드라이버(410)를 통해 큐 1. . . 큐 n(445)에 대한 커맨드들의 기록기로서의 CPU(405) 및 이러한 커맨드들의 판독기로서의 GPU(420)는 큐 1. . . 큐 n(445)에서 각각 마지막으로 추가된 항목과 마지막으로 판독된 항목을 나타내는 기록 포인터와 판독 포인터를 조정한다.
도 5a는 GPU(500), 드라이버(510), 큐(515) 및 간접 버퍼(535) 사이에서 커맨드 패킷 처리의 예시적인 블록도이다. GPU(500)는 GPU 메모리(502), 레지스터들(504), 커맨드 프로세서(505) 및 엔진(508)을 포함한다. 레지스터들(504)은 판독 포인터(512) 및 기록 포인터(514)를 포함한다. 큐(515)는 요소들(520, 522, 524) 및 여유 공간(free space)(530)을 포함한다. 각 요소, 예를 들어, 각 요소들(520, 522, 524)은 큐 패킷들을 저장한다. 도 5b는 커맨드 패킷(572) 및 간접 버퍼(535)를 가리키는 간접 버퍼(IB) 커맨드 패킷(576)을 포함하는 예시적인 요소(570)를 도시한다. 간접 버퍼(535)는, 도 5c에 도시된 바와 같이, GPU(500)가 동작들을 수행하도록 지시하는 커맨드 패킷들(540)을 포함한다. 예를 들어, HSA의 커널 디스패치 패킷(커맨드 패킷(540)의 예시)은 계산 커널이 스레드들(그리드 치수, 작업그룹 크기)을 런칭하는 방법과 같은 정보, 개인 및 그룹 메모리 할당에 필요한 크기, 계산 커널에 대한 실행 가능한 ISA 이미지를 포함하는 메모리의 오브젝트에 대한 핸들, 추가 제어 및 동기화 정보를 포함한다. 일반적으로, DNN의 계산 커널들은 일반적으로 MIOpen 및 rocBLAS와 같은 하이-레벨 라이브러리들에 의해 구현되는 컨볼루션, 행렬 곱셈, 고속 푸리에 변환(fast Fourier transform, FFT), 풀링 및 활성화이다.
위의 아키텍처는 호스트 프로세서(드라이버(510)로 표시되는 기록기)에서 GPU(500)(커맨드 프로세서(505)로 표시되는 판독기)로의 단방향 통신을 제공한다. 초기에 판독 포인터(512) 및 기록 포인터(514)는 큐(515)가 비어 있음을 나타내는 동일한 위치를 가리킨다. 큐(515)는 드라이버(510)가 태스크에 대응하는 커맨드 패킷을 기록하는 여유 공간(530)을 갖는다. 그 다음, 드라이버(510)는 기록 포인터(514)를 마지막 커맨드 패킷 또는 첫 번째 이용 가능한 공간을 지나 한 위치로 업데이트한다. 기록 포인터(514) 및 판독 포인터(512)는 이제 다른 위치들을 가리키고 있다. 커맨드 프로세서(505)는 판독 포인터(512) 위치에서 커맨드 패킷을 불러오고(fetching)하고 기록 포인터(514)와 같아질 때까지 기록 포인터(512)를 워킹(walking)한다.
신경망의 컨볼루션은 일부 뉴런들로부터의 출력만이 후속 레이어의 일부 뉴런들을 계산하는 데 필요하다는 점에서 로컬 동작이다. 결과적으로, 후속 레이어의 계산은 현재 레이어에서 모든 뉴런 계산들이 완료 될 때까지 기다리지 않고 병렬로 진행될 수 있다. 도 6은 방향성 비순환 그래프(DAG) 표현에서 DNN(600)으로부터의 두 개의 대표적인 레이어들, 레이어 1(605) 및 레이어 2(610)를 도시한다. 레이어 1(605)은 예를 들어 뉴런들(620, 622 및 624)을 포함하고 레이어 2(610)는 예를 들어 뉴런들(630, 632, 634, 636 및 638)을 포함한다. 어떤 경우에는, 전체 제1 레이어가 평가되기 전에 제2 레이어 뉴런들의 일부가 실행될 수 있다. 이것은 도 6에서 볼더(bolder) 및 더 두꺼운 라인들로 표시되며, 여기서 레이어의 2(610)의 두 개의 뉴런들, 예를 들어 뉴런들(630 및 632)는 레이어 1(605)의 최종 뉴런, 예를 들어 뉴런(624)이 계산되기 전에 평가 될 수 있다.
이것이 유익한 두 가지 케이스가 있다. 먼저, 레이어들의 나이브(naive) 순차적 실행으로 인해 일부 계산 리소스들이 아이들(idle) 상태로 남을 수 있다. 이 경우, 이러한 아이들 리소스들이 다음 레이어에 배치될 수 있다. 둘째, 제2 레이어가 제1 레이어보다 훨씬 더 많은 작업을 필요로 하는 경우, 몇몇 사용 가능한 컴퓨팅 리소스들로 해당 레이어에서 더 일찍 시작하는 것이 더 효율적일 수 있다. 최신 DNN들은 많은 숨겨진 레이어들(수백 또는 수천)을 갖고 따라서 단일 레이어에서 계산을 완료하기 전에 많은 레이어들 깊이에서 계산을 시작하는 것이 유리할 수 있다. 그러나, 어떤 계산들에 우선 순위를 두어야 하는지를 정확하게 예측하기 위해, 예를 들어 도 2의 스케줄러(136)와 같은 스케줄러는 계산 비용이 예상되는 어느 정도의 지식이 필요하다.
본원에 설명된 방법 및 시스템은 보다 정확한 작업 스케줄링 및 로드 밸런싱을 허용하기 위해 DNN 시스템의 특정 구조적, 기능적 또는 계산적 측면, 부분, 특성 또는 특징(통칭 "양태 또는 양태들")을 메타데이터와 태깅하거나 연관시키고, 여기서 메타데이터는 특정 DNN 양태와 연관되거나 관련된 대표적인 계산 비용을 제공한다. 예를 들어, DNN 시스템의 이러한 특정 양태들은 계산 커널, 뉴런, 레이어 또는 다른 양태일 수 있다. 예시적인 예에서, 메타데이터는 커널 또는 필터 크기, 드롭아웃 레이어, 레이어에 존재하는 다수의 뉴런들, 활성화 함수 및 계산 비용을 결정하는 데 사용될 수 있는 기타 유사한 항목이다. DNN 시스템의 양태들은 예를 들어, 어플리케이션 또는 사용자에 의해 본원에 설명된 프레임워크(framework)에 의해 메타데이터로 자동으로 태깅될 수 있다.
메타데이터는 명령어, 스칼라 레지스터, L1/L2 캐시, 테이블 등을 포함하지만 이에 제한되지 않는 다양한 장소들에 저장될 수 있다. 일 구현에서, 위치는 메타데이터의 크기, 압축 가능성, 메타데이터가 캡처되는 위치 및 메타데이터를 사용하는 스케줄러에 따라 다르다.
예시적인 예에서, 활성화 함수 및 레이어 당 뉴런들의 수와 같은 일부 메타데이터는 소프트웨어(예를 들어, 프로그래머, 컴파일러 등)에 의해 가장 쉽게 캡처되고 작업 요청 또는 명령에 저장되며 다른 메타데이터는 하드웨어의 런타임(예를 들어, 커널 런타임)에서 측정되어야 하고 하드웨어 테이블에 저장된다.
다른 예시적인 예에서, 위치는 메타데이터를 사용하는 스케줄러에 따라 달라진다. 메타데이터가 도 2의 O/S(120)과 같은 O/S 레벨에서 활용되는 경우, 메타데이터는 OS 스케줄러로 전송되는 작업 요청 메시지에 포함될 수 있다. 메타데이터가 도 2의 스케줄러(136) 또는 도 7의 하드웨어 디스패처(720)와 같은 하드웨어 스케줄러 또는 디스패처 레벨에서 활용되는 경우, 메타데이터는 스케줄러(136) 또는 하드웨어 디스패처(720)와 함께 배치되는 하드웨어 테이블(710)과 같은 하드웨어 테이블에 저장될 수 있다. 하드웨어 스케줄러가 소프트웨어에 의해 캡처된 메타데이터(예를 들어, 활성화 기능)도 또한 활용하는 경우, 메타데이터는 소프트웨어에서 작업 요청 메시지로 전달된 다음 OS로, 마지막으로 하드웨어 테이블로 전달될 수 있다.
계산 비용은 여러 기술들을 사용하여 측정될 수 있다. 일 구현에서, 커널 크기와 평가 시간 간의 관계는 계산 비용을 결정하는 데 사용된다. 예시적인 구현에서, 더 큰 필터 크기가 더 많은 작업에 대응한다는 것을 인식하는 상이한 휴리스틱(heuristic)들이 사용된다.
다른 예시적인 구현에서, 커널의 런타임은 계산 비용을 결정하기 위해 상대 속도의 표시를 제공한다. 이를 위해서는 디스패처가 커널 크기 런타임에 대한 테이블-룩업을 수행하여 작업을 배포해야 한다. 예상 런타임은 리소스 가용성과 결합되어 작업 그룹을 효율적으로 디스패칭하면서 컴퓨팅 리소스들 전반에 걸쳐 로드를 밸런싱한다.
일 구현에서, Tensorflow®(Google LLC의 상표) 또는 MIOpen과 같은 프레임워크는 특정 레이어에 대한 필터 크기를 나타내는 메타데이터 또는 기타 유사한 정보를 제공한다. 예시적인 구현에서는, 이는 DNN가 실질적으로 변경되지 않으므로 실행 시작 시 결정된다. 이는 전체 실행 동안 제1 반복 후 단지 커널들 시간에 대해 상당한 비용이 들지 않기 때문에 커널들의 동적 프로파일링을 허용한다.
커널에 대한 계산 비용을 사용하는 것 외에도, 스케줄러는 후속 레이어들의 일부 뉴런들이 실행할 준비가 되었는지 여부를 검출해야 한다. 일 구현에서, 이것은 DNN에서 수행되는 계산의 DAG를 구성하여 수행된다. DAG는 스케줄러가 계산을 전체 레이어로 제한하는 대신 특정 뉴런들에 대한 잠금(lock)들을 할당하거나 할당 해제할 수 있다. 즉, 스케줄러는 다른 뉴런들이 필요하지 않거나 사용 중일 때 사용을 위해 레이어의 특정 뉴런들을 노출할 수 있다. 스케줄러에 예상 계산 및 메타데이터의 전체 그래프가 있으면, 스케줄러는 휴리스틱을 사용하여 사용 가능한 계산 리소스들에 걸쳐 실행을 스케줄링하여 효율적인 처리를 보장한다.
도 7은 보다 정확한 작업 스케줄링 및 로드 밸런싱을 허용하기 위해 DNN 시스템(700)에서 계산 커널들을 사용하여 계산 비용을 결정하기 위한 예시적인 블록도이다. 이 구현에서, 계산 비용은 테이블에 메타데이터로 저장되는 커널 런타임이다. DNN 시스템(700)은 GPU(705)와 같은 적어도 하나의 프로세서를 포함하며, 이는 테이블과 통신하거나 테이블에 연결되며, 테이블은 예를 들어 하드웨어 테이블(710)이다. 예를 들어, 테이블은 메모리, 레지스터, 캐시 또는 기타 유사한 공간에서 구현될 수 있다. GPU(705)는 복수의 컴퓨팅 유닛(CU)들, CU 0(722), CU 1(724), . . . , CU N(726)과 통신하는 하드웨어 디스패처(720)와 같은 적어도 하나의 디스패처를 포함한다. 하드웨어 테이블(710)은 커널 ID들(730)을 측정된 커널 런타임들(732)과 연관시킨다. 일 구현에서, 커널 런타임 측정은 컨볼루션 신경망(CNN)들과 같은 특정 유형의 DNN들의 규칙성으로 인해 한 번만 수행되면 된다.
작업 분배를 결정할 때, 하드웨어 디스패처(720)는 각 커널과 연관된 메타데이터를 고려한다. 이 예시에서, 메타데이터는 측정된 커널 런타임이다. 예를 들어, 하드웨어 디스패처(720)는 커널 ID들(730)를 찾아보고 관련된 측정 커널 런타임들(732)을 검색함으로써 커널들 각각에 대해 측정된 커널 런타임들(732)을 고려한다. 일 구현에서, 하드웨어 디스패처(720)는 프로세서 또는 컴퓨팅 유닛 리소스들와 함께 측정된 커널 런타임들(732)을 사용하여 워크 그룹을 효율적으로 디스패칭하면서 프로세서 또는 컴퓨팅 유닛 리소스들에 걸쳐 로드 밸런싱한다.
일 구현에서, 메타데이터는 DNN의 동적 가지치기 및 희소성에 적용 가능하다. 이러한 경우, 개별 뉴런들은 DNN에서 임의로 잘라내거나 제거된다. 작업을 평가하고 디스패칭하는 동적 수단은 개별 반복들 간의 로드 밸런싱을 허용한다. 이를 수행하기 위한 수단은 스케줄러 또는 별도의 도우미 스레드가 계산될 뉴런의 준비(readiness)를 확인하도록 허용하는 것이며, 여기서 준비는 각 뉴런의 종속성을 나타내거나 설명한다(이는 미리 계산될 수 있음). 이 정보, 즉 준비는 해당 뉴런에 대한 메타데이터로 태깅된다. 예를 들어, 뉴런이 가지치기되면, 모든 종속 뉴런들의 준비가 업데이트되고 스케줄러에 의해 개별 반복들 간의 로드 밸런싱을 위해 사용된다.
일 구현에서, 메타데이터는 다수의 디바이스들 간에 사용되며, 여기서 메타데이터는 데이터가 로컬로 저장되기를 기다리지 않는 후속 레이어들에서 계산을 수행하기 시작하여 계산과 통신(디바이스들 또는 CU들 사이의)을 겹칠 수 있도록 한다.
도 8은 메타데이터를 사용하는 DNN들에서 기회주의적 로드 밸런싱을 위한 방법(800)에 대한 흐름도이다. DNN 시스템의 주어진 구조적, 기능적 또는 계산적 양태에 대해 대표적인 계산 비용이 캡처, 획득 또는 결정된다(단계 805). 대표적인 계산 비용은 DNN 시스템의 주어진 구조적, 기능적 또는 계산적 양태에 대한 메타데이터로 구현됩니다(단계 810). 일 구현에서, 계산된 계산 비용은 메타데이터로 구현된다. 스케줄러는 실행할 준비가 된 후속 레이어들에 뉴런들이 있는지 여부를 검출한다(단계 815). 스케줄러는 메타데이터 및 뉴런 가용성을 사용하여 컴퓨팅 리소스들 및 사용 가능한 리소스들에 걸쳐 스케줄링하고 로드 밸런싱한다(단계 820).
본 명세서의 개시 내용에 기초하여 많은 변형이 가능하다는 것을 이해해야 한다. 기능들과 요소들은 위에서 특정 조합으로 설명되었지만, 각 기능 또는 요소는 다른 기능 및 요소 없이 단독으로 또는 다른 기능 및 요소와 함께 또는 없이 다양한 조합으로 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는, 예를 들어, 범용 프로세서, 특수 목적 프로세서, 기존 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서들, DSP 코어와 관련된 하나 이상의 마이크로프로세서들, 컨트롤러, 마이크로컨트롤러, ASIC(Application Specific Integrated Circuits), FPGA(Field Programmable Gate Arrays) 회로, 다른 유형의 집적 회로(IC) 및/또는 상태 머신을 포함한다. 이러한 프로세서는 처리된 하드웨어 설명 언어(hardware description language, HDL) 명령의 결과 및 넷리스트(netlist)(컴퓨터 판독 가능 매체에 저장될 수 있는 명령)를 포함한 기타 중간 데이터를 사용하는 제조 공정을 구성하여 제조될 수 있다. 이러한 처리의 결과는 실시 예들의 양태들을 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에서 사용되는 마스크워크(maskwork)일 수 있다.
본원에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비-일시적 컴퓨터 판독 가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비-일시적 컴퓨터 판독 가능 저장 매체의 예에는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 이동식 디스크, 자기-광 미디어 및 CD-ROM 디스크 및 DVD(digital versatile disk)와 같은 광학 매체를 포함한다.

Claims (20)

  1. 신경망 시스템(neural network systems)에서 로드 밸런싱(load balancing)을 위한 방법에 있어서,
    상기 신경망 시스템의 일부에 대한 대표 계산 비용(representative computational costs)을 얻는 단계;
    상기 신경망 시스템의 상기 일부에 메타데이터(metadata)로 태깅(tagging)하는 단계-상기 메타데이터는 상기 대표 계산 비용을 포함함-;
    스케줄러에 의해, 현재 레이어(layer)가 처리된 다음 레이어들에서 실행을 위해 이용 가능한 뉴런들이 있음을 검출하는 단계; 및
    상기 스케줄러에 의해, 상기 메타데이터 및 뉴런 가용성(neuron availability)을 이용하여 컴퓨팅 리소스들에 걸쳐 스케줄링 및 로드 밸런싱을 수행하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 신경망 시스템의 상기 일부는 계산 커널, 뉴런 및 레이어 중 적어도 하나인, 방법.
  3. 제1항에 있어서, 상기 메타데이터는 커널 크기, 필터 크기, 드롭아웃 레이어(dropout layer), 레이어에 존재하는 다수의 뉴런들, 뉴런 준비(neuron readiness) 및 활성화 함수(activation function) 중 적어도 하나를 포함하는, 방법.
  4. 제3항에 있어서, 상기 뉴런 준비가 뉴런들 간의 종속성을 설명하는, 방법.
  5. 제4항에 있어서, 상기 뉴런 준비와 관련된 뉴런이 가지치기된(pruned) 후에 상기 뉴런 준비가 업데이트되는, 방법.
  6. 제1항에 있어서, 상기 메타데이터는 어플리케이션, 프레임워크(framework), 또는 사용자 중 적어도 하나에 의해 상기 신경망 시스템의 상기 일부에 태깅되는, 방법.
  7. 제1항에 있어서, 상기 메타데이터는 명령, 스칼라 레지스터(scalar register), 메모리 및 하드웨어 테이블 중 적어도 하나에 저장되는, 방법.
  8. 제1항에 있어서, 상기 메타데이터의 위치는 메타데이터 크기, 압축 능력, 메타데이터가 캡처되는 위치 및 상기 메타데이터를 이용하는 스케줄러의 유형 중 적어도 하나에 의존하는, 방법.
  9. 제1항에 있어서, 계산 비용은 상기 대표 계산 비용으로부터 결정되는, 방법.
  10. 제9항에 있어서, 상기 대표 계산 비용은 커널 크기, 평가 시간 및 커널 런타임 중 적어도 하나를 포함하는, 방법.
  11. 신경망 시스템의 로드 밸런싱을 위한 시스템에 있어서,
    메타데이터로 태깅된 상기 신경망 시스템의 일부-상기 메타데이터는 상기 신경망 시스템의 상기 일부와 관련된 대표 계산 비용을 포함함-; 및
    상기 신경망 시스템의 상기 일부에 연결된 스케줄러를 포함하고, 여기서 상기 스케줄러는:
    현재 레이어가 처리된 다음 레이어들에서 실행을 위해 이용 가능한 뉴런들이 있음을 검출하고; 그리고
    상기 메타데이터 및 뉴런 가용성을 이용하여 컴퓨팅 리소스들에 걸쳐 스케줄링 및 로드 밸런싱을 수행하는, 시스템.
  12. 제11항에 있어서, 상기 신경망 시스템의 상기 일부는 계산 커널, 뉴런 및 레이어 중 적어도 하나인, 시스템.
  13. 제11항에 있어서, 상기 메타데이터는 커널 크기, 필터 크기, 드롭아웃 레이어, 레이어에 존재하는 다수의 뉴런들, 뉴런 준비 및 활성화 함수 중 적어도 하나를 포함하는, 시스템.
  14. 제13항에 있어서, 상기 뉴런 준비는 뉴런들 간의 의존성을 설명하는, 시스템.
  15. 제14항에 있어서, 상기 뉴런 준비는 상기 뉴런 준비와 연관된 뉴런이 가지치기된 후에 업데이트되는, 시스템.
  16. 제11항에 있어서, 상기 메타데이터는 어플리케이션, 프레임워크 또는 사용자 중 적어도 하나에 의해 상기 신경망 시스템의 상기 일부에 태깅되는, 시스템.
  17. 제11항에 있어서, 상기 메타데이터는 적어도 명령, 스칼라 레지스터, 메모리 및 하드웨어 테이블에 저장되는, 시스템.
  18. 제11항에 있어서, 상기 메타데이터의 위치는 메타데이터 크기, 압축 능력, 메타데이터가 캡처되는 위치, 및 상기 메타데이터를 사용하는 스케줄러의 유형 중 적어도 하나에 의존하는, 시스템.
  19. 제11항에 있어서, 상기 계산 비용은 상기 대표 계산 비용으로부터 결정되는, 시스템.
  20. 제19항에 있어서, 상기 대표 계산 비용은 커널 크기, 평가 시간 및 커널 런타임 중 적어도 하나를 포함하는, 시스템.
KR1020207035787A 2018-06-26 2019-05-21 메타데이터를 사용하여 신경망에서 기회주의적 로드 밸런싱을 위한 방법 및 시스템 KR20210013707A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/019,374 2018-06-26
US16/019,374 US10970120B2 (en) 2018-06-26 2018-06-26 Method and system for opportunistic load balancing in neural networks using metadata
PCT/US2019/033247 WO2020005412A2 (en) 2018-06-26 2019-05-21 Method and system for opportunistic load balancing in neural networks using metadata

Publications (1)

Publication Number Publication Date
KR20210013707A true KR20210013707A (ko) 2021-02-05

Family

ID=68981816

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207035787A KR20210013707A (ko) 2018-06-26 2019-05-21 메타데이터를 사용하여 신경망에서 기회주의적 로드 밸런싱을 위한 방법 및 시스템

Country Status (6)

Country Link
US (2) US10970120B2 (ko)
EP (1) EP3815002A4 (ko)
JP (1) JP7430143B2 (ko)
KR (1) KR20210013707A (ko)
CN (1) CN112219192A (ko)
WO (1) WO2020005412A2 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10261903B2 (en) * 2017-04-17 2019-04-16 Intel Corporation Extend GPU/CPU coherency to multi-GPU cores
US10892953B2 (en) * 2018-02-23 2021-01-12 Nec Corporation Network-based application acceleration
US11645534B2 (en) * 2018-09-11 2023-05-09 Intel Corporation Triggered operations to improve allreduce overlap

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013503398A (ja) 2009-08-28 2013-01-31 ニューロン コーポレーション リアルタイム・ビジネスインテリジェンスおよび自動化制御用に、ニューラルネットワークの使用を採用するシステムおよび方法
US20160335119A1 (en) 2015-05-12 2016-11-17 minds.ai inc Batch-based neural network system
US9916283B2 (en) * 2015-12-22 2018-03-13 1Qg Information Technologies Inc. Method and system for solving a problem involving a hypergraph partitioning
US20180082181A1 (en) 2016-05-13 2018-03-22 Samsung Electronics, Co. Ltd. Neural Network Reordering, Weight Compression, and Processing
AU2016203619A1 (en) * 2016-05-31 2017-12-14 Canon Kabushiki Kaisha Layer-based operations scheduling to optimise memory for CNN applications
CN109923561B (zh) 2016-09-02 2023-09-26 新思科技公司 使用相关元启发法的分区
CN110050267B (zh) 2016-12-09 2023-05-26 北京地平线信息技术有限公司 用于数据管理的系统和方法
US10019668B1 (en) * 2017-05-19 2018-07-10 Google Llc Scheduling neural network processing

Also Published As

Publication number Publication date
US20210224130A1 (en) 2021-07-22
EP3815002A4 (en) 2022-04-06
EP3815002A2 (en) 2021-05-05
US11880715B2 (en) 2024-01-23
US20190391850A1 (en) 2019-12-26
US10970120B2 (en) 2021-04-06
WO2020005412A3 (en) 2020-10-22
WO2020005412A2 (en) 2020-01-02
JP2021528730A (ja) 2021-10-21
JP7430143B2 (ja) 2024-02-09
CN112219192A (zh) 2021-01-12

Similar Documents

Publication Publication Date Title
US10956218B2 (en) Enqueuing kernels from kernels on GPU/CPU
EP3126971B1 (en) Program execution on heterogeneous platform
KR101559090B1 (ko) 이종 코어를 위한 자동 커널 마이그레이션
EP2707797B1 (en) Automatic load balancing for heterogeneous cores
KR101590734B1 (ko) 그래픽 프로세싱 유닛에서의 메모리 공유
US11880715B2 (en) Method and system for opportunistic load balancing in neural networks using metadata
US9619298B2 (en) Scheduling computing tasks for multi-processor systems based on resource requirements
US20140157287A1 (en) Optimized Context Switching for Long-Running Processes
US11847497B2 (en) Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload
US10606667B2 (en) Precondition exclusivity mapping of tasks to computational locations
US20230109752A1 (en) Deterministic replay of a multi-threaded trace on a multi-threaded processor
US20190318229A1 (en) Method and system for hardware mapping inference pipelines
WO2024065826A1 (en) Accelerate deep learning with inter-iteration scheduling
US20230244525A1 (en) Methods and apparatus for an xpu-aware dynamic compute scheduling framework
Kim et al. Towards predicting GPGPU performance for concurrent workloads in Multi-GPGPU environment
US20220222177A1 (en) Systems, apparatus, articles of manufacture, and methods for improved data transfer for heterogeneous programs
Metzger Programmer-transparent efficient parallelism with skeletons
Riahi et al. Many-BSP: an analytical performance model for CUDA kernels
Cartwright Enabling Runtime Profiling to Hide and Exploit Heterogeneity within Chip Heterogeneous Multiprocessor Systems (CHMPS)
Kvasnica et al. COMPUTATIONAL SPEED ON THE MULTIPROCESSOR ARCHITECTURE AND GPU
Erdem Efficient OpenCL application autotuning for heterogeneous platforms

Legal Events

Date Code Title Description
E902 Notification of reason for refusal