KR20240063137A - 하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델 - Google Patents

하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델 Download PDF

Info

Publication number
KR20240063137A
KR20240063137A KR1020247011391A KR20247011391A KR20240063137A KR 20240063137 A KR20240063137 A KR 20240063137A KR 1020247011391 A KR1020247011391 A KR 1020247011391A KR 20247011391 A KR20247011391 A KR 20247011391A KR 20240063137 A KR20240063137 A KR 20240063137A
Authority
KR
South Korea
Prior art keywords
input
feature map
group
partition
convolution
Prior art date
Application number
KR1020247011391A
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 KR20240063137A publication Critical patent/KR20240063137A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Image Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)

Abstract

컴퓨터 판독 가능 매체를 포함하며 그룹 컨볼루션 계층을 갖는 컨벌루션 신경망을 구현하는 집적 회로를 사용하여 입력 이미지를 처리하기 위한 방법, 시스템 및 디바이스가 설명된다. 처리에는 입력 특징 맵의 채널 차원을 따른 파티션과 해당 회로의 계산 유닛 내 곰셈 누적 셀들(MAC)과의 매핑을 결정하는 단계와, 입력 특징 맵에 그룹 컨볼루션을 적용하는 단계를 포함한다. 그룹 컨벌루션을 적용하는 단계는 복수의 파티션 각각에 대해: 매핑에 기초하여, 그룹 컨벌루션 계층에 대한 가중치를 MAC의 서브세트에 제공하는 단계와; 회로의 입력 버스를 통해, 특징 맵의 입력을 서브세트의 각 MAC에 제공하는 단계; 및 서브세트의 각 MAC에서, 그룹 컨볼루션 계층에 대한 입력과 가중치를 사용하여 곱을 계산하는 단계를 포함한다. 곱의 누적에 기초하여 그룹 컨볼루션 계층에 대한 출력 기능 맵이 생성된다.

Description

하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델
본 명세서는 일반적으로 하드웨어 집적 회로를 사용하여 컨벌루션 신경망에 대한 그룹 컨벌루션을 수행하는 것에 관한 것이다.
신경망은 수신된 입력에 대한 출력, 예를 들어 분류를 생성하기 위해 하나 이상의 노드 계층을 사용하는 기계 학습 모델이다. 일부 신경망에는 출력 계층 외에 하나 이상의 은닉 계층이 포함되어 있다. 일부 신경망은 이미지 처리를 위해 구성된 컨벌루션 신경망일 수 있고 음성 및 언어 처리를 위해 구성된 순환 신경망(RNN)일 수 있다. 다양한 유형의 신경망 아키텍처가 분류 또는 패턴 인식, 데이터 모델링과 관련된 예측, 및 정보 클러스터링과 관련된 다양한 작업을 수행하는데 사용될 수 있다.
신경망 계층은 대응하는 파라미터 또는 가중치 세트를 가질 수 있다. 가중치는 신경망 추론을 계산하기 위한 계층의 해당 출력을 생성하기 위해 신경망 계층을 통해 입력(예를 들어, 입력 배치(batch))을 처리하는데 사용된다. 입력 배치와 커널 세트는 입력과 가중치의 텐서, 즉, 다차원 어레이로 표현될 수 있다. 하드웨어 가속기는 신경망을 구현하기 위한 특수 목적의 집적 회로이다. 회로는 회로의 제어 로직을 사용하여 순회하거나 액세스할 수 있는 텐서 요소들에 해당하는 위치들을 가진 메모리를 포함한다.
본 명세서는 하드웨어 신경망 가속기에서 그룹 컨벌루션을 효율적으로 구현하기 위한 기술을 설명한다. 그룹 컨볼루션은 그룹 컨볼루션을 나타내는 각 입력 그룹이 해당 출력 그룹과 연관되는 입력 행렬의 채널 차원을 따라 그룹화함으로써 입력 특성 맵을 컨볼루션한다. 특히, 이러한 기술에 기초하여 그룹 컨볼루션은 태블릿이나 스마트폰과 같은 예시적인 컴퓨팅 디바이스에 구현된 기계 학습 모델의 컨볼루션 신경망(CNN)을 사용하여 입력 이미지를 처리할 때 특정 하드웨어 및 컴퓨팅 효율성을 실현하는데 활용될 수 있다.
입력 이미지는 그룹 컨벌루션 계층을 갖춘 컨벌루션 신경망을 구현하는 하드웨어 집적회로를 사용하여 처리된다. 처리에는 집적 회로의 계산 유닛 내의 곱셈 누적 셀과 입력 특징 맵의 채널 차원을 따른 파티션과의 매핑을 결정하는 단계 및 그룹 컨볼루션을 입력 특징 맵에 적용하는 단계가 포함된다. 그룹 컨벌루션을 적용하는 단계는 각 파티션에 대해: 매핑에 기초하여 그룹 컨벌루션 계층에 대한 가중치를 MAC의 서브세트에 제공하는 단계; 집적 회로의 입력 버스를 통해, 입력 특징 맵의 입력을 서브세트의 각 MAC에 제공하는 단계; 및 서브세트의 각 MAC에서, 그룹 컨볼루션 계층에 대한 입력 및 해당 가중치를 사용하여 곱(product)을 계산하는 단계를 포함한다. 곱의 누적에 기초하여 그룹 컨볼루션 계층에 대한 출력 특징 맵이 생성된다.
본 명세서에 설명된 주제의 일 양태는 다수의 신경망 계층을 포함하는 컨벌루션 신경망을 구현하도록 구성된 하드웨어 집적 회로를 사용하여 입력 이미지를 처리하는 방법으로 구현될 수 있다. 신경망 계층에는 그룹 컨볼루션 계층이 포함된다. 방법은 입력 특징 맵의 채널 차원을 따라 복수의 파티션을 정의하는 제어 파라미터를 식별하는 단계와; 상기 파티션들과 집적 회로의 계산 유닛 내의 곱셈 누적 셀들(Multiply Accumulation Cell)과의 매핑을 결정하는 단계와; 그리고 그룹 컨벌루션 층에 대해, 입력 특징 맵에 그룹 컨벌루션을 적용하는 단계를 포함한다.
적용하는 단계는 파티션 각각에 대해: 결정된 매핑에 기초하여, 그룹 컨벌루션 계층에 대한 가중치를 복수의 MAC의 서브세트에 제공하는 단계; 집적 회로의 입력 버스를 통해, 입력 특징 맵의 개별 입력을 서브세트의 각 MAC에 제공하는 단계; 및 서브세트의 각 MAC에서, 그룹 컨볼루션 계층에 대한 개별 입력과 해당 가중치를 사용하여 곱(product)을 계산하는 단계를 포함한다. 방법은 곱의 누적에 기초하여 그룹 컨볼루션 계층에 대한 출력 특징 맵을 생성하는 단계를 포함한다.
이러한 구현과 다른 구현은 각각 선택적으로 다음 특징 중 하나 이상을 포함할 수 있다. 예를 들어, 일부 구현에서, 파티션들과 곱셈 누적 셀과의 매핑을 결정하는 단계는 파티션 각각의 채널 수에 기초하여 매핑을 결정하는 단계를 포함한다. 일부 구현에서, 다수의 파티션의 각 파티션은 파티션의 개별 크기에 대응하는 각각의 양의 입력 채널을 포함한다.
출력 특징 맵을 생성하는 단계는 각 파티션의 개별 크기에 기초하여 출력 특징 맵을 생성하는 단계를 포함한다.
일부 구현에서, 출력 특징 맵을 생성하는 단계는 MAC의 서브세트를 사용하여 다수의 곱을 계산하는 단계와; 그리고 다수의 곱으로부터 곱의 누적을 생성하는 단계를 포함한다. 방법은 계산 유닛의 하드웨어 구성을 기술하는 정보에 액세스하는 단계와; 그리고 계산 유닛의 하드웨어 구성에 기초하여 각 파티션의 개별 크기를 결정하는 단계를 포함할 수 있다.
일부 구현에서, 입력 버스는 브로드캐스트 기능을 포함하고, 방법은 입력 버스를 통해 각 파티션에 대해, 입력 특징 맵의 다수의 입력을 집적 회로의 계산 유닛에 브로드캐스팅하는 단계를 더 포함한다. 방법은 또한 입력 버스를 통해 입력 특징 맵의 제1 파티션에 대해, 제1 파티션의 제1 입력을 서브세트의 각 MAC에 브로드캐스팅하는 단계를 포함할 수 있으며, 브로드캐스트되는 제1 입력은 그룹 컨벌루션 계층에 대한 계산 동안 재사용된다. 일부 구현에서, 입력 특징 맵의 제1 파티션은 출력 특징 맵의 제1 파티션에 대응하고, 제1 입력은 출력 특성 맵의 제1 파티션 출력에 대해 재사용된다.
이 양태와 다른 양태의 다른 구현에는 컴퓨터 저장 디바이스에 인코딩된 방법의 동작들을 수행하도록 구성된 대응하는 시스템, 장치 및 컴퓨터 프로그램이 포함된다. 하나 이상의 컴퓨터로 구성된 시스템은 소프트웨어, 펌웨어, 하드웨어 또는 시스템에 설치된 이들의 조합을 통해 작동 시 시스템이 동작들을 수행하도록 구성할 수 있다. 하나 이상의 컴퓨터 프로그램은 데이터 처리 장치에 의해 실행될 때 장치로 하여금 동작들을 수행하게 하는 명령들을 가짐으로써 그렇게 구성될 수 있다.
본 명세서에 설명된 주제는 다음의 장점들 중 하나 이상을 실현하기 위해 특정 실시예에서 구현될 수 있다. 그룹 컨볼루션 계층, 즉 깊이별 컨볼루션 또는 전체 컨볼루션이 아닌 그룹 컨볼루션을 수행하는 계층을 포함하는 컨벌루션 신경망의 실행 개선을 실현하기 위해 특수 목적 집적 회로의 예시적인 하드웨어 아키텍처를 활용하는 기술이 설명된다.
하드웨어 아키텍처에는 특정 유형의 메모리 레이아웃, 브로드캐스트 입력 버스 및 기존 아키텍처에 비해 향상된 계산 효율성 및 하드웨어 활용도로 그룹 컨볼루션을 구현할 수 있는 곱셈 누적 셀 구성이 포함된다. 입력 버스는 곱셈 누적 셀에 결합되고 곱셈 누적 셀의 일부(또는 전체)에 걸쳐 입력을 브로드캐스트하도록 구성된다. 브로드캐스트 기능을 사용하면 해당 그룹 컨볼루션에 대한 출력 채널을 계산할 때 재사용되는 입력에 대한 계산을 병렬화할 수 있다.
이 아키텍처는 다양한 유형의 그룹 컨볼루션 기반 신경망의 실행을 최적화하는데 사용될 수 있으며 다양한 컴퓨터 비전 작업에 더 광범위한 그룹 컨볼루션 개념을 적용할 수 있다. 예를 들어, 컴파일러 또는 관련 제어 로직을 사용하여 그룹 컨볼루션 연산과 회로의 계산 유닛내의 곱셈 누적 셀과의 최적 매핑을 결정할 수 있다.
매핑은 계산 유닛의 전체 활용을 최대화하거나 동작의 전체 대기 시간을 최소화하거나 둘 모두와 같이 계산 동작의 다양한 양태를 최적화하도록 결정될 수 있다. 특정 매핑의 장점은 주어진 계산에 대해 새로운 파라미터나 추가 파라미터를 페치하는데 필요한 칩 외부(off-chip) 통신의 양을 최소화하는 것이 될 수 있다. 매핑을 결정하는 예시적인 디바이스(예를 들어, 호스트)는 집적 회로에 비해 칩 외부에 있을 수 있다. 일부 구현에서, 컴파일러 및 기타 관련 제어 로직이 예시적인 디바이스에 구현될 수 있다.
본 명세서에 설명된 주제의 하나 이상의 구현의 세부 사항은 첨부 도면 및 아래 설명에 설명되어 있다. 주제의 다른 잠재적인 특징, 양태 및 이점은 설명, 도면 및 청구범위로부터 명백해질 것이다.
도 1은 이미지에 대해 그룹 컨벌루션을 수행하기 위한 예시적인 컴퓨팅 시스템의 블록도이다.
도 2는 그룹 컨벌루션에 사용되는 예시적인 그룹화를 도시하는 블록도이다.
도 3은 상이한 컨볼루션 연산에 관한 기계 학습 모델의 예시적인 속성을 도시한다.
도 4는 컨벌루션 신경망의 상이한 계층 블록에 대응하는 동작들을 도시하는 블록도이다.
도 5는 도 1의 예시적인 컴퓨팅 시스템에서 사용될 수 있는 컨벌루션 신경망 모델에 대한 예시적인 아키텍처이다.
도 6은 컨벌루션 신경망에 대한 계산을 수행하는데 사용되는 하드웨어 집적 회로의 예시적인 하드웨어 계산 타일을 도시한다.
도 7a는 곱셈 누적 셀의 서브세트에 대한 파티션의 예시적인 매핑을 도시하는 블록도이다.
도 7b는 하드웨어 계산 타일의 곱셈 누적 셀에 대한 개별 입력을 제공하는 예시적인 입력 버스를 도시하는 블록도이다.
도 8은 전체 컨볼루션, 깊이별 컨볼루션 및 그룹 컨볼루션의 특정 속성을 나타내는 예시적인 블록도이다.
도 9는 하드웨어 집적 회로를 사용하여 그룹 컨벌루션을 적용하는 예시적인 프로세스이다.
다양한 도면에서 유사한 참조 번호 및 명칭은 유사한 요소를 나타낸다.
도 1은 입력 이미지에 대해 그룹 컨벌루션을 수행하기 위한 예시적인 컴퓨팅 시스템(100)의 블록도이다. 시스템(100)은 일반적으로 이미지(104)를 처리하도록, 즉 이미지의 픽셀의 강도 값을 처리하도록 구성된 예시적인 컨벌루션 신경망(102)을 포함한다. 컨벌루션 신경망(102)은 다수의 컨벌루션 신경망 계층(108)에 기초한 예시적인 신경망 아키텍처를 포함한다. 도 1의 예에서, 컨벌루션 신경망(102)은 다수의 컨벌루션 신경망 계층(108)을 포함한다. 예를 들어, 컨벌루션 신경망(102)은 N개(또는 세트)의 계층을 포함하며, 여기서 N은 1보다 큰 정수이다.
상이한 유형의 CNN 아키텍처(106)는 다양한 기계 학습 작업(task)을 수행하는데 사용될 수 있다. 예를 들어, 기계 학습 작업은 컴퓨터 비전 작업("이미지 처리 작업"이라고도 지칭됨)일 수 있다. 즉, 신경망은 입력 이미지를 수신하고, 입력 이미지를 처리하여 입력 이미지에 대한 네트워크 출력을 생성하도록, 즉 일종의 이미지 처리 작업을 수행하도록 구성될 수 있다. 본 명세서에서, 입력 이미지를 처리한다는 것은 신경망을 이용하여 이미지의 픽셀들의 강도 값을 처리하는 것을 지칭한다. 예를 들어, 작업은 이미지 분류일 수 있고 주어진 이미지에 대해 신경망에 의해 생성된 출력은 객체 카테고리 세트 각각에 대한 스코어일 수 있으며, 각 스코어는 이미지가 해당 카테고리에 속하는 객체의 이미지를 포함할 추정된 가능성(likelihood, 우도)을 나타낸다.
다른 예로서, 작업은 이미지 임베딩 생성(generation)일 수 있으며 신경망에 의해 생성된 출력은 입력 이미지의 수치(numeric) 임베딩일 수 있다. 또 다른 예로서, 작업은 객체 감지일 수 있으며 신경망에 의해 생성된 출력은 입력 이미지 내 위치들, 예를 들어, 특정 유형의 객체들이 묘사되는 이미지 내의 경계 상자들 또는 기타 기하학적 영역들을 식별할 수 있다. 또 다른 예로서, 작업은 이미지 분할(segmentation)일 수 있으며 신경망에 의해 생성된 출력은 입력 이미지의 각 픽셀에 대해, 해당 픽셀이 다수의 카테고리 중 어느 카테고리에 속하는지 정의할 수 있다. 그러나 보다 일반적으로, 작업은 이미지 이외의 입력을 처리하는 작업을 비롯하여 다양한 작업 중 하나일 수 있다.
일부 이미지 처리 작업은 객체 감지, 데이터 분류, 패턴 인식 또는 이미지 인식뿐만 아니라 데이터 모델링을 포함하는 계산 예측, 및 정보 클러스터링과 관련될 수 있다. 예를 들어, 작업에는 객체 감지가 포함될 수 있고, 여기서 CNN은 특정 객체를 감지하기 위해 이미지를 처리하고 객체 감지 시 객체를 식별하는 출력을 생성한다. 다른 작업에는 데이터/이미지 분류가 포함될 수 있으며, 여기서 CNN은 이미지를 처리하여 이미지에 대한 분류를 결정하고 이미지의 컨텐츠에 기초하여 이미지에 대한 특정 분류 출력을 생성한다. 또 다른 작업에는 패턴 인식이 포함될 수 있으며, 여기서 CNN은 이미지를 처리하여 이미지에서 특정 패턴을 식별하거나 인식하고 이미지의 컨텐츠에 기초하여 상기 인식된 패턴을 나타내는 출력을 생성한다. 또 다른 작업에는 일반적인 이미지 인식이 포함될 수 있으며, 여기서 CNN은 이미지를 처리하여 이미지의 다양한 요소(elements)를 식별하거나 인식하고 이미지의 컨텐츠에 기초하여 상기 인식된 요소를 나타내는 출력을 생성한다.
일부 구현에서, 컨벌루션 신경망(102)은 예시적인 모바일 디바이스(110)에서 구현되거나 그에 의해 액세스 가능하다. 모바일 디바이스(110)는 스마트폰, 태블릿, 전자 노트북, 랩탑, 게임 콘솔, 또는 관련 휴대용 컴퓨팅 디바이스일 수 있다. 일부 다른 구현에서, 컨벌루션 신경망(102)은 서버 뱅크, 서버 그룹 또는 다중 프로세서 시스템과 같은 예시적인 클라우드 기반 시스템에 통합되거나 이에 의해 액세스 가능하다.
컨벌루션 신경망(102)은 하나 이상의 기계 학습 하드웨어 가속기(112)를 사용하여 구현될 수 있다. 각 하드웨어 가속기(112)는 하나 이상의 특수 목적 하드웨어 집적 회로(114)에 해당한다. 일반적으로, 회로(114)는 신경망 계산을 수행하는 하드웨어 회로(예를 들어, 특수 목적 하드웨어 회로)이다. 예를 들어, 회로(114) 중 일부(또는 전부)는 ASIC(주문형 집적 회로), FPGA(필드 프로그래밍 가능 게이트 어레이), 단일 코어 신경망 프로세서 또는 다중 코어 신경망 프로세서와 같은 특수 목적의 하드웨어 회로일 수 있다. 회로(114)는 특수 목적의 그래픽 처리 장치(GPU)일 수도 있다.
하드웨어 회로(114)는 신경망 작업 부하(workload)에 대한 계산을 가속화하도록 작동 가능하다. 일부 구현에서, 하드웨어 회로(114)는 하드웨어, 소프트웨어, 또는 둘 다로 구현될 수 있는 제어 로직을 포함한다. 제어 로직은 계산에 사용되는 데이터 획득 및 라우팅을 포함하여 신경망 계산에 대한 명령을 내리는데 사용된다. 회로(114)는 신경망의 각 계층에 대한 입력, 입력 활성화, 출력, 출력 활성화 및 파라미터들을 저장하기 위한 메모리를 포함할 수 있다. 일부 구현에서, 회로(114)는 전용 메모리, 공유 메모리, 또는 둘 다를 포함한다. 예를 들어, 회로(114)는 입력, 입력 활성화, 출력 또는 출력 활성화를 저장하기 위한 입력/활성화 메모리, 및 신경망 계층 각각에 대한 개별 파라미터 세트를 저장하기 위한 파라미터 메모리를 포함할 수 있다.
회로(114)는 하드웨어 행렬 유닛, 계산 타일의 배열, 또는 이들의 조합과 같은 계산 유닛을 포함할 수 있다. 계산 유닛은 신경망의 계층을 통해 입력을 처리하기 위한 신경망 계산을 수행하는데 사용된다. 일부 구현에서, 각 행렬 유닛 또는 개별 계산 타일은 곱셈 및 누적 동작을 수행하는 곱셈 누적 셀과 같은 하나 이상의 계산 셀 어레이를 포함한다. 예를 들어, 각 셀은 입력과 가중치 값을 곱하여 곱(product)을 생성하고, 여러 클록 사이클에 걸쳐 곱들의 누적(예를 들어, 덧셈 동작)을 수행할 수 있다.
회로(114)는 입력 행렬의 채널 차원의 주어진 깊이에 대해 입력 행렬의 해당 부분에 대해 서로 다른 가중치 필터를 컨볼루션하기 위해 전체 컨벌루션, 깊이별 컨벌루션 및 그룹 컨벌루션을 구현한다. 예를 들어, 모바일 디바이스(110)는 컨벌루션 신경망(102)과 모델의 CNN 계층(108)을 사용하여 수신된 입력(104)에 대한 이미지 처리 출력(120), 예를 들어 인식 또는 감지 출력을 생성한다. 예를 들어, 입력(104)은 랩탑(122)의 이미지일 수 있으며 모바일 디바이스(110)는 컨벌루션 신경망(102)을 사용하여 이미지를 처리하고 이미지에 랩탑의 묘사가 포함되어 있는지 검출하거나 인식한다.
도 2는 입력 데이터 세트(202)의 표현과 그 입력 데이터 세트로부터의 입력을 사용하여 그룹 컨벌루션을 수행하기 위한 예시적인 그룹화(203)를 포함하는 블록도이다. 일부 구현에서, 입력 데이터세트(202)는 입력의 다차원 행렬 구조이거나 그로부터 도출된다. 예를 들어, 행렬 구조는 Zin 채널을 포함하는 입력 텐서일 수 있으며, 각 채널은 X×Y의 공간 차원을 갖는다. 행렬 구조(또는 텐서)는 입력 세트, 활성화 입력 세트 또는 가중치 입력 세트를 나타낼 수 있다. 일부 경우, 본 명세서에서는 활성화 입력 세트에 대한 행렬 구조는 입력 특징 맵이라고 지칭되고, 가중치 입력 세트에 대한 행렬 구조는 커널 행렬 구조라고 지칭된다.
도 2의 예에서, 입력 데이터세트(202)는 3개의 차원, 즉 2개(X,Y)의 공간 차원과 1개(Z)의 채널 차원을 갖는 행렬 구조이다. 공간 차원과 관련하여, 일부 구현에서, 이러한 차원은 활성화 입력 세트의 공간 또는 위치에 해당한다. 예를 들어, 컨벌루션 신경망(102)이 2차원을 갖는 이미지(104)를 처리하는 경우, 행렬 구조는 이미지의 공간 좌표, 즉 X, Y 좌표에 대응하는 2개의 공간 차원을 가질 수 있다. 채널 차원과 관련하여, 이 차원은 입력(예를 들어, 활성화 입력)의 특징에 해당한다. 채널 차원은 Z, Zin 또는 채널 차원을 참조하여 기술되며, 여기서 "채널"은 이미지의 색상 채널에 해당할 수 있다.
시스템(100)은 예를 들어 입력 데이터 세트(202)의 채널 차원의 깊이 레벨을 참조하여 그룹 컨벌루션의 분할(partitioning)을 결정하도록 구성된다. 각 입력 채널은 대응하는 깊이 레벨을 가질 수 있다. 예를 들어, 도 2의 행렬 구조는 Zin 차원을 따라 확장되는 깊이 레벨을 갖는다. 예시로서, 예시적인 행렬 구조(202)가 활성화 입력 세트로서 컨벌루션 신경망 계층으로 전송된 3×3×3 이미지를 나타내는 경우, 이미지의 X 및 Y 차원(3×3)은 공간 차원일 수 있고, Z 차원(3)은 R, G 및 B 값에 해당하는 채널 차원일 수 있다.
전술한 바와 같이, 시스템(100)은 예시적인 입력 특징 맵의 채널 차원을 따라 그룹 컨볼루션의 분할을 결정할 수 있다. 예를 들어, 시스템(100)은 채널 차원을 따라 입력 그룹(210-1)에 대한 제1 분할을 결정할 수 있고 채널 차원을 따라 입력 그룹(210-2)에 대한 제2 분할을 결정할 수 있다. 일부 구현에서, 시스템(100)은 채널 차원을 따라 n개의 그룹화(210-n)를 결정하며, 여기서 n은 1보다 크거나 같은 정수이다. 입력 특징 맵(202)이 활성화 입력 세트로서 전송된 3×3×3 이미지를 나타내는 예에서, 그룹 컨벌루션을 위해 입력 그룹 210-1을 정의하기 위한 제1 분할은 9개의 '1' 활성화 입력(예를 들어, 적색 값)의 특징에 해당할 수 있으며, 그룹 컨벌루션을 위해 입력 그룹 210-2를 정의하기 위한 제2 분할은 9개의 '2' 활성화 입력(예를 들어, 녹색 값)의 특징에 해당할 수 있으며, 그룹 컨볼루션을 위한 입력 그룹(210-3)을 정의하기 위한 제3 분할은 9개의 '3' 활성화 입력(예를 들어, 청색 값)의 특징에 해당할 수 있다.
위에서 논의한 바와 같이, 그룹 컨볼루션은 입력 행렬의 채널 차원을 따라 그들을 그룹화함으로써 입력 특징 맵을 컨볼루션하는데, 여기서 그룹 컨볼루션을 나타내는 각 입력 그룹(210-n)은 대응하는 출력 그룹(220-n)과 연관된다. 컨벌루션 신경망(102)은 수신된 입력(202)에 대한 출력(206), 예를 들어 분류를 생성하기 위해 하나 이상의 컨벌루션 신경망 계층(108)을 사용한다. 예를 들어, 각 컨벌루션 신경망 계층은 연관된 커널 세트(204)를 갖는다. 커널(204)은 그룹 컨벌루션의 구성에 따라 파티션(분할)될 수 있으므로, 각 입력 그룹(210-n)은 대응하는 커널/가중치 행렬과 컨벌루션되어 컨벌루션된 출력(220-n)을 생성한다. 도 2의 예에서, 입력 그룹(210-1)은 대응하는 커널 행렬(212)과 컨볼루션되어 컨볼루션된 출력(220-1)을 생성하는 반면, 입력 그룹(210-2)은 대응하는 커널 행렬(214)과 컨볼루션되어 컨볼루션된 출력(220-2)을 생성한다.
시스템(100)은 제어 파라미터(g)에 대한 값을 동적으로 결정하도록 구성되며, 여기서 g는 1보다 큰 정수이다. 시스템(100)은 또한 Zin/g를 계산함으로써 그룹 크기를 결정하도록 구성되며, 여기서 Zin은 입력 텐서의 채널 차원을 따른 입력 채널의 수이고 g는 제어 파라미터에 의해 정의된 그룹의 수이다. 제어 파라미터(g)는 그룹 컨볼루션(예를 들어, 분할)의 수를 정의하는데 사용된다. 일부 예에서, g의 값은 시스템(100)에서 동적으로 결정되거나 주어진 동작에 대해 시스템(100)에서 미리 정의될 수 있다. 예를 들어, 그룹 컨벌루션의 수를 정의하는 제어 파라미터(g)는 시스템(100)의 컴파일러에 의해 미리 정의(및/또는 내장)되거나 런타임 시 동적으로 결정될 수 있다.
일부 구현에서, 시스템(100)은 요청된 특정 유형의 기계 학습 작업에 기초하여 그룹 컨벌루션(예를 들어, 분할)의 수를 정의하고 그에 따라 해당 작업에 대한 제어 파라미터(g)의 값을 설정한다. 일부 다른 구현에서, 시스템(100)은 i) 처리될 기계 학습 작업의 유형, ii) 컨볼루셔널 신경망의 신경 구조, iii) 컴퓨팅 환경, iv) 성능 목표; 또는 v) 이들의 조합에 기초하여 그룹 컨볼루션(예를 들어, 분할)의 수를 정의한다. 예시적인 컴퓨팅 환경에는 클라우드 기반 컴퓨팅 환경 또는 모바일 디바이스 컴퓨팅 환경이 포함될 수 있다. 성능 목표에는 속도, 대기 시간, 하드웨어 활용도, 모델 정확도, 파라미터 크기 또는 이들의 조합이 포함될 수 있다.
그룹 컨벌루션은 일반화된 형태의 컨벌루션으로서 기술될 수 있다. 일부 구현예에서, 시스템(100)은 제어 파라미터에 특정 값을 할당함으로써 제어 파라미터(g)를 초기화한다. 제어 파라미터(g)의 초기화되거나 할당된 값은 그룹 컨볼루션의 분할(partitioning)을 제어하는데 사용될 수 있다. 예를 들어, 시스템(100)이 전체 채널 차원에 대한 데이터를 사용하는 컨볼루션 연산(예를 들어, 전체(full) 컨볼루션)이 필요하다고 결정하는 경우, 시스템(100)은 제어 파라미터의 값을 g = 1로 설정하고 행렬 구조(202)의 관련 데이터를 사용하여 전체 컨볼루션을 트리거 및/또는 실행한다.
관련하여, 시스템(100)은 더 큰 신경망 계산에서 주어진 단계에 필요한 깊이별 분리 가능한 컨볼루션의 그룹화를 결정할 수 있다. 예를 들어, 시스템(100)이 채널 차원의 일부에 대한 데이터를 사용하는 2개 이상의 깊이별 분리 가능한 컨볼루션이 필요하다고 결정하는 경우, 시스템(100)은 제어 파라미터를 원하는 값(예를 들어, g = 4)으로 설정하고 행렬 구조(202)의 데이터 관련 부분을 사용하여 2개 이상(예를 들어, 4개)의 깊이별 분리 가능한 컨볼루션을 트리거 및/또는 실행한다. 일부 구현에서, 둘 이상의 그룹 컨볼루션에 대한 계산은 순차적으로, 동시에 또는 이들의 조합으로 수행된다. 예를 들어, 2개 이상의 깊이별 분리 가능한 컨볼루션 각각에 대한 개별 계산 세트 중 일부(또는 전부)는 순차적으로 또는 병렬로 수행될 수 있다.
위에서 언급한 바와 같이, 본 문서에 설명된 그룹/컨벌루션 기술은 적어도 예시적인 ML 가속기의 하드웨어 리소스의 활용도 메트릭(측정 항목) 및 계산 효율성에 대해 보다 세밀한 제어를 제공한다. 일부 구현에서, 이러한 그룹 컨볼루션 기술은 예시적인 기계 학습 모델의 특정 속성 또는 성능 메트릭에 영향을 미치고 제어하는데 사용되는 다양한 블록 또는 제어 노브(knob)를 제공한다. 예를 들어, 1과 채널 수(z) 사이에 있는 제어 파라미터(g)의 값을 선택하면 전체 컨볼루션과 깊이별 분리 가능한 컨볼루션의 두 가지 예시적인 제약 조건 사이의 연속체(continuum)가 제공된다. 이에 대해서는 아래에서 자세히 설명한다.
도 3은 기계 학습 모델의 예시적인 속성을 도시한다. 일반적으로, 속성은 위에서 설명한 컨볼루션 신경망(102)을 사용하여 수행되는 다양한 컨볼루션 연산에 해당한다. 예를 들어, 속성(302)은 전체 컨볼루션에 대한 동작(연산)들을 수행하는데 사용되는 파라미터 수량 및 곱셈 누적 셀(Multiple Accumulation Cell: MAC)을 보여주고, 속성(304)은 깊이별 컨볼루션에 대한 동작을 수행하는데 사용되는 파라미터 수량 및 곱셈 누적 셀을 보여주고, 속성(306)은 그룹 컨볼루션에 대한 연산을 수행하는데 사용되는 파라미터 수량 및 곱셈 누적 셀을 보여준다.
제어 파라미터(g) 및 그룹 컨벌루션의 구성은 주어진 작업에 사용되는 파라미터(예를 들어, 트레이닝 가능한 파라미터)의 수는 물론 그 작업에 대한 동작(연산)을 수행하는데 사용되는 곱셈 누적 셀의 양을 제어하도록 결정 및/또는 조정될 수 있다. 기계 학습 모델의 이러한 예시적인 속성(302, 304, 306) 각각은 모델의 다양한 성능 메트릭에 상응하는 영향을 미칠 수 있다. 예를 들어, 트레이닝 가능한 파라미터 수 및/또는 곱셈 누적 셀(또는 연산) 수의 증가 또는 감소는 기계 학습 모델의 정확도, 속도 및/또는 대기 시간에 상응하는 영향을 미친다. 또 다른 예에서, 전체 컨볼루션에 비해, 깊이별 컨볼루션을 사용하는 것은 가볍고 저렴한(즉, 리소스 집약도가 낮은) 옵션일 수 있지만, ML 가속기의 집적 회로에서 깊이별 컨볼루션을 실행하면 회로의 하드웨어 리소스 활용도가 떨어지는 경우가 많다.
예를 들어, 깊이별(또는 깊이별 분리 가능한) 컨볼루션을 수행하는 경우, 수십 또는 수백 개의 하드웨어 곱셈 누적 셀을 포함하는 회로(114)의 표준 하드웨어 어레이는 대기 시간을 최소화하거나 낮추면서 주어진 계산 주기(compute cycle) 동안 해당 하드웨어 셀의 3% 활용도를 경험할 수 있다. 따라서 깊이별 컨볼루션을 사용하면 속도가 빨라질 수 있지만 하드웨어 활용도가 낮아 비효율적이기도 하다. 반대로, 전체(full) 컨볼루션을 수행할 때 회로(114)의 하드웨어 어레이는 실질적으로 더 높은 활용도(예를 들어, 73%)를 경험할 수 있으므로 어레이의 곱셈 누적 셀들의 대부분이 주어진 계산 주기에 사용된다. 깊이별 컨볼루션과 비교할 때, 전체 컨볼루션을 수행할 때 이렇게 높은 활용도는 계산 지연 시간이 상당히 길어지는 대가로 나타나는 경우가 많다.
위에서 설명한 것처럼, 본 문서에 설명된 그룹 컨볼루션 기술은 예시적인 ML 하드웨어 가속기의 하드웨어 리소스의 활용도 메트릭과 계산 효율성에 대해 보다 세밀한 제어를 제공한다. 1과 채널 수(z) 사이에 있는 제어 파라미터(g) 값의 선택은 전체 컨볼루션(308)과 깊이별 분리 가능한 컨볼루션(310)의 두 가지 예시적인 제약 사이의 연속체(continuum)를 제공한다. 시스템(100)은 도 2의 예에 도시된 바와 같이, 채널 차원의 깊이 레벨을 참조하여 그룹 컨벌루션의 분할을 결정할 수 있다. 제어 파라미터(g)는 그룹 컨볼루션(예를 들어, 분할)의 수를 정의하는데 사용된다.
도 3의 예시적인 그래프(312)는 전체 컨볼루션(308)과 깊이별 컨볼루션(310) 사이의 연속체를 따라 2와 채널 수(z) 사이에 있는 g에 대한 서로 다른 값(324)을 선택하기 위한 예시적인 파라미터 수량(320)과 MAC 수량(322)을 도시한다. 이 예에서 zin 차원은 256이다. 그래프(312)는 그룹 컨벌루션 값(g)의 해당 증가에 비해 트레이닝 가능한 파라미터의 양과 곱셈 누적 셀(또는 연산)의 양이 감소하는 예를 보여준다.
위에서 논의한 바와 같이, 회로(114)는 그룹 컨벌루션 계층과 같은 계층의 출력을 계산하기 위해 회로의 제어 로직을 사용하여 순회(traverse, 탐색)되거나 액세스될 수 있는 텐서의 요소들에 대응하는 위치를 갖는 메모리를 포함할 수 있다. 메모리에서 페치된 요소(예를 들어, 입력 또는 활성화)는 계층의 다수의 출력을 계산하는데 유용해야 한다. 가중치(예를 들어, 파라미터)의 수는 그룹화 크기에 따라 확장될 수도 있다. 일부 구현에서, 메모리로부터의 파라미터 전송은 계산 대기 시간이 증가하는 병목 현상을 발생시킬 수 있다. 선호하는 신경망 아키텍처를 결정할 때, 검색 데이터 또는 시뮬레이션의 예시적인 세트는 파라미터 전송 시간과 관련된 병목 현상을 나타낼 수 있다. 그런 다음 공개된 그룹 컨볼루션 개념과 그룹 컨볼루션 기반 신경 블록을 사용하여 파라미터 수를 줄이고 기계 학습 작업에 대한 계산 시간을 개선하거나 가속화하는 아키텍처가 정의될 수 있다.
도 4는 프로세스 블록(410), 프로세스 블록(420) 및 프로세스 블록(430)의 예를 도시하는 블록도이다. 각각의 프로세스 블록(410, 420, 430)은 하나 이상의 계층 블록을 포함한다. 일반적으로, 각각의 프로세스 블록(410, 420, 430)은 컨벌루션 신경망의 서로 다른 계층 블록으로 표현될 수 있다. 도 4의 예에서, 프로세스 블록(410, 420, 430) 각각은 주어진 컨볼루션 연산에 대해 수행되는 동작의 서브세트일 수 있다. 컨벌루션 동작은 전술한 예시적인 하드웨어 집적 회로(114)에서 구현될 수 있는 컨벌루션 신경망(102)을 사용하여 실행된다.
신경망 블록은 단일 계층 또는 다수의 계층을 포함하는 신경망의 구성요소를 설명할 수 있다. 모바일 비전 모델과 같은 예시적인 컴퓨터 비전 모델에서 광범위하게 사용되는 공통 블록은 역 병목 현상(IBN) 계층 블록(402)("IBN 계층(402)")이다. 일반적으로, IBN 블록은 여러 컨볼루션 계층를 특정 방식으로 결합하는 더 큰 신경 아키텍처의 매크로 블록일 수 있다. IBN 계층를 포함한 여러 유형의 계층(또는 블록)는 예시 분류 또는 객체 감지 네트워크를 형성하기 위한 빌딩 블록으로서 사용된다.
IBN 계층(402)은 포인트별 컨볼루션(404), K×K 깊이별 컨볼루션(405) 및 최종 포인트별 컨볼루션(406)을 포함할 수 있다. 포인트별 컨볼루션은 채널 차원을 확장하며 이 포인트별 컨볼루션의 예는 도 4에 "1×1 Conv(확장)"로 표시되어 있다. K×K 깊이별 컨볼루션 커널은 포인트별 컨볼루션 이후 채널 차원의 확장된 깊이에 적용된다. 최종 포인트별 컨볼루션(406)은 확장된 채널 차원을 더 작은 값으로 다시 투영한다. 이 최종 포인트별 컨볼루션의 예는 도 4에 "1×1 Conv(투영)로 표시되어 있다.
IBN 계층 블록(402)에서와 같이 K×K 깊이별 컨볼루션을 사용하는 것은 매우 일반적이다. 이는 확장 후에는, 크거나 확장된 채널 차원에 대한 전체 컨볼루션을 계산하는 것은 처리 및 계산 리소스 측면에서 매우 비용이 많이 들기 때문이다. 일부 구현에서, 포인트별 컨볼루션(404)과 K×K 깊이별 컨볼루션(405)은 융합(형)(fused) IBN 계층(407)을 나타내는 K×K 전체 컨볼루션(융합 확장) 프로세스 블록으로 대체된다. 일반적으로, 융합 IBN 계층(407)은 확장 및 깊이별 컨볼루션 연산을 단일의 전체 컨볼루션 신경 블록으로 병합한다.
전체 컨볼루션에는 많은 수의 파라미터/가중치가 포함될 수 있으며 집적 회로의 상당한 비율의 하드웨어 컴퓨팅 리소스가 필요할 수 있다. 위에 표시된 바와 같이, 이러한 자원의 예는 회로(114)의 하드웨어 계산 어레이(예를 들어, 수축기 어레이)의 곱셈 누적 셀, 집적 회로(114)의 벡터 유닛, 또는 둘 다일 수 있다. 이와 달리, 아래에 설명된 블록(414, 416, 422, 432)과 같은 개시된 신경 블록 대안을 사용하여 구현된 상기 개시된 그룹 컨벌루션 기술은 입력 채널 세트(예를 들어, 대규모 입력 채널)에 대해 트레이닝 가능한 파라미터의 양을 늘리는 향상된 접근 방식을 제공하므로 모델 정확도가 향상되지만 그룹이 아닌(비그룹) 컨볼루션 대안에 비해 계산 비용이 더 낮다.
이제 프로세스 블록(410)을 참조하면, 위에서 설명한 K×K 깊이별 컨볼루션(405)이 K×K 그룹 컨볼루션(414 또는 416)으로 대체되는 그룹화된 IBN 순차(progressive 투영(또는 순차 확장) 블록이 도시된다. 프로세스 블록(410)은 채널 차원의 순차(점진적인) 투영을 수행하기 위해 K×K 그룹 컨볼루션(414)을 구현하는 제1 예 또는 채널 차원의 순차 확장을 수행하기 위해 K×K 그룹 컨볼루션(416)을 구현하는 제2 예를 가질 수 있다. .
프로세스 블록(410)의 제1 예에서, 시스템(100)은 입력 특징 맵에 1×1 컨볼루션(확장)(404)을 적용함으로써 입력 특징 맵(예를 들어, 입력(438))으로부터 확장된 특징 맵을 생성할 수 있다. 입력 특징 맵은 c1개의 채널을 갖는 h×w 특징 맵일 수 있다. 이 확장된 특징 맵은 c2개의 채널을 갖는 h×w 특징 맵일 수 있다. 여기서 c2는 c1보다 크다. 일부 구현에서, 1×1 컨볼루션은 입력 필터보다 더 많은 수의 출력 필터를 갖는다. K×K 그룹 컨볼루션(414)은 채널 차원의 순차 투영을 수행하기 위해 확장된 특징 맵에 적용된다. 예를 들어, 컨벌루션 신경망(102)은 컨벌루션 신경망(102)의 그룹 컨볼루션 계층에서 구현된 그룹 컨벌루션을 사용하여 확장된 특징 맵에 대한 순차 투영을 수행할 수 있다. 그룹화된 IBN 순차 투영은 투영 전용 파라미터와 메인 K×K 컨볼루션 연산자의 트레이드오프(tradeoff, 교환)에 유연성을 제공할 수 있다.
프로세스 블록(410)의 제1 예에서, 최종 포인트별 컨볼루션(406)은 확장된 채널 차원을 더 작은 값으로 다시 투영한다. 따라서, 그룹 컨벌루션과 관련된 K×K 커널은 1×1 투영(406)이 채널 크기를 최종 값으로 낮추기 전에 그 채널 크기의 초기 감소를 수행할 수 있다. 각각의 추가(add) 블록(418)은 주어진 프로세스 블록(예를 들어, 410)에 공급되는 입력(438)과 함께 예시적인 컨벌루션된 출력(436)을 추가하는데 사용될 수 있는 선택적인(optional) 잔여(또는 스킵) 연결이다. 예시적인 합계(440)는 대응하는 프로세스 블록에서 수행되는 연산의 출력으로서 전달된다.
프로세스 블록(410)의 제2 예에서, 시스템(100)은 입력 특징 맵에 1×1 컨볼루션(확장)(404)을 적용함으로써 입력 특징 맵(예를 들어, 입력(438))으로부터 초기 확장된 특징 맵을 생성할 수 있다. 이 초기 확장된 특징 맵은 c2개의 채널을 갖는 h×w 기능 맵일 수 있으며 c2는 c1보다 크다. 시스템(100)은 초기 확장된 특징 맵에 K×K 그룹 컨볼루션(416)을 적용함으로써 초기 확장된 특징 맵으로부터 확장된 특징 맵을 생성한다. 예를 들어, 컨벌루션 신경망(102)은 그 컨벌루션 신경망(102)의 그룹 컨볼루션 계층에서 구현된 그룹 컨볼루션을 이용하여 초기 확장된 특징 맵으로부터 확장된 특징 맵을 생성할 수 있다. 확장된 특징 맵은 c3개의 채널을 갖는 h×w 특징 맵일 수 있으며 c3는 c2보다 크다. 이 그룹화된 IBN 순차 확장 동작은 확장 전용 파라미터와 메인 K×K 컨볼루션 연산자의 트레이드오프에 유연성을 제공할 수 있다. 그룹화된 IBN 순차 확장은 확장 계층의 일부를 융합되지 않은 상태로 유지하고 메인 K×K 컨볼루션 전에 그룹 전체에 걸쳐 채널별 컨볼루션을 허용할 수 있다. 프로세스 블록(410)의 최종 포인트별 컨볼루션(406)은 확장된 채널 차원을 더 작은 값으로 다시 투영한다.
이제 프로세스 블록(420)을 참조하면, 이 프로세스 블록은 위에서 설명한 1×1 컨볼루션(확장)(404)과 K×K 깊이별 컨볼루션(405)이 K×K 그룹 컨볼루션(422)으로 대체된 융합 그룹화된((fused-grouped)) IBN 블록이다. 이 K×K 그룹 컨볼루션(422)은 포인트별(404) + 깊이별(405) 쌍을 대체하고 채널 차원을 확장하기 위해 K×K 그룹 컨볼루션(422)을 통해 이러한 동작들의 융합 측면을 허용하기 때문에 적어도 "융합 확장" 지정을 포함한다. 따라서, 프로세스 블록(420)에서, 시스템(100)은 K×K 그룹 컨볼루션(422)을 입력 특징 맵에 적용함으로써 예시적인 입력 특징 맵(예를 들어, 입력(438))으로부터 확장된 특징 맵을 생성할 수 있다. 예시적인 입력 특징 맵은 채널이 c1개인 h×w 특징 맵일 수 있다. 확장된 특징 맵은 c2개의 채널을 갖는 h×w 특징 맵일 수 있으며 c2는 c1보다 크다. 프로세스 블록(420)의 최종 포인트별 컨볼루션(406)은 확장된 채널 차원을 더 작은 값으로 다시 투영한다. 전술한 바와 같이, 대응하는 합계(440)는 프로세스 블록(420)에서 수행되는 특정 동작들의 출력으로서 전달된다.
일부 구현에서, 융합 그룹 컨벌루션 블록(422)은 채널 차원을 따라 보다 효율적인 처리를 허용하는 융합 IBN 계층(407)에 대한 대안을 제공한다. 예를 들어, 이러한 효율성은 컴퓨터 비전 모델의 후반 단계(later stage)에서 실현될 수 있다. 일부 경우, 이러한 후반 단계는 채널 차원을 따른 컨볼루션들과 관련된 데이터 해상도가 상당히 큰 경우에 해당한다. 융합 그룹 컨벌루션을 통한 처리 속도 향상은 그룹 컨벌루션 동작을 포함하는 프로세스 블록(420)이 특정 유형의 특수 목적 집적 회로를 사용하여 실행될 때 특히 최적화될 수 있다. 예를 들어, 특수 목적 집적 회로는 도 6을 참조하여 후술되는 바와 같이 메모리로부터 회로의 하나 이상의 계산 셀로 계층 입력들을 브로드캐스트하는 브로드캐스트 입력 버스를 포함하는 신경망 프로세서일 수 있다.
융합 그룹 컨벌루션 블록(422)은 그룹화된 IBN 계층(414)에 비해 약간 더 높은 파라미터 개수(count)를 요구할 수 있다. 전체(full) 컨볼루션 및 깊이별 분리 가능 컨볼루션의 두 제약 조건 사이의 연속체에서 융합 그룹 IBN(422)이 연속체에서 더 높다. 예를 들어, 융합형 그룹화된 IBN 계층(422)은 깊이별 컨볼루션으로부터 전체 연속체까지의 연속체를 따라 전체 컨볼루션에 더 가까울 수 있다.
이제 프로세스 블록(430)을 참조하면, 이 프로세스 블록은 위에서 설명된 K×K 깊이별 컨벌루션(405)이 K×K 그룹 컨벌루션(432)으로 대체되는 그룹화된 IBN 블록이다. 전술한 바와 같이, 시스템(100)은 입력(438)에 1×1 컨볼루션(404)을 적용하여 확장된 특징 맵을 생성한다. K×K 그룹 컨볼루션(432)은 컨벌루션 신경망(102)의 그룹 컨볼루션 계층에 적용된다. K×K 그룹 컨벌루션(432)은 총 개수가 동일한 입력 필터와 출력 필터를 갖는다. 다른 프로세스 블록과 유사하게, 프로세스 블록(430)의 최종 포인트별 컨볼루션(406)은 확장된 채널 차원을 더 작은 값으로 다시 투영하고 해당 합계(440)는 프로세스 블록(430)에서 수행되는 특정 동작들의 출력으로서 전달된다.
프로세스 블록(430)에서 실행되는 컨볼루션 연산들은 베이스라인(기준) IBN 계층에 비해 더 작은 확장 비율을 포함할 수 있다. 이러한 확장 비율이 작으면 파라미터 수가 줄어들 수 있다. 파라미터 수를 복구하기 위해, 프로세스 블록(430)(및 다른 프로세스 블록)의 컨볼루션 연산들은 채널 간cross-channel) 정보를 활용하는 K×K 커널에 대한 그룹 컨볼루션을 사용할 수 있다. K×K 그룹 컨볼루션(432)은 입력 채널 차원을 따른 컨볼루션을 포함하는 다른 블록 유형과 인터리브될 수 있다. 이 인터리브된 패턴은 그룹 간(cross-group) 입력 채널 컨볼루션 부족을 완화할 수 있다.
일반적으로, 프로세스 블록(410, 430)의 개별 아키텍처는 K×K 깊이별 컨볼루션을 K×K 그룹 컨볼루션으로 대체한다. K×K 깊이별 컨볼루션을 K×K 그룹 컨볼루션으로 대체하는 것의 적어도 하나의 이점은 K×K 그룹 컨볼루션이 전체 컨볼루션에 비해 대기 시간을 감소시키면서 더 많은 트레이닝 가능한 파라미터를 생성한다는 것이다. K×K 그룹 컨볼루션을 사용한 추가의 트레이닝 가능한 파라미터는 모델 정확도를 높이는데 기여한다. 이렇게 향상된 정확도는 깊이별 컨볼루션과 비교할 때 약간 또는 최소한의 대기 시간 증가로 달성될 수 있다.
깊이별 컨볼루션을 그룹 컨볼루션으로 대체하는 것은 모바일 디바이스 또는 엣지 컴퓨팅 애플리케이션용으로 구성된 텐서 처리 장치(TPU)와 같은 특정 유형의 하드웨어 가속기에 대한 컨볼루션 연산에 따라 다를 수 있다. 일부 구현에서, K×K 깊이별 컨벌루션에 비해, K×K 그룹 컨벌루션은 집적 회로(114)의 하드웨어 레이아웃에 관해 보다 효율적인 하드웨어 매핑을 달성하도록 구성될 수 있다. 예를 들어, 입력 채널과 출력 채널의 측면에서 1:1 관계보다는, 그룹 컨볼루션은 블록 개념을 활용하여 그룹들 내 입력 채널을 따라 컨볼루션을 수행할 수 있다. 이는 입력 채널을 따라 더 많은 정보를 사용할 수 있는 알고리즘상의 이점을 제공하여 컴퓨터 비전 네트워크의 하나 이상의 계층에서 표현 용량을 향상시킨다.
특정 기계 학습 작업에 대한 계산이 CNN의 더 깊은 계층으로 진행됨에 따라 채널 차원은 더 커질 수 있다. 출력 정확도 또는 컴퓨팅/처리 속도와 같은 특정 성능 개선을 실현하기 위한 시도에서, 위에서 설명된 융합 IBN 계층(407)과 같은 융합 IBN 계층 블록을 사용하여 이전 접근법이 연구되었다. 그러나, 융합 IBN 계층의 사용은 입력 채널(zin)의 더 큰 각 차원에 대해 전체 컨볼루션을 수행하는 비용으로 인해 실용적이지 않으며, 이로 인해 계산(컴퓨팅) 속도가 느려진다.
이전 접근법에 비해, 프로세스 블록(410, 420, 430)의 개별 그룹 컨볼루션은 특정 처리 페널티를 최소화하면서 모델 성능을 각각 향상시킬 수 있는 신경 블록 대안을 제공한다. 예를 들어, 융합 그룹화된 IBN 블록(422)은 기존 IBN 계층 또는 융합(형) IBN 계층과 연관된 대기 시간 또는 확장/대형 데이터세트 처리 페널티 없이 성능 개선을 달성하는데 사용될 수 있다. 일반적으로, 그룹 컨벌루션 블록(414, 416, 422, 432) 각각은 하나 이상의 그룹 컨벌루션 계층을 포함할 수 있는 신경망 블록이다. 또한, 그룹 컨볼루션 블록(414, 416, 422, 432) 각각은 입력 채널 차원을 따라 컨볼루션을 구현하는 다른 계층 또는 블록 유형과 인터리브될 수 있다. 인터리브된 신경 블록의 예는 도 5에 도시되어 있다.
인터리브된 패턴은 그룹 간 입력 채널 컨벌루션의 부족을 완화할 수 있다. 예를 들어, 그룹 컨볼루션은 교차 채널 정보를 사용하지만, 이러한 정보는 그룹에만 제한되며 일반적으로 그룹들이 사용될 때 채널 차원에 따라 정보를 혼합하려면 셔플(shuffle) 동작이 필요하다. 인터리브된 패턴은 또한 이러한 추가 셔플 연산자(예를 들어, ShuffleNet)의 사용을 방지한다. 블록(410 및 430)과 매우 유사하게, 예를 들어 블록(422)을 통한 융합 그룹 컨볼루션 연산은 베이스라인 IBN에 비해 더 많은 트레이닝 가능한 파라미터를 생성할 수 있으며, 특정 유형의 텐서 모양(shapes)에 대해 베이스라인 IBN 및 융합 IBN 계층에 비해 처리 속도를 높일 수(예를 들어, 더 빠르게 실행할 수) 있다.
일부 구현에서, 깊이별 컨볼루션은 입력 채널과 출력 채널을 동일한 크기로 제한하지만, 그룹 컨볼루션은 다른 크기를 가능하게 할 수 있다. 예를 들어, K×K 그룹 컨볼루션(414) 커널은 1×1 투영이 채널 크기를 최종 값으로 낮추기 전에 채널 크기의 초기 축소를 수행할 수 있다. 여기서 한 가지 가정은 그룹 컨볼루션이 채널들을 최종 채널 차원으로 줄여 1×1 투영을 제거하면 그룹당 채널 깊이(zo)가 작기 때문에 성능이 최적보다 낮을 수 있다는(예를 들어, 저하된다는) 것이다. 하지만, 이것은 순차(점진적인) 확장의 구현을 허용하는 집적 회로 구성을 통해 그룹 컨볼루션이 기본적으로 지원된다면 완화될 수 있다. 예를 들어, 회로 구성은 집적 회로의 개별 MAC에 입력을 전달하는 것을 허용하는 입력 버스를 포함할 수 있다. 이는 도 6-도 9를 참조하여 아래에서 더 자세히 설명된다.
시스템(100)은 다수의 서로 다른 유형의 그룹 컨볼루션 블록으로부터 선택하도록 동작 가능하다. 예를 들어, 앞서 설명한 그룹 컨벌루션 블록(414, 416, 422, 432) 외에, 시스템(100)은 또한 K×K 그룹 컨볼루션을 구현하는 융합-투영-그룹(fused-projection-grouped) 컨볼루션 블록으로부터 선택할 수 있다. 융합-투영-그룹 컨벌루션은 (포인트별 확장을 융합하는 대신) K×K 메인 컨볼루션에 포인트별 투영을 융합한다. 텐서 모양에 따라, 융합-투영-그룹 IBN은 융합 IBN에 비해 유사한 처리 효율성을 달성하면서 더 많은 트레이닝 가능한 파라미터를 제공할 수 있다. 융합-투영-그룹 IBN은 투영 계층의 일부를 융합되지 않은 상태로 유지하고 메인 K×K 컨볼루션 이후 그룹 전체에 걸쳐 채널별 컨볼루션을 허용한다.
도 5는 도 1의 예시적인 컴퓨팅 시스템에서 사용될 수 있는 기계 학습 모델(102)의 컨벌루션 신경망에 대한 예시적인 아키텍처(500)이다. 신경 아키텍처(500)는 예시적인 입력 이미지의 서로 다른 특성을 얻기 위해 다수의 개별 컨볼루션 연산 세트를 구현할 수 있다. 일부 구현에서, 시스템(100)은 도 4의 예를 참조하여 위에서 설명한 그룹화된 IBN 옵션과 그룹화되지 않은(비그룹화된) IBN 옵션으로부터 다양한 IBN 계층/블록 옵션을 전략적으로 선택하고 배치하도록 동작 가능하다. 일부 구현에서, 시스템(100)은 적층형, 연결형 또는 결합형 구성으로 동작들을 선택 및 배열하여(즉, 이들을 함께 배열 및 결합하여), 대규모 컴퓨터 비전 네트워크/모델을 구현하는데 사용될 수 있는 예시적인 아키텍처(500)를 형성하도록 동작 가능하다.
도 5의 예에서, 아키텍처(500)는 계층 블록의 시퀀스를 포함하며, 여기서 시퀀스 내 계층 블록의 제1 서브세트 각각은 입력 이미지를 처리하기 위한 동작들을 수행하도록 구성된다. 보다 구체적으로, 아키텍처(500)는 계층 블록(502)의 제1 서브세트, 계층 블록(504)의 제2 서브세트, 및 계층 블록(506)의 제3 서브세트를 포함한다. 일부 구현에서, 계층 블록(502, 504, 506)의 적어도 하나의 서브세트는 2개 이상의 서로 다른 유형의 신경 블록이 교대로 반복되는 시퀀스를 포함할 수 있다. 예를 들어, 계층 블록(502)의 서브세트는 융합 IBN 계층과 융합 그룹 IBN 계층을 포함하는 교번 시퀀스를 가질 수 있다.
융합 IBN 계층은 확장 및 깊이별 컨볼루션 연산을 단일의 전체 컨볼루션 신경 블록으로 병합하는 (전술한) 융합 IBN 계층(407)과 같은 제1 개별 신경 블록(512)을 나타내는 반면, 융합 그룹 IBN 계층은 포인트별(404) + 깊이별(405) 쌍을 대체하고, 채널 차원을 확장하기 위해 K×K 그룹을 통해 이러한 동작들의 융합 측면을 허용하는 융합 그룹 IBN(422)과 같은 제2 개별 신경 블록(514)을 나타낼 수 있다. 전술한 바와 같이, 이 블록은 채널 차원들을 따라 보다 효율적인 처리를 허용하는 융합 IBN 계층(407)에 대한 대안을 제공할 수 있다.
보다 구체적으로, 제1 신경 블록(512)은 그룹화되지 않은 IBN 블록일 수 있는 반면, 제2 신경 블록(514)은 그룹화된 IBN 블록일 수 있다. 제1 및 제2 신경 블록(512, 514) 각각은 하나 이상의 컨벌루션 신경망 계층을 포함한다. 따라서, 층 블록들(502)은 그룹화된 IBN 계층과 비그룹된 IBN 계층의 교번 시퀀스를 포함할 수 있다. 예를 들어, 계층 블록의 교번 시퀀스는 비그룹 컨벌루션 계층 블록들과 인터리브되는 그룹 컨벌루션 계층 블록들을 가질 수 있다.
도 6은 컨벌루션 신경망에 대한 계산을 수행하는데 사용되는 예시적인 하드웨어 계산(컴퓨팅) 타일(600)("계산 타일(600)")을 도시한다. 다수의 계산 타일(600)은 신경망 프로세서, 주문형 집적 회로 또는 하드웨어 가속기와 같은 특수 목적 프로세서를 형성하도록 배열되거나 구성될 수 있다. 일부 구현에서, 계산 타일(600)은 위에서 설명된 하드웨어 집적 회로(114)에 포함된 다수의 계산 타일 중 하나이다.
각 계산 타일(600)은 다층 신경망의 하나 이상의 계층에 필요한 계산(예를 들어, 신경망 계산)을 독립적으로 실행하도록 구성된다. 예를 들어, 계산 타일(600)은 계산 타일(600)의 메모리(아래 설명됨)로부터 로컬로 획득된 데이터 및 명령에 기초하여 다수의 계산 스레드를 실행하도록 구성된다. 일부 경우, 데이터 및 명령은 하드웨어 집적 회로(114)의 통신/데이터 버스(602)를 통해 계산 타일(600)에 수신된다. 예를 들어, 데이터 버스(602)는 계산 타일(600) 각각에 연결되어, 서로 다른 계산 타일(600) 사이에서 데이터를 라우팅하고 명령을 계산할 수 있다. 따라서, 주어진 계산 타일(600)에 대해, 데이터 및 명령은 타일 외부의 소스로부터 계산 타일(600)에 수신될 수 있다. 소스는 다른 계산 타일(600), 하드웨어 회로(114)의 상위 레벨 컨트롤러, 하드웨어 회로(114) 외부의 호스트 디바이스, 또는 이들의 조합일 수 있다.
계산 타일(600)은 신경망 계산을 실행하기 위한 명령 및 피연산자를 포함할 수 있는 데이터 세트(604)를 수신한다. 아래에 기술된 바와 같이, 데이터(604)는 그룹 컨볼루션 연산(연산)을 실행하기 위한 명령 및 피연산자일 수 있다. 계산 타일(600)은 자신의 로컬 제어 로직(예를 들어, 컨트롤러)을 사용하여 데이터(604) 분석에 응답하여 명령과 피연산자를 식별한다. 제어 로직은 하나 이상의 명령에 기초하여 피연산자를 처리하기 위한 제어 신호를 생성한다. 예를 들어, 제어 로직은 명령의 하나 이상의 연산 코드를 사용하여 연산 타일(600)의 대응하는 구성요소에 대한 각각의 제어 신호를 생성한다. 구성요소들은 제어 신호에 기초하여 그룹 컨볼루션 연산을 실행하기 위해 협력한다.
도 6의 예에서, 로컬 제어 로직은 적어도 텐서 제어 유닛(606)("텐서 컨트롤(606)") 및 메모리 액세스 제어 유닛(608)("DMA 컨트롤(608"))로 표현된다. 텐서 컨트롤(606)은 텐서 순회 유닛(TTU)(626)을 포함한다. 일반적으로, 텐서 컨트롤(606)은 TTU(626)를 사용하여 신경망 계산을 위한 텐서 순회 동작들을 관리한다. 이에 대해서는 아래에서 자세히 설명한다. DMA 컨트롤(608)은 계산 타일(600)에 포함된 로컬 메모리의 메모리 위치들에 대한 주어진 계산에 대한 피연산자 기록/저장을 관리한다. DMA 컨트롤(608)은 또한 로컬 메모리의 메모리 위치들로부터 주어진 계산을 위한 피연산자를 판독/획득을 관리한다. 일부 구현에서, DMA 컨트롤(608)은 TTU(626)와 협력하여 메모리 액세스 동작을 수행한다. 일부 다른 구현에서, DMA 컨트롤(608)은 TTU(626)와의 협력과 관계없이 메모리 액세스 동작을 수행하기 위한 자체 전용 TTU를 포함한다.
각각의 계산 타일(600)은 신경망 계층에 대한 입력을 저장하고 해당 계층에 대한 가중치를 저장하기 위한 메모리를 포함한다. 입력 및 가중치는 통신 버스(602)를 통해 계산 타일(600)에 도착하는 피연산자(또는 데이터)에 해당한다. 도 6의 예에서, 메모리는 신경망 계층에 대한 입력을 저장하는 제1 메모리(610) 및 신경망 계층에 대한 가중치를 저장하는 제2 메모리(612)를 포함한다. 제1 메모리는 예를 들어 8비트 청크로 데이터를 저장하고, 판독하고, 관리하는 좁은 메모리일 수 있는 반면, 제2 메모리는 예를 들어 32비트 청크의 데이터를 저장하고, 판독하고, 관리하는 넓은(wide) 메모리일 수 있다. 제1 및 제2 메모리 각각은 더 많거나 더 적은 비트의 데이터를 저장하고, 판독하고, 관리할 수 있다. 일부 구현에서, 제1 및 제2 메모리(610, 612) 각각은 계산 타일(600)의 더 큰 로컬 메모리의 하위 부분(sub-part)이다. 일부 다른 구현에서, 제1 메모리(610)와 제2 메모리(612) 각각은 계산 타일(600)의 별개의 로컬 메모리 유닛이다.
각각의 계산 타일(600)은 계산 타일(160)에 전달된 가중치 값과 입력에 대응하는 피연산자를 사용하여 덧셈 및 곱셈과 같은 산술 연산을 수행하도록 구성된 개별 계산 유닛(614)을 포함한다. 계산 유닛(614) 각각은 다수의 산술 블록을 포함할 수 있다. 도 6의 예에서, 연산 블록은 각각 "셀 #_"으로 식별된다. 각 연산 블록(또는 셀)은 곱셈 누적 셀(616) 및 합계 레지스터(618)를 포함한다. 곱셈 누적 셀(616)은 입력과 가중치를 사용하여 산술 연산(예를 들어, 곱셈)을 수행하도록 구성된다.
예를 들어, 산술 연산은 하나 이상의 누적 값 세트를 생성하기 위해 좁은 메모리(610)에서 얻은 입력 또는 활성화를 넓은 메모리(612)에서 얻은 가중치와 곱하는 것을 포함한다. 각각의 계산 타일(600)은 계산 유닛(614)의 개별 블록 또는 곱셈 누적 셀(616)에 대한 입력을 브로드캐스팅, 전달 또는 제공하는 것을 허용하는 각각의 입력 버스(617)를 포함한다. 일부 구현에서, 입력 버스(617)는 좁은 메모리로부터 하나 이상의 곱셈 누적 셀까지 그룹 컨볼루션 계층에 대한 입력을 브로드캐스트하는 브로드캐스트 입력 버스이다. 합계 레지스터(618)는 누적된 출력 값(620) 세트를 형성하기 위해 그룹화될 수 있는 부분 합계를 저장하는데 사용된다.
계산 타일(600) 각각은 출력 버스(622) 및 그 출력 버스(622)에 연결된 활성화 유닛(626)을 포함한다. 계산 타일(600)은 선택적으로 출력 버스(622)에 연결된 하나 이상의 레지스터(624)를 포함할 수 있다. 일부 구현에서, 하나 이상의 레지스터(624) 각각은 신경망 계층에 대한 출력 값(620)(예를 들어, 누적된 값 또는 부분합계)을 활성화 유닛(626)으로 시프트하는데 사용되는 개별 시프트 레지스터이다. 활성화 유닛(626)은 비선형 활성화 함수를 출력 값(620)에 적용하도록 동작 가능하다. 활성화 유닛(626)은 출력(620)에 적용된 활성화 함수에 기초하여 계층에 대한 출력 활성화 세트를 생성하도록 동작 가능하다.
활성화 유닛(626)은 제1 메모리(610)에 연결되고, 메모리에 저장하기 위해 출력 활성화를 좁은 메모리(610)에 전달하도록 구성된다. 출력 활성화는 신경망 계층의 계층 출력에 해당한다. 예를 들어, 출력 활성화 세트는 출력 특성 맵을 생성하기 위해 입력 특성 맵에 그룹 컨볼루션을 적용하는 그룹 컨볼루션 계층의 출력(또는 출력의 일부)일 수 있다. 따라서, 출력 활성화는 출력 특징 맵에 해당할 수 있다. 일부 구현에서, 활성화 유닛(626)은 다수의 부분 합 또는 누적된 값을 값의 벡터로 집계하도록 동작 가능하다.
각각의 계산 타일(600)은 계산 타일에서 그룹 컨볼루션 계층에 대한 동작들을 관리하고 구현하도록 동작 가능한 선택적인 그룹 컨볼루션 컨트롤(635)을 포함할 수 있다. 예를 들어, 계산 타일(600)은 입력 특징 맵의 채널 차원을 따라 입력의 하나 이상의 그룹화에 그룹 컨볼루션을 적용함으로써 그룹 컨볼루션 계층을 통해 입력 세트를 처리하라는 명령을 수신할 수 있다. 하나 이상의 입력 그룹의 개별 입력은 메모리(610)의 다양한 위치뿐만 아니라 다양한 계산 타일(600)에 걸쳐 저장될 수 있다. 각 메모리 위치는 개별 주소에 의해 식별된다. 각각의 그룹 컨볼루션 입력을 저장하는 개별 메모리 위치(또는 그의 각각의 주소)는 다차원 입력 텐서, 또는 제1 메모리(610)에 저장된 입력 특징 맵과 같은 입력 텐서의 요소에 해당할 수 있다.
그룹 컨벌루션 컨트롤(635)은 하나 이상의 곱셈 누적 셀(616)로 브로드캐스트될 대응하는 그룹 컨벌루션 입력에 대한 메모리 주소를 획득하거나 결정할 수 있다. 일부 구현에서, 그룹 컨볼루션 컨트롤(635)은 DMA 컨트롤(608)과 데이터 통신하고 DMA 컨트롤(608)과 상호작용하여 대응하는 그룹 컨볼루션 입력에 대한 메모리 위치에 액세스하기 위한 주소를 발행한다. 일부 다른 구현에서, 그룹 컨벌루션 컨트롤(635)은 대응하는 그룹 컨벌루션 입력에 대한 메모리 주소에 액세스하기 위해 제1 메모리(610)와 직접 통신한다. 그룹 컨벌루션 컨트롤(635)은 유사한 동작들을 수행하여 제2 메모리(612)에 저장된 파라미터 텐서의 가중치에 액세스하고 대응하는 가중치가 해당 곱셈 누적 셀로 전달되거나 로드되도록 할 수 있다. 그룹 컨벌루션 컨트롤(635)은 도 8을 참조하여 아래에서 더 설명된다.
각 계산 타일(600)은 하나 이상의 계산 스레드를 실행하도록 구성된다. 일부 구현에서, 하드웨어 회로(114)는 계산 타일(600)의 일부(또는 전부)를 사용하여 다수의 계산 스레드를 병렬로 실행한다. 계산 스레드는 다수의 클록 사이클에 걸쳐 실행될 수 있으며 신경망 계층에 대한 출력을 생성하기 위해 신경망 계층에 대한 입력을 처리하는데 사용될 수 있다. 예를 들어, 예시적인 입력 특징 맵에 그룹 컨벌루션을 적용하는 그룹 컨벌루션 계층에 대한 루프 중첩을 실행하기 위해 계산 스레드의 각각의 서브세트가 하나 이상의 계산 타일(600)에 할당될 수 있다. 이에 대해서는 아래에서 자세히 설명한다. 도 6은 계산 타일(600)의 서로 다른 구성요소의 개별 속성을 나타내는 참조 맵(630)을 포함한다. 참조 맵(630)은 명확성을 위해 도시되어 있지만 계산 타일(600)에는 포함되지 않는다. 속성은 특정 구성요소가 유닛, 저장 디바이스, 운영자, 제어 디바이스 또는 데이터 경로인지 여부가 포함된다.
도 7a는 곱셈 누적 셀(616)의 서브세트에 대한 파티션의 예시적인 매핑을 도시하는 블록도이다. 도 7b는 하드웨어 계산 타일(600)의 곱셈 누적 셀(616)에 각각의 입력을 제공하는 예시적인 입력 버스(617)를 도시하는 블록도이다.
처음에 도 7a를 참조하면, 전술한 바와 같이, 데이터 및 명령은 타일 외부의 소스로부터 계산 타일(600)에서 수신될 수 있다. 소스는 다른 계산 타일(600), 하드웨어 회로(114)의 상위 레벨 컨트롤러, 하드웨어 회로(114) 외부의 호스트 디바이스, 또는 이들의 조합일 수 있다. 수행되는 그룹 컨볼루션 연산의 유형에 기초하여, 시스템(100)은 다수의 그룹 컨볼루션(예를 들어 분할)을 나타내는 제어 파라미터(g)에 대해 미리 정의된 서로 다른 값 중에서 선택할 수 있다. 예를 들어, 시스템(100)은 주어진 신경망 아키텍처의 상이한 그룹 컨볼루션 신경 블록에 대해 g에 대한 특정 값을 선택할 수 있다. 일부 구현에서, g에 대한 값은 주어진 동작에 대해 외부 호스트에서 미리 정의되고 하드웨어 회로(114)의 컨트롤러로 전달된다.
일부 구현에서, 상위 레벨 컨트롤러는 제어 파라미터(g)에 기초하여 입력 특징 맵의 채널 차원(예를 들어, Zin)을 따라 하나 이상의 파티션을 식별한다. 시스템(100)은 하나 이상의 파티션에 기초하여 채널 차원을 따라 하나 이상의 그룹을 형성할 수 있다. 도 7의 예에서, 입력 채널의 개별 그룹화는 예시적인 입력 텐서 또는 입력 특징 맵의 Zin을 따라 형성된다. 각각의 개별 그룹화는 아래에 설명된 바와 같이, 대응하는 곱셈 누적 셀(616-1, 616-2, 616-3, 616-4)에 매핑될 수 있다. 또한, 입력 채널의 각 그룹화에는 개별 크기가 포함된다. 보다 구체적으로, 각각의 그룹화는 그룹화의 각각의 크기에 대응하는 각각의 수량의 입력 채널을 포함한다. 예를 들어, 도 7a의 예시에 표시된 바와 같이, 그룹화 또는 파티션의 크기 파라미터(S)는 Zin/g로 정의될 수 있으며, 여기서 Zin은 입력 텐서의 채널 차원에 따른 입력 채널 수이고 g는 전술한 제어 파라미터에 의해 정의된 그룹 수이다.
시스템(100)은 계산 유닛(614)에서 곱셈 누적 셀(616)에 대한 그룹화의 매핑(700)을 결정하도록 동작 가능하다. 예를 들어, 매핑은 계산 타일(600)에서 로컬로 결정되거나 집적 회로(114)의 상위 레벨 컨트롤러를 사용하여 결정될 수 있다. 일부 구현에서, 호스트 디바이스는 매핑을 결정하고, 매핑 명령을 생성하고, 매핑 명령을 상위 레벨 컨트롤러에 전달하며, 상위 레벨 컨트롤러는 그 명령을 계산 타일(600)에 전달한다. 예를 들어, 집적 회로(114)는 외부 호스트 디바이스로부터 상위 레벨 컨트롤러로 전달되는 데이터 또는 명령을 수신하기 위한 호스트 인터페이스 블록을 포함할 수 있다.
일부 구현에서, 시스템(100)(예를 들어, 집적 회로의 호스트 또는 컨트롤러)은 각 파티션의 채널 수에 기초하여 매핑을 결정한다. 예를 들어, 호스트 디바이스 또는 상위 레벨 컨트롤러는 각 계산 타일(600)의 계산 유닛(614)의 구성을 포함하여 집적 회로(114)의 하드웨어 구성을 기술하는 정보에 액세스할 수 있다. 이러한 하드웨어 구성에 기초하여, 시스템(100)은 계산 유닛(614)에서 곱셈 누적 셀의 수량 또는 레이아웃을 참조하여 각 그룹화의 개별 크기를 결정할 수 있다. 예를 들어, 시스템(100)은 계산 유닛(614)의 전체 활용을 최대화하기 위해 곱센 누적 셀(616)에 대한 그룹화 및 개별 입력의 최적 매핑을 결정할 수 있다. 이에 대해서는 아래에서 자세히 설명한다.
이제 도 7b를 참조하면, 좁은(narrow) 메모리(610)에 연결된 입력 버스(617)가 하나 이상의 곱셈 누적 셀(616)에 입력/활성화를 브로드캐스트하는 예시적인 아키텍처가 도시되어 있다. 입력은 대응하는 곱셈 누적 셀(616)에 의한 수신을 위해 입력 버스(617)로 한번에 하나씩 시프트되거나 전송될 수 있다.
일부 구현에서, 입력 버스(617)는 좁은 메모리(610)로부터 얻은 그룹 컨볼루션 계층 입력을 하나 이상의 곱셈 누적 셀(616)로 브로드캐스트하는 브로드캐스트 입력 버스이다. 예를 들어, 입력 버스(617)는 집적 회로(114)의 개별 곱셈 누적 셀(616-1, 616-2, 616-3, 616-n)에 개별 입력을 전달(또는 브로드캐스트)할 수 있다. 따라서, 입력 버스(617)는 위에서 논의된 결정된 매핑에 기초하여 집적 회로(114)가 입력 특징 맵의 Zin 차원을 따른 각각의 그룹화에 대한 다수의 입력을 대응하는 곱셈 누적 셀(616)로 브로드캐스트할 수 있게 하는 브로드캐스트 기능을 포함한다.
일부 구현에서, 동일한 입력은 셀(616)의 서브세트에 있는 일부(또는 모든) 곱셈 누적 셀(616) 사이에서 공유된다. 입력 버스(617)의 폭은 계산 유닛(614)의 주어진 서브세트에 대해 대응하는 개수의 곱셈 누적 셀(616)에 브로드캐스트된 입력을 공급할 만큼 충분히 넓어야 한다. 예를 들어, 입력 버스(617)의 구조를 보면, 계산 유닛(614)의 곱셈 누적 셀(616)의 수가 4이고, 입력(또는 활성화)의 데이터 해상도/폭이 8비트인 경우, 입력 버스(617)는 매 사이클마다 최대 4개의 입력 활성화를 제공하도록 구성될 수 있다. 이 예에서, 각각의 곱셈 누적 셀(616)은 브로드캐스트되는 4개의 활성화 중 단일 활성화를 수신할 수 있다.
시스템(100)은 입력 버스(617)를 통해, 입력 특징 맵의 (Zin을 따른) 제1 그룹화에 대한 각각의 제1 입력("0")을 곱셈 누적 셀(616)의 서브세트에 있는 각각의 곱센 누적 셀(616-1, 616-2, 616-3, 616-n)로 브로드캐스트할 수 있다. 마찬가지로, 시스템(100)은 입력 버스(617)를 통해, 입력 특징 맵의 (Zin을 따른) 제2 그룹화에 대한 각각의 제2 입력("1")을 곱셈 누적 셀(616)의 서브세트에 있는 각각의 곱셈 누적 셀(616-1, 616-2, 616-3, 616-n)로 브로드캐스트할 수 있다. 브로드캐스트되는 제1 및 제2 입력은 그룹 컨볼루션 계층 계산 중에 재사용된다. 예를 들어, 각 입력(702("0"), 704("1"), 706("2"), 708("3"))은 활성화 텐서의 채널 차원을 따른 서로 다른 그룹화에 대응할 수 있다.
일부 구현에서, 각각의 입력(702, 704, 706, 708)은 그룹 컨벌루션 계층에 대한 계산을 병렬화하기 위해 각 곱셈 누적 셀에 걸쳐 브로드캐스트되고 재사용될 수 있다. 예를 들어, 그룹 컨벌루션의 일부를 수행하기 위해, 재사용되는 입력은 넓은 메모리(612)의 메모리 위치들에서 페치된 서로 다른 개별 가중치 값과 곱해지고 곱셈 누적 셀(616)의 각각의 가중치 레지스터로 라우팅된다. 이 재사용 속성은 도 8을 참조하여 아래에서 더 자세히 설명된다. 이러한 방식으로 각 Zin 그룹화에 대한 계산을 병렬화하면 회로(114)는 계산 유닛(614)뿐만 아니라 해당 유닛의 대응하는 곱셈 누적 셀(616)의 활용도를 최대화할 수 있다. 보다 구체적으로, 회로(114)의 곱셈 누적 셀(616)에 걸쳐 적어도 입력 브로드캐스팅을 허용하는 그룹 컨볼루션을 실행하기 위한 회로 아키텍처는 그룹 컨볼루션을 수행하는데 사용되는 기존 회로 아키텍처의 수준을 초과하는 활용도 및 효율성 수준을 달성할 수 있다.
또한, 그룹 컨볼루션 기반 신경 블록의 적어도 하나의 이점은 연산 강도를 변경할 수 있다는 것이다. 예를 들어, 연산 강도는 곱셈 누적 셀(616)에서 수행되는 연산의 양뿐만 아니라 페치된 가중치당 셀의 전체 활용도를 제어하도록 조정될 수 있다. 이는 시스템(100)이 파라미터 대역폭을 최적화하도록 허용한다. 일부 경우, 에지 추론 계산을 위한 애플리케이션은 메모리 대역폭이 제한될 수 있다. 그룹 컨볼루션을 사용하면 전체 계산 시간을 최대화하고 메모리에서 새 가중치를 페치하기 위한 외부 메모리 연산의 필요성을 최소화(또는 방지)할 수 있다.
도 8은 전체 컨볼루션, 깊이별 컨볼루션 및 그룹 컨볼루션의 특정 속성을 나타내는 예시적인 블록 다이어그램(800)이다. 보다 구체적으로, 블록도(800)는 전체 컨볼루션 연산(802), 깊이별 컨볼루션 연산(804) 및 그룹 컨볼루션 연산(806) 동안 처리된 입력의 개별 재사용 속성을 나타낸다. 도 8의 예에서, 재사용은 블록(802)(전체 컨볼루션) 및 블록(806)(그룹 컨볼루션)을 참조하여 도시된다. 예를 들어, 제1 블록(802)은 각 입력(812)이 전체 컨볼루션에 대한 각 출력 채널(813)을 계산하는데 재사용된다는 것을 나타내는 반면, 제2 블록(804)은 각 입력(814)이 깊이별 컨볼루션에 대한 대응하는 출력 채널(815)을 계산하는데 단 한 번만 사용된다는 것을 나타낸다.
제3 블록(806)은 주어진 그룹 컨벌루션에 대해 대응하는 출력 채널(817, 818)을 계산할 때 입력이 재사용 척도(measure)를 가질 수 있음을 나타낸다. 예를 들어, 블록(806)에서, 각 입력(816)은 대응하는 출력 채널(817, 818)을 계산할 때 특정 재사용 인자(factor)(예를 들어, 2)를 갖는다. 그룹 컨볼루션 계층에 대한 입력의 재사용 인자는 해당 계층에서 처리될 그룹화의 크기에 해당한다. 일부 경우에, 입력 채널로부터의 각 요소는 해당 그룹에 속하는 출력 채널을 계산하는데 재사용된다. 이를 고려하여, 재사용 인자는 그룹 크기에 기초하여 결정된다.
일부 구현에서, 계산 타일(600)에서 수신된 명령 내 제1 연산 코드(opcode)는 입력 텐서의 그룹 컨볼루션 입력의 분할 및 후속 그룹화를 나타내기 위해 제어 파라미터(g)의 값을 지정하고 그 명령 내 제2 연산 코드는 그룹화에서 입력의 재사용 인자를 나타내기 위해 크기 파라미터의 값을 지정한다. 각 계산 타일(600)은 또한 자신의 로컬 그룹 컨볼루션 제어(635)를 사용하여, 계산 타일(600)의 하드웨어 구성, 계산 타일(600)에서 수행될 그룹 컨벌루션, 또는 둘 모두에 기초하여 크기 파라미터를 결정할 수 있다.
회로(114)는 계산 유닛(614)에 32개 또는 64개의 곱셈 누적 셀을 가질 수 있다. 그룹 컨벌루션 컨트롤(635)은 계산 타일(600)에서 그룹 컨벌루션 연산을 지정하는 명령에서 하나 이상의 연산 코드를 식별할 수 있다. 예를 들어, 그룹 컨벌루션 컨트롤(635)은 채널 차원의 순차 확장을 수행하기 위해 그룹 컨벌루션이 K×K 그룹 컨벌루션임을 결정할 수 있다(416). 그룹 컨벌루션 컨트롤(635)은 이러한 특정 유형의 컨벌루션 연산이 그룹화된 IBN 순차 확장 신경 블록(416)의 하나 이상의 그룹 컨벌루션 계층에 적용되는지 결정할 수 있다.
일부 구현에서, 시스템(100)은 특정 유형의 컨볼루션 연산에 특정된 제어 파라미터(g)에 대해 미리 정의된 값을 선택할 수 있다. 예를 들어, 주어진 그룹 컨볼루션 신경 블록(412, 416, 422 또는 432)에 대해, 시스템(100)은 각 신경 블록과 관련된 상이한 그룹 컨볼루션 연산에 대해 미리 결정된 제어 값(g) 중에서 선택할 수 있다. 그룹 컨볼루션 연산을 위한 그룹화는 제어 값에서 정의된다. 일부 구현에서, 주어진 계산 타일(600)의 그룹 컨벌루션 컨트롤(635)은 타일의 곱셈 누적 셀(616)에 대한 그룹화의 로컬 매핑(700)을 결정한다. 각 그룹화에 대해, 그룹 컨볼루션 컨트롤(635)은 연산의 그룹 컨볼루션 입력(816)을 처리하기 위한 신경 블록(416)의 그룹 컨볼루션 계층을 식별하고 그 그룹화 및 연산에 따라 크기 파라미터(S)를 설정할 수 있다.
위에서 언급한 바와 같이, 각 그룹화는 그룹화의 크기 파라미터(S)가 Zin/g에 의해 정의될 수 있도록 그룹화의 개별 크기에 대응하는 각각의 수량의 입력 채널을 포함한다. 각 그룹화는 그룹 컨벌루션을 나타내며 출력 그룹(220-n)의 해당 채널과 연관된다. 각 그룹화에는 입력 특징 맵에서 도출된 각 입력이 포함될 수 있다. 도 8의 예에서, 각각의 입력(816)은 입력 텐서의 채널 차원을 따라 서로 다른 그룹화로부터 나올 수 있다. 일부 구현에서, 그룹 컨벌루션 컨트롤(635)은 명령의 하나 이상의 연산 코드를 분석하고, 그 연산 코드(들)에 기초하여 계산 타일(600)이 K×K 그룹 컨볼루션(416)을 적용하여 채널 차원의 수를 증가시키는 것을 포함하는 채널 차원의 순차(점진적인) 확장을 수행한다고 결정한다.
그룹 컨벌루션 컨트롤(635)은 그룹 컨벌루션의 다양한 양태에 대한 크기 파라미터(S)를 결정하고, K×K 그룹 컨벌루션의 진행에 따라 그룹화의 로컬 매핑을 조정할 수 있다(416). 일부 구현에서, 이러한 점진적 확장 동작은 신경망의 일부로서 정적으로 표현된다. 예를 들어, e의 전체 출력 채널 확장을 달성하기 위해, K×K 그룹 컨벌루션(416)이 출력 채널을 g_e만큼 확장할 수 있다. 위에서 논의된 바와 같이, 확장 뒤에는 전체(total) 확장이 g_e * e/g_e = e가 되도록 e/g_e의 확장을 갖는 1×1 포인트별 컨볼루션이 이어질 수 있다.
그룹 컨벌루션을 위한 계산을 포함하는 예시적인 동작들이 이제 설명될 것이다.
64개의 곱셈 누적 셀의 예를 다시 살펴보면, 그룹 컨볼루션 컨트롤(635)은 넓은 메모리(612)로부터 그룹 컨볼루션 계층에 대한 64개의 서로 다른 가중치 값을 페치할 수 있다. 예를 들어, 그룹 컨볼루션 컨트롤(635)은 하드웨어 구성(예를 들어, 셀의 양), 그룹 컨볼루션 계층의 유형, 또는 둘 다에 기초하여 64개의 서로 다른 가중치 값을 페치할 수 있다. 그룹 컨벌루션 컨트롤(635)은 또한 메모리(610)로부터 대응하는 입력(816)을 페치할 수 있다. 페치된 입력은 곱셈 누적 셀(616)에 걸쳐 재사용되어야 한다. 일부 구현에서, 페치된 입력은 64개의 곱셈 누적 셀 전체에서 재사용된다. 일부 다른 구현에서, 페치된 입력은 64개의 곱셈 누적 셀의 서브세트에서 재사용된다. 일반적으로, 그룹 내의 모든 입력은 동일한 그룹의 출력에 대한 재사용 척도를 갖는다.
이 예에서, 입력(816)은 입력 깊이가 64인 입력 특징 맵 중에서 선택될 수 있으며, 입력 깊이는 곱셈 누적 셀의 수에 해당한다. 계산 타일(600)은 64개의 셀을 사용하여 1000개의 출력을 계산할 수 있다. 그룹 컨볼루션 컨트롤(635)은 그룹 크기를 64로 설정할 수 있으므로, 하나의 입력 값(816)을 페치하고 브로드캐스팅하는 매 사이클마다, 계산 타일(600)은 해당 입력(816)을 사용하여 1000개의 출력 중 64개의 출력을 계산할 수 있다. 따라서, 그룹 크기가 충분히 크면, 주어진 계산 타일(600)은 입력 버스의 100% 활용도를 달성할 수 있다. 이는 1개의 입력 값을 페치하는 사이클마다 64개의 셀이 모두 사용되기 때문이다.
따라서, 계산 타일(600)은 곱셈 누적 셀의 양에 기초하여 그룹 크기를 정의할 수 있고, 그룹 컨볼루션의 특정 특성에 따라 전체 컨볼루션의 처리 페널티를 발생시키지 않고 곱셈 누적 셀의 전체 활용을 달성할 수 있다. 단일 입력 채널과 관련된 예에서, 그룹 크기 = 2인 경우 이는 계산 타일(600)이 두 개의 채널 요소(예를 들어, 2개의 입력(816))을 컨볼루션할 것임을 의미이다. 따라서, 계산 타일(600)은 그룹 크기에 기초하여 많은 채널 요소를 컨벌루션할 것이다. 전체 컨볼루션의 경우 그룹 크기는 전체 입력 채널 크기와 같다.
입력 채널이 1000개이면, 전체 컨볼루션의 경우 시스템(100)은 전체 1000개의 입력 채널을 컨볼루션하여 하나의 출력 채널을 계산하며, 여기서 출력은 값 또는 활성화의 채널이다. 깊이별 컨볼루션의 경우 시스템(100)은 하나의 입력 채널만 계산하여 하나의 출력 채널을 계산한다. 이 예에서, 그룹 크기가 1이면, 이는 깊이별 컨볼루션이다. 그룹 크기가 2인 경우, 하나의 출력 채널을 계산하려면 2개의 입력 채널을 컨볼루션해야 한다. 그룹 크기가 4인 경우 하나의 출력 채널을 계산하려면 4개의 입력 채널을 컨볼루션해야 한다.
도 9는 하드웨어 집적 회로를 사용하여 그룹 컨벌루션을 적용함으로써 예시적인 이미지를 처리하는데 사용되는 예시적인 프로세스(900)의 흐름도이다. 하드웨어 집적 회로는 다수의 신경망 계층를 포함하는 CNN을 구현하도록 구성되며, 여기서 다수의 계층는 그룹 컨볼루션 계층를 포함한다. 예시적인 이미지는 위에서 설명된 이미지(102) 또는 다양한 다른 유형의 디지털 이미지 및 관련 그래픽 데이터일 수 있다. 일부 구현에서, 프로세스(900)는 다른 데이터 처리 기술에 비해, 이미지 처리 출력의 정확도를 향상시키는 신경망 계산을 가속화하는데 사용되는 기술의 일부이다.
프로세스(900)는 위에서 설명된 시스템(100)을 사용하여 구현되거나 실행될 수 있다. 따라서, 프로세스(900)의 설명은 위에서 언급한 시스템(100)의 컴퓨팅 자원을 참조할 수 있다. 프로세스(900)의 단계 또는 액션은 본 문서에 설명된 디바이스 및 리소스의 하나 이상의 프로세서에 의해 실행 가능한 프로그래밍된 펌웨어 또는 소프트웨어 명령에 의해 활성화될 수 있다. 일부 구현에서, 프로세스(900)의 단계는 하드웨어 집적 회로를 사용하여 컨벌루션 신경망 계층, 예를 들어 그룹 컨볼루션 계층에 대한 출력을 생성하기 위해 계산을 수행하는 방법에 해당한다. 집적 회로는 CNN을 구현하도록 구성된 특수 목적의 신경망 프로세서 또는 하드웨어 기계 학습 가속기일 수 있다.
프로세스(900)를 다시 참조하면, 시스템(100)은 입력 특징 맵과 연관된 제어 파라미터를 식별한다(902). 예를 들어, 입력 특징 맵의 채널 차원을 따라 두 개 이상의 파티션을 정의하는 제어 파라미터가 식별된다. 시스템(100)은 2개 이상의 파티션의 매핑을 결정한다(904). 보다 구체적으로, 시스템(100)은 하드웨어 집적 회로의 계산 유닛 내의 곱셈 누적 셀들 대 파티션들의 매핑을 결정한다.
그룹 컨벌루션 계층에 대해, 시스템(100)은 하드웨어 집적 회로를 사용하여 입력 특징 맵에 그룹 컨벌루션을 적용한다(906). 2개 이상의 파티션 각각에 대해, 그룹 컨볼루션 계층에 대한 그룹 컨볼루션을 적용하는 것은 그룹 컨볼루션 계층에 대한 가중치를 곱셈 누적 셀의 서브세트에 제공하는 것을 포함한다(908). 예를 들어, 시스템(100)은 결정된 매핑에 기초하여 곱셈 누적 셀의 서브세트에 가중치를 제공한다. 가중치는 계산 타일(600)의 예시적인 와이드 메모리로부터 제공된다.
시스템(100)은 곱셈 누적 셀의 서브세트에 입력 특징 맵의 입력을 제공한다(910). 예를 들어, 입력 특징 맵의 개별 입력은 집적 회로의 입력 버스를 통해 서브세트에 있는 각각의 곱셈 누적 셀에 제공된다. 보다 구체적으로, 각각의 하드웨어 계산 타일(600)은 주어진 곱셈 누적 셀에 하나 이상의 입력을 브로드캐스트하는데 사용되는 각각의 입력 버스를 포함한다.
시스템(100)은 개별 입력과 그룹 컨볼루션 계층에 대한 해당 가중치를 사용하여 곱(product)을 계산한다(912). 예를 들어, 곱은 곱셈 누적 셀의 곱셈 회로를 사용하여 서브세트의 각 곱셈 누적 셀에서 개별 입력과 해당 가중치를 곱함으로써 계산된다.
시스템(100)은 그룹 컨볼루션 계층에 대한 출력 특징 맵을 생성한다(914). 예를 들어, 그룹 컨벌루션 층에 대한 출력 특징 맵은 곱셈 누적 셀의 서브세트의 각각의 곱셈 누적 셀(616)에서 계산되는 다수의 개별 곱의 누적에 기초하여 생성된다. 그룹 컨볼루션 계층에 대한 계산 타일(600) 내에서 수행되는 계산 프로세스는 입력 텐서의 각 요소에 저장된 데이터 값(예를 들어, 입력 또는 활성화)과 파라미터 텐서의 개별 요소에 저장된 데이터 값(예를 들어, 가중치)의 곱셈을 포함한다. 예를 들어, 계산에는 입력 또는 활성화 값을 하나 이상의 사이클에 대한 가중치 값과 곱하여 다중 곱(예를 들어, 부분 합)을 생성하고 이어서 다음 여러 사이클에 걸쳐 해당 곱의 누적을 수행하는 것이 포함된다. 일부 구현에서, 출력 특징 맵을 생성하는 것은 입력 채널의 각 그룹화(또는 파티션)의 개별 크기에 기초하여 출력 특징 맵을 생성하는 것을 포함한다.
본 명세서에 기술된 주제 및 기능적 동작의 실시예는 디지털 전자 회로, 유형으로 구현된 컴퓨터 소프트웨어 또는 펌웨어, 본 명세서에 개시된 구조 및 그의 구조적 등가물을 포함하는 컴퓨터 하드웨어, 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 본 명세서에 설명된 주제의 실시예는 하나 이상의 컴퓨터 프로그램, 즉 데이터 처리 장치에 의해 실행되거나 데이터 처리 장치의 동작을 제어하기 위해 유형의 비-일시적 저장 매체에 인코딩된 컴퓨터 프로그램 명령의 하나 이상의 모듈로 구현될 수 있다.
대안적으로 또는 추가적으로, 프로그램 명령은 데이터 처리 장치에 의한 실행을 위해 적절한 수신기 장치로 전송하기 위한 정보를 인코딩하기 위해 생성된 인공적으로 생성된 전파 신호, 예를 들어 기계 생성 전기, 광학 또는 전자기 신호에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능 저장 디바이스, 기계 판독 가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 조합일 수 있다.
"컴퓨팅 시스템"이라는 용어는 예를 들어 프로그램 가능 프로세서, 컴퓨터, 또는 다중 프로세서 또는 컴퓨터들을 포함하여 데이터를 처리하기 위한 모든 종류의 장치, 디바이스 및 기계를 포함한다. 장치는 또한 특수 목적 논리 회로, 예를 들어 FPGA(필드 프로그램 가능 게이트 어레이) 또는 주문형 집적회로(ASIC)를 포함할 수 있다. 장치는 또한 하드웨어에 추가하여 문제의 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예를 들어, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 모듈, 소프트웨어 모듈, 스크립트 또는 코드라고도 지칭되거나 설명될 수 있는) 컴퓨터 프로그램은 컴파일된 언어나 해석된 언어, 선언적 언어나 절차적 언어를 포함한 모든 형태의 프로그래밍 언어로 작성될 수 있으며, 독립 실행형 프로그램, 모듈, 구성 요소, 서브루틴 또는 컴퓨팅 환경에서 사용하기에 적합한 기타 유닛을 포함하여 모든 형태로 배포될 수 있다.
프로그램은 파일 시스템의 파일에 해당할 수 있지만 반드시 그럴 필요는 없다. 프로그램은 다른 프로그램이나 데이터를 보유하는 파일의 일부(예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트), 해당 프로그램 전용 단일 파일 또는 다수의 조정된 파일(예를 들어, 하나 이상의 모듈, 하위 프로그램 또는 코드 일부를 저장하는 파일)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 또는 하나의 사이트에 위치하거나 다수의 사이트에 걸쳐 분산되고 데이터 통신 네트워크로 상호 연결된 다수의 컴퓨터에서 실행되도록 배포될 수 있다.
본 명세서에 설명된 프로세스 및 논리 흐름은 입력 데이터에 대해 작동하고 출력을 생성함으로써 기능을 수행하는 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍 가능한 컴퓨터에 의해 수행될 수 있다. 프로세스 및 논리 흐름은 FPGA, ASIC, 또는 범용 그래픽 처리 장치(GPGPU)와 같은 특수 목적 논리 회로에 의해 수행될 수 있고 장치도 이들로 구현될 수 있다.
컴퓨터 프로그램 실행에 적합한 컴퓨터는 예를 들어 범용 또는 특수 목적의 마이크로프로세서 또는 둘 다를 기반으로 하거나 다른 종류의 중앙 처리 디바이스를 기반으로 할 수 있다. 일반적으로, 중앙 처리 장치는 판독 전용 메모리나 랜덤 액세스 메모리 또는 둘 다로부터 명령과 데이터를 수신한다. 컴퓨터의 일부 요소는 명령을 수행하거나 실행하는 중앙 처리 장치와 명령 및 데이터를 저장하는 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 또한 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들어 자기, 광자기 디스크 또는 광 디스크로부터 데이터를 수신하거나 전송하거나 둘 모두를 포함하거나 작동 가능하게 결합될 것이다. 그러나, 컴퓨터에 이러한 디바이스들이 있을 필요는 없다. 더욱이, 컴퓨터는 다른 디바이스, 예를 들어 휴대폰, PDA, 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS 수신기, 또는 휴대용 저장 디바이스(예를 들어, USB(범용 직렬 버스) 플래시 드라이브) 등에 내장될 수 있다.
컴퓨터 프로그램 명령 및 데이터를 저장하는데 적합한 컴퓨터 판독 가능 매체에는 예를 들어 반도체 메모리 디바이스(예를 들어, EPROM, EEPROM 및 플래시 메모리 디바이스); 자기 디스크(예를 들어, 내부 하드 디스크 또는 이동식 디스크); 광자기 디스크; CD ROM 및 DVD-ROM 디스크를 비롯하여 모든 형태의 비휘발성 메모리, 매체 및 메모리 디바이스가 포함된다. 프로세서와 메모리는 특수 목적 논리 회로로 보완되거나 통합될 수 있다.
사용자와의 상호 작용을 제공하기 위해, 본 명세서에 설명된 주제의 실시예는 정보를 표시하기 위한 디스플레이 디바이스(예를 들어, CRT(음극선관) 또는 LCD(액정 디스플레이) 모니터)와 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스(예를 들어, 마우스 또는 트랙볼)를 갖춘 컴퓨터에서 구현될 수 있다. 사용자와의 상호작용을 제공하기 위해 다른 종류의 디바이스도 사용될 수 있는데, 예를 들어, 사용자에게 제공되는 피드백은 시각적 피드백, 청각 피드백 또는 촉각 피드백과 같은 임의의 형태의 감각 피드백일 수 있고, 사용자로부터의 입력은 음향, 음성 또는 촉각 입력을 포함한 모든 형태로 수신될 수 있다. 또한, 컴퓨터는 사용자가 사용하는 디바이스와 문서를 주고받는 방식으로 사용자와 상호 작용할 수 있는데, 예를 들어, 웹 브라우저에서 받은 요청에 대한 응답으로 사용자 디바이스의 웹 브라우저로 웹 페이지를 보낸다. 또한, 컴퓨터는 문자 메시지 또는 다른 형태의 메시지를 개인 디바이스(예를 들어, 메시징 애플리케이션을 실행하는 스마트폰)로 전송하고 그 대가로 사용자로부터 응답 메시지를 수신함으로써 사용자와 상호 작용할 수 있다.
본 명세서에 설명된 주제의 실시예는 백엔드 구성요소(예를 들어, 데이터 서버)를 포함하거나, 미들웨어 구성 요소(예를 들어, 애플리케이션 서버)를 포함하거나, 프런트엔드 구성 요소(예를 들어, 사용자가 본 명세서에 설명된 주제의 구현과 상호 작용할 수 있는 그래픽 사용자 인터페이스, 웹 브라우저 또는 앱을 갖춘 클라이언트 컴퓨터)를 포함하거나, 또는 백엔드, 미들웨어 또는 프런트엔드 구성 요소 중 하나 이상의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 구성 요소는 통신 네트워크와 같은 디지털 데이터 통신의 모든 형태나 매체를 통해 상호 연결될 수 있다. 통신 네트워크의 예로는 근거리 통신망(LAN) 및 광역 통신망(WAN), 예를 들어 인터넷이 포함된다.
컴퓨팅 시스템에는 클라이언트와 서버가 포함될 수 있다. 클라이언트와 서버는 일반적으로 서로 멀리 떨어져 있으며 일반적으로 통신 네트워크를 통해 상호 작용한다. 클라이언트와 서버의 관계는 각 컴퓨터에서 실행되고 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램으로 인해 발생한다.
본 명세서에는 많은 구체적인 구현 세부 정보가 포함되어 있지만, 이는 임의의 발명의 범위 또는 청구될 수 있는 범위에 대한 제한으로 해석되어서는 안 되며, 오히려 특정 발명의 특정 실시예에 특정할 수 있는 특징들에 대한 설명으로 해석되어야 한다. 별도의 실시예와 관련하여 본 명세서에 설명된 특정 특징은 단일 실시예에서 조합하여 구현될 수도 있다. 반대로, 단일 실시예의 맥락에서 설명된 다양한 특징은 다수의 실시예에서 개별적으로 또는 임의의 적절한 하위 조합으로 구현될 수도 있다. 더욱이, 위에서는 특징들이 특정 조합으로 작용하는 것으로 설명될 수 있고 심지어 처음에는 그렇게 주장되었을 수도 있지만, 청구된 조합의 하나 이상의 특징은 경우에 따라 조합에서 삭제될 수 있으며, 청구된 조합은 하위 조합 또는 하위 조합의 변형과 관련될 수 있다.
유사하게, 동작들은 특정 순서로 도면에 묘사되고 청구범위에 기재되어 있지만, 이는 원하는 결과를 달성하기 위해 그러한 동작들이 표시된 특정 순서 또는 순차적 순서로 수행되거나 모든 설명된 동작이 수행되어야 한다고 요구하는 것으로 이해되어서는 안 된다. 특정 상황에서는 멀티태스킹과 병렬 처리가 유리할 수 있다. 더욱이, 전술한 실시예에서 다양한 시스템 모듈 및 구성요소의 분리는 모든 실시예에서 그러한 분리를 요구하는 것으로 이해되어서는 안 되며, 설명된 프로그램 구성 요소 및 시스템은 일반적으로 단일 소프트웨어 곱에 함께 통합되거나 다수의 소프트웨어 곱에 패키지될 수 있다는 점을 이해해야 한다.
주제의 특정 실시예들이 설명되었다. 다른 실시예는 다음 청구범위의 범위 내에 있다. 예를 들어, 청구범위에 인용된 동작들은 다른 순서로 수행될 수 있으며 여전히 원하는 결과를 얻을 수 있다. 일 예로서, 첨부 도면에 도시된 프로세스는 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적 순서를 반드시 필요로 하는 것은 아니다. 특징 구현에서는 멀티태스킹과 병렬 처리가 유리할 수 있다.

Claims (20)

  1. 그룹 컨볼루션 계층을 포함한 복수의 신경망 계층을 포함하는 컨벌루션 신경망을 구현하도록 구성된 하드웨어 집적 회로를 사용한 입력 이미지 처리 방법으로서, 상기 방법은,
    입력 특징 맵의 채널 차원을 따라 복수의 파티션을 정의하는 제어 파라미터를 식별하는 단계와;
    복수의 파티션과 집적 회로의 계산 유닛 내의 복수의 곰셈 누적 셀(Multiply Accumulation Cell: MAC)과의 매핑을 결정하는 단계와;
    그룹 컨벌루션 층에 대해, 입력 특징 맵에 그룹 컨벌루션을 적용하는 단계와, 상기 그룹 컨벌루션을 적용하는 단계는,
    복수의 파티션 각각에 대해:
    결정된 매핑에 기초하여, 그룹 컨벌루션 계층에 대한 가중치를 복수의 MAC의 서브세트에 제공하는 단계;
    집적 회로의 입력 버스를 통해, 입력 특징 맵의 개별 입력을 서브세트의 각 MAC에 제공하는 단계; 및
    서브세트의 각 MAC에서, 그룹 컨볼루션 계층에 대한 개별 입력과 해당 가중치를 사용하여 곱(product)을 계산하는 단계를 포함하고; 그리고
    곱의 누적에 기초하여 그룹 컨볼루션 계층에 대한 출력 특징 맵을 생성하는 단계를 포함하는 것을 특징으로 하는 입력 이미지 처리 방법.
  2. 제1항에 있어서,
    상기 복수의 파티션과 복수의 MAC의 매핑을 결정하는 단계는,
    복수의 파티션 각각의 채널 수에 기초하여 매핑을 결정하는 단계를 포함하는 것을 특징으로 하는 입력 이미지 처리 방법.
  3. 제2항에 있어서,
    상기 복수의 파티션의 각 파티션은,
    파티션의 개별 크기에 대응하는 각각의 양의 입력 채널을 포함하는 것을 특징으로 하는 입력 이미지 처리 방법.
  4. 제3항에 있어서,
    상기 출력 특징 맵을 생성하는 단계는,
    각 파티션의 개별 크기에 기초하여 출력 특징 맵을 생성하는 단계를 포함하는 것을 특징으로 하는 입력 이미지 처리 방법.
  5. 제3항에 있어서,
    계산 유닛의 하드웨어 구성을 기술하는 정보에 액세스하는 단계와; 그리고
    계산 유닛의 하드웨어 구성에 기초하여 각 파티션의 개별 크기를 결정하는 단계를 더 포함하는 것을 특징으로 하는 입력 이미지 처리 방법.
  6. 제6항에 있어서,
    상기 입력 버스는 브로드캐스트 기능을 포함하고, 그리고
    상기 방법은,
    입력 버스를 통해 각 파티션에 대해, 입력 특징 맵의 다수의 입력을 집적 회로의 계산 유닛에 브로드캐스팅하는 단계를 더 포함하는 것을 특징으로 하는 입력 이미지 처리 방법.
  7. 제6항에 있어서,
    입력 버스를 통해 입력 특징 맵의 제1 파티션에 대해, 제1 파티션의 제1 입력을 서브세트의 각 MAC에 브로드캐스팅하는 단계를 더 포함하고;
    브로드캐스트되는 제1 입력은 그룹 컨벌루션 계층에 대한 계산 동안 재사용되는 것을 특징으로 하는 입력 이미지 처리 방법.
  8. 제6항에 있어서,
    상기 입력 특징 맵의 제1 파티션은 출력 특징 맵의 제1 파티션에 대응하고; 그리고
    상기 제1 입력은 출력 특성 맵의 제1 파티션 출력에 대해 재사용되는 것을 특징으로 하는 입력 이미지 처리 방법.
  9. 제1항에 있어서,
    상기 출력 특징 맵을 생성하는 단계는,
    복수의 MAC의 서브세트를 사용하여 복수의 곱을 계산하는 단계; 및
    복수의 곱으로부터 곱의 누적을 생성하는 단계를 포함하는 것을 특징으로 하는 입력 이미지 처리 방법.
  10. 입력 이미지를 처리하기 위한 시스템으로서, 상기 시스템은,
    프로세서와;
    그룹 컨볼루션 계층을 포함한 복수의 신경망 계층을 포함하는 컨벌루션 신경망을 구현하도록 구성된 하드웨어 집적회로와; 그리고
    동작들을 수행하기 위해 프로세서에 의해 실행될 수 있는 명령들을 저장하는 비-일시적 기계 판독 가능 저장 디바이스를 포함하고, 상기 동작들은,
    입력 특징 맵의 채널 차원을 따라 복수의 파티션을 정의하는 제어 파라미터를 식별하는 동작과;
    복수의 파티션과 집적 회로의 계산 유닛 내의 복수의 곰셈 누적 셀(MAC)과의 매핑을 결정하는 동작과;
    그룹 컨벌루션 층에 대해, 입력 특징 맵에 그룹 컨벌루션을 적용하는 동작과, 상기 그룹 컨벌루션을 적용하는 동작은,
    복수의 파티션 각각에 대해:
    결정된 매핑에 기초하여, 그룹 컨벌루션 계층에 대한 가중치를 복수의 MAC의 서브세트에 제공하는 동작;
    집적 회로의 입력 버스를 통해, 입력 특징 맵의 개별 입력을 서브세트의 각 MAC에 제공하는 동작; 및
    서브세트의 각 MAC에서, 그룹 컨볼루션 계층에 대한 개별 입력과 해당 가중치를 사용하여 곱을 계산하는 동작을 포함하고; 그리고
    곱의 누적에 기초하여 그룹 컨볼루션 계층에 대한 출력 특징 맵을 생성하는 동작을 포함하는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  11. 제10항에 있어서,
    상기 복수의 파티션과 복수의 MAC의 매핑을 결정하는 단계는,
    복수의 파티션 각각의 채널 수에 기초하여 매핑을 결정하는 단계를 포함하는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  12. 제11항에 있어서,
    상기 복수의 파티션의 각 파티션은,
    파티션의 개별 크기에 대응하는 각각의 양의 입력 채널을 포함하는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  13. 제12항에 있어서,
    상기 출력 특징 맵을 생성하는 단계는,
    각 파티션의 개별 크기에 기초하여 출력 특징 맵을 생성하는 동작을 포함하는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  14. 제12항에 있어서,
    상기 동작들은,
    계산 유닛의 하드웨어 구성을 기술하는 정보에 액세스하는 동작과; 그리고
    계산 유닛의 하드웨어 구성에 기초하여 각 파티션의 개별 크기를 결정하는 동작을 더 포함하는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  15. 제10항에 있어서,
    상기 입력 버스는 브로드캐스트 기능을 포함하고, 그리고
    상기 동작들은,
    입력 버스를 통해 각 파티션에 대해, 입력 특징 맵의 다수의 입력을 집적 회로의 계산 유닛에 브로드캐스팅하는 동작을 더 포함하는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  16. 제15항에 있어서,
    상기 동작들은,
    입력 버스를 통해 입력 특징 맵의 제1 파티션에 대해, 제1 파티션의 제1 입력을 서브세트의 각 MAC에 브로드캐스팅하는 동작을 더 포함하고;
    브로드캐스트되는 제1 입력은 그룹 컨벌루션 계층에 대한 계산 동안 재사용되는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  17. 제15항에 있어서,
    상기 입력 특징 맵의 제1 파티션은 출력 특징 맵의 제1 파티션에 대응하고; 그리고
    상기 제1 입력은 출력 특성 맵의 제1 파티션 출력에 대해 재사용되는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  18. 제10항에 있어서,
    상기 출력 특징 맵을 생성하는 동작은,
    복수의 MAC의 서브세트를 사용하여 복수의 곱을 계산하는 동작; 및
    복수의 곱으로부터 곱의 누적을 생성하는 동작을 포함하는 것을 특징으로 하는 입력 이미지를 처리하기 위한 시스템.
  19. 그룹 컨볼루션 계층을 포함한 복수의 신경망 계층을 포함하는 컨벌루션 신경망을 구현하도록 구성된 하드웨어 집적 회로를 사용하여 입력 이미지를 처리하기 위한 명령들을 저장한 비-일시적 기계 판독 가능 저장 디바이스로서, 상기 명령들은 동작들을 수행하도록 프로세서에 의해 실행 가능하고, 상기 동작들은,
    입력 특징 맵의 채널 차원을 따라 복수의 파티션을 정의하는 제어 파라미터를 식별하는 동작과;
    복수의 파티션과 집적 회로의 계산 유닛 내의 복수의 곰셈 누적 셀(MAC)과의 매핑을 결정하는 동작과;
    그룹 컨벌루션 층에 대해, 입력 특징 맵에 그룹 컨벌루션을 적용하는 동작과, 상기 그룹 컨벌루션을 적용하는 동작은,
    복수의 파티션 각각에 대해:
    결정된 매핑에 기초하여, 그룹 컨벌루션 계층에 대한 가중치를 복수의 MAC의 서브세트에 제공하는 동작;
    집적 회로의 입력 버스를 통해, 입력 특징 맵의 개별 입력을 서브세트의 각 MAC에 제공하는 동작; 및
    서브세트의 각 MAC에서, 그룹 컨볼루션 계층에 대한 개별 입력과 해당 가중치를 사용하여 곱을 계산하는 동작을 포함하고; 그리고
    곱의 누적에 기초하여 그룹 컨볼루션 계층에 대한 출력 특징 맵을 생성하는 동작을 포함하는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 디바이스.
  20. 제19항에 있어서,
    복수의 파티션의 각 파티션은,
    파티션의 개별 크기에 대응하는 각각의 양의 입력 채널을 포함하는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 디바이스.
KR1020247011391A 2021-10-08 2021-10-08 하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델 KR20240063137A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2021/054148 WO2023059335A1 (en) 2021-10-08 2021-10-08 Hardware accelerator optimized group convolution based neural network models

Publications (1)

Publication Number Publication Date
KR20240063137A true KR20240063137A (ko) 2024-05-09

Family

ID=78483565

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247011391A KR20240063137A (ko) 2021-10-08 2021-10-08 하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델

Country Status (3)

Country Link
KR (1) KR20240063137A (ko)
TW (1) TW202316321A (ko)
WO (1) WO2023059335A1 (ko)

Also Published As

Publication number Publication date
TW202316321A (zh) 2023-04-16
WO2023059335A1 (en) 2023-04-13

Similar Documents

Publication Publication Date Title
KR102525080B1 (ko) 신경 네트워크 명령어 세트 아키텍처
CN107454966B (zh) 用于神经网络处理器的预取权重
US11816559B2 (en) Dilated convolution using systolic array
US11500959B2 (en) Multiple output fusion for operations performed in a multi-dimensional array of processing units
JP2020074099A (ja) 処理装置と処理方法
CN110520834A (zh) 替选循环限制
TWI646501B (zh) 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體
CN110866610A (zh) 一种深度学习模型分布式运算的方法及装置
CN103870335A (zh) 用于信号流编程的数字信号处理器代码的高效资源管理的系统和方法
EP3857384B1 (en) Processing sequential inputs using neural network accelerators
US20210326683A1 (en) Hardware circuit for accelerating neural network computations
CN111448545A (zh) 并行多值归约
US20210304010A1 (en) Neural network training under memory restraint
KR20210091817A (ko) 레이 트레이싱에서 삼각형 및 박스 교차 테스트를 위한 병합된 데이터 경로
KR20240063137A (ko) 하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델
EP3971787A1 (en) Spatial tiling of compute arrays with shared control
US11636569B1 (en) Matrix transpose hardware acceleration
KR20240050389A (ko) 그룹 컨볼루션 구현을 위한 신경망 아키텍처
CN118159986A (zh) 基于硬件加速器优化组卷积的神经网络模型
US12008469B1 (en) Acceleration of neural networks with stacks of convolutional layers
US11972349B1 (en) Flexible compute array utilization in a tensor processor
US11934876B1 (en) Compiler-driven storage allocation of runtime values
US11809981B1 (en) Performing hardware operator fusion
WO2024058810A1 (en) Reducing memory bank conflicts in a hardware accelerator
TW202414200A (zh) 減少硬體加速器中之記憶體庫衝突