exponenta event banner

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

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

Предпосылки

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

  • Глубокое обучение Toolbox™

  • Глубокое обучение HDL Toolbox™

  • Библиотека квантования модели набора инструментов для глубокого обучения

  • Интерфейс кодера MATLAB для библиотек глубокого обучения

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

Для загрузки предварительно обученной сети серии 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);

Сведения об использовании созданного файла битового потока см. в разделе Создание пользовательского битового потока.

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