KR20210136700A - Apparatus and Method for Convolutional Neural Network Quantization Inference - Google Patents
Apparatus and Method for Convolutional Neural Network Quantization Inference Download PDFInfo
- Publication number
- KR20210136700A KR20210136700A KR1020200055313A KR20200055313A KR20210136700A KR 20210136700 A KR20210136700 A KR 20210136700A KR 1020200055313 A KR1020200055313 A KR 1020200055313A KR 20200055313 A KR20200055313 A KR 20200055313A KR 20210136700 A KR20210136700 A KR 20210136700A
- Authority
- KR
- South Korea
- Prior art keywords
- opencl
- neural network
- convolutional layer
- convolutional neural
- kernel
- Prior art date
Links
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 36
- 238000013139 quantization Methods 0.000 title claims abstract description 26
- 238000000034 method Methods 0.000 title claims abstract description 15
- 238000012545 processing Methods 0.000 description 35
- 239000011159 matrix material Substances 0.000 description 25
- 238000010586 diagram Methods 0.000 description 12
- 230000009466 transformation Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000013500 data storage Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000004913 activation Effects 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 101100317378 Mus musculus Wnt3 gene Proteins 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Pure & Applied Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Image Analysis (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Complex Calculations (AREA)
Abstract
Description
기재된 실시예는 스마트폰과 같은 임베디드 시스템에서 콘볼루션 신경망(Convolutional Neural Network, CNN)을 이용한 실시간 추론하는 기술에 관한 것이다.The described embodiment relates to a technology for real-time reasoning using a convolutional neural network (CNN) in an embedded system such as a smartphone.
최근 딥러닝(DNN: Deep Neural Network) 기술의 발전으로 영상 내 객체 인식 등에 활용되는 콘볼루션 신경망(Convolutional Neural Network, CNN)이 각광받고 있다. 특히 최근 스마트폰과 같은 개인 단말 형태의 임베디드 시스템이 널리 활용됨에 따라 일반 데스크탑 환경이 아닌 임베디드 시스템에서 콘볼루션 신경망을 이용한 실시간 추론(inference) 기술에 대한 수요가 급증하고 있다. With the recent development of deep learning (DNN) technology, convolutional neural networks (CNNs), which are used for object recognition in images, are in the spotlight. In particular, as an embedded system in the form of a personal terminal such as a smartphone is widely used recently, the demand for a real-time inference technology using a convolutional neural network in an embedded system rather than a general desktop environment is rapidly increasing.
특히 임베디드 시스템은 고사양의 데스크탑에 비해 제한된 시스템 자원과 성능을 가지고 있기 때문에, 임베디드 시스템에서 실시간 추론을 위해서는 콘볼루션 신경망을 경량화하여 가속화 할 수 있는 기술이 필수적이다.In particular, since embedded systems have limited system resources and performance compared to high-end desktops, a technology that can lighten and accelerate convolutional neural networks is essential for real-time reasoning in embedded systems.
기재된 실시예는 스마트폰과 같은 제한된 시스템 자원을 가지는 임베디드 시스템에서 실시간 추론을 위해서는 콘볼루션 신경망을 경량화하여 가속화하는데 그 목적이 있다.The described embodiment aims to lighten and accelerate a convolutional neural network for real-time reasoning in an embedded system having limited system resources, such as a smartphone.
실시예에 따른 콘볼루션 신경망 양자화 추론 방법은 미리 학습된 콘볼루션 신경망에서 추론하고자 하는 입력 데이터의 특징 및 콘볼루션 계층 정보를 수신함에 따라, 입력 데이터의 특징 및 콘볼루션 계층 정보를 분석하여 임베디드 시스템의 하드웨어 플랫폼에 최적화된 OpenCL 파라미터 및 커널을 설정하는 단계 및 설정된 OpenCL 파라미터 및 커널을 이용하여 콘볼루션 계층에 대한 양자화 추론을 수행하는 단계를 포함한다.The convolutional neural network quantization inference method according to the embodiment receives the characteristics and convolutional layer information of the input data to be inferred from the pre-trained convolutional neural network, and analyzes the characteristics of the input data and the convolutional layer information of the embedded system. and setting OpenCL parameters and a kernel optimized for a hardware platform, and performing quantization inference on a convolutional layer using the set OpenCL parameters and kernel.
실시예에 따라, 제한된 시스템 자원을 가지는 임베디드 시스템에서 GPU를 기반으로 추론 연산 가속 효과를 극대화함으로써 실시간 추론을 가능하게 한다.According to an embodiment, real-time reasoning is enabled by maximizing the effect of accelerating the reasoning operation based on the GPU in an embedded system having limited system resources.
실시예에 따라, OpenCL을 이용함으로써 특정 하드웨어 플랫폼에 제한되지 않게 다양한 임베디드 시스템에서 양자화 추론을 수행할 수 있다. According to an embodiment, by using OpenCL, quantization inference can be performed in various embedded systems without being limited to a specific hardware platform.
실시예에 따라, 하드웨어 플랫폼과 데이터 크기에 최적화된 OpenCL 파라미터 및 커널을 자동으로 설정함으로써 OpenCL에 대한 전문적인 지식이 없더라도 양자화 추론 기능을 활용할 수 있다. According to an embodiment, by automatically setting OpenCL parameters and a kernel optimized for a hardware platform and data size, a quantization inference function may be utilized even without specialized knowledge of OpenCL.
도 1은 실시예에 따른 콘볼루션 신경망 양자화 추론 장치를 포함하는 임베디드 시스템의 블록 구성도이다.
도 2는 실시예에 따른 콘볼루션 신경망 양자화 추론 방법을 설명하기 위한 신호 흐름도이다.
도 3은 도 2에 도시된 최적이 OpenCL 파라미터 및 커널 설정 단계(S230)를 설명하기 위한 순서도이다.
도 4는 벡터화를 이용한 콘볼루션 계층의 연산 과정을 설명하기 위한 도면이다.
도 5는 도 2에 도시된 콘볼루션 계층 병렬 처리 수행 단계(S250)를 상세히 설명하기 위한 순서도이다.
도 6은 8x8인 행렬에서 4x4 기준 행렬을 기준으로 인터리브를 수행하는 예시도이다.
도 7은 8x8인 행렬에서 1x4 기준 행렬을 기준으로 순서 변환을 수행하는 예시도이다.
도 8은 실시 예에 따른 양자화 추론 연산을 설명하기 위한 순서도이다.
도 9는 실시예에 따른 컴퓨터 시스템 구성을 나타낸 도면이다.1 is a block diagram of an embedded system including a convolutional neural network quantization inference apparatus according to an embodiment.
2 is a signal flow diagram illustrating a method for inferring quantization of a convolutional neural network according to an embodiment.
FIG. 3 is a flowchart for explaining the optimal OpenCL parameter and kernel setting step ( S230 ) shown in FIG. 2 .
4 is a diagram for explaining an operation process of a convolutional layer using vectorization.
FIG. 5 is a flowchart illustrating in detail the step S250 of performing the convolutional layer parallel processing shown in FIG. 2 .
6 is an exemplary diagram of performing interleaving based on a 4x4 reference matrix in an 8x8 matrix.
7 is an exemplary diagram of performing order transformation in an 8x8 matrix based on a 1x4 reference matrix.
8 is a flowchart illustrating a quantization inference operation according to an embodiment.
9 is a diagram showing the configuration of a computer system according to an embodiment.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.Advantages and features of the present invention and methods of achieving them will become apparent with reference to the embodiments described below in detail in conjunction with the accompanying drawings. However, the present invention is not limited to the embodiments disclosed below, but will be implemented in a variety of different forms, and only these embodiments allow the disclosure of the present invention to be complete, and common knowledge in the technical field to which the present invention belongs It is provided to fully inform the possessor of the scope of the invention, and the present invention is only defined by the scope of the claims. Like reference numerals refer to like elements throughout.
비록 "제1" 또는 "제2" 등이 다양한 구성요소를 서술하기 위해서 사용되나, 이러한 구성요소는 상기와 같은 용어에 의해 제한되지 않는다. 상기와 같은 용어는 단지 하나의 구성요소를 다른 구성요소와 구별하기 위하여 사용될 수 있다. 따라서, 이하에서 언급되는 제1 구성요소는 본 발명의 기술적 사상 내에서 제2 구성요소일 수도 있다.Although "first" or "second" is used to describe various elements, these elements are not limited by the above terms. Such terms may only be used to distinguish one component from another. Accordingly, the first component mentioned below may be the second component within the spirit of the present invention.
본 명세서에서 사용된 용어는 실시예를 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 또는 "포함하는(comprising)"은 언급된 구성요소 또는 단계가 하나 이상의 다른 구성요소 또는 단계의 존재 또는 추가를 배제하지 않는다는 의미를 내포한다.The terminology used herein is for the purpose of describing the embodiment and is not intended to limit the present invention. As used herein, the singular also includes the plural unless specifically stated otherwise in the phrase. As used herein, “comprises” or “comprising” implies that the stated component or step does not exclude the presence or addition of one or more other components or steps.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 해석될 수 있다. 또한, 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.Unless otherwise defined, all terms used herein may be interpreted with meanings commonly understood by those of ordinary skill in the art to which the present invention pertains. In addition, terms defined in a commonly used dictionary are not to be interpreted ideally or excessively unless specifically defined explicitly.
이하에서는, 도 1 내지 도 9를 참조하여 실시예에 따른 콘볼루션 신경망 양자화 추론 장치 및 방법이 상세히 설명된다.Hereinafter, a convolutional neural network quantization inference apparatus and method according to an embodiment will be described in detail with reference to FIGS. 1 to 9 .
도 1은 실시예에 따른 콘볼루션 신경망 양자화 추론 장치를 포함하는 임베디드 시스템의 블록 구성도이다. 1 is a block diagram of an embedded system including a convolutional neural network quantization inference apparatus according to an embodiment.
도 1을 참조하면, 콘볼루션 신경망 양자화 추론 장치(이하 '장치'로 기재함)(100)는 미리 학습된 모델인 콘볼루션 신경망(10)을 임베디드 시스템에서 GPU와 같은 OpenCL Deivce(20)를 이용하여 추론한다. 1, the convolutional neural network quantization inference device (hereinafter referred to as 'device') 100 uses the convolutional
이때, 콘볼루션 신경망(10)의 학습 및 학습 모델 변환은 임베디드 시스템이 아닌 자원에 제한이 적은 일반 데스크탑에서 미리 수행된 것일 수 있다. 여기서, 콘볼루션 신경망(10)은 일반적으로 콘볼루션 계층 및 완전 연결 계층으로 구성되는데, 제한된 자원을 갖는 임베디드 시스템에서는 콘볼루션 계층에 대한 추론 속도가 저하될 수 있으므로, 실시예에 따라 장치(100)는 콘볼루션 신경망(10)에서 콘볼루션 계층에 대한 양자화 추론을 수행할 수 있다. In this case, the learning of the convolutional
이때, 장치(100)는 특정 하드웨어에 종속되지 않으며 다양한 임베디드 시스템을 지원할 수 있도록 OpenCL을 이용하여 추론 연산을 가속한다. 이때, OpenCL은 개방형 병렬 컴퓨팅 언어로써 하드웨어 플랫폼에 상관없이 다양한 임베디드 시스템에서 병렬 처리를 수행할 수 있는 표준 규격이다. In this case, the
실시예에 따른 장치(100)는 응용부(110), 분석부(120) 및 병렬 처리부(130)를 포함한다. The
응용부(110)는 콘볼루션 신경망(10)과의 사용자 인터페이스 기능을 수행한다. 즉, 응용부(110)는 콘볼루션 신경망(10)의 입력 데이터 특징 및 콘볼루션 계층의 정보를 분석부(120)에 전달하고, 병렬 처리부(130)로부터 연산 결과를 전달받아 콘볼루션 신경망(10)으로 전달해준다.The
분석부(120)는 OpenCL의 병렬 처리 효과를 극대화하도록 추론을 수행하고자 하는 하드웨어 플랫폼에 최적화된 OpenCL 파라미터(parameter)를 자동으로 설정한다. 또한 추론하고자 하는 데이터의 크기에 따라 최적의 OpenCL 커널(kernel)을 자동으로 선택함으로써, 하드웨어 플랫폼에 최적화된 OpenCL 연산을 수행한다.The
병렬 처리부(130)는 콘볼루션 신경망 양자화 추론 장치(100)는 양자화를 위해 기존 단정밀도(single precision) 32비트 자료형(=float)으로 학습된 콘볼루션 신경망(10)을 부호있는 8비트 정수형(=signed char)으로 변환하여 추론을 수행한다. The
응용부(110), 분석부(120) 및 병렬 처리부(130)의 상세한 동작 설명은 도 2 내지 도 7에 도시된 콘볼루션 신경망 양자화 추론 방법에서 상세히 살펴보기로 한다. Detailed operation descriptions of the
도 2는 실시예에 따른 콘볼루션 신경망 양자화 추론 방법을 설명하기 위한 신호 흐름도이다. 2 is a signal flow diagram illustrating a method for inferring quantization of a convolutional neural network according to an embodiment.
도 2를 참조하면, 응용부(110)는 콘볼루션 신경망(10)으로부터 추론하고자 하는 입력 데이터의 특징 및 콘볼루션 계층 정보를 수신함(S210)에 따라, 이를 분석부(120)에 전달한다(S220). Referring to FIG. 2 , the
이때, 추론하고자 하는 입력 데이터의 특징은 이미지 또는 영상의 가로 및 세로의 크기, 입력 이미지 또는 영상의 채널(channel) 수, 채널의 배치 순서 정보, 예컨대, RGB, BGR 등일 수 있다.In this case, the characteristics of the input data to be inferred may include horizontal and vertical sizes of the image or image, the number of channels of the input image or image, and information on the arrangement order of channels, for example, RGB, BGR, and the like.
이때, 콘볼루션 계층의 정보는 입력 계층의 메모리 주소, 필터(filter)의 수, 필터의 크기, 필터 패딩(padding) 크기, 필터 스트라이드(stride) 크기, 편향(bias) 사용 여부 등 중 적어도 하나가 포함될 수 있다.At this time, the information of the convolutional layer includes at least one of the memory address of the input layer, the number of filters, the size of the filter, the size of the filter padding, the size of the filter stride, and whether or not a bias is used. may be included.
분석부(120)는 응용부(110)를 통해 전달된 콘볼루션 계층과 입력 데이터 특징 정보를 분석하고, 추론을 수행하고자 하는 하드웨어 플랫폼에서 OpenCL 장치의 특징을 분석하여 현재 시스템에 최적화된 OpenCL 파라미터 및 커널을 자동으로 설정한다(S230). 이에 대한 상세한 설명은 도 3을 참조하여 후술하기로 한다. The
분석부(120)는 설정된 OpenCL 파라미터 및 커널을 기반으로 응용부(110)로부터 전달받은 입력 데이터 및 콘볼루션 계층의 정보를 전달하여 병렬 처리 연산을 요청한다(S240). The
병렬 처리부(130)는 전달받은 입력 데이터 및 콘볼루션 계층의 정보를 이용하여 설정된 OpenCL 파라미터 및 커널을 기반으로 병렬 처리 연산을 수행한다(S250). 이에 대한 상세한 설명은 도 5 내지 도 8을 참조하여 후술하기로 한다. The
병렬 처리부(130)는 콘볼루션 계층에서 수행하는 행렬 곱셈(GEMM: General Matrix Multiply, 이하 GEMM) 연산 결과를 응용부(110)에게 전달(S260)하고, 응용부(110)는 병렬 처리부(130)로부터 전달된 GEMM 연산 결과를 콘볼루션 신경망(10)에 전달한다(S270).The
그러면, 도면에는 도시되어 있지 않지만, 콘볼루션 신경망(10)은 콘볼루션 계층의 연산 결과를 콘볼루션 계층에 연결된 후단 계층, 예컨대, 완전 연결 계층(Fully Connected Layer)의 입력으로 하여 콘볼루션 신경망에서의 추론이 완성되도록 할 수 있다. Then, although not shown in the figure, the convolutional
도 3은 도 2에 도시된 최적 OpenCL 파라미터 및 커널 설정 단계(S230)를 설명하기 위한 순서도이다. FIG. 3 is a flowchart illustrating an optimal OpenCL parameter and kernel setting step ( S230 ) shown in FIG. 2 .
도 3을 참조하면, 분석부(120)는 입력 데이터 및 콘볼루션 계층 정보를 분석한다(S231). Referring to FIG. 3 , the
이때, 분석부(120)는 관리하고 있는 입력 계층의 데이터 배치 형태에 따라 콘볼루션 계층에 대한 정보를 저장하는 저장부(미도시)를 검색할 수 있다.In this case, the
즉, 저장부에는 입력 계층의 데이터 배치 형태 및 콘볼루션 계층 정보 기준으로 콘볼루션 계층별로 식별자(ID)가 부여되어 저장되고, 식별자(ID) 별로 설정된 OpenCL 파라미터 및 커널이 매핑되어 있다. That is, an identifier (ID) is assigned and stored for each convolutional layer based on the data arrangement form of the input layer and the convolutional layer information, and the OpenCL parameter and the kernel set for each identifier (ID) are mapped in the storage unit.
이때, 입력 계층의 데이터 배치 형태는 해당 계층의 최대 데이터의 수, 해당 데이터의 채널, 해당 데이터의 높이, 해당 데이터의 넓이를 포함할 수 있다. In this case, the data arrangement form of the input layer may include the maximum number of data of the corresponding layer, the channel of the corresponding data, the height of the corresponding data, and the width of the corresponding data.
따라서, 분석부(120)는 입력 데이터 및 콘볼루션 계층 정보를 분석하여, 저장부에 입력 계층의 데이터 배치 형태 및 콘볼루션 계층에 상응하는 식별자가 존재하는지를 판단하여, 입력 데이터 및 콘볼루션 계층 정보가 최초 수행되는지를 판단한다(S232). Accordingly, the
S232의 판단 결과 해당 콘볼루션 계층이 최초 수행되는 경우, 분석부(120)는 병렬 처리부(130)와의 연동을 통해 최적 OpenCL 파라미터 및 커널을 신규 설정한다(S233). 이때, 분석부(120)에서는 해당 콘볼루션 계층의 데이터 크기에 따라 OpenCL 커널을 자동으로 설정한다. 즉, 콘볼루션 계층의 연산 수행 시 메모리 읽기 횟수를 최소화하기 위하여 데이터의 크기에 따라 콘볼루션 계층의 양자화 추론 연산을 위한 OpenCL 커널을 동적으로 선택한다. As a result of the determination of S232, when the corresponding convolutional layer is first performed, the
이때, 하드웨어 플랫폼마다 동일한 데이터 배치 형태일지라도 OpenCL 커널에 대한 성능 차가 발생할 수 있으므로, 분석부(120)는 최초 수행 시 병렬 처리부(130)를 통해 선택 가능한 OpenCL 커널에 대해 연산 속도를 비교함으로써 최적의 OpenCL 커널을 선택한다. 즉, 수행 시간을 비교하여 가장 속도가 빠른 파라미터 및 커널을 해당 콘볼루션 계층에 설정한다. At this time, since a performance difference may occur for the OpenCL kernel even in the same data arrangement form for each hardware platform, the
이때, 설정된 파라미터 저장은 추론을 수행하고자 하는 하드웨어 플랫폼의 특성에 따라 파일 시스템 혹은 메모리 등을 선택적으로 활용할 수 있다.In this case, the set parameter storage may selectively utilize a file system or memory according to the characteristics of a hardware platform on which inference is to be performed.
이때, OpenCL 파라미터는 OpenCL 커널에서 벡터화(vectorization)를 위한 값으로써 OpenCL에서 설정 가능한 값 4, 8, 16 중 병렬성을 극대화하기 위한 최적의 값으로 설정될 수 있다.In this case, the OpenCL parameter is a value for vectorization in the OpenCL kernel and may be set to an optimal value for maximizing parallelism among
여기서, 벡터화는 하나의 명령어를 통해 다수의 데이터를 동시에 처리할 수 있는 OpenCL의 병렬 처리 기능으로써, OpenCL 내장 함수 중 vload n 또는 vstore n(n 은 4, 8, 16)을 통해 사용 가능하다. Here, vectorization is a parallel processing function of OpenCL that can process multiple data simultaneously through one instruction, and can be used through vload n or vstore n ( n is 4, 8, 16) among OpenCL built-in functions.
도 4는 벡터화를 이용한 콘볼루션 계층의 연산 과정을 설명하기 위한 도면이다.4 is a diagram for explaining an operation process of a convolutional layer using vectorization.
도 4를 참조하면, 벡터화 값 n은 4을 나타낸다. OpenCL의 벡터화 기능을 이용할 경우 콘볼루션 계층의 입력 데이터에 해당하는 행렬 B에 대해 vload n 함수를 이용하여 다수의 원소를 한번에 접근 가능하며, 출력 결과 또한 한번에 저장할 수 있다.Referring to FIG. 4 , the vectorized value n represents 4. When using the vectorization function of OpenCL, multiple elements can be accessed at once by using the vload n function for matrix B corresponding to the input data of the convolutional layer, and the output result can also be stored at once.
아울러, 분석부(120)에서 설정 가능한 OpenCL 커널은 연산량에 따라 벡터화만을 적용한 커널과 패딩을 추가한 후 인터리브(interleave) 및 순서 변환(transpose)을 적용한 커널이 존재할 수 있다. In addition, the OpenCL kernel configurable by the
이때, 벡터화만을 적용한 커널은 상대적으로 연산량이 작은 데이터를 대상으로 하며, vload n 또는 vstore n 만을 이용하여 구현된다. 또한, 패딩과 인터리브, 그리고 순서 변환을 적용한 커널은 상대적으로 연산량이 큰 데이터를 대상으로 한다. In this case, the kernel to which only vectorization is applied targets data with a relatively small amount of computation, and is implemented using only vload n or vstore n. In addition, the kernel to which padding, interleaving, and order transformation is applied targets data with a relatively large amount of computation.
다시 도 3을 참조하면, S232의 판단 결과, 해당 콘볼루션 계층이 이전에 수행된 이력이 있는 경우, 분석부(120)는 이전에 수행될 때 사용된 콘볼루션 계층에 미리 설정된 OpenCL 파라미터 및 커널로 설정한다(S234).Referring back to FIG. 3 , as a result of the determination in S232 , if there is a history in which the corresponding convolutional layer has been previously performed, the
도 5는 도 2에 도시된 콘볼루션 계층 병렬 처리 수행 단계(S250)를 상세히 설명하기 위한 순서도이다.FIG. 5 is a flowchart illustrating in detail the step S250 of performing the convolutional layer parallel processing shown in FIG. 2 .
도 5를 참조하면, 병렬 처리부(130)는 OpenCL 커널이 벡터화만 적용하는 것인지의 여부(S251)에 따라 선택적으로 S252 또는 S253으로 진행된다. Referring to FIG. 5 , the
OpenCL 커널이 벡터화만 적용하는 것일 경우, 병렬 처리부(130)는 분석부(120)로부터 전달받은 입력 데이터 및 콘볼루션 계층의 정보를 이용하여 설정된 OpenCL 파라미터 및 커널을 기반으로 병렬 처리 연산을 수행한다(S252).When the OpenCL kernel applies only vectorization, the
반면, OpenCL 커널이 벡터화만 적용하는 것이 아닐 경우, 즉, 패딩과 인터리브, 그리고 순서 변환을 적용한 커널일 경우, 병렬 처리부(130)는 콘볼루션 계층에서 연산을 수행할 행렬이 4의 배수가 아닐 경우 4의 배수가 되도록 각 행렬에 패딩을 추가한다(S263). 이때, 패딩 추가 단계는 OpenCL의 벡터화를 활용하여 수행되며, 벡터화 값은 4, 8, 16 중 최적의 값으로 설정한다. 이때, OpenCL 커널 내에서 데이터 저장 단위는 부호 있는 8비트 정수형의 벡터형 타입인 char n 을 이용하며, n 은 벡터화 값에 따라 결정된다.On the other hand, if the OpenCL kernel does not apply only vectorization, that is, if it is a kernel to which padding, interleaving, and order transformation are applied, the
다음으로, 병렬 처리부(130)는 인터리브를 수행한다(S264). 즉, 콘볼루션 계층의 가중치(weight)를 저장하고 있는 행렬 A(도 4 참조)에 대해서 지정된 행렬 크기를 기준으로 전체 행렬 영역을 분할한 후, 각 분할된 영역에서 열 순서대로 값을 재배치한다. Next, the
도 6은 8x8인 행렬에서 4x4 기준 행렬을 기준으로 인터리브를 수행하는 예시도이다. 6 is an exemplary diagram of performing interleaving based on a 4x4 reference matrix in an 8x8 matrix.
여기서, 인터리브 시 기준 행렬의 크기는 데이터 크기에 따라 4x4, 8x8, 16x16 등으로 선택 가능하다. 인터리브 수행 단계는 OpenCL의 벡터화를 활용하여 수행되며, 기준 행렬의 크기에 따라 벡터화 값을 4, 8, 16 중 최적의 값으로 설정한다. 아울러 OpenCL 커널 내에서 데이터 저장 단위는 부호 있는 8비트 정수형의 벡터형 타입인 char n 을 이용하며, n 은 벡터화 값에 따라 결정된다.Here, the size of the reference matrix during interleaving can be selected as 4x4, 8x8, 16x16, etc. according to the data size. The interleaving step is performed using OpenCL vectorization, and the vectorization value is set to an optimal value among 4, 8, and 16 according to the size of the reference matrix. In addition, the data storage unit in the OpenCL kernel uses char n , a vector type of signed 8-bit integer type, and n is determined according to the vectorized value.
다음으로, 다시 도 5를 참조하면, 병렬 처리부(130)는 순서 변환한다(S265). 즉, 콘볼루션 계층의 입력 데이터를 저장하고 있는 행렬 B(도 4 참조)에 대해서 지정된 행렬 크기를 기준으로 전체 행렬 영역을 분할한 후, 각 분할된 영역에서 행 순서대로 값을 재배치 한다. Next, referring back to FIG. 5 , the
도 7은 8x8인 행렬에서 1x4 기준 행렬을 기준으로 순서 변환을 수행하는 예시도이다. 7 is an exemplary diagram of performing order transformation in an 8x8 matrix based on a 1x4 reference matrix.
순서 변환 시 기준 행렬의 크기는 데이터 크기에 따라 1x4, 1x8, 1x16 등으로 선택 가능하다. 순서 변환 수행 단계는 OpenCL의 벡터화를 활용하여 수행되며, 기준 행렬의 크기에 따라 벡터화 값을 4, 8, 16 중 최적의 값으로 설정한다. 아울러 OpenCL 커널 내에서 데이터 저장 단위는 부호 있는 8비트 정수형의 벡터형 타입인 char n 을 이용하며, n 은 벡터화 값에 따라 결정된다.When converting the order, the size of the reference matrix can be selected as 1x4, 1x8, 1x16, etc. depending on the data size. The step of performing the order transformation is performed using OpenCL vectorization, and the vectorization value is set to an optimal value among 4, 8, and 16 according to the size of the reference matrix. In addition, the data storage unit in the OpenCL kernel uses char n , a vector type of signed 8-bit integer type, and n is determined according to the vectorized value.
다음으로, 병렬 처리부(130)는 콘볼루션 계층 연산 수행한다(S266). 패딩 추가 및 인터리브, 순서 변환이 수행된 행렬 A와 B에 대해 콘볼루션 계층의 연산을 수행한다. Next, the
병렬 처리부(130)는 결과의 정확성을 보장하기 위해 콘볼루션 계층 연산 수행 결과로부터 추가한 패딩을 제거한다(S268). 이때, OpenCL의 벡터화를 활용하여 수행되며, 벡터화 값은 4로 설정하고 OpenCL 커널 내에서 데이터 저장 단위는 부호 있는 32비트 정수형(=signed int)의 벡터형 타입인 int 4를 이용한다.The
도 8은 실시 예에 따른 양자화 추론 연산을 설명하기 위한 순서도이다. 8 is a flowchart illustrating a quantization inference operation according to an embodiment.
도 8을 참조하면, 병렬 처리부(130)는 입력된 데이터에 대해 양자화를 수행한다(S710). 이때, 입력 데이터는 단정밀도 32비트 자료형이며, 입력 데이터와 학습 모델 변환 과정을 통해 구해진 활성화 스케일 변수를 곱셈하는 연산을 수행한다. 여기서, 양자화를 통해 기존 단정밀도 32비트 자료형은 부호 있는 8비트 정수형으로 변환된다.Referring to FIG. 8 , the
병렬 처리부(130)는 콘볼루션 계층의 정보를 분석한다(S720). 이는 콘볼루션 계층의 필터 크기에 따라서 최적화된 연산을 수행하기 위함이다. 즉, 콘볼루션 계층의 필터의 가로/세로 크기가 1, 패딩의 가로/세로 크기가 0, 그리고 스트라이드의 가로/세로 크기가 1일 경우 1x1 필터 확인 변수를 참(true)으로 설정한다.The
병렬 처리부(130)는 1x1 필터 확인 변수가 참인지를 확인한다(S730).The
S730의 확인 결과 1x1 필터 확인 변수가 참이 아닐 경우, 병렬 처리부(130)는 가중치에 대해 IM2COL(Image-to-Column) 연산을 수행한다(S740). 이때, IM2COL 연산은 콘볼루션 계층에서 GEMM 연산을 빠르게 하기 위해 이미지 데이터 배치를 변환하는 연산으로써, 공개된 알고리즘을 이용하여 구현할 수 있다. 또한, IM2COL 연산은 입력 데이터 부호 있는 8비트 정수형 데이터를 입력 받으며, 출력도 동일하게 부호 있는 8비트 정수형 데이터이다.As a result of the check in S730, if the 1x1 filter check variable is not true, the
S730의 확인 결과 1x1 필터 확인 변수가 참이거나 S740을 수행한 이후, 병렬 처리부(130)는 가중치에 대해서 GEMM 연산을 수행한다(S650). As a result of the check in S730, the 1x1 filter check variable is true or after performing S740, the
여기서, GEMM 연산의 일 예는 다음의 <수학식 1>과 같을 수 있다. Here, an example of the GEMM operation may be as in
<수학식 1><
C = αAB + βC (A, B, C는 행렬, α, β는 스칼라)C = αAB + βC (A, B, C are matrices, α, β are scalars)
이때, 행렬 A, B, C의 크기는 M, N, K로 구성된다. 즉, 행렬 A는 M * K의 크기이고, 행렬 B는 K * N의 크기이고, 행렬 C는 M * N의 크기일 수 있다.In this case, the sizes of matrices A, B, and C are composed of M, N, and K. That is, matrix A may have a size of M * K, matrix B may have a size of K * N, and matrix C may have a size of M * N.
이때, GEMM 연산 결과의 오버플로우(overflow)를 방지하기 위해 GEMM 연산 결과의 출력은 부호 있는 32비트 정수형(=int)을 사용한다. 또한, GEMM 연산을 수행하기 위한 OpenCL 커널은 분석부(120)에서 설정한 커널을 사용한다.At this time, to prevent overflow of the GEMM operation result, the output of the GEMM operation result uses a signed 32-bit integer type (=int). In addition, the OpenCL kernel for performing the GEMM operation uses the kernel set by the
병렬 처리부(130)는 GEMM 연산 결과에 대해 비양자화를 수행한다(S760). 이때, 비양자화는 GEMM 연산 결과를 활성화 스케일 변수와 가중치 스케일 변수로 나누는 연산을 수행한다. 또한, 비양자화는 부호 있는 32비트 정수형을 입력 받아, 단정밀도 32비트 자료형을 출력한다.The
다음으로, 병렬 처리부(130)는 콘볼루션 계층에 편향이 존재하는 지를 확인한다(S770). S770의 확인 결과 콘볼루션 계층에 편향이 존재하지 않을 경우, 양자화 추론 과정은 종료된다.Next, the
반면, S770의 확인 결과 콘볼루션 계층에 편향이 존재할 경우, 병렬 처리부(130)는 편향에 대한 GEMM 연산을 수행한다(S780). 이때, 편향에 대한 GEMM 연산은 단정밀도 32비트 자료형을 기반으로 수행된다. 아울러, 편향에 대한 GEMM 연산은 연산량이 상대적으로 작기 때문에 벡터화만을 이용하여 수행한다.On the other hand, if bias exists in the convolutional layer as a result of checking in S770, the
도 9는 실시예에 따른 컴퓨터 시스템 구성을 나타낸 도면이다.9 is a diagram showing the configuration of a computer system according to an embodiment.
실시예에 따른 콘볼루션 신경망 양자화 추론 장치는 컴퓨터로 읽을 수 있는 기록매체와 같은 컴퓨터 시스템(1000)에서 구현될 수 있다.The convolutional neural network quantization reasoning apparatus according to the embodiment may be implemented in the
컴퓨터 시스템(1000)은 버스(1020)를 통하여 서로 통신하는 하나 이상의 프로세서(1010), 메모리(1030), 사용자 인터페이스 입력 장치(1040), 사용자 인터페이스 출력 장치(1050) 및 스토리지(1060)를 포함할 수 있다. 또한, 컴퓨터 시스템(1000)은 네트워크(1080)에 연결되는 네트워크 인터페이스(1070)를 더 포함할 수 있다. 프로세서(1010)는 중앙 처리 장치 또는 메모리(1030)나 스토리지(1060)에 저장된 프로그램 또는 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 메모리(1030) 및 스토리지(1060)는 휘발성 매체, 비휘발성 매체, 분리형 매체, 비분리형 매체, 통신 매체, 또는 정보 전달 매체 중에서 적어도 하나 이상을 포함하는 저장 매체일 수 있다. 예를 들어, 메모리(1030)는 ROM(1031이나 RAM(1032을 포함할 수 있다.
이상에서 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.Although the embodiments of the present invention have been described above with reference to the accompanying drawings, those of ordinary skill in the art to which the present invention pertains can implement the present invention in other specific forms without changing its technical spirit or essential features. You will understand that there is Therefore, it should be understood that the embodiments described above are illustrative in all respects and not restrictive.
100 : 콘볼루션 신경망 양자화 추론 장치
110 : 응용부
120 : 분석부
130 : 병렬 처리부
100: convolutional neural network quantization inference device
110: application unit 120: analysis unit
130: parallel processing unit
Claims (1)
설정된 OpenCL 파라미터 및 커널을 이용하여 콘볼루션 계층에 대한 양자화 추론을 수행하는 단계를 포함하는 콘볼루션 신경망 양자화 추론 방법.As the pre-trained convolutional neural network receives the characteristics and convolutional layer information of the input data to be inferred, it analyzes the characteristics of the input data and the convolutional layer information to set the OpenCL parameters and kernel optimized for the hardware platform of the embedded system. Steps to do: and
A convolutional neural network quantization inference method comprising the step of performing quantization inference on a convolutional layer by using the set OpenCL parameter and kernel.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200055313A KR102455310B1 (en) | 2020-05-08 | 2020-05-08 | Apparatus and Method for Convolutional Neural Network Quantization Inference |
KR1020220128648A KR102545658B1 (en) | 2020-05-08 | 2022-10-07 | Apparatus and Method for Convolutional Neural Network Quantization Inference |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200055313A KR102455310B1 (en) | 2020-05-08 | 2020-05-08 | Apparatus and Method for Convolutional Neural Network Quantization Inference |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020220128648A Division KR102545658B1 (en) | 2020-05-08 | 2022-10-07 | Apparatus and Method for Convolutional Neural Network Quantization Inference |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210136700A true KR20210136700A (en) | 2021-11-17 |
KR102455310B1 KR102455310B1 (en) | 2022-10-18 |
Family
ID=78703031
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200055313A KR102455310B1 (en) | 2020-05-08 | 2020-05-08 | Apparatus and Method for Convolutional Neural Network Quantization Inference |
KR1020220128648A KR102545658B1 (en) | 2020-05-08 | 2022-10-07 | Apparatus and Method for Convolutional Neural Network Quantization Inference |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020220128648A KR102545658B1 (en) | 2020-05-08 | 2022-10-07 | Apparatus and Method for Convolutional Neural Network Quantization Inference |
Country Status (1)
Country | Link |
---|---|
KR (2) | KR102455310B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20240035013A (en) | 2022-09-08 | 2024-03-15 | 한양대학교 산학협력단 | Sparse data based convolution calculate method and apparatus using artificial neural network |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102577125B1 (en) * | 2023-02-16 | 2023-09-12 | (주)밀 | Artificial neural network model |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170103299A1 (en) * | 2015-10-07 | 2017-04-13 | Altera Corporation | Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator |
US20180308208A1 (en) * | 2017-04-24 | 2018-10-25 | Intel Corporation | Compute optimization mechanism for deep neural networks |
US20180307987A1 (en) * | 2017-04-24 | 2018-10-25 | Intel Corporation | Hardware ip optimized convolutional neural network |
US20180308206A1 (en) * | 2017-04-24 | 2018-10-25 | Prasoonkumar Surti | Compute optimization mechanism for deep neural networks |
US20180315158A1 (en) * | 2017-04-28 | 2018-11-01 | Intel Corporation | Programmable coarse grained and sparse matrix compute hardware with advanced scheduling |
KR20190034985A (en) | 2017-09-25 | 2019-04-03 | 삼성전자주식회사 | Method and apparatus of artificial neural network quantization |
US20190114533A1 (en) * | 2017-10-17 | 2019-04-18 | Xilinx, Inc. | Machine learning runtime library for neural network acceleration |
KR20190088643A (en) * | 2018-01-19 | 2019-07-29 | 한국전자통신연구원 | Gpu-based adaptive blas operation acceleration apparatus and method thereof |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073549B (en) * | 2016-11-14 | 2021-04-27 | 耐能股份有限公司 | Convolution operation device and method |
KR102415508B1 (en) * | 2017-03-28 | 2022-07-01 | 삼성전자주식회사 | Convolutional neural network processing method and apparatus |
US11880760B2 (en) * | 2019-05-01 | 2024-01-23 | Samsung Electronics Co., Ltd. | Mixed-precision NPU tile with depth-wise convolution |
-
2020
- 2020-05-08 KR KR1020200055313A patent/KR102455310B1/en active IP Right Grant
-
2022
- 2022-10-07 KR KR1020220128648A patent/KR102545658B1/en active IP Right Grant
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170103299A1 (en) * | 2015-10-07 | 2017-04-13 | Altera Corporation | Method and Apparatus for Implementing Layers on a Convolutional Neural Network Accelerator |
US20180308208A1 (en) * | 2017-04-24 | 2018-10-25 | Intel Corporation | Compute optimization mechanism for deep neural networks |
US20180307987A1 (en) * | 2017-04-24 | 2018-10-25 | Intel Corporation | Hardware ip optimized convolutional neural network |
US20180308206A1 (en) * | 2017-04-24 | 2018-10-25 | Prasoonkumar Surti | Compute optimization mechanism for deep neural networks |
US20180315158A1 (en) * | 2017-04-28 | 2018-11-01 | Intel Corporation | Programmable coarse grained and sparse matrix compute hardware with advanced scheduling |
KR20190034985A (en) | 2017-09-25 | 2019-04-03 | 삼성전자주식회사 | Method and apparatus of artificial neural network quantization |
US20190114533A1 (en) * | 2017-10-17 | 2019-04-18 | Xilinx, Inc. | Machine learning runtime library for neural network acceleration |
KR20190088643A (en) * | 2018-01-19 | 2019-07-29 | 한국전자통신연구원 | Gpu-based adaptive blas operation acceleration apparatus and method thereof |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20240035013A (en) | 2022-09-08 | 2024-03-15 | 한양대학교 산학협력단 | Sparse data based convolution calculate method and apparatus using artificial neural network |
Also Published As
Publication number | Publication date |
---|---|
KR20220143792A (en) | 2022-10-25 |
KR102455310B1 (en) | 2022-10-18 |
KR102545658B1 (en) | 2023-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20220143792A (en) | Apparatus and Method for Convolutional Neural Network Quantization Inference | |
CN110378468B (en) | Neural network accelerator based on structured pruning and low bit quantization | |
US20210133278A1 (en) | Piecewise quantization for neural networks | |
TW201915839A (en) | Method and apparatus for quantizing artificial neural network and floating-point neural network | |
KR102655950B1 (en) | High speed processing method of neural network and apparatus using thereof | |
CN111047563B (en) | Neural network construction method applied to medical ultrasonic image | |
CN112101525A (en) | Method, device and system for designing neural network through NAS | |
US11443173B2 (en) | Hardware-software co-design for accelerating deep learning inference | |
CN109857459B (en) | E-level super-calculation ocean mode automatic transplanting optimization method and system | |
CN115794913B (en) | Data processing method and device in artificial intelligence system | |
CN113449859A (en) | Data processing method and device | |
CN113505883A (en) | Neural network training method and device | |
CN112200296A (en) | Network model quantification method and device, storage medium and electronic equipment | |
CN117616424A (en) | Systems and methods for balancing sparsity in weights for accelerating deep neural networks | |
CN115934275A (en) | Task processing method and dialogue task processing method | |
CN116991560A (en) | Parallel scheduling method, device, equipment and storage medium for language model | |
CN117196000A (en) | Edge side model reasoning acceleration method for containerized deployment | |
CN116909641A (en) | Efficient and procedural GPU (graphics processing unit) expansion module group automatic configuration method | |
CN115567599B (en) | Cloud edge collaborative computing task migration method, device and equipment | |
US20230008856A1 (en) | Neural network facilitating fixed-point emulation of floating-point computation | |
CN115496181A (en) | Chip adaptation method, device, chip and medium of deep learning model | |
CN114662681B (en) | YOLO algorithm-oriented general hardware accelerator system platform capable of being rapidly deployed | |
KR102384588B1 (en) | Method for operating a neural network and for producing weights for the neural network | |
Song et al. | Latency minimization for mobile edge computing enhanced proximity detection in road networks | |
CN118093518B (en) | Model processing method and device, storage medium and electronic equipment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |