WO2022085661A1 - ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム - Google Patents
ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム Download PDFInfo
- Publication number
- WO2022085661A1 WO2022085661A1 PCT/JP2021/038530 JP2021038530W WO2022085661A1 WO 2022085661 A1 WO2022085661 A1 WO 2022085661A1 JP 2021038530 W JP2021038530 W JP 2021038530W WO 2022085661 A1 WO2022085661 A1 WO 2022085661A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- neural network
- memory
- hardware
- software
- data
- Prior art date
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 185
- 238000000034 method Methods 0.000 title claims description 54
- 230000015654 memory Effects 0.000 claims description 203
- 238000004364 calculation method Methods 0.000 claims description 202
- 238000012546 transfer Methods 0.000 claims description 40
- 238000013139 quantization Methods 0.000 description 175
- 239000013598 vector Substances 0.000 description 42
- 238000013527 convolutional neural network Methods 0.000 description 34
- 230000006870 function Effects 0.000 description 33
- 238000010586 diagram Methods 0.000 description 30
- 230000008569 process Effects 0.000 description 22
- 238000011176 pooling Methods 0.000 description 20
- 230000004913 activation Effects 0.000 description 16
- 238000012360 testing method Methods 0.000 description 15
- 239000011159 matrix material Substances 0.000 description 14
- 238000010606 normalization Methods 0.000 description 8
- 238000003860 storage Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000007704 transition Effects 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 230000006399 behavior Effects 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000007493 shaping process Methods 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000002542 deteriorative effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000020169 heat generation Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 239000013585 weight reducing agent Substances 0.000 description 1
Images
Classifications
-
- 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/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- 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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Definitions
- the present invention relates to a neural network generator, a neural network control method, and a software generation program.
- a convolutional neural network has been used as a model for image recognition and the like.
- a convolutional neural network has a multi-layered structure having a convolutional layer and a pooling layer, and requires a large number of operations such as a convolutional operation.
- Various arithmetic methods have been devised to speed up the arithmetic by the convolutional neural network (Patent Document 1 and the like).
- embedded devices such as IoT devices also use image recognition using convolutional neural networks.
- convolutional neural network In order to efficiently operate a convolutional neural network in an embedded device, it is desired to generate a circuit or a model that performs an operation related to the neural network according to the hardware configuration of the embedded device. Further, a control method for operating these circuits and models with high efficiency and high speed is desired. Further, a software generation program that generates software for operating these circuits and models with high efficiency and high speed is desired.
- the present invention is a neural network generator, a neural network generator, which generates a circuit or model related to a neural network that can be incorporated into an embedded device such as an IoT device and can be operated at high efficiency and high speed.
- a neural network control method that operates circuits and models that perform operations related to networks with high efficiency and high speed
- software generation programs that generate software that operates circuits and models that perform operations related to neural networks with high efficiency and high speed. The purpose is.
- the neural network generation device is a neural network generation device that generates a neural network execution model that calculates a neural network, and includes hardware information of the hardware on which the neural network execution model operates. , Software that generates an execution model generator that generates the neural network execution model based on the network information of the neural network, and software that operates the neural network hardware that implements the neural network execution model on the hardware. It is provided with a generation unit.
- the neural network control method is a method for controlling neural network hardware that calculates a neural network, and is a neural network control that divides the neural network and causes the neural network hardware to perform the calculation. Method.
- the software generation program is a program that generates software for controlling neural network hardware that calculates a neural network, and divides the neural network so that the neural network hardware calculates. Have the computer generate the software.
- the neural network generation device, neural network control method, and software generation program of the present invention can be incorporated into an embedded device such as an IoT device, and can generate and control a neural network that can be operated with high performance.
- FIG. 1 is a diagram showing a neural network generation device 300 according to the present embodiment.
- the neural network generation device 300 is a device that generates a trained neural network execution model 100 that can be incorporated into an embedded device such as an IoT device.
- the neural network execution model 100 is a software or hardware model generated for operating a convolutional neural network 200 (hereinafter referred to as “CNN200”) in an embedded device.
- CNN200 convolutional neural network 200
- the neural network generation device 300 is a program-executable device (computer) equipped with a processor such as a CPU (Central Processing Unit) and hardware such as a memory.
- the function of the neural network generation device 300 is realized by executing the neural network generation program and the software generation program in the neural network generation device 300.
- the neural network generation device 300 includes a storage unit 310, a calculation unit 320, a data input unit 330, a data output unit 340, a display unit 350, and an operation input unit 360.
- the storage unit 310 stores the hardware information HW, the network information NW, the learning data set DS, the neural network execution model 100 (hereinafter referred to as “NN execution model 100”), and the learned parameter PM.
- the hardware information HW, the learning data set DS, and the network information NW are input data input to the neural network generator 300.
- the NN execution model 100 and the trained parameter PM are output data output by the neural network generator 300.
- the "trained NN execution model 100" includes the NN execution model 100 and the trained parameter PM.
- Hardware information HW is information on an embedded device (hereinafter referred to as "operation target hardware") that operates the NN execution model 100.
- the hardware information HW is, for example, a device type, device constraint, memory configuration, bus configuration, operating frequency, power consumption, manufacturing process type, etc. of the operation target hardware.
- the device type is, for example, an ASIC (Application Specific Integrated Circuit), an FPGA (Field-Programmable Gate Array), or the like.
- Device constraints include the upper limit of the number of arithmetic units included in the operation target device and the upper limit of the circuit scale.
- the memory configuration is a memory type, the number of memories, a memory capacity, and an input / output data width.
- the bus configuration includes the bus type, bus width, bus communication standard, and connection devices on the same bus. Further, when there are a plurality of variations in the NN execution model 100, the hardware information HW includes information regarding the variations of the NN execution model 100 to be used.
- Network information NW is the basic information of CNN200.
- the network information NW is, for example, the network configuration of the CNN200, input data information, output data information, quantization information, and the like.
- the input data information includes an input data type such as an image and a sound, and an input data size.
- the learning data set DS has training data D1 used for learning and test data D2 used for inference test.
- FIG. 2 is a diagram showing input / output of the calculation unit 320.
- the calculation unit 320 includes an execution model generation unit 321, a learning unit 322, an inference unit 323, a hardware generation unit 324, and a software generation unit 325.
- the NN execution model 100 input to the arithmetic unit 320 may be generated by a device other than the neural network generation device 300.
- the execution model generation unit 321 generates the NN execution model 100 based on the hardware information HW and the network information NW.
- the NN execution model 100 is software or a hardware model generated for operating the CNN 200 in the operation target hardware.
- Software includes software that controls the hardware model.
- the hardware model may be a behavior level, an RTL (Register Transfer Level), a netlist representing connections between gates and circuit modules, or a combination thereof. ..
- the learning unit 322 generates the learned parameter PM by using the NN execution model 100 and the learning data D1.
- the inference unit 323 carries out an inference test using the NN execution model 100 and the test data D2.
- the hardware generation unit 324 generates the neural network hardware model 400 based on the hardware information HW and the NN execution model 100.
- the neural network hardware model 400 is a hardware model that can be implemented in the operating target hardware.
- the neural network hardware model 400 is optimized for the operating target hardware based on the hardware information HW.
- the neural network hardware model 400 may be an RTL (Register Transfer Level), a netlist representing a connection between a gate or a circuit module, or a combination thereof.
- the neural network hardware model 400 may be a parameter list or a configuration file necessary for implementing the NN execution model 100 in the hardware. The parameter list and configuration file are used in combination with the separately generated NN execution model 100.
- neural network hardware 600 the implementation of the neural network hardware model 400 on the operating target hardware is referred to as "neural network hardware 600".
- the software generation unit 325 generates software 500 for operating the neural network hardware 600 based on the network information NW and the NN execution model 100.
- Software 500 includes software that transfers the trained parameter PM to the neural network hardware 600 as needed.
- the hardware information HW, network information NW, etc. necessary for generating the trained NN execution model 100 are input to the data input unit 330.
- the hardware information HW, network information NW, and the like are input as data described in, for example, a predetermined data format.
- the input hardware information HW, network information NW, and the like are stored in the storage unit 310.
- the hardware information HW, the network information NW, and the like may be input or changed by the user from the operation input unit 360.
- the generated trained NN execution model 100 is output to the data output unit 340.
- the generated NN execution model 100 and the learned parameter PM are output to the data output unit 340.
- the display unit 350 has a known monitor such as an LCD display.
- the display unit 350 can display a console screen for receiving GUI (Graphical User Interface) images, commands, and the like generated by the calculation unit 320. Further, when the calculation unit 320 requires information input from the user, the display unit 350 can display a message prompting the user to input information from the operation input unit 360 or a GUI image necessary for information input.
- GUI Graphic User Interface
- the operation input unit 360 is a device in which the user inputs an instruction to the calculation unit 320 or the like.
- the operation input unit 360 is a known input device such as a touch panel, a keyboard, and a mouse. The input of the operation input unit 360 is transmitted to the calculation unit 320.
- All or part of the functions of the arithmetic unit 320 are realized by executing a program stored in the program memory by one or more processors such as a CPU (Central Processing Unit) and a GPU (Graphics Processing Unit). ..
- processors such as a CPU (Central Processing Unit) and a GPU (Graphics Processing Unit).
- all or part of the functions of the arithmetic unit 320 are hardware such as LSI (Large Scale Integration), ASIC (Application Specific Integrated Circuit), FPGA (Field-Programmable Gate Array), PLD (Programmable Logic Device) (for example). It may be realized by a circuit unit; circuity). Further, all or a part of the functions of the arithmetic unit 320 may be realized by a combination of software and hardware.
- All or part of the functions of the arithmetic unit 320 may be realized by using an external accelerator such as a CPU, GPU, or hardware provided in an external device such as a cloud server.
- the arithmetic unit 320 can improve the arithmetic speed of the arithmetic unit 320 by using, for example, a GPU having high arithmetic performance on a cloud server or dedicated hardware in combination.
- the storage unit 310 is realized by a flash memory, an EEPROM (Electrically Erasable Programmable Read-Only Memory), a ROM (Read-Only Memory), a RAM (Random Access Memory), or the like. All or part of the storage unit 310 may be provided in an external device such as a cloud server and may be connected to the arithmetic unit 320 or the like by a communication line.
- EEPROM Electrically Erasable Programmable Read-Only Memory
- ROM Read-Only Memory
- RAM Random Access Memory
- FIG. 3 is a diagram showing an example of CNN200.
- the network information NW of the CNN200 is information regarding the configuration of the CNN200 described below.
- the CNN200 uses a low-bit weight w and quantized input data a, and is easy to incorporate into an embedded device.
- the CNN 200 is a multi-layered network including a convolution layer 210 for performing a convolution operation, a quantization calculation layer 220 for performing a quantization calculation, and an output layer 230. In at least a part of the CNN 200, the convolution layer 210 and the quantization calculation layer 220 are alternately connected.
- the CNN200 is a model widely used for image recognition and video recognition.
- the CNN 200 may further have a layer having other functions such as a fully connected layer.
- FIG. 4 is a diagram illustrating a convolution operation performed by the convolution layer 210.
- the convolution layer 210 performs a convolution operation using the weight w on the input data a.
- the convolution layer 210 performs a product-sum operation with the input data a and the weight w as inputs.
- the input data a (also referred to as activation data or feature map) to the convolution layer 210 is multidimensional data such as image data.
- the input data a is a three-dimensional tensor composed of elements (x, y, c).
- the convolution layer 210 of the CNN 200 performs a convolution operation on the low-bit input data a.
- the element of the input data a is a 2-bit unsigned integer (0, 1, 2, 3).
- the element of the input data a may be, for example, a 4-bit or 8-bit unsigned integer.
- the CNN200 When the input data input to the CNN200 has a different format from the input data a to the convolutional layer 210, for example, a 32-bit floating point type, the CNN200 inserts an input layer for type conversion or quantization before the convolutional layer 210. You may also have more.
- the weight w (also referred to as a filter or kernel) of the convolution layer 210 is multidimensional data having elements that are learnable parameters.
- the weight w is a four-dimensional tensor composed of elements (i, j, c, d).
- the weight w has d three-dimensional tensors (hereinafter referred to as “weight w”) composed of elements (i, j, c).
- the weight w in the trained CNN 200 is the trained data.
- the convolution layer 210 of the CNN 200 performs a convolution operation using a low bit weight w.
- the element of the weight w is a 1-bit signed integer (0,1), where the value "0" represents +1 and the value "1" represents -1.
- the convolution layer 210 performs the convolution operation shown in Equation 1 and outputs the output data f.
- s represents a stride.
- the area shown by the dotted line in FIG. 4 indicates one of the areas ao (hereinafter referred to as “applicable area ao”) to which the weight wo is applied to the input data a.
- the element of the application area ao is represented by (x + i, y + j, c).
- the quantization calculation layer 220 performs quantization or the like on the output of the convolution calculation output by the convolution layer 210.
- the quantization calculation layer 220 includes a pooling layer 221, a Batch Normalization layer 222, an activation function layer 223, and a quantization layer 224.
- the pooling layer 221 performs operations such as average pooling (Equation 2) and MAX pooling (Equation 3) on the output data f of the convolution operation output by the convolution layer 210, and compresses the output data f of the convolution layer 210. do.
- Equations 2 and 3 u indicates an input tensor, v indicates an output tensor, and T indicates the size of the pooling region.
- max is a function that outputs the maximum value of u for the combination of i and j contained in T.
- the Batch Normalization layer 222 normalizes the data distribution of the output data of the quantization calculation layer 220 and the pooling layer 221 by, for example, the calculation shown in Equation 4.
- Equation 4 u represents an input tensor, v represents an output tensor, ⁇ represents a scale, and ⁇ represents a bias.
- ⁇ and ⁇ are trained constant vectors.
- the activation function layer 223 calculates an activation function such as ReLU (Equation 5) on the outputs of the quantization calculation layer 220, the pooling layer 221 and the Batch rectification layer 222.
- u is the input tensor and v is the output tensor.
- max is a function that outputs the largest numerical value among the arguments.
- the quantization layer 224 quantizes the outputs of the pooling layer 221 and the activation function layer 223, for example, as shown in Equation 6 based on the quantization parameters.
- the quantization shown in Equation 6 reduces the input tensor u to 2 bits.
- q (c) is a vector of quantization parameters.
- q (c) is a trained constant vector.
- the inequality sign “ ⁇ ” in Equation 6 may be “ ⁇ ”.
- the output layer 230 is a layer that outputs the result of CNN200 by an identity function, a softmax function, or the like.
- the layer in front of the output layer 230 may be a convolution layer 210 or a quantization calculation layer 220.
- the load of the convolutional operation of the convolutional layer 210 is smaller than that of other convolutional neural networks that do not perform quantization. ..
- FIG. 5 is a diagram showing an example of the NN execution model 100.
- the NN execution model 100 is software or a hardware model generated for operating the CNN 200 in the operation target hardware.
- Software includes software that controls the hardware model.
- the hardware model may be a behavior level, an RTL (Register Transfer Level), a netlist representing connections between gates and circuit modules, or a combination thereof. ..
- the NN execution model 100 includes a first memory 1, a second memory 2, a DMA controller 3 (hereinafter, also referred to as “DMAC3”), a convolution operation circuit 4, a quantization operation circuit 5, and a controller 6. Be prepared.
- the NN execution model 100 is characterized in that the convolution calculation circuit 4 and the quantization calculation circuit 5 are formed in a loop shape via the first memory 1 and the second memory 2.
- the first memory 1 is a rewritable memory such as a volatile memory composed of, for example, SRAM (Static RAM). Data is written to and read from the first memory 1 via the DMAC 3 and the controller 6.
- the first memory 1 is connected to the input port of the convolution calculation circuit 4, and the convolution calculation circuit 4 can read data from the first memory 1. Further, the first memory 1 is connected to the output port of the quantization calculation circuit 5, and the quantization calculation circuit 5 can write data to the first memory 1.
- the external host CPU can input / output data to / from the NN execution model 100 by writing / reading data to / from the first memory 1.
- the second memory 2 is a rewritable memory such as a volatile memory composed of, for example, SRAM (Static RAM). Data is written to and read from the second memory 2 via the DMAC 3 and the controller 6.
- the second memory 2 is connected to the input port of the quantization calculation circuit 5, and the quantization calculation circuit 5 can read data from the second memory 2. Further, the second memory 2 is connected to the output port of the convolution calculation circuit 4, and the convolution calculation circuit 4 can write data to the second memory 2.
- the external host CPU can input / output data to / from the NN execution model 100 by writing / reading data to / from the second memory 2.
- the DMAC 3 is connected to the external bus EB and transfers data between an external memory such as a DRAM and the first memory 1. Further, the DMAC 3 transfers data between an external memory such as a DRAM and the second memory 2. Further, the DMAC 3 transfers data between an external memory such as a DRAM and the convolution calculation circuit 4. Further, the DMAC 3 transfers data between an external memory such as a DRAM and the quantization calculation circuit 5.
- the convolution calculation circuit 4 is a circuit that performs a convolution calculation in the convolution layer 210 of the trained CNN 200.
- the convolution calculation circuit 4 reads the input data a stored in the first memory 1 and performs the convolution calculation on the input data a.
- the convolution calculation circuit 4 writes the output data f of the convolution operation (hereinafter, also referred to as “convolution operation output data”) to the second memory 2.
- the quantization calculation circuit 5 is a circuit that performs at least a part of the quantization calculation in the quantization calculation layer 220 of the trained CNN200.
- the quantization operation circuit 5 reads out the output data f of the convolution operation stored in the second memory 2, and for the output data f of the convolution operation, the quantization operation (pooling, Batch Nomalization, activation function, and quantization). Of these, at least operations including quantization) are performed.
- the quantization calculation circuit 5 writes the output data of the quantization calculation (hereinafter, also referred to as “quantization calculation output data”) metre to the first memory 1.
- the controller 6 is connected to the external bus EB and operates as a slave of the external host CPU.
- the controller 6 has a register 61 including a parameter register and a status register.
- the parameter register is a register that controls the operation of the NN execution model 100.
- the status register is a register indicating the status of the NN execution model 100 including the semaphore S.
- the external host CPU can access the register 61 via the controller 6.
- the controller 6 is connected to the first memory 1, the second memory 2, the DMAC 3, the convolution calculation circuit 4, and the quantization calculation circuit 5 via the internal bus IB.
- the external host CPU can access each block via the controller 6. For example, the external host CPU can instruct instructions to the DMAC 3, the convolution calculation circuit 4, and the quantization calculation circuit 5 via the controller 6. Further, the DMAC 3, the convolution calculation circuit 4, and the quantization calculation circuit 5 can update the state registers (including the semaphore S) of the controller 6 via the internal bus IB.
- the state register (including the semaphore S) may be configured to be updated via a dedicated wiring connected to the DMAC 3, the convolution calculation circuit 4, and the quantization calculation circuit 5.
- the NN execution model 100 has a first memory 1, a second memory 2, and the like, it is possible to reduce the number of times of data transfer of duplicate data in data transfer by DMAC3 from an external memory such as a DRAM. As a result, the power consumption generated by the memory access can be significantly reduced.
- FIG. 6 is a timing chart showing an operation example of the NN execution model 100.
- the NN execution model 100 calculates the operation of the CNN 200, which is a multi-layer structure of a plurality of layers, by a circuit formed in a loop shape.
- the NN execution model 100 can efficiently use hardware resources due to the loop-shaped circuit configuration.
- an operation example of the neural network hardware 600 shown in FIG. 6 will be described.
- the DMAC 3 stores the input data a of the layer 1 (see FIG. 3) in the first memory 1.
- the DMAC 3 may divide the input data a of the layer 1 and transfer it to the first memory 1 in accordance with the order of the convolution operations performed by the convolution operation circuit 4.
- the convolution calculation circuit 4 reads out the input data a of the layer 1 (see FIG. 3) stored in the first memory 1.
- the convolution calculation circuit 4 performs a layer 1 convolution operation on the layer 1 input data a.
- the output data f of the layer 1 convolution operation is stored in the second memory 2.
- the quantization calculation circuit 5 reads out the output data f of the layer 1 stored in the second memory 2.
- the quantization calculation circuit 5 performs a layer 2 quantization calculation on the output data f of the layer 1.
- the output data metreut of the layer 2 quantization operation is stored in the first memory 1.
- the convolution operation circuit 4 reads out the output data of the layer 2 quantization operation stored in the first memory 1.
- the convolution operation circuit 4 performs the convolution operation of the layer 3 by using the output data metreut of the quantization operation of the layer 2 as the input data a.
- the output data f of the layer 3 convolution operation is stored in the second memory 2.
- the convolution operation circuit 4 reads out the output data administratut of the quantization operation of the layer 2M-2 (M is a natural number) stored in the first memory 1.
- the convolution operation circuit 4 performs the convolution operation of the layer 2M-1 by using the output data réelleut of the quantization operation of the layer 2M-2 as the input data a.
- the output data f of the convolution operation of the layer 2M-1 is stored in the second memory 2.
- the quantization calculation circuit 5 reads out the output data f of the layer 2M-1 stored in the second memory 2.
- the quantization calculation circuit 5 performs a layer 2M quantization calculation on the output data f of the 2M-1 layer.
- the output data metreut of the layer 2M quantization operation is stored in the first memory 1.
- the convolution operation circuit 4 reads out the output data administratut of the layer 2M quantization operation stored in the first memory 1.
- the convolution operation circuit 4 performs the convolution operation of the layer 2M + 1 by using the output data administratut of the quantization operation of the layer 2M as the input data a.
- the output data f of the convolution operation of the layer 2M + 1 is stored in the second memory 2.
- the convolution calculation circuit 4 and the quantization calculation circuit 5 alternately perform calculations, and proceed with the calculation of CNN200 shown in FIG.
- the convolution calculation circuit 4 performs the convolution calculation of the layer 2M-1 and the layer 2M + 1 by time division.
- the quantization calculation circuit 5 performs the quantization calculation of the layer 2M-2 and the layer 2M by time division. Therefore, the circuit scale of the NN execution model 100 is significantly smaller than that in the case where the convolution calculation circuit 4 and the quantization calculation circuit 5 are separately mounted for each layer.
- step S10 the operation of the neural network generation device 300 (neural network control method) will be described with reference to the control flowchart of the neural network generation device 300 shown in FIG. 7. After performing the initialization process (step S10), the neural network generation device 300 executes step S11.
- step S11 the neural network generation device 300 acquires the hardware information HW of the operation target hardware (hardware information acquisition step).
- the neural network generation device 300 acquires, for example, the hardware information HW input to the data input unit 330.
- the neural network generation device 300 acquires the hardware information HW by displaying the GUI image necessary for inputting the hardware information HW on the display unit 350 and causing the user to input the hardware information HW from the operation input unit 360. You may.
- the hardware information HW has a memory type, a memory capacity, and an input / output data width of the memory allocated as the first memory 1 and the second memory 2.
- the acquired hardware information HW is stored in the storage unit 310.
- the neural network generation device 300 executes step S12.
- step S12 the neural network generation device 300 acquires the network information NW of the CNN 200 (network information acquisition step).
- the neural network generation device 300 acquires, for example, the network information NW input to the data input unit 330.
- the neural network generation device 300 may acquire the network information NW by displaying the GUI image necessary for inputting the network information NW on the display unit 350 and having the user input the network information NW from the operation input unit 360. ..
- the network information NW includes a network configuration including an input layer and an output layer 230, a configuration of a convolution layer 210 including a weight w and a bit width of input data a, and a quantization calculation layer 220 including quantization information.
- a network configuration including an input layer and an output layer 230, a configuration of a convolution layer 210 including a weight w and a bit width of input data a, and a quantization calculation layer 220 including quantization information.
- the acquired network information NW is stored in the storage unit 310.
- the neural network generation device 300 executes step S13.
- step S13 the execution model generation unit 321 of the neural network generation device 300 generates the NN execution model 100 based on the hardware information HW and the network information NW (neural network execution model generation step).
- the neural network execution model generation step is, for example, a convolution calculation circuit generation step (S13-1), a quantization calculation circuit generation step (S13-2), and a DMAC generation step (S13-3). And have.
- the execution model generation unit 321 generates the convolution calculation circuit 4 of the NN execution model 100 based on the hardware information HW and the network information NW (convolution calculation circuit generation step).
- the execution model generation unit 321 generates a hardware model of the convolution calculation circuit 4 from information such as the weight w input as the network information NW and the bit width of the input data a.
- the hardware model may be a behavior level, an RTL (Register Transfer Level), a netlist representing connections between gates and circuit modules, or a combination thereof. ..
- RTL Registered Transfer Level
- FIG. 8 is an internal block diagram of the generated convolution calculation circuit 4.
- the convolution operation circuit 4 includes a weight memory 41, a multiplier 42, an accumulator circuit 43, and a state controller 44.
- the convolution operation circuit 4 has a state controller 44 dedicated to the multiplier 42 and the accumulator circuit 43, and when an instruction command is input, the convolution operation can be performed without the need for an external controller.
- the weight memory 41 is a memory in which the weight w used for the convolution operation is stored, and is a rewritable memory such as a volatile memory composed of, for example, a SRAM (Static RAM).
- the DMAC 3 writes the weight w required for the convolution operation to the weight memory 41 by DMA transfer.
- FIG. 9 is an internal block diagram of the multiplier 42.
- the multiplier 42 multiplies each element of the input vector a by each element of the weight matrix w.
- Each element of the input vector a is data obtained by dividing the input data a, and is vector data having Bc elements (for example, "input vector A" described later).
- each element of the weight matrix w is data in which the weight w is divided, and is matrix data having Bc ⁇ Bd elements (for example, “weight matrix W” described later).
- the multiplier 42 has Bc ⁇ Bd product-sum calculation units 47, and can perform multiplication of the input vector A and the weight matrix W in parallel.
- the multiplier 42 reads the input vector A and the weight matrix W necessary for multiplication from the first memory 1 and the weight memory 41, and performs multiplication.
- the multiplier 42 outputs Bd product-sum operation results O (di).
- FIG. 10 is an internal block diagram of the product-sum calculation unit 47.
- the product-sum calculation unit 47 performs multiplication of the element A (ci) of the input vector A and the element W (ci, di) of the weight matrix W. Further, the product-sum calculation unit 47 adds the multiplication result and the multiplication result S (ci, di) of another product-sum calculation unit 47.
- the product-sum calculation unit 47 outputs the addition result S (ci + 1, di).
- ci is an index from 0 to (Bc-1).
- di is an index from 0 to (Bd-1).
- the element A (ci) is a 2-bit unsigned integer (0,1,2,3).
- the element W (ci, di) is a 1-bit signed integer (0,1), where the value "0" represents +1 and the value "1" represents -1.
- the product-sum calculation unit 47 has an inverter (inverter) 47a, a selector 47b, and an adder 47c.
- the multiply-accumulate unit 47 does not use a multiplier, but uses only the inverter 47a and the selector 47b to perform multiplication.
- the selector 47b selects the input of the element A (ci) when the element W (ci, di) is “0”. When the element W (ci, di) is "1", the selector 47b selects the complement in which the element A (ci) is inverted by the inversion device.
- the element W (ci, di) is also input to the Carry-in of the adder 47c.
- the adder 47c outputs a value obtained by adding the element A (ci) to the S (ci, di) when the element W (ci, di) is “0”.
- the adder 47c outputs a value obtained by subtracting the element A (ci) from S (ci, di) when W (ci, di) is “1”.
- FIG. 11 is an internal block diagram of the accumulator circuit 43.
- the accumulator circuit 43 accumulates the product-sum operation result O (di) of the multiplier 42 into the second memory 2.
- the accumulator circuit 43 has Bd accumulator units 48, and can accumulate Bd product-sum operation results O (di) in parallel to the second memory 2.
- FIG. 12 is an internal block diagram of the accumulator unit 48.
- the accumulator unit 48 has an adder 48a and a mask portion 48b.
- the adder 48a adds the element O (di) of the product-sum operation result O and the partial sum stored in the second memory 2 which is an intermediate process of the convolution operation shown in the equation 1.
- the addition result is 16 bits per element.
- the addition result is not limited to 16 bits per element, and may be, for example, 15 bits or 17 bits per element.
- the adder 48a writes the addition result to the same address in the second memory 2.
- the mask unit 48b masks the output from the second memory 2 and sets the addition target for the element O (di) to zero.
- the initialization signal clear is asserted when the partial sum of the progress is not stored in the second memory 2.
- the output data f (x, y, do) having Bd elements is stored in the second memory.
- the state controller 44 controls the states of the multiplier 42 and the accumulator circuit 43. Further, the state controller 44 is connected to the controller 6 via the internal bus IB.
- the state controller 44 has an instruction queue 45 and a control circuit 46.
- the instruction queue 45 is a queue in which the instruction command C4 for the convolution operation circuit 4 is stored, and is composed of, for example, a FIFO memory.
- the instruction command C4 is written in the instruction queue 45 via the internal bus IB.
- the control circuit 46 is a state machine that decodes the instruction command C4 and controls the multiplier 42 and the accumulator circuit 43 based on the instruction command C4.
- the control circuit 46 may be implemented by a logic circuit or by a CPU controlled by software.
- FIG. 13 is a state transition diagram of the control circuit 46.
- the control circuit 46 transitions from the idle state S1 to the decode state S2.
- the control circuit 46 decodes the instruction command C3 output from the instruction queue 45 in the decode state S2. Further, the control circuit 46 reads the semaphore S stored in the register 61 of the controller 6 and determines whether or not the operation of the multiplier 42 or the accumulator circuit 43 instructed by the instruction command C4 can be executed. If it is infeasible (Not ready), the control circuit 46 waits until it becomes executable (Wait). If it is executable, the control circuit 46 transitions from the decode state S2 to the execution state S3.
- the control circuit 46 controls the multiplier 42 and the accumulator circuit 43 in the execution state S3, and causes the multiplier 42 and the accumulator circuit 43 to perform the operation instructed by the instruction command C4.
- the control circuit 46 removes the completed instruction command C4 from the instruction queue 45 and updates the semaphore S stored in the register 61 of the controller 6.
- the control circuit 46 transitions from the execution state S3 to the decode state S2.
- the control circuit 46 transitions from the execution state S3 to the idle state S1.
- the execution model generation unit 321 determines the specifications and sizes (Bc and Bd) of the arithmetic unit in the convolution arithmetic circuit 4 from the information such as the weight w input as the network information NW and the bit width of the input data a.
- the execution model generation unit 321 adjusts to the specified scale.
- the specifications and sizes (Bc and Bd) of the arithmetic unit in the convolutional arithmetic circuit 4 are adjusted.
- the execution model generation unit 321 generates the quantization calculation circuit 5 of the NN execution model 100 based on the hardware information HW and the network information NW (quantization calculation circuit generation step).
- the execution model generation unit 321 generates a hardware model of the quantization calculation circuit 5 from the quantization information input as the network information NW.
- the hardware model may be a behavior level, an RTL (Register Transfer Level), a netlist representing connections between gates and circuit modules, or a combination thereof. ..
- RTL Registered Transfer Level
- FIG. 14 is an internal block diagram of the generated quantization calculation circuit 5.
- the quantization calculation circuit 5 includes a quantization parameter memory 51, a vector calculation circuit 52, a quantization circuit 53, and a state controller 54, and the quantization calculation circuit 5 has a reference to the vector calculation circuit 52 and the quantization circuit 53. It has a dedicated state controller 54, and when an instruction command is input, the quantization operation can be performed without the need for an external controller.
- the quantization parameter memory 51 is a memory in which the quantization parameter q used for the quantization operation is stored, and is a rewritable memory such as a volatile memory composed of, for example, a SRAM (Static RAM).
- the DMAC 3 writes the quantization parameter q required for the quantization operation to the quantization parameter memory 51 by DMA transfer.
- FIG. 15 is an internal block diagram of the vector calculation circuit 52 and the quantization circuit 53.
- the vector calculation circuit 52 performs a calculation on the output data f (x, y, do) stored in the second memory 2.
- the vector calculation circuit 52 has Bd calculation units 57, and performs SIMD calculation in parallel with the output data f (x, y, do).
- FIG. 16 is a block diagram of the arithmetic unit 57.
- the arithmetic unit 57 has, for example, an ALU 57a, a first selector 57b, a second selector 57c, a register 57d, and a shifter 57e.
- the arithmetic unit 57 may further include another arithmetic unit or the like included in a known general-purpose SIMD arithmetic circuit.
- the vector arithmetic circuit 52 can be used with the pooling layer 221 in the quantization arithmetic layer 220, the Batch Normalization layer 222, and the output data f (x, y, do). At least one of the operations of the activation function layer 223 is performed.
- the arithmetic unit 57 can add the data stored in the register 57d and the element f (di) of the output data f (x, y, do) read from the second memory 2 by the ALU57a.
- the arithmetic unit 57 can store the addition result by ALU57a in the register 57d.
- the arithmetic unit 57 can initialize the addition result by inputting "0" to the ALU 57a instead of the data stored in the register 57d by selecting the first selector 57b. For example, when the pooling area is 2 ⁇ 2, the shifter 57e can output the average value of the addition results by shifting the output of the ALU 57a to the right by 2 bits.
- the vector calculation circuit 52 can carry out the calculation of the average pooling shown in Equation 2 by repeating the above calculation and the like by the Bd calculation units 57.
- the arithmetic unit 57 can compare the data stored in the register 57d with the element f (di) of the output data f (x, y, do) read from the second memory 2 by the ALU57a.
- the arithmetic unit 57 can control the second selector 57c according to the comparison result by the ALU 57a to select the larger of the data stored in the register 57d and the element f (di).
- the arithmetic unit 57 can initialize the comparison target to the minimum value by inputting the minimum value of the possible values of the element f (di) into the ALU 57a by selecting the first selector 57b.
- the vector calculation circuit 52 can perform the MAX pooling calculation of the formula 3 by repeating the above calculation and the like by the Bd calculation units 57. In the MAX pooling operation, the shifter 57e does not shift the output of the second selector 57c.
- the arithmetic unit 57 can subtract the data stored in the register 57d and the element f (di) of the output data f (x, y, do) read from the second memory 2 by the ALU57a.
- the shifter 57e can shift the output of the ALU57a to the left (ie, multiply) or to the right (ie, divide).
- the vector calculation circuit 52 can carry out the Batch Normalization calculation of the equation 4 by repeating the above calculation and the like by the Bd calculation units 57.
- the arithmetic unit 57 can compare the element f (di) of the output data f (x, y, do) read from the second memory 2 with "0" selected by the first selector 57b by the ALU57a.
- the arithmetic unit 57 can select and output either the element f (di) or the constant value “0” stored in the register 57d in advance according to the comparison result by the ALU 57a.
- the vector calculation circuit 52 can perform the ReLU calculation of the equation 5 by repeating the above calculation and the like by the Bd calculation units 57.
- the vector calculation circuit 52 can perform average pooling, MAX pooling, Batch Normalization, activation function calculation, and a combination of these calculations. Since the vector operation circuit 52 can perform general-purpose SIMD operation, other operations necessary for the operation in the quantization calculation layer 220 may be performed. Further, the vector calculation circuit 52 may perform a calculation other than the calculation in the quantization calculation layer 220.
- the quantization calculation circuit 5 does not have to have the vector calculation circuit 52.
- the output data f (x, y, do) is input to the quantization circuit 53.
- the quantization circuit 53 quantizes the output data of the vector calculation circuit 52. As shown in FIG. 15, the quantization circuit 53 has Bd quantization units 58, and performs operations in parallel with respect to the output data of the vector operation circuit 52.
- FIG. 17 is an internal block diagram of the quantization unit 58.
- the quantization unit 58 quantizes the element in (di) of the output data of the vector calculation circuit 52.
- the quantization unit 58 includes a comparator 58a and an encoder 58b.
- the quantization unit 58 performs an operation (Equation 6) of the quantization layer 224 in the quantization operation layer 220 on the output data (16 bits / element) of the vector calculation circuit 52.
- the quantization unit 58 reads out the required quantization parameter q (th0, th1, th2) from the quantization parameter memory 51, and compares the input in (di) with the quantization parameter q by the comparator 58a.
- the quantization unit 58 quantizes the comparison result by the comparator 58a into 2 bits / element by the encoder 58b. Since ⁇ (c) and ⁇ (c) in Equation 4 are different parameters for each variable c, the quantization parameters q (th0, th1, th2) reflecting ⁇ (c) and ⁇ (c) are in ( This is a different parameter for each di).
- the quantization unit 58 By comparing the input in (di) with the three thresholds th0, th1, th2, the quantization unit 58 sets the input in (di) in four regions (for example, in ⁇ th0, th0 ⁇ in ⁇ th1, th1 ⁇ in. Classify into ⁇ th2, th2 ⁇ in), and the classification result is encoded into 2 bits and output.
- the quantization unit 58 can also perform Batch Normalization and activation function operations together with the quantization.
- the quantization unit 58 sets the threshold value th0 as ⁇ (c) of the equation 4, the difference between the thresholds (th1-th0) and (th2-th1) as ⁇ (c) of the equation 4, and performs the quantization.
- the Butch Normalization operation shown in Equation 4 can be performed together with the quantization.
- ⁇ (c) can be reduced by increasing (th1-th0) and (th2-th1). By reducing (th1-th0) and (th2-th1), ⁇ (c) can be increased.
- the quantization unit 58 can perform the ReLU operation of the activation function together with the quantization of the input in (di). For example, the quantization unit 58 saturates the output value in the region where in (di) ⁇ th0 and th2 ⁇ in (di). The quantization unit 58 can perform the operation of the activation function together with the quantization by setting the quantization parameter q so that the output is non-linear.
- the state controller 54 controls the states of the vector calculation circuit 52 and the quantization circuit 53. Further, the state controller 54 is connected to the controller 6 via the internal bus IB.
- the state controller 54 has an instruction queue 55 and a control circuit 56.
- the instruction queue 55 is a queue in which the instruction command C5 for the quantization calculation circuit 5 is stored, and is composed of, for example, a FIFO memory.
- the instruction command C5 is written in the instruction queue 55 via the internal bus IB.
- the control circuit 56 is a state machine that decodes the instruction command C5 and controls the vector calculation circuit 52 and the quantization circuit 53 based on the instruction command C5.
- the control circuit 56 has the same configuration as the control circuit 46 of the state controller 44 of the convolution calculation circuit 4.
- the quantization calculation circuit 5 writes the quantization calculation output data having Bd elements to the first memory 1.
- the preferable relationship between Bd and Bc is shown in Equation 7.
- Equation 7 n is an integer.
- the execution model generation unit 321 uses the quantization information input as the network information NW to determine the presence / absence and type of pooling calculation (average pooling, MAX pooling, etc.) in the quantization calculation circuit 5, and the presence / absence and method of Batch Normalization calculation. , The presence / absence and method of the activation function operation (ReLU operation, etc.), the quantization method (number of bits, etc.), and the presence / absence of other operations.
- the execution model generation unit 321 adjusts to the specified scale. The configuration of the arithmetic unit in the quantization arithmetic circuit 5 is adjusted.
- the execution model generation unit 321 generates the DMAC3 of the NN execution model 100 based on the hardware information HW and the network information NW (DMAC generation step).
- the execution model generation unit 321 generates a hardware model of the DMAC3 from the information input as the network information NW.
- the hardware model may be a behavior level, an RTL (Register Transfer Level), a netlist representing connections between gates and circuit modules, or a combination thereof. ..
- RTL Registered Transfer Level
- FIG. 18 is an internal block diagram of the generated DMAC3.
- the DMAC 3 has a data transfer circuit 31 and a state controller 32.
- the DMAC 3 has a state controller 32 dedicated to the data transfer circuit 31, and when an instruction command is input, DMA data transfer can be performed without the need for an external controller.
- the data transfer circuit 31 is connected to the external bus EB and transfers DMA data between an external memory such as a DRAM and the first memory 1. Further, the data transfer circuit 31 transfers DMA data between an external memory such as a DRAM and the second memory 2. Further, the data transfer circuit 31 transfers data between an external memory such as a DRAM and the convolution calculation circuit 4. Further, the data transfer circuit 31 transfers data between an external memory such as a DRAM and the quantization calculation circuit 5.
- the number of DMA channels in the data transfer circuit 31 is not limited. For example, each of the first memory 1 and the second memory 2 may have a dedicated DMA channel.
- the state controller 32 controls the state of the data transfer circuit 31. Further, the state controller 32 is connected to the controller 6 via the internal bus IB.
- the state controller 32 has an instruction queue 33 and a control circuit 34.
- the instruction queue 33 is a queue in which the instruction command C3 for DMAC3 is stored, and is composed of, for example, a FIFO memory. One or more instruction commands C3 are written to the instruction queue 33 via the internal bus IB.
- the control circuit 34 is a state machine that decodes the instruction command C3 and sequentially controls the data transfer circuit 31 based on the instruction command C3.
- the control circuit 34 has the same configuration as the control circuit 46 of the state controller 44 of the convolution calculation circuit 4.
- the execution model generation unit 321 determines the number of DMA channels, the data bus width, etc. in the DMAC3 from the information input as the network information NW.
- the execution model generation unit 321 generates a DMAC3 having specifications (data bus width, etc.) that match the specifications of the external bus EB on the host side.
- the data bus width and the number of DMA channels By increasing the data bus width and the number of DMA channels, the data transmission speed between the external memory and the first memory 1 or the second memory 2 can be improved.
- step S14 the learning unit 322 and the inference unit 323 of the neural network generation device 300 learn the learning parameters of the generated NN execution model 100 using the learning data set DS (learning step).
- the learning step (S14) includes, for example, a learned parameter generation step (S14-1) and an inference test step (S14-2).
- the learning unit 322 generates the learned parameter PM by using the NN execution model 100 and the learning data D1.
- the trained parameter PM is a trained weight w, a quantization parameter q, and the like.
- the training data D1 is a combination of the input image and the teacher data T.
- the input image is the input data a input to the CNN 200.
- the teacher data T is the type of the subject captured in the image, the presence / absence of the detection target object in the image, the coordinate value of the detection target object in the image, and the like.
- the learning unit 322 generates a learned parameter PM by supervised learning by a known technique such as an error back propagation method.
- the learning unit 322 obtains the difference E between the output of the NN execution model 100 for the input image and the teacher data T corresponding to the input image by a loss function (error function), and the weight w and the quantum so that the difference E becomes small. Update the conversion parameter q.
- the gradient of the loss function with respect to the weight w is used.
- the gradient is calculated, for example, by differentiating the loss function.
- the gradient is calculated by backpropagation.
- the learning unit 322 improves the accuracy of the operation related to the convolution operation when calculating the gradient and updating the weight w. Specifically, a 32-bit floating-point type weight w that is more accurate than the low-bit weight w (for example, 1 bit) used by the NN execution model 100 is used for learning. Further, the convolution calculation performed in the convolution calculation circuit 4 of the NN execution model 100 is improved in accuracy.
- the learning unit 322 improves the accuracy of the calculation related to the activation function when calculating the gradient and updating the weight w. Specifically, a sigmond function with higher accuracy than an activation function such as the ReLU function implemented in the quantization calculation circuit 5 of the NN execution model 100 is used for learning.
- the learning unit 322 calculates the output data for the input image by forward propagation (f Cincinnatirward)
- the operation related to the convolution operation and the activation function is not made highly accurate, and the operation is based on the NN execution model 100.
- the high-precision weight w used when updating the weight w is reduced in bits by a look-up table or the like.
- the learning unit 322 calculates the gradient and updates the weight w
- the learning unit 322 improves the accuracy of the operation related to the convolution operation and the activation function, thereby preventing the accuracy of the intermediate data in the operation from deteriorating and making a high inference. It is possible to generate a trained parameter PM that can achieve accuracy.
- the learning unit 322 when calculating the output data for the input image, the learning unit 322 does not improve the accuracy of the forward propagation calculation, but performs the calculation based on the NN execution model 100. Therefore, the output data calculated by the learning unit 322 and the output data of the NN execution model 100 using the generated learned parameter PM match.
- the inference unit 323 carries out an inference test using the learned parameters PM, the NN execution model 100, and the test data D2 generated by the learning unit 322.
- the NN execution model 100 is an execution model of the CNN 200 that performs image recognition
- the test data D2 is a combination of the input image and the teacher data T as in the learning data D1.
- the inference unit 323 displays the progress and result of the inference test on the display unit 350.
- the result of the inference test is, for example, the correct answer rate for the test data D2.
- step S15 the inference unit 323 of the neural network generation device 300 causes the display unit 350 to display a message prompting the user to input confirmation regarding the result from the operation input unit 360 and a GUI image necessary for information input.
- the user inputs from the operation input unit 360 whether or not the result of the inference test is allowed.
- the neural network generator 300 then performs step S16.
- the neural network generation device 300 performs step S12 again.
- the neural network generation device 300 may return to step S11 and have the user re-input the hardware information HW.
- step S16 the hardware generation unit 324 of the neural network generation device 300 generates the neural network hardware model 400 based on the hardware information HW and the NN execution model 100.
- step S17 the software generation unit 325 of the neural network generation device 300 implements the neural network hardware 600 (neural network hardware model 400 on the operation target hardware) based on the network information NW, the NN execution model 100, and the like. ) Is generated.
- Software 500 includes software that transfers the trained parameter PM to the neural network hardware 600 as needed.
- the software generation step (S17) includes, for example, an input data division step (S17-1), a network division step (S17-2), and an allocation step (S17-3).
- the software generation unit 325 partially inputs the input data a of the convolution operation of the convolution layer 210 based on the memory capacity of the memory allocated as the first memory 1 and the second memory 2, the specifications and sizes (Bc and Bd) of the arithmetic unit, and the like. Divide into tensors.
- the method of dividing into partial tensors and the number of divisions are not particularly limited.
- the partial tensor is formed, for example, by dividing the input data a (x + i, y + j, c) into a (x + i, y + j, co).
- FIG. 19 is a diagram illustrating data division and data expansion of the convolution operation.
- the variable c in the equation 1 is divided into blocks of size Bc as shown in the equation 8.
- the variable d in the equation 1 is divided into blocks of size Bd as shown in the equation 9.
- co is an offset and ci is an index from 0 to (Bc-1).
- do is the offset and di is the index from 0 to (Bd-1).
- the size Bc and the size Bd may be the same.
- the input data a (x + i, y + j, c) in Equation 1 is divided by the size Bc in the c-axis direction and is represented by the divided input data a (x + i, y + j, co).
- the divided input data a is also referred to as “divided input data a”.
- the weight w (i, j, c, d) in the equation 1 is divided by the size Bc in the c-axis direction and the size Bd in the d-axis direction, and is represented by the divided weight w (i, j, co, do). To. In the following description, the divided weight w is also referred to as a “divided weight w”.
- the output data f (x, y, do) divided by the size Bd can be obtained by the equation 10.
- the final output data f (x, y, d) can be calculated.
- the software generation unit 325 expands the divided input data a and the weight w in the convolution calculation circuit 4 of the NN execution model 100.
- the divided input data a (x + i, y + j, co) is expanded into vector data having Bc elements.
- the element of the divided input data a is indexed by ci (0 ⁇ ci ⁇ Bc).
- the divided input data a expanded into vector data for each i and j is also referred to as “input vector A”.
- the input vector A has elements from the divided input data a (x + i, y + j, co ⁇ Bc) to the divided input data a (x + i, y + j, co ⁇ Bc + (Bc-1)).
- the division weight w (i, j, co, do) is expanded into matrix data having Bc ⁇ Bd elements.
- the element of the division weight w expanded in the matrix data is indexed by ci and di (0 ⁇ di ⁇ Bd).
- the division weight w expanded in the matrix data for each i and j is also referred to as "weight matrix W”.
- the weight matrix W has a division weight w (i, j, co ⁇ Bc, do ⁇ Bd) to a division weight w (i, j, co ⁇ Bc + (Bc-1), do ⁇ Bd + (Bd-1)). Make it an element.
- Vector data is calculated by multiplying the input vector A and the weight matrix W.
- the output data f (x, y, do) can be obtained by shaping the vector data calculated for each i, j, and co into a three-dimensional tensor. By expanding such data, the convolution operation of the convolution layer 210 can be performed by multiplying the vector data and the matrix data.
- the size of the input data a is X ⁇ Y ⁇ C
- the size of the weight w is K ⁇ K ⁇ C ⁇ D
- the size of the output data f is X ⁇ Y ⁇ D.
- the output data f (x, y, do) divided by the size Bd in the d-axis direction is divided by the input data a (x + i, y + j, co) divided by the size Bc in the c-axis direction and the sizes Bc and Bd. It can be calculated by convolving the weight w (i, j, co, do) for each i, j, co and adding them together.
- the size of the output data f (x, y, do) divided by the size Bd in the d-axis direction is 16 ⁇ X ⁇ Y ⁇ Bd bits.
- the size of the input data a required to calculate the output data f divided by Bd is 2, X, Y, Bc bits.
- the size of the weight w required to calculate the output data f divided by Bd is 1 ⁇ K ⁇ K ⁇ Bc ⁇ Bd bit.
- the software generation unit 325 calculates the input data a by the neural network hardware 600 based on the memory capacity of the memory allocated as the first memory 1 and the second memory 2, the specifications and sizes (Bc and Bd) of the arithmetic unit, and the like. Divide into easy units (partial tensors). The software generation unit 325 divides the input data a into partial tensors so that, for example, a plurality of the divided input data a (2, X, Y, Bc bits) are stored in the first memory 1. The software generation unit 325 divides the input data a for each layer.
- the units that can be easily calculated by the neural network hardware 600 are the number of arithmetic units that can be calculated in parallel by the neural network hardware 600, the capacity and band of the first memory 1 or the second memory 2, the power consumption, and the calculation frequency. Determine based on such things as. For example, when the number of arithmetic units capable of parallel calculation is large, it is preferable that the number of divisions of the input data a is small.
- the software generation unit 325 divides the network (layer) of the CNN 200 and maps it to the convolution calculation circuit 4 and the quantization calculation circuit 5 formed in a loop shape (network division step).
- 20 to 23 are diagrams illustrating a network division process.
- an example in which an operation composed of a convolution operation and a quantization operation is performed three times (layers 1 to 6 are carried out) will be described.
- the input data a of the layer n input to the convolution calculation circuit 4 is referred to as "a [n]”.
- the output data f of the layer n output from the convolution calculation circuit 4 is referred to as "f [n]”.
- the output data (quantization operation output data) THERut of the quantization operation output from the quantization calculation circuit 5 is called " réelleut [n]".
- the software generation unit 325 sets the input data a [1] of the layer 1 input to the convolution calculation circuit 4 to, for example, “first part tensor a [1] 1 ". Divide into “second part tensor a [1] 2 ".
- the software generation unit 325 selects the data to be transferred by the DMAC 3 to the first memory 1 from the divided input data a [1].
- the software generation unit 325 selects data that can be transferred to the unused area of the first memory 1 according to the order of the convolution operation.
- the convolution operation for the first partial tensor a [1] 1 includes a part of the second partial tensor a [1] 2 adjacent to the first partial tensor a [1] 1 (hereinafter, "" (Also referred to as "overlapping region R (R1)”) is required. Therefore, when the convolution operation for the first partial tensor a [1] 1 is performed, the data of the overlapping area R (R1) is read out and stored in the first memory 1 together with the first partial tensor a [1] 1 . ..
- the software generation unit 325 includes, for example, the overlapping region R (R1) in the first portion tensor a [1] 1 in a manner that facilitates memory addressing.
- the software generation unit 325 includes, for example, the overlapping region R (R2) in the second partial tensor a [1] 2 in a manner that facilitates memory addressing.
- the convolution operation has the property that the data size decreases each time the operation is performed. Therefore, as the number of consecutive convolution operations increases, the overlapping area R to be read in accordance with the partial tensor initially stored in the first memory 1 becomes larger. As the number of consecutive convolution operations increases, the calculation efficiency increases. On the other hand, when the overlapping area R becomes large, the data size of the overlapping area R to be read incidentally for each partial tensor increases, and the memory transfer forwarding of the overlapping data increases.
- the software generation unit 325 determines the number of consecutive convolution operations in consideration of the amount of data in the adjacent area R that can be transferred to the unused area of the first memory 1.
- the software generation unit 325 has selected that the operation composed of the convolution operation and the quantization operation is performed twice in succession (layer 1 to layer 4 are performed).
- the convolution operation circuit 4 to which the first partial tensor a [1] 1 is input quantizes the output data f [1] 1 of the convolution operation of the layer 1 via the second memory 2.
- the quantization calculation circuit 5 to which f [1] 1 is input inputs the output cremeut [2] 1 of the quantization calculation of layer 2 to the first memory 1.
- the convolution operation circuit 4 to which the second partial tensor a [1] 2 is input quantizes the output data f [1] 2 of the convolution operation of the layer 1 via the second memory 2. It is output to the conversion circuit 5.
- the quantization calculation circuit 5 to which f [1] 2 is input inputs the output cremeut [2] 2 of the quantization calculation of layer 2 to the first memory 1.
- the output THERut [2] 1 of the layer 2 quantization operation and the output THERut [2] 2 of the layer 2 quantization operation are integrated into the output THERut [2] of the layer 2 quantization operation.
- the output metreut [2] of the layer 2 quantization operation includes all the input data a [3] of the layer 3 convolution operation.
- the overlapping regions R (R1, R2) associated with the first partial tensor a [1] 1 and the second partial tensor a [1] 2 stored in the first memory 1 are selected so that layer 1 to layer 4 can be performed. This is because it has been done.
- the software generation unit 325 is an output effetut [2] of the quantization operation of the layer 2 based on the division unit determined in the input data division step (S17-1), and is a layer input to the convolution operation circuit 4.
- Input data a of 3 The input data a [3] is divided into, for example, "first partial tensor a [3] 1 " and “second partial tensor a [3] 2 ".
- the convolution operation circuit 4 to which the first partial tensor a [3] 1 is input quantizes the output data f [3] 1 of the convolution operation of the layer 3 via the second memory 2.
- the quantization calculation circuit 5 to which f [3] 1 is input inputs the output effetut [4] 1 of the quantization calculation of the layer 4 to the first memory 1.
- the input data a [1] 1 already exists in the memory area of the first memory 1 for storing the output Consequentlyut [4] 1 .
- the memory area for holding the output data f is secured.
- the memory area is released.
- the data is saved in the external memory before the memory area is released.
- the convolution operation circuit 4 to which the second partial tensor a [3] 2 is input quantizes the output data f [3] 2 of the convolution operation of the layer 1 via the second memory 2. It is output to the conversion circuit 5.
- the quantization calculation circuit 5 to which f [3] 2 is input inputs the output effetut [4] 2 of the quantization calculation of the layer 4 to the first memory 1.
- the output schreibut [4] of the layer 4 quantization operation does not include all the input data a [5] of the layer 5 convolution operation.
- the overlapping regions R (R1, R2) associated with the first partial tensor a [1] 1 and the second partial tensor a [1] 2 stored in the first memory 1 are selected so that layer 1 to layer 4 can be performed. This is because it has been done.
- the software generation unit 325 uses an external host CPU or the like to perform data shaping of the output schreibut [4] saved in the external memory as necessary, and generates the input data a [5] of the layer 5. Add the code to software 500.
- the software generation unit 325 uses the input data a [5] of the layer 1 input to the convolution operation circuit 4, for example, "first part tensor a [5] 1 " and “second part tensor a [5] 2 ". Divide into and.
- the first partial tensor a [5] 1 and the second partial tensor a [5] 2 include a superposed region R in consideration of the number of consecutive convolution operations to be performed thereafter.
- the software generation unit 325 divides the network (layer) of the CNN200 as described above for the entire CNN200.
- the software generation unit 325 divides the network (layer) of the CNN 200 so that the memory transfer between the first memory 1 and the external memory by the DMAC 3 is as small as possible.
- the network (layer) is divided before the operation.
- the operation of changing the tensor shape of the input data a includes, for example, an operation of shortening the depth direction (c-axis direction) of the input data a and expanding it in the plane direction (xy-axis direction), and integration of the tensor (data). It is an operation to be performed.
- the network (layer) is divided after the convolution operation. This is because the data division size changes before and after the convolution operation in which the stride is larger than 1.
- the size of the output data f of the convolution operation in the x-axis direction or the y-axis direction changes to a certain value or more (for example, 2 times or more or 0.5 times or less) as compared with the input data a of the convolution operation, the convolution is concerned. It is preferable to divide the network (layer) after the calculation.
- the network (layer) of the CNN 200 is divided based on the capacity of the first memory 1, and the description of the division based on the capacity of the second memory 2 is omitted.
- the software generation unit 325 divides the network (layer) of the CNN 200 based on the capacities of the first memory 1 and the second memory 2.
- the software generation unit 325 has, for example, the first memory 1 and the second memory 2 having a sufficiently large capacity with respect to the input data a.
- the network division step (S17-2) is complicated by performing the network (layer) division (stepwise network division) based on the capacities of the first memory 1 and the second memory 2 described above. Can be suppressed.
- the software generation unit 325 generates software 500 for allocating and executing the divided operations to the neural network hardware 600 (allocation step).
- the generated software 500 includes instruction command C3, instruction command C4 and instruction command C5.
- FIG. 24 is a diagram showing a timing chart of the neural network hardware 600 to which the divided operations are assigned.
- the software generation unit 325 allocates the divided operations to the neural network hardware 600 in the order of the network (layer) in principle.
- the instruction command C3 for DMAC3 that transfers the input data a [1] from the external memory to the first memory 1 is generated.
- Command command C5 for is generated (operation shown in FIG. 20).
- Command command C5 for is generated (operation shown in FIG. 21).
- the instruction command C4 and the instruction command C5 which are the output THERut [2] of the quantization operation of the layer 2 and perform an operation on the input data a [3] of the layer 3 input to the convolution operation circuit 4. Is generated in the same manner (operations shown in FIGS. 22 and 23).
- the instruction command C3 for DMAC3 that transfers the output THERut [4] from the first memory 1 to the external memory is generated. Further, the instruction command C3 for DMAC3 that transfers the input data a [5] from the external memory to the first memory 1 is generated.
- the instruction command C3, the instruction command C4, and the instruction command C5 include a command for controlling the semaphore S.
- the software generation unit 325 divides the network (layer) of the CNN 200 so that the memory transfer between the first memory 1 and the external memory by the DMAC 3 is as small as possible. Therefore, the period in which the convolution calculation circuit 4 and the quantization calculation circuit 5 are kept waiting for the memory transfer by the DMAC 3 is shortened, and the operation efficiency of the neural network hardware 600 is improved.
- the software 500 since the circuit is formed in a loop shape, the software 500 includes a program that appropriately updates the parameters in the convolution calculation circuit 4 and the quantization calculation circuit 5 that change in each layer.
- the software generation unit 325 realizes each operation of the divided network (layer) by combining a plurality of commands C3, C4, and C5 according to the neural network hardware 600.
- the convolution operation in which the size of the weight w is 3x3 is realized by combining the convolution operation in which the size of the weight w is 1x1 nine times in accordance with the neural network hardware 600.
- the operation of the convolution operation circuit 4 and the quantization operation circuit 5 may be controlled by an instruction command that integrates the instruction commands C3 and C4. In this case, the integrated instruction command is replaced with the operation of the convolution operation circuit 4 and the quantization operation circuit 5 in the neural network hardware 600 and executed.
- the software 500 adds a code to the software 500 that causes an external calculation device to perform a calculation that cannot be performed by the neural network hardware 600.
- the software 500 transfers intermediate data to an external calculation device such as an external host CPU, and causes the external calculation device to perform the calculation.
- the software 500 inputs the calculation result by the external calculation device to the first memory 1 and the second memory 2, and causes the neural network hardware 600 to restart the calculation on the calculation result by the external calculation device.
- FIG. 25 is a timing chart showing another allocation example to the neural network hardware 600.
- the convolution operation and the quantization operation corresponding to the first part tensor a 1 and the convolution operation and the quantization operation corresponding to the second part tensor a 2 can be performed independently. Therefore, the software generation unit 325 may allocate the divided operations to the neural network hardware 600 by changing the order of a part of the network (layer).
- the convolution calculation circuit 4 performs a convolution operation of the layer 2M- 1 corresponding to the first partial tensor a1 (the operation shown by the layer 2M-1 (a 1 ) in FIG. 25). After that, the convolution calculation circuit 4 performs the convolution operation of the layer 2M-1 corresponding to the second partial tensor a2 (the operation shown by the layer 2M-1 ( a2 ) in FIG. 25). Further, the quantization calculation circuit 5 performs a layer 2M quantization operation (operation shown by layer 2M (a 1 ) in FIG. 25) corresponding to the first partial tensor a1. As described above, the NN execution model 100 can execute the convolution operation of the layer 2M-1 corresponding to the second partial tensor a 2 and the quantization operation of the layer 2M corresponding to the first partial tensor a 1 in parallel.
- the convolution calculation circuit 4 performs a convolution operation of the layer 2M + 1 corresponding to the first partial tensor a 1 (the operation shown by the layer 2M + 1 (a 1 ) in FIG. 25). Further, the quantization calculation circuit 5 performs a layer 2M quantization operation (operation shown by layer 2M (a 2 ) in FIG. 25) corresponding to the second partial tensor a2. As described above, the NN execution model 100 can execute the convolution operation of the layer 2M + 1 corresponding to the first partial tensor a 1 and the quantization operation of the layer 2M corresponding to the second partial tensor a 2 in parallel.
- the neural network hardware 600 can operate the convolution calculation circuit 4 and the quantization calculation circuit 5 in parallel. As a result, the waiting time of the convolution calculation circuit 4 and the quantization calculation circuit 5 is reduced, and the calculation processing efficiency of the neural network hardware 600 is improved.
- the number of divisions into the partial tensor was 2, but similarly, when the number of divisions is larger than 2, the convolution arithmetic circuit 4 and the quantization arithmetic circuit 5 are arranged in parallel in the neural network hardware 600. Can be operated.
- an example (method 1) in which the operation of the partial tensor in the same layer is performed by the convolution operation circuit 4 or the quantization operation circuit 5 and then the operation of the partial tensor in the next layer is shown. ..
- the convolution operation of the layer 2M-1 corresponding to the first partial tensor a1 and the second partial tensor a2 in FIG. 25, the layer 2M-1 (a 1 )).
- the operation shown by layer 2 M-1 (a 2 )) and then the convolution operation of layer 2 M + 1 corresponding to the first partial tensor a 1 and the second partial tensor a 2 (in FIG. 25, layer 2 M + 1 (a 1 ) and The operation shown by layer 2M + 1 (a 2 )) is performed.
- the calculation method for the partial tensor is not limited to this.
- the calculation method for the partial tensor may be a method in which the calculation of the partial tensor in the plurality of layers is performed and then the calculation of the remaining partial tensor is performed (method 2).
- method 2 For example, in the convolution operation circuit 4, after performing the convolution operation of the layer 2M- 1 corresponding to the first partial tensor a1 and the layer 2M + 1 corresponding to the first partial tensor a1, the layer 2M corresponding to the second partial tensor a2.
- the convolution operation of the layer 2M + 1 corresponding to -1 and the second partial tensor a 2 may be performed.
- the calculation method for the partial tensor may be a method of calculating the partial tensor by combining the method 1 and the method 2.
- the method 2 it is necessary to perform the operation according to the dependency on the operation order of the partial tensors.
- the software generation unit 325 changes the order of the divided operations so that the operations using the same data stored in the first memory 1 and the second memory 2 are continuous as much as possible.
- a neural network that can be incorporated into an embedded device such as an IoT device and can be operated with high performance can be generated. Can be controlled.
- the software generation program according to the present embodiment it is possible to generate software 500 that operates the neural network generation device 300 with high efficiency and high speed.
- the first memory 1 and the second memory 2 are different memories, but the embodiment of the first memory 1 and the second memory 2 is not limited to this.
- the first memory 1 and the second memory 2 may be, for example, a first memory area and a second memory area in the same memory.
- the data input to the NN execution model 100 or the neural network hardware 600 described in the above embodiment is not limited to a single format, and is composed of still images, moving images, sounds, characters, numerical values, and combinations thereof. It is possible to do.
- the data input to the NN execution model 100 and the neural network hardware 600 can be mounted on an edge device provided with the neural network hardware 600, such as an optical sensor, a thermometer, a Global Positioning System (GPS) measuring instrument, and an angular velocity. It is not limited to the measurement results of physical quantity measuring instruments such as measuring instruments and anemometers.
- Peripheral information such as base station information, vehicle / ship information, weather information, congestion status information, etc. received from peripheral devices via wired or wireless communication, and different information such as financial information and personal information may be combined.
- the edge device provided with the neural network hardware 600 is assumed to be a communication device such as a mobile phone driven by a battery, a smart device such as a personal computer, a digital camera, a game device, a mobile device such as a robot product, and the like. Not limited. It is possible to obtain unprecedented effects by using it for products that have a high demand for peak power supply limit, reduction of product heat generation, or long-term driving by Power on Ethernet (PoE). For example, by applying it to in-vehicle cameras mounted on vehicles and ships, surveillance cameras installed in public facilities and roads, etc., it is possible not only to realize long-time shooting, but also to contribute to weight reduction and high durability. .. Further, the same effect can be obtained by applying it to display devices such as televisions and displays, medical equipment such as medical cameras and surgical robots, and work robots used at manufacturing sites and construction sites.
- PoE Power on Ethernet
- a computer-readable recording medium includes hardware such as an OS and peripheral devices.
- the "computer-readable recording medium” refers to a portable medium such as a flexible disk, a magneto-optical disk, a ROM, or a CD-ROM, and a storage device such as a hard disk built in a computer system.
- a "computer-readable recording medium” is a communication line for transmitting a program via a network such as the Internet or a communication line such as a telephone line, and dynamically holds the program for a short period of time.
- It may also include a program that holds a program for a certain period of time, such as a volatile memory inside a computer system that is a server or a client in that case.
- the above-mentioned program may be for realizing a part of the above-mentioned functions, and may be further realized for realizing the above-mentioned functions in combination with a program already recorded in the computer system.
- the present invention can be applied to the generation of neural networks.
- Neural network generator 200 Convolutional neural network (CNN) 100 Neural network execution model (NN execution model) 400 Neural network hardware model 500 Software 600 Neural network hardware 1 First memory 2 Second memory 3 DMA controller (DMAC) 4 Convolution operation circuit 42 Multiplier 43 Accumulator circuit 5 Quantization operation circuit 52 Vector operation circuit 53 Quantization circuit 6 Controller 61 Register PM Learned parameter DS Learning data set HW Hardware information NW Network information
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
ニューラルネットワーク生成装置は、ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、前記ニューラルネットワーク実行モデルが動作するハードウェアのハードウェア情報と、前記ニューラルネットワークのネットワーク情報と、に基づいて前記ニューラルネットワーク実行モデルを生成する実行モデル生成部と、前記ニューラルネットワーク実行モデルを前記ハードウェアに実装したニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部と、を備える。
Description
本発明は、ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラムに関する。本願は、2020年10月19日に、日本国に出願された特願2020-175606号に基づき優先権を主張し、その内容をここに援用する。
近年、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)が画像認識等のモデルとして用いられている。畳み込みニューラルネットワークは、畳み込み層やプーリング層を有する多層構造であり、畳み込み演算等の多数の演算を必要とする。畳み込みニューラルネットワークによる演算を高速化する演算手法が様々考案されている(特許文献1など)。
一方で、IoT機器などの組み込み機器においても畳み込みニューラルネットワークを利用した画像認識等が使用されている。組み込み機器において畳み込みニューラルネットワークを効率的に動作させるため、組み込み機器のハードウェア構成に合わせたニューラルネットワークに係る演算を行う回路やモデルを生成することが望まれている。また、これらの回路やモデルを高効率かつ高速に動作させる制御方法が望まれている。また、これらの回路やモデルを高効率かつ高速に動作させるソフトウェアを生成するソフトウェア生成プログラムが望まれている。
上記事情を踏まえ、本発明は、IoT機器などの組み込み機器に組み込み可能であり、高効率かつ高速に動作させることができるニューラルネットワークに係る演算を行う回路やモデルを生成するニューラルネットワーク生成装置、ニューラルネットワークに係る演算を行う回路やモデルを高効率かつ高速に動作させるニューラルネットワーク制御方法およびニューラルネットワークに係る演算を行う回路やモデルを高効率かつ高速に動作させるソフトウェアを生成するソフトウェア生成プログラムを提供することを目的とする。
上記課題を解決するために、この発明は以下の手段を提案している。
本発明の第一の態様に係るニューラルネットワーク生成装置は、ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、前記ニューラルネットワーク実行モデルが動作するハードウェアのハードウェア情報と、前記ニューラルネットワークのネットワーク情報と、に基づいて前記ニューラルネットワーク実行モデルを生成する実行モデル生成部と、前記ニューラルネットワーク実行モデルを前記ハードウェアに実装したニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部と、を備える。
本発明の第一の態様に係るニューラルネットワーク生成装置は、ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、前記ニューラルネットワーク実行モデルが動作するハードウェアのハードウェア情報と、前記ニューラルネットワークのネットワーク情報と、に基づいて前記ニューラルネットワーク実行モデルを生成する実行モデル生成部と、前記ニューラルネットワーク実行モデルを前記ハードウェアに実装したニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部と、を備える。
本発明の第二の態様に係るニューラルネットワーク制御方法は、ニューラルネットワークを演算するニューラルネットワークハードウェアを制御する方法であって、前記ニューラルネットワークを分割して前記ニューラルネットワークハードウェアに演算させるニューラルネットワーク制御方法。
本発明の第三の態様に係るソフトウェア生成プログラムは、ニューラルネットワークを演算するニューラルネットワークハードウェアを制御するソフトウェアを生成するプログラムであって、前記ニューラルネットワークを分割して前記ニューラルネットワークハードウェアに演算させる前記ソフトウェアをコンピュータに生成させる。
本発明のニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラムは、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成して制御できる。
(第一実施形態)
本発明の第一実施形態について、図1から図26を参照して説明する。
図1は、本実施形態に係るニューラルネットワーク生成装置300を示す図である。
本発明の第一実施形態について、図1から図26を参照して説明する。
図1は、本実施形態に係るニューラルネットワーク生成装置300を示す図である。
[ニューラルネットワーク生成装置300]
ニューラルネットワーク生成装置300は、IoT機器などの組み込み機器に組み込み可能な学習済みのニューラルネットワーク実行モデル100を生成する装置である。ニューラルネットワーク実行モデル100は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を組み込み機器において演算させるために生成されたソフトウェアやハードウェアモデルである。
ニューラルネットワーク生成装置300は、IoT機器などの組み込み機器に組み込み可能な学習済みのニューラルネットワーク実行モデル100を生成する装置である。ニューラルネットワーク実行モデル100は、畳み込みニューラルネットワーク200(以下、「CNN200」という)を組み込み機器において演算させるために生成されたソフトウェアやハードウェアモデルである。
ニューラルネットワーク生成装置300は、CPU(Central Processing Unit)等のプロセッサとメモリ等のハードウェアを備えたプログラム実行可能な装置(コンピュータ)である。ニューラルネットワーク生成装置300の機能は、ニューラルネットワーク生成装置300においてニューラルネットワーク生成プログラムおよびソフトウェア生成プログラムを実行することにより実現される。ニューラルネットワーク生成装置300は、記憶部310と、演算部320と、データ入力部330と、データ出力部340と、表示部350と、操作入力部360と、を備える。
記憶部310は、ハードウェア情報HWと、ネットワーク情報NWと、学習データセットDSと、ニューラルネットワーク実行モデル100(以下、「NN実行モデル100」という)と、学習済みパラメータPMと、を記憶する。ハードウェア情報HW、学習データセットDSおよびネットワーク情報NWは、ニューラルネットワーク生成装置300に入力される入力データである。NN実行モデル100および学習済みパラメータPMは、ニューラルネットワーク生成装置300が出力する出力データである。なお、「学習済みのNN実行モデル100」は、NN実行モデル100および学習済みパラメータPMを含む。
ハードウェア情報HWは、NN実行モデル100を動作させる組み込み機器(以降、「動作対象ハードウェア」という)の情報である。ハードウェア情報HWは、例えば、動作対象ハードウェアのデバイス種別、デバイス制約、メモリ構成、バス構成、動作周波数、消費電力、製造プロセス種別などである。デバイス種別は、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などの種別である。デバイス制約は、動作対象デバイスに含まれる演算器数の上限や回路規模の上限などである。メモリ構成は、メモリ種別やメモリ個数やメモリ容量や入出力データ幅である。バス構成は、バス種類、バス幅、バス通信規格、同一バス上の接続デバイスなどである。また、NN実行モデル100に複数のバリエーションが存在する場合、ハードウェア情報HWには使用するNN実行モデル100のバリエーションに関する情報が含まれる。
ネットワーク情報NWは、CNN200の基本情報である。ネットワーク情報NWは、例えば、CNN200のネットワーク構成、入力データ情報、出力データ情報、量子化情報などである。入力データ情報は、画像や音声などの入力データ種別と、入力データサイズなどである。
学習データセットDSは、学習に用いる学習データD1と、推論テストに用いるテストデータD2と、を有する。
図2は、演算部320の入出力を示す図である。
演算部320は、実行モデル生成部321と、学習部322と、推論部323と、ハードウェア生成部324と、ソフトウェア生成部325と、を有する。演算部320に入力されるNN実行モデル100は、ニューラルネットワーク生成装置300以外の装置で生成されたものであってもよい。
演算部320は、実行モデル生成部321と、学習部322と、推論部323と、ハードウェア生成部324と、ソフトウェア生成部325と、を有する。演算部320に入力されるNN実行モデル100は、ニューラルネットワーク生成装置300以外の装置で生成されたものであってもよい。
実行モデル生成部321は、ハードウェア情報HWおよびネットワーク情報NWに基づいてNN実行モデル100を生成する。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。推論部323は、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。
ハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。ニューラルネットワークハードウェアモデル400は、動作対象ハードウェアに実装可能なハードウェアモデルである。ニューラルネットワークハードウェアモデル400は、ハードウェア情報HWに基づいて、動作対象ハードウェアに最適化されている。ニューラルネットワークハードウェアモデル400は、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。ニューラルネットワークハードウェアモデル400は、NN実行モデル100をハードウェアに実装するために必要なパラメータリストやコンフィグレーションファイルであってもよい。パラメータリストやコンフィグレーションファイルは別途生成されたNN実行モデル100と組み合わせて使用される。
以降の説明において、ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したものを、「ニューラルネットワークハードウェア600」という。
ソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100に基づいて、ニューラルネットワークハードウェア600を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
データ入力部330には、学習済みのNN実行モデル100を生成するために必要なハードウェア情報HWやネットワーク情報NW等が入力される。ハードウェア情報HWやネットワーク情報NW等は、例えば所定のデータフォーマットで記載されたデータとして入力される。入力されたハードウェア情報HWやネットワーク情報NW等は、記憶部310に記憶される。ハードウェア情報HWやネットワーク情報NW等は、操作入力部360から使用者により入力または変更されてもよい。
データ出力部340には、生成された学習済みのNN実行モデル100が出力される。例えば、生成されたNN実行モデル100と、学習済みパラメータPMとがデータ出力部340に出力される。
表示部350は、LCDディスプレイ等の公知のモニタを有する。表示部350は、演算部320が生成したGUI(Graphical User Interface)画像やコマンド等を受け付けるためのコンソール画面などを表示できる。また、演算部320が使用者からの情報入力を必要とする場合、表示部350は操作入力部360から情報を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示できる。
操作入力部360は、使用者が演算部320等に対しての指示を入力する装置である。操作入力部360は、タッチパネル、キーボード、マウス等の公知の入力デバイスである。操作入力部360の入力は、演算部320に送信される。
演算部320の機能の全部または一部は、例えばCPU(Central Processing Unit)やGPU(Graphics Processing Unit)のような1つ以上のプロセッサがプログラムメモリに記憶されたプログラムを実行することにより実現される。ただし、演算部320の機能の全部または一部は、LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)、PLD(Programmable Logic Device)等のハードウェア(例えば回路部;circuity)により実現されてもよい。また、演算部320の機能の全部または一部は、ソフトウェアとハードウェアとの組み合わせにより実現されてもよい。
演算部320の機能の全部または一部は、クラウドサーバ等の外部機器に設けられたCPUやGPUやハードウェア等の外部アクセラレータを用いて実現されてもよい。演算部320は、例えばクラウドサーバ上の演算性能が高いGPUや専用ハードウェアを併用することで、演算部320の演算速度を向上させることができる。
記憶部310は、フラッシュメモリ、EEPROM(Electrically Erasable Programmable Read-Only Memory)、ROM(Read-Only Memory)、またRAM(Random Access Memory)等により実現される。記憶部310の全部または一部はクラウドサーバ等の外部機器に設けられ、通信回線により演算部320等と接続させてもよい。
[畳み込みニューラルネットワーク(CNN)200]
次に、CNN200について説明する。図3は、CNN200の一例を示す図である。CNN200のネットワーク情報NWは、以下で説明するCNN200の構成に関する情報である。CNN200は、低ビットの重みwや量子化された入力データaを用いており、組み込み機器に組み込みやすい。
次に、CNN200について説明する。図3は、CNN200の一例を示す図である。CNN200のネットワーク情報NWは、以下で説明するCNN200の構成に関する情報である。CNN200は、低ビットの重みwや量子化された入力データaを用いており、組み込み機器に組み込みやすい。
CNN200は、畳み込み演算を行う畳み込み層210と、量子化演算を行う量子化演算層220と、出力層230と、を含む多層構造のネットワークである。CNN200の少なくとも一部において、畳み込み層210と量子化演算層220とが交互に連結されている。CNN200は、画像認識や動画認識に広く使われるモデルである。CNN200は、全結合層などの他の機能を有する層(レイヤ)をさらに有してもよい。
図4は、畳み込み層210が行う畳み込み演算を説明する図である。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
畳み込み層210は、入力データaに対して重みwを用いた畳み込み演算を行う。畳み込み層210は、入力データaと重みwとを入力とする積和演算を行う。
畳み込み層210への入力データa(アクティベーションデータ、特徴マップともいう)は、画像データ等の多次元データである。本実施形態において、入力データaは、要素(x,y,c)からなる3次元テンソルである。CNN200の畳み込み層210は、低ビットの入力データaに対して畳み込み演算を行う。本実施形態において、入力データaの要素は、2ビットの符号なし整数(0,1,2,3)である。入力データaの要素は、例えば、4ビットや8ビット符号なし整数でもよい。
CNN200に入力される入力データが、例えば32ビットの浮動小数点型など、畳み込み層210への入力データaと形式が異なる場合、CNN200は畳み込み層210の前に型変換や量子化を行う入力層をさらに有してもよい。
畳み込み層210の重みw(フィルタ、カーネルともいう)は、学習可能なパラメータである要素を有する多次元データである。本実施形態において、重みwは、要素(i,j,c,d)からなる4次元テンソルである。重みwは、要素(i,j,c)からなる3次元テンソル(以降、「重みwo」という)をd個有している。学習済みのCNN200における重みwは、学習済みのデータである。CNN200の畳み込み層210は、低ビットの重みwを用いて畳み込み演算を行う。本実施形態において、重みwの要素は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
畳み込み層210は、式1に示す畳み込み演算を行い、出力データfを出力する。式1において、sはストライドを示す。図4において点線で示された領域は、入力データaに対して重みwoが適用される領域ao(以降、「適用領域ao」という)の一つを示している。適用領域aoの要素は、(x+i,y+j,c)で表される。
量子化演算層220は、畳み込み層210が出力する畳み込み演算の出力に対して量子化などを実施する。量子化演算層220は、プーリング層221と、Batch Normalization層222と、活性化関数層223と、量子化層224と、を有する。
プーリング層221は、畳み込み層210が出力する畳み込み演算の出力データfに対して平均プーリング(式2)やMAXプーリング(式3)などの演算を実施して、畳み込み層210の出力データfを圧縮する。式2および式3において、uは入力テンソルを示し、vは出力テンソルを示し、Tはプーリング領域の大きさを示す。式3において、maxはTに含まれるiとjの組み合わせに対するuの最大値を出力する関数である。
Batch Normalization層222は、量子化演算層220やプーリング層221の出力データに対して、例えば式4に示すような演算によりデータ分布の正規化を行う。式4において、uは入力テンソルを示し、vは出力テンソルを示し、αはスケールを示し、βはバイアスを示す。学習済みのCNN200において、αおよびβは学習済みの定数ベクトルである。
活性化関数層223は、量子化演算層220やプーリング層221やBatch Normalization層222の出力に対してReLU(式5)などの活性化関数の演算を行う。式5において、uは入力テンソルであり、vは出力テンソルである。式5において、maxは引数のうち最も大きい数値を出力する関数である。
量子化層224は、量子化パラメータに基づいて、プーリング層221や活性化関数層223の出力に対して例えば式6に示すような量子化を行う。式6に示す量子化は、入力テンソルuを2ビットにビット削減している。式6において、q(c)は量子化パラメータのベクトルである。学習済みのCNN200において、q(c)は学習済みの定数ベクトルである。式6における不等号「≦」は「<」であってもよい。
出力層230は、恒等関数やソフトマックス関数等によりCNN200の結果を出力する層である。出力層230の前段のレイヤは、畳み込み層210であってもよいし、量子化演算層220であってもよい。
CNN200は、量子化された量子化層224の出力データが、畳み込み層210に入力されるため、量子化を行わない他の畳み込みニューラルネットワークと比較して、畳み込み層210の畳み込み演算の負荷が小さい。
[ニューラルネットワーク実行モデル100(NN実行モデル)100]
次に、NN実行モデル100について説明する。図5は、NN実行モデル100の一例を示す図である。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
次に、NN実行モデル100について説明する。図5は、NN実行モデル100の一例を示す図である。NN実行モデル100は、CNN200を動作対象ハードウェアにおいて演算させるために生成されたソフトウェアやハードウェアモデルである。ソフトウェアは、ハードウェアモデルを制御するソフトウェアを含む。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。
NN実行モデル100は、第一メモリ1と、第二メモリ2と、DMAコントローラ3(以下、「DMAC3」ともいう)と、畳み込み演算回路4と、量子化演算回路5と、コントローラ6と、を備える。NN実行モデル100は、第一メモリ1および第二メモリ2を介して、畳み込み演算回路4と量子化演算回路5とがループ状に形成されていることを特徴とする。
第一メモリ1は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第一メモリ1には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第一メモリ1は、畳み込み演算回路4の入力ポートと接続されており、畳み込み演算回路4は第一メモリ1からデータを読み出すことができる。また、第一メモリ1は、量子化演算回路5の出力ポートと接続されており、量子化演算回路5は第一メモリ1にデータを書き込むことができる。外部ホストCPUは、第一メモリ1に対するデータの書き込みや読み出しにより、NN実行モデル100に対するデータの入出力を行うことができる。
第二メモリ2は、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。第二メモリ2には、DMAC3やコントローラ6を介してデータの書き込みおよび読み出しが行われる。第二メモリ2は、量子化演算回路5の入力ポートと接続されており、量子化演算回路5は第二メモリ2からデータを読み出すことができる。また、第二メモリ2は、畳み込み演算回路4の出力ポートと接続されており、畳み込み演算回路4は第二メモリ2にデータを書き込むことができる。外部ホストCPUは、第二メモリ2に対するデータの書き込みや読み出しにより、NN実行モデル100に対するデータの入出力を行うことができる。
DMAC3は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと第二メモリ2との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、DMAC3は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。
畳み込み演算回路4は、学習済みのCNN200の畳み込み層210における畳み込み演算を行う回路である。畳み込み演算回路4は、第一メモリ1に格納された入力データaを読み出し、入力データaに対して畳み込み演算を実施する。畳み込み演算回路4は、畳み込み演算の出力データf(以降、「畳み込み演算出力データ」ともいう)を第二メモリ2に書き込む。
量子化演算回路5は、学習済みのCNN200の量子化演算層220における量子化演算の少なくとも一部を行う回路である。量子化演算回路5は、第二メモリ2に格納された畳み込み演算の出力データfを読み出し、畳み込み演算の出力データfに対して量子化演算(プーリング、Batch Normalization、活性化関数、および量子化のうち少なくとも量子化を含む演算)を行う。量子化演算回路5は、量子化演算の出力データ(以降、「量子化演算出力データ」ともいう)оutを第一メモリ1に書き込む。
コントローラ6は、外部バスEBに接続されており、外部のホストCPUのスレーブとして動作する。コントローラ6は、パラメータレジスタや状態レジスタを含むレジスタ61を有している。パラメータレジスタは、NN実行モデル100の動作を制御するレジスタである。状態レジスタはセマフォSを含むNN実行モデル100の状態を示すレジスタである。外部ホストCPUは、コントローラ6を経由して、レジスタ61にアクセスできる。
コントローラ6は、内部バスIBを介して、第一メモリ1と、第二メモリ2と、DMAC3と、畳み込み演算回路4と、量子化演算回路5と、接続されている。外部ホストCPUは、コントローラ6を経由して、各ブロックに対してアクセスできる。例えば、外部ホストCPUは、コントローラ6を経由して、DMAC3や畳み込み演算回路4や量子化演算回路5に対する命令を指示することができる。また、DMAC3や畳み込み演算回路4や量子化演算回路5は、内部バスIBを介して、コントローラ6が有する状態レジスタ(セマフォSを含む)を更新できる。状態レジスタ(セマフォSを含む)は、DMAC3や畳み込み演算回路4や量子化演算回路5と接続された専用配線を介して更新されるように構成されていてもよい。
NN実行モデル100は、第一メモリ1や第二メモリ2等を有するため、DRAMなどの外部メモリからのDMAC3によるデータ転送において、重複するデータのデータ転送の回数を低減できる。これにより、メモリアクセスにより発生する消費電力を大幅に低減することができる。
図6は、NN実行モデル100の動作例を示すタイミングチャートである。NN実行モデル100は、複数のレイヤの多層構造であるCNN200の演算を、ループ状に形成された回路により演算する。NN実行モデル100は、ループ状の回路構成により、ハードウェア資源を効率的に利用できる。以下、図6に示すニューラルネットワークハードウェア600の動作例を説明する。
DMAC3は、レイヤ1(図3参照)の入力データaを第一メモリ1に格納する。DMAC3は、畳み込み演算回路4が行う畳み込み演算の順序にあわせて、レイヤ1の入力データaを分割して第一メモリ1に転送してもよい。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ1(図3参照)の入力データaを読み出す。畳み込み演算回路4は、レイヤ1の入力データaに対してレイヤ1の畳み込み演算を行う。レイヤ1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ1の出力データfを読み出す。量子化演算回路5は、レイヤ1の出力データfに対してレイヤ2の量子化演算を行う。レイヤ2の量子化演算の出力データоutは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2の量子化演算の出力データを読み出す。畳み込み演算回路4は、レイヤ2の量子化演算の出力データоutを入力データaとしてレイヤ3の畳み込み演算を行う。レイヤ3の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2M-2(Mは自然数)の量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2M-2の量子化演算の出力データоutを入力データaとしてレイヤ2M-1の畳み込み演算を行う。レイヤ2M-1の畳み込み演算の出力データfは、第二メモリ2に格納される。
量子化演算回路5は、第二メモリ2に格納されたレイヤ2M-1の出力データfを読み出す。量子化演算回路5は、2M-1レイヤの出力データfに対してレイヤ2Mの量子化演算を行う。レイヤ2Mの量子化演算の出力データоutは、第一メモリ1に格納される。
畳み込み演算回路4は、第一メモリ1に格納されたレイヤ2Mの量子化演算の出力データоutを読み出す。畳み込み演算回路4は、レイヤ2Mの量子化演算の出力データоutを入力データaとしてレイヤ2M+1の畳み込み演算を行う。レイヤ2M+1の畳み込み演算の出力データfは、第二メモリ2に格納される。
畳み込み演算回路4と量子化演算回路5とが交互に演算を行い、図3に示すCNN200の演算を進めていく。NN実行モデル100は、畳み込み演算回路4が時分割によりレイヤ2M-1とレイヤ2M+1の畳み込み演算を実施する。また、NN実行モデル100は、量子化演算回路5が時分割によりレイヤ2M-2とレイヤ2Mの量子化演算を実施する。そのため、NN実行モデル100は、レイヤごとに別々の畳み込み演算回路4と量子化演算回路5を実装する場合と比較して、回路規模が著しく小さい。
[ニューラルネットワーク生成装置300の動作]
次に、ニューラルネットワーク生成装置300の動作(ニューラルネットワーク制御方法)を、図7に示すニューラルネットワーク生成装置300の制御フローチャートに沿って説明する。ニューラルネットワーク生成装置300は初期化処理(ステップS10)を実施した後、ステップS11を実行する。
次に、ニューラルネットワーク生成装置300の動作(ニューラルネットワーク制御方法)を、図7に示すニューラルネットワーク生成装置300の制御フローチャートに沿って説明する。ニューラルネットワーク生成装置300は初期化処理(ステップS10)を実施した後、ステップS11を実行する。
<ハードウェア情報取得工程(S11)>
ステップS11において、ニューラルネットワーク生成装置300は、動作対象ハードウェアのハードウェア情報HWを取得する(ハードウェア情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたハードウェア情報HWを取得する。ニューラルネットワーク生成装置300は、表示部350にハードウェア情報HWの入力に必要なGUI画像を表示させ、使用者にハードウェア情報HWを操作入力部360から入力させることでハードウェア情報HWを取得してもよい。
ステップS11において、ニューラルネットワーク生成装置300は、動作対象ハードウェアのハードウェア情報HWを取得する(ハードウェア情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたハードウェア情報HWを取得する。ニューラルネットワーク生成装置300は、表示部350にハードウェア情報HWの入力に必要なGUI画像を表示させ、使用者にハードウェア情報HWを操作入力部360から入力させることでハードウェア情報HWを取得してもよい。
ハードウェア情報HWは、具体的には、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ種別やメモリ容量や入出力データ幅を有する。
取得されたハードウェア情報HWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS12を実行する。
<ネットワーク情報取得工程(S12)>
ステップS12において、ニューラルネットワーク生成装置300は、CNN200のネットワーク情報NWを取得する(ネットワーク情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたネットワーク情報NWを取得する。ニューラルネットワーク生成装置300は、表示部350にネットワーク情報NWの入力に必要なGUI画像を表示させ、使用者にネットワーク情報NWを操作入力部360から入力させることでネットワーク情報NWを取得してもよい。
ステップS12において、ニューラルネットワーク生成装置300は、CNN200のネットワーク情報NWを取得する(ネットワーク情報取得工程)。ニューラルネットワーク生成装置300は、例えば、データ入力部330に入力されたネットワーク情報NWを取得する。ニューラルネットワーク生成装置300は、表示部350にネットワーク情報NWの入力に必要なGUI画像を表示させ、使用者にネットワーク情報NWを操作入力部360から入力させることでネットワーク情報NWを取得してもよい。
ネットワーク情報NWは、具体的には、入力層や出力層230を含むネットワーク構成と、重みwや入力データaのビット幅を含む畳み込み層210の構成と、量子化情報を含む量子化演算層220の構成と、を有する。
取得されたネットワーク情報NWは、記憶部310に記憶される。次に、ニューラルネットワーク生成装置300は、ステップS13を実行する。
<ニューラルネットワーク実行モデル生成工程(S13)>
ステップS13において、ニューラルネットワーク生成装置300の実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100を生成する(ニューラルネットワーク実行モデル生成工程)。
ステップS13において、ニューラルネットワーク生成装置300の実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100を生成する(ニューラルネットワーク実行モデル生成工程)。
ニューラルネットワーク実行モデル生成工程(NN実行モデル生成工程)は、例えば、畳み込み演算回路生成工程(S13-1)と、量子化演算回路生成工程(S13-2)と、DMAC生成工程(S13-3)と、を有する。
<畳み込み演算回路生成工程(S13-1)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の畳み込み演算回路4を生成する(畳み込み演算回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される畳み込み演算回路4のハードウェアモデルの一例を説明する。
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の畳み込み演算回路4を生成する(畳み込み演算回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される畳み込み演算回路4のハードウェアモデルの一例を説明する。
図8は、生成される畳み込み演算回路4の内部ブロック図である。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
畳み込み演算回路4は、重みメモリ41と、乗算器42と、アキュムレータ回路43と、ステートコントローラ44と、を有する。畳み込み演算回路4は、乗算器42およびアキュムレータ回路43に対する専用のステートコントローラ44を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに畳み込み演算を実施できる。
重みメモリ41は、畳み込み演算に用いる重みwが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、畳み込み演算に必要な重みwを重みメモリ41に書き込む。
図9は、乗算器42の内部ブロック図である。
乗算器42は、入力ベクトルaの各要素と重みマトリクスwの各要素とを乗算する。入力ベクトルaの各要素は、入力データaが分割されたデータであり、Bc個の要素を持つベクトルデータである(例えば、後述する「入力ベクトルA」)。また、重みマトリクスwの各要素は、重みwが分割されたデータであり、Bc×Bd個の要素を持つマトリクスデータである(例えば、後述する「重みマトリクスW」)。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとを乗算を並列して実施できる。
乗算器42は、入力ベクトルaの各要素と重みマトリクスwの各要素とを乗算する。入力ベクトルaの各要素は、入力データaが分割されたデータであり、Bc個の要素を持つベクトルデータである(例えば、後述する「入力ベクトルA」)。また、重みマトリクスwの各要素は、重みwが分割されたデータであり、Bc×Bd個の要素を持つマトリクスデータである(例えば、後述する「重みマトリクスW」)。乗算器42は、Bc×Bd個の積和演算ユニット47を有し、入力ベクトルAと重みマトリクスWとを乗算を並列して実施できる。
乗算器42は、乗算に必要な入力ベクトルAと重みマトリクスWを、第一メモリ1および重みメモリ41から読み出して乗算を実施する。乗算器42は、Bd個の積和演算結果O(di)を出力する。
図10は、積和演算ユニット47の内部ブロック図である。
積和演算ユニット47は、入力ベクトルAの要素A(ci)と、重みマトリクスWの要素W(ci,di)との乗算を実施する。また、積和演算ユニット47は、乗算結果と他の積和演算ユニット47の乗算結果S(ci,di)と加算する。積和演算ユニット47は、加算結果S(ci+1,di)を出力する。ciは0から(Bc-1)までのインデックスである。diは0から(Bd-1)までのインデックスである。要素A(ci)は、2ビットの符号なし整数(0,1,2,3)である。要素W(ci,di)は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
積和演算ユニット47は、入力ベクトルAの要素A(ci)と、重みマトリクスWの要素W(ci,di)との乗算を実施する。また、積和演算ユニット47は、乗算結果と他の積和演算ユニット47の乗算結果S(ci,di)と加算する。積和演算ユニット47は、加算結果S(ci+1,di)を出力する。ciは0から(Bc-1)までのインデックスである。diは0から(Bd-1)までのインデックスである。要素A(ci)は、2ビットの符号なし整数(0,1,2,3)である。要素W(ci,di)は、1ビットの符号付整数(0,1)であり、値「0」は+1を表し、値「1」は-1を表す。
積和演算ユニット47は、反転器(インバータ)47aと、セレクタ47bと、加算器47cと、を有する。積和演算ユニット47は、乗算器を用いず、反転器47aおよびセレクタ47bのみを用いて乗算を行う。セレクタ47bは、要素W(ci,di)が「0」の場合、要素A(ci)の入力を選択する。セレクタ47bは、要素W(ci,di)が「1」の場合、要素A(ci)を反転器により反転させた補数を選択する。要素W(ci,di)は、加算器47cのCarry-inにも入力される。加算器47cは、要素W(ci,di)が「0」のとき、S(ci,di)に要素A(ci)を加算した値を出力する。加算器47cは、W(ci,di)が「1」のとき、S(ci,di)から要素A(ci)を減算した値を出力する。
図11は、アキュムレータ回路43の内部ブロック図である。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
アキュムレータ回路43は、乗算器42の積和演算結果O(di)を第二メモリ2にアキュムレートする。アキュムレータ回路43は、Bd個のアキュムレータユニット48を有し、Bd個の積和演算結果O(di)を並列して第二メモリ2にアキュムレートできる。
図12は、アキュムレータユニット48の内部ブロック図である。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
アキュムレータユニット48は、加算器48aと、マスク部48bとを有している。加算器48aは、積和演算結果Oの要素O(di)と、第二メモリ2に格納された式1に示す畳み込み演算の途中経過である部分和と、を加算する。加算結果は、要素あたり16ビットである。加算結果は、要素あたり16ビットに限定されず、例えば要素あたり15ビットや17ビットであってもよい。
加算器48aは、加算結果を第二メモリ2の同一アドレスに書き込む。マスク部48bは、初期化信号clearがアサートされた場合に、第二メモリ2からの出力をマスクし、要素O(di)に対する加算対象をゼロにする。初期化信号clearは、第二メモリ2に途中経過の部分和が格納されていない場合にアサートされる。
乗算器42およびアキュムレータ回路43による畳み込み演算が完了すると、第二メモリに、Bd個の要素を持つ出力データf(x,y,do)が格納される。
ステートコントローラ44は、乗算器42およびアキュムレータ回路43のステートを制御する。また、ステートコントローラ44は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ44は、命令キュー45と制御回路46とを有する。
命令キュー45は、畳み込み演算回路4用の命令コマンドC4が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー45には、内部バスIB経由で命令コマンドC4が書き込まれる。
制御回路46は、命令コマンドC4をデコードし、命令コマンドC4に基づいて乗算器42およびアキュムレータ回路43を制御するステートマシンである。制御回路46は、論理回路により実装されていてもよいし、ソフトウェアによって制御されるCPUによって実装されていてもよい。
図13は、制御回路46のステート遷移図である。
制御回路46は、命令キュー45に命令コマンドC4が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
制御回路46は、命令キュー45に命令コマンドC4が入力されると(Not empty)、アイドルステートS1からデコードステートS2に遷移する。
制御回路46は、デコードステートS2において、命令キュー45から出力される命令コマンドC3をデコードする。また、制御回路46は、コントローラ6のレジスタ61に格納されたセマフォSを読み出し、命令コマンドC4において指示された乗算器42やアキュムレータ回路43の動作を実行可能であるかを判定する。実行不能である場合(Not ready)、制御回路46は実行可能となるまで待つ(Wait)。実行可能である場合(ready)、制御回路46はデコードステートS2から実行ステートS3に遷移する。
制御回路46は、実行ステートS3において、乗算器42やアキュムレータ回路43を制御して、乗算器42やアキュムレータ回路43に命令コマンドC4において指示された動作を実施させる。制御回路46は、乗算器42やアキュムレータ回路43の動作が終わると、命令キュー45から実行を終えた命令コマンドC4を取り除くとともに、コントローラ6のレジスタ61に格納されたセマフォSを更新する。制御回路46は、命令キュー45に命令がある場合(Not empty)、実行ステートS3からデコードステートS2に遷移する。制御回路46は、命令キュー45に命令がない場合(empty)、実行ステートS3からアイドルステートS1に遷移する。
実行モデル生成部321は、ネットワーク情報NWとして入力された重みwや入力データaのビット幅などの情報から、畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を決定する。ハードウェア情報HWの中に生成するNN実行モデル100(ニューラルネットワークハードウェアモデル400、ニューラルネットワークハードウェア600)のハードウェア規模が含まれる場合、実行モデル生成部321は、指定された規模にあわせて畳み込み演算回路4における演算器の仕様やサイズ(BcやBd)を調整する。
<量子化演算回路生成工程(S13-2)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の量子化演算回路5を生成する(量子化演算回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化演算回路5のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される量子化演算回路5のハードウェアモデルの一例を説明する。
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100の量子化演算回路5を生成する(量子化演算回路生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化演算回路5のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成される量子化演算回路5のハードウェアモデルの一例を説明する。
図14は、生成される量子化演算回路5の内部ブロック図である。
量子化演算回路5は、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53と、ステートコントローラ54と、を有する量子化演算回路5は、ベクトル演算回路52および量子化回路53に対する専用のステートコントローラ54を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
量子化演算回路5は、量子化パラメータメモリ51と、ベクトル演算回路52と、量子化回路53と、ステートコントローラ54と、を有する量子化演算回路5は、ベクトル演算回路52および量子化回路53に対する専用のステートコントローラ54を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずに量子化演算を実施できる。
量子化パラメータメモリ51は、量子化演算に用いる量子化パラメータqが格納されるメモリであり、例えばSRAM(Static RAM)などで構成された揮発性のメモリ等の書き換え可能なメモリである。DMAC3は、DMA転送により、量子化演算に必要な量子化パラメータqを量子化パラメータメモリ51に書き込む。
図15は、ベクトル演算回路52と量子化回路53の内部ブロック図である。
ベクトル演算回路52は、第二メモリ2に格納された出力データf(x,y,do)に対して演算を行う。ベクトル演算回路52は、Bd個の演算ユニット57を有し、出力データf(x,y,do)に対して並列にSIMD演算を行う。
ベクトル演算回路52は、第二メモリ2に格納された出力データf(x,y,do)に対して演算を行う。ベクトル演算回路52は、Bd個の演算ユニット57を有し、出力データf(x,y,do)に対して並列にSIMD演算を行う。
図16は、演算ユニット57のブロック図である。
演算ユニット57は、例えば、ALU57aと、第一セレクタ57bと、第二セレクタ57cと、レジスタ57dと、シフタ57eと、を有する。演算ユニット57は、公知の汎用SIMD演算回路が有する他の演算器等をさらに有してもよい。
演算ユニット57は、例えば、ALU57aと、第一セレクタ57bと、第二セレクタ57cと、レジスタ57dと、シフタ57eと、を有する。演算ユニット57は、公知の汎用SIMD演算回路が有する他の演算器等をさらに有してもよい。
ベクトル演算回路52は、演算ユニット57が有する演算器等を組み合わせることで、出力データf(x,y,do)に対して、量子化演算層220におけるプーリング層221や、Batch Normalization層222や、活性化関数層223の演算のうち少なくとも一つの演算を行う。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより加算できる。演算ユニット57は、ALU57aによる加算結果をレジスタ57dに格納できる。演算ユニット57は、第一セレクタ57bの選択によりレジスタ57dに格納されたデータに代えて「0」をALU57aに入力することで加算結果を初期化できる。例えばプーリング領域が2×2である場合、シフタ57eはALU57aの出力を2bit右シフトすることで加算結果の平均値を出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式2に示す平均プーリングの演算を実施できる。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより比較できる。
演算ユニット57は、ALU57aによる比較結果に応じて第二セレクタ57cを制御して、レジスタ57dに格納されたデータと要素f(di)の大きい方を選択できる。演算ユニット57は、第一セレクタ57bの選択により要素f(di)の取りうる値の最小値をALU57aに入力することで比較対象を最小値に初期化できる。本実施形態において要素f(di)は16bit符号付き整数であるので、要素f(di)の取りうる値の最小値は「0x8000」である。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式3のMAXプーリングの演算を実施できる。なお、MAXプーリングの演算ではシフタ57eは第二セレクタ57cの出力をシフトしない。
演算ユニット57は、ALU57aによる比較結果に応じて第二セレクタ57cを制御して、レジスタ57dに格納されたデータと要素f(di)の大きい方を選択できる。演算ユニット57は、第一セレクタ57bの選択により要素f(di)の取りうる値の最小値をALU57aに入力することで比較対象を最小値に初期化できる。本実施形態において要素f(di)は16bit符号付き整数であるので、要素f(di)の取りうる値の最小値は「0x8000」である。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式3のMAXプーリングの演算を実施できる。なお、MAXプーリングの演算ではシフタ57eは第二セレクタ57cの出力をシフトしない。
演算ユニット57は、レジスタ57dに格納されたデータと第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)とをALU57aにより減算できる。シフタ57eはALU57aの出力を左シフト(すなわち乗算)もしくは右シフト(すなわち除算)できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式4のBatch Normalizationの演算を実施できる。
演算ユニット57は、第二メモリ2から読み出した出力データf(x,y,do)の要素f(di)と第一セレクタ57bにより選択された「0」とをALU57aにより比較できる。演算ユニット57は、ALU57aによる比較結果に応じて要素f(di)と予めレジスタ57dに格納された定数値「0」のいずれかを選択して出力できる。ベクトル演算回路52は、Bd個の演算ユニット57による上記の演算等を繰り返すことで、式5のReLU演算を実施できる。
ベクトル演算回路52は、平均プーリング、MAXプーリング、Batch Normalization、活性化関数の演算およびこれらの演算の組み合わせを実施できる。ベクトル演算回路52は、汎用SIMD演算を実施できるため、量子化演算層220における演算に必要な他の演算を実施してもよい。また、ベクトル演算回路52は、量子化演算層220における演算以外の演算を実施してもよい。
なお、量子化演算回路5は、ベクトル演算回路52を有してなくてもよい。量子化演算回路5がベクトル演算回路52を有していない場合、出力データf(x,y,do)は量子化回路53に入力される。
量子化回路53は、ベクトル演算回路52の出力データに対して、量子化を行う。量子化回路53は、図15に示すように、Bd個の量子化ユニット58を有し、ベクトル演算回路52の出力データに対して並列に演算を行う。
図17は、量子化ユニット58の内部ブロック図である。
量子化ユニット58は、ベクトル演算回路52の出力データの要素in(di)に対して量子化を行う。量子化ユニット58は、比較器58aと、エンコーダ58bと、を有する。量子化ユニット58はベクトル演算回路52の出力データ(16ビット/要素)に対して、量子化演算層220における量子化層224の演算(式6)を行う。量子化ユニット58は、量子化パラメータメモリ51から必要な量子化パラメータq(th0,th1,th2)を読み出し、比較器58aにより入力in(di)と量子化パラメータqとの比較を行う。量子化ユニット58は、比較器58aによる比較結果をエンコーダ58bにより2ビット/要素に量子化する。式4におけるα(c)とβ(c)は、変数cごとに異なるパラメータであるため、α(c)とβ(c)を反映する量子化パラメータq(th0,th1,th2)はin(di)ごとに異なるパラメータである。
量子化ユニット58は、ベクトル演算回路52の出力データの要素in(di)に対して量子化を行う。量子化ユニット58は、比較器58aと、エンコーダ58bと、を有する。量子化ユニット58はベクトル演算回路52の出力データ(16ビット/要素)に対して、量子化演算層220における量子化層224の演算(式6)を行う。量子化ユニット58は、量子化パラメータメモリ51から必要な量子化パラメータq(th0,th1,th2)を読み出し、比較器58aにより入力in(di)と量子化パラメータqとの比較を行う。量子化ユニット58は、比較器58aによる比較結果をエンコーダ58bにより2ビット/要素に量子化する。式4におけるα(c)とβ(c)は、変数cごとに異なるパラメータであるため、α(c)とβ(c)を反映する量子化パラメータq(th0,th1,th2)はin(di)ごとに異なるパラメータである。
量子化ユニット58は、入力in(di)を3つの閾値th0,th1,th2と比較することにより、入力in(di)を4領域(例えば、in≦th0,th0<in≦th1,th1<in≦th2,th2<in)に分類し、分類結果を2ビットにエンコードして出力する。量子化ユニット58は、量子化パラメータq(th0,th1,th2)の設定により、量子化と併せてBatch Normalizationや活性化関数の演算を行うこともできる。
量子化ユニット58は、閾値th0を式4のβ(c)、閾値の差(th1―th0)および(th2―th1)を式4のα(c)として設定して量子化を行うことで、式4に示すBatch Normalizationの演算を量子化と併せて実施できる。(th1―th0)および(th2―th1)を大きくすることでα(c)を小さくできる。(th1―th0)および(th2―th1)を小さくすることで、α(c)を大きくできる。
量子化ユニット58は、入力in(di)の量子化と併せて活性化関数のReLU演算を実施できる。例えば、量子化ユニット58は、in(di)≦th0およびth2<in(di)となる領域では出力値を飽和させる。量子化ユニット58は、出力が非線形となるように量子化パラメータqを設定することで活性化関数の演算を量子化と併せて実施できる。
ステートコントローラ54は、ベクトル演算回路52および量子化回路53のステートを制御する。また、ステートコントローラ54は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ54は、命令キュー55と制御回路56とを有する。
命令キュー55は、量子化演算回路5用の命令コマンドC5が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー55には、内部バスIB経由で命令コマンドC5が書き込まれる。
制御回路56は、命令コマンドC5をデコードし、命令コマンドC5に基づいてベクトル演算回路52および量子化回路53を制御するステートマシンである。制御回路56は、畳み込み演算回路4のステートコントローラ44の制御回路46と同様の構成である。
量子化演算回路5は、Bd個の要素を持つ量子化演算出力データを第一メモリ1に書き込む。なお、BdとBcの好適な関係を式7に示す。式7においてnは整数である。
実行モデル生成部321は、ネットワーク情報NWとして入力された量子化情報から、量子化演算回路5における、プーリングの演算の有無および種類(平均プーリング、MAXプーリングなど)、Batch Normalizationの演算の有無および方式、活性化関数の演算の有無および方式(ReLU演算など)、量子化の方式(ビット数など)、およびその他の演算の有無を決定する。ハードウェア情報HWの中に生成するNN実行モデル100(ニューラルネットワークハードウェアモデル400、ニューラルネットワークハードウェア600)のハードウェア規模が含まれる場合、実行モデル生成部321は、指定された規模にあわせて量子化演算回路5における演算器の構成を調整する。
<DMAC生成工程(S13-3)>
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100のDMAC3を生成する(DMAC生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成されるDMAC3のハードウェアモデルの一例を説明する。
実行モデル生成部321は、ハードウェア情報HWとネットワーク情報NWとに基づいてNN実行モデル100のDMAC3を生成する(DMAC生成工程)。実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3のハードウェアモデルを生成する。ハードウェアモデルは、ビヘイビアレベルであってもよく、RTL(Register Transfer Level)であってもよく、ゲートや回路モジュール間の接続を表すネットリストであってもよく、それらの組み合わせであってもよい。以下、生成されるDMAC3のハードウェアモデルの一例を説明する。
図18は、生成されるDMAC3の内部ブロック図である。
DMAC3は、データ転送回路31と、ステートコントローラ32と、を有する。DMAC3は、データ転送回路31に対する専用のステートコントローラ32を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずにDMAデータ転送を実施できる。
DMAC3は、データ転送回路31と、ステートコントローラ32と、を有する。DMAC3は、データ転送回路31に対する専用のステートコントローラ32を有しており、命令コマンドが入力されると、外部のコントローラを必要とせずにDMAデータ転送を実施できる。
データ転送回路31は、外部バスEBに接続されており、DRAMなどの外部メモリと第一メモリ1との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと第二メモリ2との間のDMAデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと畳み込み演算回路4との間のデータ転送を行う。また、データ転送回路31は、DRAMなどの外部メモリと量子化演算回路5との間のデータ転送を行う。データ転送回路31のDMAチャンネル数は限定されない。例えば、第一メモリ1と第二メモリ2のそれぞれに専用のDMAチャンネルを有していてもよい。
ステートコントローラ32は、データ転送回路31のステートを制御する。また、ステートコントローラ32は、内部バスIBを介してコントローラ6と接続されている。ステートコントローラ32は、命令キュー33と制御回路34とを有する。
命令キュー33は、DMAC3用の命令コマンドC3が格納されるキューであり、例えばFIFOメモリで構成される。命令キュー33には、内部バスIB経由で1つ以上の命令コマンドC3が書き込まれる。
制御回路34は、命令コマンドC3をデコードし、命令コマンドC3に基づいて順次データ転送回路31を制御するステートマシンである。制御回路34は、畳み込み演算回路4のステートコントローラ44の制御回路46と同様の構成である。
実行モデル生成部321は、ネットワーク情報NWとして入力された情報から、DMAC3における、DMAチャンネル数やデータバス幅などを決定する。
例えば、実行モデル生成部321は、ホスト側の外部バスEBの仕様にあわせた仕様(データバス幅等)のDMAC3を生成する。データバス幅やDMAチャンネル数を増やすことで外部メモリと第一メモリ1や第二メモリ2とのデータ伝送速度を向上させることができる。
<学習工程(S14)>
ステップS14において、ニューラルネットワーク生成装置300の学習部322および推論部323は、学習データセットDSを用いて、生成されたNN実行モデル100の学習パラメータを学習する(学習工程)。学習工程(S14)は、例えば、学習済みパラメータ生成工程(S14-1)と、推論テスト工程(S14-2)と、を有する。
ステップS14において、ニューラルネットワーク生成装置300の学習部322および推論部323は、学習データセットDSを用いて、生成されたNN実行モデル100の学習パラメータを学習する(学習工程)。学習工程(S14)は、例えば、学習済みパラメータ生成工程(S14-1)と、推論テスト工程(S14-2)と、を有する。
<学習工程:学習済みパラメータ生成工程(S14-1)>
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。学習済みパラメータPMは、学習済みの重みwおよび量子化パラメータq等である。
学習部322は、NN実行モデル100および学習データD1を用いて、学習済みパラメータPMを生成する。学習済みパラメータPMは、学習済みの重みwおよび量子化パラメータq等である。
例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、学習データD1は入力画像と教師データTとの組み合わせである。入力画像は、CNN200に入力される入力データaである。教師データTは、画像に撮像された被写体の種類や、画像における検出対象物の有無や、画像における検出対象物の座標値などである。
学習部322は、公知の技術である誤差逆伝播法などによる教師あり学習によって、学習済みパラメータPMを生成する。学習部322は、入力画像に対するNN実行モデル100の出力と、入力画像に対応する教師データTと、の差分Eを損失関数(誤差関数)により求め、差分Eが小さくなるように重みwおよび量子化パラメータqを更新する。
例えば重みwを更新する場合、重みwに関する損失関数の勾配が用いられる。勾配は、例えば損失関数を微分することにより算出される。誤差逆伝播法を用いる場合、勾配は逆伝番(backward)により算出される。
学習部322は、勾配を算出して重みwを更新する際において、畳み込み演算に関連する演算を高精度化する。具体的には、NN実行モデル100が使用する低ビットの重みw(例えば1ビット)より高精度な32ビットの浮動小数点型の重みwが学習に使用される。また、NN実行モデル100の畳み込み演算回路4において実施する畳み込み演算が高精度化される。
学習部322は、勾配を算出して重みwを更新する際において、活性化関数に関連する演算を高精度化する。具体的には、NN実行モデル100の量子化演算回路5において実施するReLU関数などの活性化関数より高精度なシグモンド関数が学習に使用される。
一方、学習部322は、順伝搬(fоrward)により入力画像に対する出力データを算出する際においては、畳み込み演算および活性化関数に関連する演算を高精度化せず、NN実行モデル100に基づいた演算を実施する。重みwを更新する際に用いられた高精度な重みwは、ルックアップテーブル等により低ビット化される。
学習部322は、勾配を算出して重みwを更新する際において、畳み込み演算および活性化関数に関連する演算を高精度化することにより、演算における中間データの精度低下を防止して、高い推論精度を実現できる学習済みパラメータPMを生成できる。
一方、学習部322は、入力画像に対する出力データを算出する際において、順伝搬(fоrward)の演算を高精度化せず、NN実行モデル100に基づいた演算を実施する。そのため、学習部322が算出した出力データと、生成された学習済みパラメータPMを用いたNN実行モデル100の出力データと、が一致する。
<学習工程:推論テスト工程(S14-2)>
推論部323は、学習部322が生成した学習済みパラメータPM、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、テストデータD2は、学習データD1同様に入力画像と教師データTとの組み合わせである。
推論部323は、学習部322が生成した学習済みパラメータPM、NN実行モデル100およびテストデータD2を用いて推論テストを実施する。例えば、NN実行モデル100が画像認識を実施するCNN200の実行モデルである場合、テストデータD2は、学習データD1同様に入力画像と教師データTとの組み合わせである。
推論部323は、推論テストの進捗および結果を表示部350に表示する。推論テストの結果は、例えばテストデータD2に対する正解率である。
<確認工程(S15)>
ステップS15において、ニューラルネットワーク生成装置300の推論部323は、操作入力部360から結果に関する確認を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示部350に表示させる。使用者は、推論テストの結果を許容するかを、操作入力部360から入力する。使用者が推論テストの結果を許容することを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、次にステップS16を実施する。使用者が推論テストの結果を許容しないことを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、再度ステップS12を実施する。なお、ニューラルネットワーク生成装置300はステップS11まで戻って、ハードウェア情報HWを使用者に再入力させてもよい。
ステップS15において、ニューラルネットワーク生成装置300の推論部323は、操作入力部360から結果に関する確認を入力することを使用者に促すメッセージや情報入力に必要なGUI画像を表示部350に表示させる。使用者は、推論テストの結果を許容するかを、操作入力部360から入力する。使用者が推論テストの結果を許容することを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、次にステップS16を実施する。使用者が推論テストの結果を許容しないことを示す入力が操作入力部360から入力された場合、ニューラルネットワーク生成装置300は、再度ステップS12を実施する。なお、ニューラルネットワーク生成装置300はステップS11まで戻って、ハードウェア情報HWを使用者に再入力させてもよい。
<出力工程(S16)>
ステップS16において、ニューラルネットワーク生成装置300のハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。
ステップS16において、ニューラルネットワーク生成装置300のハードウェア生成部324は、ハードウェア情報HWおよびNN実行モデル100に基づいてニューラルネットワークハードウェアモデル400を生成する。
<ソフトウェア生成工程(S17)>
ステップS17において、ニューラルネットワーク生成装置300のソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100などに基づいて、ニューラルネットワークハードウェア600(ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したもの)を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
ステップS17において、ニューラルネットワーク生成装置300のソフトウェア生成部325は、ネットワーク情報NWおよびNN実行モデル100などに基づいて、ニューラルネットワークハードウェア600(ニューラルネットワークハードウェアモデル400を動作対象ハードウェアに実装したもの)を動作させるソフトウェア500を生成する。ソフトウェア500は、学習済みパラメータPMを必要に応じてニューラルネットワークハードウェア600へ転送するソフトウェアを含む。
ソフトウェア生成工程(S17)は、例えば、入力データ分割工程(S17-1)と、ネットワーク分割工程(S17-2)と、アロケーション工程(S17-3)と、を有する。
<入力データ分割工程(S17-1):データ分割>
ソフトウェア生成部325は、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ容量や演算器の仕様やサイズ(BcやBd)などに基づいて、畳み込み層210の畳み込み演算の入力データaを部分テンソルに分割する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。
ソフトウェア生成部325は、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ容量や演算器の仕様やサイズ(BcやBd)などに基づいて、畳み込み層210の畳み込み演算の入力データaを部分テンソルに分割する。部分テンソルへの分割方法や分割数は特に限定されない。部分テンソルは、例えば、入力データa(x+i,y+j,c)をa(x+i,y+j,co)に分割することにより形成される。
図19は、畳み込み演算のデータ分割やデータ展開を説明する図である。
畳み込み演算のデータ分割において、式1における変数cは、式8に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式9に示すように、サイズBdのブロックで分割される。式8において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式9において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
畳み込み演算のデータ分割において、式1における変数cは、式8に示すように、サイズBcのブロックで分割される。また、式1における変数dは、式9に示すように、サイズBdのブロックで分割される。式8において、coはオフセットであり、ciは0から(Bc-1)までのインデックスである。式9において、doはオフセットであり、diは0から(Bd-1)までのインデックスである。なお、サイズBcとサイズBdは同じであってもよい。
式1における入力データa(x+i,y+j,c)は、c軸方向においてサイズBcにより分割され、分割された入力データa(x+i,y+j,co)で表される。以降の説明において、分割された入力データaを「分割入力データa」ともいう。
式1における重みw(i,j,c,d)は、c軸方向においてサイズBcおよびd軸方向においてサイズBdにより分割され、分割された重みw(i,j,co,do)で表される。以降の説明において、分割された重みwを「分割重みw」ともいう。
サイズBdにより分割された出力データf(x,y,do)は、式10により求まる。分割された出力データf(x,y,do)を組み合わせることで、最終的な出力データf(x,y,d)を算出できる。
<入力データ分割工程(S17-1):データ展開>
ソフトウェア生成部325は、NN実行モデル100の畳み込み演算回路4に、分割された入力データaおよび重みwを展開する。
ソフトウェア生成部325は、NN実行モデル100の畳み込み演算回路4に、分割された入力データaおよび重みwを展開する。
分割入力データa(x+i,y+j,co)は、Bc個の要素を持つベクトルデータに展開される。分割入力データaの要素は、ciでインデックスされる(0≦ci<Bc)。以降の説明において、i,jごとにベクトルデータに展開された分割入力データaを「入力ベクトルA」ともいう。入力ベクトルAは、分割入力データa(x+i,y+j,co×Bc)から分割入力データa(x+i,y+j,co×Bc+(Bc-1))までを要素とする。
分割重みw(i,j,co,do)は、Bc×Bd個の要素を持つマトリクスデータに展開される。マトリクスデータに展開された分割重みwの要素は、ciとdiでインデックスされる(0≦di<Bd)。以降の説明において、i,jごとにマトリクスデータに展開された分割重みwを「重みマトリクスW」ともいう。重みマトリクスWは、分割重みw(i,j,co×Bc,do×Bd)から分割重みw(i,j,co×Bc+(Bc-1),do×Bd+(Bd-1))までを要素とする。
入力ベクトルAと重みマトリクスWとを乗算することで、ベクトルデータが算出される。i,j,coごとに算出されたベクトルデータを3次元テンソルに整形することで、出力データf(x,y,do)を得ることができる。このようなデータの展開を行うことで、畳み込み層210の畳み込み演算を、ベクトルデータとマトリクスデータとの乗算により実施できる。
例えば、入力データaの大きさがX×Y×Cであり、重みwの大きさをK×K×C×Dであり、出力データfの大きさがX×Y×Dであるとする。d軸方向にサイズBdで分割された出力データf(x,y,do)は、c軸方向にサイズBcで分割された入力データa(x+i,y+j,co)と、サイズBcおよびBdにより分割された重みw(i,j,co,do)とを、i,j,coごとに畳み込み演算して、足し合わせることで算出できる。
出力データfの要素が16ビットである場合、d軸方向にサイズBdで分割された出力データf(x,y,do)のサイズは、16・X・Y・Bdビットである。一方、入力データaの要素が2ビットである場合、Bdで分割された出力データfを算出するために必要な入力データaのサイズは2・X・Y・Bcビットである。また、重みwの要素が1ビットである場合、Bdで分割された出力データfを算出するために必要な重みwのサイズは1・K・K・Bc・Bdビットである。
ソフトウェア生成部325は、第一メモリ1および第二メモリ2として割り当てるメモリのメモリ容量や演算器の仕様やサイズ(BcやBd)などに基づいて、入力データaをニューラルネットワークハードウェア600で演算しやすい単位(部分テンソル)に分割する。ソフトウェア生成部325は、例えば、分割された入力データa(2・X・Y・Bcビット)が第一メモリ1に複数格納されるように入力データaを部分テンソルに分割する。ソフトウェア生成部325は、レイヤごとに入力データaを分割する。なお、ニューラルネットワークハードウェア600で演算しやすい単位とは、ニューラルネットワークハードウェア600で並列演算可能な演算器の数、第一メモリ1または第二メモリ2の容量や帯域、消費電力量、演算周波数などに基づいて決定する。例えば、並列演算可能な演算器の数が多い場合、入力データaの分割数は少ないことが好ましい。
<ネットワーク分割工程(S17-2)>
ソフトウェア生成部325は、CNN200のネットワーク(レイヤ)を分割して、ループ状に形成された畳み込み演算回路4と量子化演算回路5とにマッピングする(ネットワーク分割工程)。
ソフトウェア生成部325は、CNN200のネットワーク(レイヤ)を分割して、ループ状に形成された畳み込み演算回路4と量子化演算回路5とにマッピングする(ネットワーク分割工程)。
図20から図23は、ネットワーク分割工程を説明する図である。本実施形態においては、畳み込み演算と量子化演算とで構成される演算を三回実施(レイヤ1からレイヤ6を実施)する例を説明する。以降の説明において、畳み込み演算回路4に入力されるレイヤnの入力データaを「a[n]」という。また、畳み込み演算回路4から出力されるレイヤnの出力データfを「f[n]」という。量子化演算回路5から出力される量子化演算の出力データ(量子化演算出力データ)оutを「оut[n]」という。
ソフトウェア生成部325は、入力データ分割工程(S17-1)において、畳み込み演算回路4に入力されるレイヤ1の入力データa[1]を、例えば、「第一部分テンソルa[1]1」と、「第二部分テンソルa[1]2」とに分割する。
ソフトウェア生成部325は、分割された入力データa[1]のうち、DMAC3が第一メモリ1に転送するデータを選択する。ソフトウェア生成部325は、第一メモリ1の未使用領域に対して転送できるデータを、畳み込み演算の順序にあわせて選択する。
畳み込み演算の性質上、第一部分テンソルa[1]1に対する畳み込み演算には、第二部分テンソルa[1]2のうち第一部分テンソルa[1]1と隣接する一部の領域(以降、「重複領域R(R1)」ともいう)が必要となる。そのため、第一部分テンソルa[1]1に対する畳み込み演算を実施する場合、第一部分テンソルa[1]1と併せて重複領域R(R1)のデータも第一メモリ1に読み出されて格納される。ソフトウェア生成部325は、例えば、メモリアドレッシングしやすい態様で重複領域R(R1)を第一部分テンソルa[1]1に含ませる。
同様に、第二部分テンソルa[1]2に対する畳み込み演算には、第一部分テンソルa[1]1のうち第二部分テンソルa[1]2と隣接する一部の領域(以降、「重複領域R(R2)」ともいう)が必要となる。そのため、第二部分テンソルa[1]2に対する畳み込み演算を実施する場合、第二部分テンソルa[1]2と併せて重複領域R(R2)のデータも第一メモリ1に読み出されて格納される。ソフトウェア生成部325は、例えば、メモリアドレッシングしやすい態様で重複領域R(R2)を第二部分テンソルa[1]2に含ませる。
畳み込み演算は、演算を実施するごとにデータサイズが小さくなる性質を有する。そのため、畳み込み演算の連続数が増えるほど、初めに第一メモリ1に格納する部分テンソルにあわせて読み出す重複領域Rは大きくなる。畳み込み演算の連続数が増えるほど演算効率が高くなる。一方で、重複領域Rが大きくなると部分テンソルごとに付随して読み出す重複領域Rのデータサイズが増えて、重複するデータのメモリ転送回送が増える。
ソフトウェア生成部325は、第一メモリ1の未使用領域に対して転送できる隣接領域Rのデータ量を考慮して、畳み込み演算の連続数を決める。本実施形態においては、ソフトウェア生成部325は、畳み込み演算と量子化演算とで構成される演算を二回連続して実施(レイヤ1からレイヤ4を実施)すると選択した。
図20に示すように、第一部分テンソルa[1]1が入力された畳み込み演算回路4は、レイヤ1の畳み込み演算の出力データf[1]1を、第二メモリ2を経由して量子化演算回路5に出力する。f[1]1が入力された量子化演算回路5は、レイヤ2の量子化演算の出力оut[2]1を第一メモリ1に入力する。
図21に示すように、第二部分テンソルa[1]2が入力された畳み込み演算回路4は、レイヤ1の畳み込み演算の出力データf[1]2を、第二メモリ2を経由して量子化演算回路5に出力する。f[1]2が入力された量子化演算回路5は、レイヤ2の量子化演算の出力оut[2]2を第一メモリ1に入力する。
レイヤ2の量子化演算の出力оut[2]1と、レイヤ2の量子化演算の出力оut[2]2とは、統合されてレイヤ2の量子化演算の出力оut[2]となる。
レイヤ2の量子化演算の出力оut[2]は、レイヤ3の畳み込み演算の入力データa[3]を全て含んでいる。第一メモリ1に格納される第一部分テンソルa[1]1および第二部分テンソルa[1]2に付随する重複領域R(R1、R2)が、レイヤ1からレイヤ4を実施できるように選択されているためである。
ソフトウェア生成部325は、入力データ分割工程(S17-1)において決定された分割単位に基づいて、レイヤ2の量子化演算の出力оut[2]であって、畳み込み演算回路4に入力されるレイヤ3の入力データa入力データa[3]を、例えば、「第一部分テンソルa[3]1」と、「第二部分テンソルa[3]2」とに分割する。
図22に示すように、第一部分テンソルa[3]1が入力された畳み込み演算回路4は、レイヤ3の畳み込み演算の出力データf[3]1を、第二メモリ2を経由して量子化演算回路5に出力する。f[3]1が入力された量子化演算回路5は、レイヤ4の量子化演算の出力оut[4]1を第一メモリ1に入力する。
ここで、出力оut[4]1を記憶するための第一メモリ1のメモリ領域には、すでに入力データa[1]1が存在する。第一メモリ1において既に使用しているメモリ領域のうち最も長い時間参照されていないメモリ領域を開放することで、出力データfを保持するメモリ領域を確保する。本実施形態においては、入力データa[1]1が最も長い時間参照されていないために、当該メモリ領域を開放する。また、開放されるメモリ領域に保持していたデータを別途保存する必要がある場合、当該メモリ領域の開放前に当該データを外部メモリに退避する。
図23に示すように、第二部分テンソルa[3]2が入力された畳み込み演算回路4は、レイヤ1の畳み込み演算の出力データf[3]2を、第二メモリ2を経由して量子化演算回路5に出力する。f[3]2が入力された量子化演算回路5は、レイヤ4の量子化演算の出力оut[4]2を第一メモリ1に入力する。
レイヤ4の量子化演算の出力оut[4]は、レイヤ5の畳み込み演算の入力データa[5]を全て含んでない。第一メモリ1に格納される第一部分テンソルa[1]1および第二部分テンソルa[1]2に付随する重複領域R(R1、R2)が、レイヤ1からレイヤ4を実施できるように選択されているためである。
そこで、レイヤ4の量子化演算の出力оut[4]は、DMAC3を用いて外部メモリに退避される。CNN200のネットワーク(レイヤ)は、レイヤ4とレイヤ5との間で分割される。
ソフトウェア生成部325は、外部ホストCPU等を用いて、必要に応じて外部メモリに退避された出力оut[4]のデータ整形などを実施して、レイヤ5の入力データa[5]を生成させるコードをソフトウェア500に追加する。
ソフトウェア生成部325は、畳み込み演算回路4に入力されるレイヤ1の入力データa[5]を、例えば、「第一部分テンソルa[5]1」と、「第二部分テンソルa[5]2」とに分割する。ここで、第一部分テンソルa[5]1や第二部分テンソルa[5]2には、以降に実施する畳み込み演算の連続数を考慮した重畳領域Rが含まれる。
ソフトウェア生成部325は、上述したようなCNN200のネットワーク(レイヤ)の分割を、CNN200全体に対して実施する。ソフトウェア生成部325は、DMAC3による第一メモリ1と外部メモリとの間のメモリ転送が可能か限り少なくなるように、CNN200のネットワーク(レイヤ)の分割を実施する。
CNN200に入力データaのテンソル形状を変更する演算が含まれている場合も、当該演算の前においてネットワーク(レイヤ)を分割する。入力データaのテンソル形状を変更する演算とは、例えば、入力データaの深さ方向(c軸方向)を短くして平面方向(xy軸方向)へ広げる演算や、テンソル(データ)の統合を行う演算などである。
また、CNN200にストライドが1より大きい畳み込み演算が含まれている場合も、当該畳み込み演算の後においてネットワーク(レイヤ)を分割する。ストライドが1より大きい畳み込み演算の前後でデータの分割サイズが変わるためである。畳み込み演算の出力データfのx軸方向またはy軸方向のサイズが、畳み込み演算の入力データaと比較して一定以上(例えば、2倍以上や0.5倍以下)に変化する場合、当該畳み込み演算の後においてネットワーク(レイヤ)を分割することが好ましい。
上述した例において、CNN200のネットワーク(レイヤ)は、第一メモリ1の容量に基づいて分割されており、第二メモリ2の容量に基づく分割の説明は省略されている。ソフトウェア生成部325は、第一メモリ1および第二メモリ2の容量に基づいてCNN200のネットワーク(レイヤ)を分割する。
なお、本実施形態におけるネットワーク分割工程(S17-2)においては、ソフトウェア生成部325は、例えば、第一メモリ1と第二メモリ2とが入力データaに対して十分に大きい容量を有している等の仮定を行い、CNN200のネットワーク(レイヤ)の大まかな分割を実施してもよい。大まかな分割は、例えば、ネットワーク(レイヤ)の分割が必要となる上述の演算の前後で実施する。大まかな分割後に、上述の第一メモリ1と第二メモリ2の容量に基づくネットワーク(レイヤ)の分割(段階的なネットワーク分割)を実施することで、ネットワーク分割工程(S17-2)の複雑化を抑制できる。
<アロケーション工程(S17-3)>
ソフトウェア生成部325は、分割された演算をニューラルネットワークハードウェア600に割り当てて実施させるソフトウェア500を生成する(アロケーション工程)。生成されるソフトウェア500は、命令コマンドC3、命令コマンドC4および命令コマンドC5を含む。
ソフトウェア生成部325は、分割された演算をニューラルネットワークハードウェア600に割り当てて実施させるソフトウェア500を生成する(アロケーション工程)。生成されるソフトウェア500は、命令コマンドC3、命令コマンドC4および命令コマンドC5を含む。
図24は、分割された演算を割り当てられたニューラルネットワークハードウェア600のタイミングチャートを示す図である。ソフトウェア生成部325は、分割された演算を、原則ネットワーク(レイヤ)順にニューラルネットワークハードウェア600に割り当てる。
図24に示す例においては、入力データa[1]を外部メモリから第一メモリ1に転送するDMAC3用の命令コマンドC3が生成される。つぎに、第一部分テンソルa[1]1に対して畳み込み演算を実施する畳み込み演算回路4用の命令コマンドC4と、出力f[1]1に対して量子化演算を実施する量子化演算回路5用の命令コマンドC5とが生成される(図20に示す演算)。つぎに、第一部分テンソルa[1]2に対して畳み込み演算を実施する畳み込み演算回路4用の命令コマンドC4と、出力f[1]2に対して量子化演算を実施する量子化演算回路5用の命令コマンドC5とが生成される(図21に示す演算)。
つぎに、レイヤ2の量子化演算の出力оut[2]であって、畳み込み演算回路4に入力されるレイヤ3の入力データa[3]に対して演算を行う命令コマンドC4と命令コマンドC5とが同様に生成される(図22および図23に示す演算)。
つぎに、出力оut[4]を第一メモリ1から外部メモリに転送するDMAC3用の命令コマンドC3が生成される。さらに、入力データa[5]を外部メモリから第一メモリ1に転送するDMAC3用の命令コマンドC3が生成される。
つぎに、入力データa[5]に対して演算を行う命令コマンドC4と命令コマンドC5とが同様に生成される。
命令コマンドC3、命令コマンドC4および命令コマンドC5は、セマフォSを制御するコマンドを含む。
ソフトウェア生成部325は、DMAC3による第一メモリ1と外部メモリとの間のメモリ転送が可能か限り少なくなるように、CNN200のネットワーク(レイヤ)の分割を実施する。そのため、DMAC3によるメモリ転送のために畳み込み演算回路4や量子化演算回路5が待たされる期間が短くなり、ニューラルネットワークハードウェア600の動作効率が高まる。
NN実行モデル100は、ループ状に回路が形成されるために、ソフトウェア500は、各レイヤで変化する畳み込み演算回路4や量子化演算回路5におけるパラメータを必要に応じて適宜更新するプログラムを含む。
なお、ソフトウェア生成部325は、分割されたネットワーク(レイヤ)の各演算を、ニューラルネットワークハードウェア600にあわせて、複数のコマンドC3,C4,C5を組み合わることで実現する。例えば、重みwのサイズが3x3である畳み込み演算は、ニューラルネットワークハードウェア600にあわせて、重みwのサイズが1x1である畳み込み演算を9回組み合わせることで実現される。また、ネットワークの分割において分割した複数の動作を一つの命令コマンドで実現することも可能である。例えば命令コマンドC3とC4を統合した命令コマンドにより、畳み込み演算回路4および量子化演算回路5の動作を制御してもよい。この場合、統合した命令コマンドは、ニューラルネットワークハードウェア600において、畳み込み演算回路4および量子化演算回路5の動作に読み替えられて実行される。
CNN200の演算にニューラルネットワークハードウェア600により実施できない演算が含まれる場合、ソフトウェア500は、ニューラルネットワークハードウェア600により実施できない演算を外部演算デバイスに演算させるコードをソフトウェア500に追加する。ソフトウェア500は、外部ホストCPUなどの外部演算デバイスに中間データを転送し、外部演算デバイスに演算を実施させる。ソフトウェア500は、外部演算デバイスによる演算結果を第一メモリ1や第二メモリ2に入力し、ニューラルネットワークハードウェア600に外部演算デバイスによる演算結果に対する演算を再開させる。
図25は、ニューラルネットワークハードウェア600への他の割り当て例を示すタイミングチャートである。
第一部分テンソルa1に対応する畳み込み演算および量子化演算と、第二部分テンソルa2に対応する畳み込み演算および量子化演算とは、図25に示すように、独立して実施することができる。そこで、ソフトウェア生成部325は、分割された演算を、ネットワーク(レイヤ)の一部の順番を入れ替えて、ニューラルネットワークハードウェア600に割り当ててもよい。
畳み込み演算回路4は、第一部分テンソルa1に対応するレイヤ2M-1の畳み込み演算(図25において、レイヤ2M-1(a1)で示す演算)を行う。その後、畳み込み演算回路4は、第二部分テンソルa2に対応するレイヤ2M-1の畳み込み演算(図25において、レイヤ2M-1(a2)で示す演算)を行う。また、量子化演算回路5は、第一部分テンソルa1に対応するレイヤ2Mの量子化演算(図25において、レイヤ2M(a1)で示す演算)を行う。このように、NN実行モデル100は、第二部分テンソルa2に対応するレイヤ2M-1の畳み込み演算と、第一部分テンソルa1に対応するレイヤ2Mの量子化演算と、を並列に実施できる。
次に、畳み込み演算回路4は、第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算(図25において、レイヤ2M+1(a1)で示す演算)を行う。また、量子化演算回路5は、第二部分テンソルa2に対応するレイヤ2Mの量子化演算(図25において、レイヤ2M(a2)で示す演算)を行う。このように、NN実行モデル100は、第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算と、第二部分テンソルa2に対応するレイヤ2Mの量子化演算と、を並列に実施できる。
入力データaを部分テンソルに分割することで、ニューラルネットワークハードウェア600は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。その結果、畳み込み演算回路4と量子化演算回路5が待機する時間が削減され、ニューラルネットワークハードウェア600の演算処理効率が向上する。図25に示す動作例において部分テンソルへの分割数は2であったが、分割数が2より大きい場合も同様に、ニューラルネットワークハードウェア600は畳み込み演算回路4と量子化演算回路5とを並列して動作させることができる。
なお、部分テンソルに対する演算方法としては、同一レイヤにおける部分テンソルの演算を畳み込み演算回路4または量子化演算回路5で行った後に次のレイヤにおける部分テンソルの演算を行う例(方法1)を示した。例えば、図25に示すように、畳み込み演算回路4において、第一部分テンソルa1および第二部分テンソルa2に対応するレイヤ2M-1の畳み込み演算(図25において、レイヤ2M-1(a1)およびレイヤ2M-1(a2)で示す演算)を行った後に、第一部分テンソルa1および第二部分テンソルa2に対応するレイヤ2M+1の畳み込み演算(図25において、レイヤ2M+1(a1)およびレイヤ2M+1(a2)で示す演算)を実施している。
しかしながら、部分テンソルに対する演算方法はこれに限られない。部分テンソルに対する演算方法は、複数レイヤにおける一部の部分テンソルの演算をした後に残部の部分テンソルの演算を実施する方法でもよい(方法2)。例えば、畳み込み演算回路4において、第一部分テンソルa1に対応するレイヤ2M-1および第一部分テンソルa1に対応するレイヤ2M+1の畳み込み演算を行った後に、第二部分テンソルa2に対応するレイヤ2M-1および第二部分テンソルa2に対応するレイヤ2M+1の畳み込み演算を実施してもよい。
また、部分テンソルに対する演算方法は、方法1と方法2とを組み合わせて部分テンソルを演算する方法でもよい。ただし、方法2を用いる場合は、部分テンソルの演算順序に関する依存関係に従って演算を実施する必要がある。
なお、上述した部分テンソルの並列演算は、部分テンソルの演算順序に関する依存関係以外にも、第一メモリ1や第二メモリ2の未使用領域に基づいても実施可否が判断される。第一メモリ1や第二メモリ2において並列演算に必要な未使用領域がない場合は、並列演算の一部の演算を並列に実施せずに時分割して実施する制御が実施される。
例えば、同じ入力データaに対して重みwを変えて畳み込み演算を実施する場合、同じ入力データaを用いる畳み込み演算を連続して実施する方が効率がよい。そのため、ソフトウェア生成部325は、可能な限り第一メモリ1や第二メモリ2に格納されている同じデータを用いる演算が連続するように、分割された演算の順番を入れ替える。
以上説明したように、本実施形態に係るニューラルネットワーク生成装置300およびニューラルネットワーク制御方法によれば、IoT機器などの組み込み機器に組み込み可能であり、高性能に動作させることができるニューラルネットワークを生成および制御できる。本実施形態に係るソフトウェア生成プログラムによれば、ニューラルネットワーク生成装置300を高効率かつ高速に動作させるソフトウェア500を生成できる。
以上、本発明の第一実施形態について図面を参照して詳述したが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。また、上述の実施形態および変形例において示した構成要素は適宜に組み合わせて構成することが可能である。
(変形例1)
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
上記実施形態において、第一メモリ1と第二メモリ2は別のメモリであったが、第一メモリ1と第二メモリ2の態様はこれに限定されない。第一メモリ1と第二メモリ2は、例えば、同一メモリにおける第一メモリ領域と第二メモリ領域であってもよい。
(変形例2)
例えば、上記実施形態に記載のNN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは、ニューラルネットワークハードウェア600が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
例えば、上記実施形態に記載のNN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは単一の形式に限定されず、静止画像、動画像、音声、文字、数値およびこれらの組み合わせで構成することが可能である。なお、NN実行モデル100やニューラルネットワークハードウェア600に入力されるデータは、ニューラルネットワークハードウェア600が設けられるエッジデバイスに搭載され得る、光センサ、温度計、Global Positioning System(GPS)計測器、角速度計測器、風速計などの物理量測定器における測定結果に限られない。周辺機器から有線または無線通信経由で受信する基地局情報、車両・船舶等の情報、天候情報、混雑状況に関する情報などの周辺情報や金融情報や個人情報等の異なる情報を組み合わせてもよい。
(変形例3)
ニューラルネットワークハードウェア600が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
ニューラルネットワークハードウェア600が設けられるエッジデバイスは、バッテリー等で駆動する携帯電話などの通信機器、パーソナルコンピュータなどのスマートデバイス、デジタルカメラ、ゲーム機器、ロボット製品などのモバイル機器を想定するが、これに限られるものではない。Power on Ethernet(PoE)などでの供給可能なピーク電力制限、製品発熱の低減または長時間駆動の要請が高い製品に利用することでも他の先行例にない効果を得ることができる。例えば、車両や船舶などに搭載される車載カメラや、公共施設や路上などに設けられる監視カメラ等に適用することで長時間の撮影を実現できるだけでなく、軽量化や高耐久化にも寄与する。また、テレビやディスプレイ等の表示デバイス、医療カメラや手術ロボット等の医療機器、製造現場や建築現場で使用される作業ロボットなどにも適用することで同様の効果を奏することができる。
上述した実施形態におけるプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
また、本明細書に記載された効果は、あくまで説明的または例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果とともに、または上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏しうる。
本発明は、ニューラルネットワークの生成に適用することができる。
300 ニューラルネットワーク生成装置
200 畳み込みニューラルネットワーク(CNN)
100 ニューラルネットワーク実行モデル(NN実行モデル)
400 ニューラルネットワークハードウェアモデル
500 ソフトウェア
600 ニューラルネットワークハードウェア
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ
PM 学習済みパラメータ
DS 学習データセット
HW ハードウェア情報
NW ネットワーク情報
200 畳み込みニューラルネットワーク(CNN)
100 ニューラルネットワーク実行モデル(NN実行モデル)
400 ニューラルネットワークハードウェアモデル
500 ソフトウェア
600 ニューラルネットワークハードウェア
1 第一メモリ
2 第二メモリ
3 DMAコントローラ(DMAC)
4 畳み込み演算回路
42 乗算器
43 アキュムレータ回路
5 量子化演算回路
52 ベクトル演算回路
53 量子化回路
6 コントローラ
61 レジスタ
PM 学習済みパラメータ
DS 学習データセット
HW ハードウェア情報
NW ネットワーク情報
Claims (16)
- ニューラルネットワークを演算するニューラルネットワーク実行モデルを生成するニューラルネットワーク生成装置であって、
前記ニューラルネットワーク実行モデルが動作するハードウェアのハードウェア情報と、前記ニューラルネットワークのネットワーク情報と、に基づいて前記ニューラルネットワーク実行モデルを生成する実行モデル生成部と、
前記ニューラルネットワーク実行モデルを前記ハードウェアに実装したニューラルネットワークハードウェアを動作させるソフトウェアを生成するソフトウェア生成部と、
を備える、
ニューラルネットワーク生成装置。 - 前記ソフトウェア生成部は、前記ニューラルネットワークを分割して前記ニューラルネットワークハードウェアに演算させる前記ソフトウェアを生成する、
請求項1に記載のニューラルネットワーク生成装置。 - 前記ソフトウェア生成部は、前記ニューラルネットワークへの入力データを部分テンソルに分割して前記ニューラルネットワークハードウェアに演算させる前記ソフトウェアを生成する、
請求項2に記載のニューラルネットワーク生成装置。 - 前記ソフトウェア生成部は、前記ニューラルネットワークハードウェアに実施させる連続する畳み込み演算の連続数に基づいて、前記ニューラルネットワークを分割する、
請求項3に記載のニューラルネットワーク生成装置。 - 前記ニューラルネットワークハードウェアは、前記部分テンソルを格納するメモリを有し、
前記ソフトウェア生成部は、前記連続する畳み込み演算に必要なデータを、前記連続する畳み込み演算を実施する前に外部メモリから前記メモリへメモリ転送するソフトウェアを生成する、
請求項4に記載のニューラルネットワーク生成装置。 - 前記ソフトウェア生成部は、前記メモリの未使用領域のデータ量に基づいて、前記連続する畳み込み演算の前記連続数を決定する、
請求項5に記載のニューラルネットワーク生成装置。 - 前記ニューラルネットワークハードウェアは、前記部分テンソルを格納するメモリを有し、
前記ソフトウェア生成部は、前記演算に必要な前記部分テンソルが前記メモリに格納されていない場合、前記演算に必要な前記部分テンソルを、前記演算を実施する前に外部メモリから前記メモリへメモリ転送するソフトウェアを生成する、
請求項3に記載のニューラルネットワーク生成装置。 - 前記ソフトウェア生成部は、分割された前記ニューラルネットワークの演算を、前記ニューラルネットワークハードウェアに割り当てる、
請求項2から請求項5のいずれか一項に記載のニューラルネットワーク生成装置。 - ニューラルネットワークを演算するニューラルネットワークハードウェアを制御する方法であって、
前記ニューラルネットワークを分割して前記ニューラルネットワークハードウェアに演算させる、
ニューラルネットワーク制御方法。 - 前記ニューラルネットワークへの入力データを部分テンソルに分割することにより、前記ニューラルネットワークを分割する、
請求項9に記載のニューラルネットワーク制御方法。 - 前記ニューラルネットワークハードウェアに実施させる畳み込み演算の連続数に基づいて、前記ニューラルネットワークを分割する、
請求項10に記載のニューラルネットワーク制御方法。 - 分割された前記ニューラルネットワークの演算を、前記ニューラルネットワークハードウェアに割り当てる、
請求項9から請求項11のいずれか一項に記載のニューラルネットワーク制御方法。 - ニューラルネットワークを演算するニューラルネットワークハードウェアを制御するソフトウェアを生成するプログラムであって、
前記ニューラルネットワークを分割して前記ニューラルネットワークハードウェアに演算させる前記ソフトウェアをコンピュータに生成させる、
ソフトウェア生成プログラム。 - 前記ニューラルネットワークへの入力データを部分テンソルに分割することにより、前記ニューラルネットワークを分割する
請求項13に記載のソフトウェア生成プログラム。 - 前記ニューラルネットワークハードウェアに実施させる畳み込み演算の連続数に基づいて、前記ニューラルネットワークを分割する、
請求項14に記載のソフトウェア生成プログラム。 - 分割された前記ニューラルネットワークの演算を、前記ニューラルネットワークハードウェアに割り当てることにより前記ソフトウェアをコンピュータに生成させる、
請求項13から請求項15のいずれか一項に記載のソフトウェア生成プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202180070438.5A CN116348883A (zh) | 2020-10-19 | 2021-10-19 | 神经网络生成装置、神经网络控制方法以及软件生成程序 |
US18/249,316 US20240037412A1 (en) | 2020-10-19 | 2021-10-19 | Neural network generation device, neural network control method, and software generation program |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020-175606 | 2020-10-19 | ||
JP2020175606A JP2022066974A (ja) | 2020-10-19 | 2020-10-19 | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2022085661A1 true WO2022085661A1 (ja) | 2022-04-28 |
Family
ID=81290555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2021/038530 WO2022085661A1 (ja) | 2020-10-19 | 2021-10-19 | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム |
Country Status (4)
Country | Link |
---|---|
US (1) | US20240037412A1 (ja) |
JP (1) | JP2022066974A (ja) |
CN (1) | CN116348883A (ja) |
WO (1) | WO2022085661A1 (ja) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190286972A1 (en) * | 2018-03-14 | 2019-09-19 | Microsoft Technology Licensing, Llc | Hardware accelerated neural network subgraphs |
-
2020
- 2020-10-19 JP JP2020175606A patent/JP2022066974A/ja active Pending
-
2021
- 2021-10-19 CN CN202180070438.5A patent/CN116348883A/zh active Pending
- 2021-10-19 WO PCT/JP2021/038530 patent/WO2022085661A1/ja active Application Filing
- 2021-10-19 US US18/249,316 patent/US20240037412A1/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190286972A1 (en) * | 2018-03-14 | 2019-09-19 | Microsoft Technology Licensing, Llc | Hardware accelerated neural network subgraphs |
Non-Patent Citations (2)
Title |
---|
PARK JAY H, YUN GYEONGCHAN, YI CHANG M, NGUYEN NGUYEN T, LEE SEUNGMIN, CHOI JAESIK, NOH SAM H, CHOI YOUNG-RI: "HetPipe: Enabling Large DNN Training on (Whimpy) Heterogeneous GPU Clusters through Integration of Pipelined Model Parallelism and Data Parallelism", PROCEEDINGS OF THE 2020 USENIX ANNUAL TECHNICAL CONFERENCE, USENIX ASSOCIATION, 15 July 2020 (2020-07-15) - 17 July 2020 (2020-07-17), pages 307 - 321, XP055903366 * |
SONG LINGHAO; CHEN FAN; ZHUO YOUWEI; QIAN XUEHAI; LI HAI; CHEN YIRAN: "AccPar: Tensor Partitioning for Heterogeneous Deep Learning Accelerators", 2020 IEEE INTERNATIONAL SYMPOSIUM ON HIGH PERFORMANCE COMPUTER ARCHITECTURE (HPCA), IEEE, 22 February 2020 (2020-02-22), pages 342 - 355, XP033755316, DOI: 10.1109/HPCA47549.2020.00036 * |
Also Published As
Publication number | Publication date |
---|---|
CN116348883A (zh) | 2023-06-27 |
JP2022066974A (ja) | 2022-05-02 |
US20240037412A1 (en) | 2024-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106228238B (zh) | 现场可编程门阵列平台上加速深度学习算法的方法和系统 | |
CN110020723B (zh) | 神经网络处理单元及包括该神经网络处理单元的片上系统 | |
KR102667790B1 (ko) | 뉴럴 네트워크 회로, 에지 디바이스 및 뉴럴 네트워크 연산 방법 | |
JP2023506343A (ja) | 共有スクラッチパッドメモリを用いたベクトル縮小 | |
WO2022163861A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
EP3709225A1 (en) | System and method for efficient utilization of multipliers in neural-network computations | |
WO2021210527A1 (ja) | ニューラルネットワーク回路の制御方法 | |
WO2022085661A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
WO2022004815A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム | |
WO2022230906A1 (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク演算装置、エッジデバイス、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
JP2023154880A (ja) | ニューラルネットワーク生成方法およびニューラルネットワーク生成プログラム | |
WO2024038662A1 (ja) | ニューラルネットワーク学習装置およびニューラルネットワーク学習方法 | |
JP6931252B1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 | |
JP2023006509A (ja) | ソフトウェア生成装置およびソフトウェア生成方法 | |
WO2023058422A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法 | |
JP2022114698A (ja) | ニューラルネットワーク生成装置、ニューラルネットワーク制御方法およびソフトウェア生成プログラム | |
JP2022105437A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
JP2022183833A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
WO2024111644A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
WO2023139990A1 (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 | |
JP2024118195A (ja) | ニューラルネットワーク回路およびニューラルネットワーク演算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 21882802 Country of ref document: EP Kind code of ref document: A1 |
|
WWE | Wipo information: entry into national phase |
Ref document number: 18249316 Country of ref document: US |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 21882802 Country of ref document: EP Kind code of ref document: A1 |