Пользовательская генерация процессора глубокого обучения, чтобы соответствовать требованиям к производительности

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

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

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

  • 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 объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (Frames/s).

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 объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (Frames/s).

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);

Чтобы изучить, как использовать сгенерированный файл потока битов, смотрите, Генерируют Пользовательский Поток битов.

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

Для просмотра документации необходимо авторизоваться на сайте