Настраиваемая генерация процессоров глубокого обучения для удовлетворения требований к эффективности

В этом примере показано, как создать пользовательское строение процессора и оценить эффективность предварительно обученной последовательной сети. Затем можно изменить параметры пользовательского строения процессора и повторно оценить эффективность. После достижения требований к эффективности можно сгенерировать пользовательский битовый поток с помощью пользовательского строения процессора.

Необходимые условия

  • Глубокое обучение пакет Toolbox™Support HDL для Xilinx FPGA и СнК

  • Deep Learning Toolbox™

  • Deep Learning HDL Toolbox™

  • Библиотека квантования модели Deep Learning Toolbox

  • MATLAB CODER для библиотек глубокого обучения

Загрузка предварительно обученной последовательной сети

Для загрузки предварительно обученной сети LogoNet введите:

snet = getLogoNetwork;

Создайте пользовательское строение процессора

Чтобы создать пользовательское строение процессора, используйте dlhdl.ProcessorConfig объект. Для получения дополнительной информации смотрите dlhdl.ProcessorConfig. Чтобы узнать об изменяемых параметрах строения процессора, смотрите getModuleProperty и setModuleProperty.

hPC = dlhdl.ProcessorConfig;
hPC.TargetFrequency = 220;
hPC
hPC = 
                    Processing Module "conv"
                            ConvThreadNumber: 16
                             InputMemorySize: [227  227    3]
                            OutputMemorySize: [227  227    3]
                            FeatureSizeLimit: 2048
                              KernelDataType: 'single'

                      Processing Module "fc"
                              FCThreadNumber: 4
                             InputMemorySize: 25088
                            OutputMemorySize: 4096
                              KernelDataType: 'single'

                   Processing Module "adder"
                             InputMemorySize: 40
                            OutputMemorySize: 40
                              KernelDataType: 'single'

                     System Level Properties
                              TargetPlatform: 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit'
                             TargetFrequency: 220
                               SynthesisTool: 'Xilinx Vivado'
                             ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM'
                     SynthesisToolChipFamily: 'Zynq UltraScale+'
                     SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e'
                    SynthesisToolPackageName: ''
                     SynthesisToolSpeedValue: ''

Оценка эффективности LogoNet

По estimate эффективность сети серии LogoNet, используйте estimatePerformance функция dlhdl.ProcessorConfig объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и эффективность сети в системах координат в секунду (кадры/с).

hPC.estimatePerformance(snet)
3 Memory Regions created.

### Notice: (Layer  1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer 14) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software.
### Notice: (Layer  1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer  7) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software.


              Deep Learning Processor Estimator Performance Results

                   LastFrameLatency(cycles)   LastFrameLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                   39864176                  0.18120                       1           39864176              5.5
        conv_1             6825287                  0.03102 
        maxpool_1          3755088                  0.01707 
        conv_2            10440701                  0.04746 
        maxpool_2          1447840                  0.00658 
        conv_3             9393397                  0.04270 
        maxpool_3          1765856                  0.00803 
        conv_4             1770484                  0.00805 
        maxpool_4            28098                  0.00013 
        fc_1               2651286                  0.01205 
        fc_2               1696630                  0.00771 
        fc_3                 89509                  0.00041 
 * The clock frequency of the DL processor is: 220MHz

Оценка систем координат в секунду составляет 5,5 кадров/с. Чтобы улучшить эффективность сети, измените пользовательский тип данных ядра модуля свертки процессора, номер потока процессора свертки, тип данных ядра полносвязного модуля и номер потока полносвязного модуля. Для получения дополнительной информации об этих параметрах процессора смотрите getModuleProperty и setModuleProperty.

Создайте измененные пользовательские Строения процессора

Чтобы создать пользовательское строение процессора, используйте dlhdl.ProcessorConfig объект. Для получения дополнительной информации смотрите dlhdl.ProcessorConfig. Чтобы узнать об изменяемых параметрах строения процессора, смотрите getModuleProperty и setModuleProperty.

hPCNew = dlhdl.ProcessorConfig;
hPCNew.TargetFrequency = 300;
hPCNew.setModuleProperty('conv', 'KernelDataType',   'int8');
hPCNew.setModuleProperty('conv', 'ConvThreadNumber', 64);
hPCNew.setModuleProperty('fc', 'KernelDataType',   'int8');
hPCNew.setModuleProperty('fc', 'FCThreadNumber',   16);
hPCNew
hPCNew = 
                    Processing Module "conv"
                            ConvThreadNumber: 64
                             InputMemorySize: [227  227    3]
                            OutputMemorySize: [227  227    3]
                            FeatureSizeLimit: 2048
                              KernelDataType: 'int8'

                      Processing Module "fc"
                              FCThreadNumber: 16
                             InputMemorySize: 25088
                            OutputMemorySize: 4096
                              KernelDataType: 'int8'

                   Processing Module "adder"
                             InputMemorySize: 40
                            OutputMemorySize: 40
                              KernelDataType: 'single'

                     System Level Properties
                              TargetPlatform: 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit'
                             TargetFrequency: 300
                               SynthesisTool: 'Xilinx Vivado'
                             ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM'
                     SynthesisToolChipFamily: 'Zynq UltraScale+'
                     SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e'
                    SynthesisToolPackageName: ''
                     SynthesisToolSpeedValue: ''

Квантование сети серии LogoNet

Для квантования сети LogoNet введите:

dlquantObj = dlquantizer(snet,'ExecutionEnvironment','FPGA');
Image = imageDatastore('heineken.png','Labels','Heineken');
dlquantObj.calibrate(Image);

Оценка эффективности LogoNet

Для оценки эффективности сети серии LogoNet используйте estimate функция dlhdl.Workflow объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и эффективность сети в системах координат в секунду (кадры/с).

hPCNew.estimatePerformance(dlquantObj)
3 Memory Regions created.

### Notice: (Layer  1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer 14) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software.
### Notice: (Layer  1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: (Layer  7) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software.


              Deep Learning Processor Estimator Performance Results

                   LastFrameLatency(cycles)   LastFrameLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                   14155056                  0.04718                       1           14155056             21.2
        conv_1             3475319                  0.01158 
        maxpool_1          1876680                  0.00626 
        conv_2             2932291                  0.00977 
        maxpool_2           723536                  0.00241 
        conv_3             2581439                  0.00860 
        maxpool_3           882544                  0.00294 
        conv_4              521980                  0.00174 
        maxpool_4            14025                  0.00005 
        fc_1                665263                  0.00222 
        fc_2                425423                  0.00142 
        fc_3                 56556                  0.00019 
 * The clock frequency of the DL processor is: 300MHz

Оценка систем координат в секунду составляет 21,2 кадров/с.

Сгенерируйте пользовательский процессор и битовый поток

Используйте новое пользовательское строение процессора, чтобы создать и сгенерировать пользовательский процессор и битовый поток. Используйте пользовательский битовый поток для развертывания сети LogoNet на целевой плате FPGA.

% hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.2\bin\vivado.bat');
% dlhdl.buildProcessor(hPCNew);

Чтобы узнать, как использовать сгенерированный файл битового потока, смотрите Generate Custom Bitstream.

Сгенерированный битовый поток в этом примере похож на zcu102_int8 битовый поток. Развертывание квантованной сети LogoNet с помощью zcu102_int8 bitstream, см. «Получение результатов предсказания для квантованной сети LogoNet».