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

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

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

  • 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"
                            ModuleGeneration: 'on'
                          LRNBlockGeneration: 'on'
                            ConvThreadNumber: 16
                             InputMemorySize: [227 227 3]
                            OutputMemorySize: [227 227 3]
                            FeatureSizeLimit: 2048

                      Processing Module "fc"
                            ModuleGeneration: 'on'
                      SoftmaxBlockGeneration: 'off'
                              FCThreadNumber: 4
                             InputMemorySize: 25088
                            OutputMemorySize: 4096

                   Processing Module "adder"
                            ModuleGeneration: 'on'
                             InputMemorySize: 40
                            OutputMemorySize: 40

              Processor Top Level Properties
                              RunTimeControl: 'register'
                          InputDataInterface: 'External Memory'
                         OutputDataInterface: 'External Memory'
                           ProcessorDataType: '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)
### Notice: The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: The layer 'classoutput' with type 'nnet.cnn.layer.ClassificationOutputLayer' is implemented in software.


              Deep Learning Processor Estimator Performance Results

                   LastFrameLatency(cycles)   LastFrameLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                   39926006                  0.18148                       1           39926006              5.5
    ____conv_1             6825671                  0.03103 
    ____maxpool_1          3755088                  0.01707 
    ____conv_2            10440701                  0.04746 
    ____maxpool_2          1447840                  0.00658 
    ____conv_3             9405685                  0.04275 
    ____maxpool_3          1765856                  0.00803 
    ____conv_4             1819636                  0.00827 
    ____maxpool_4            28098                  0.00013 
    ____fc_1               2651288                  0.01205 
    ____fc_2               1696632                  0.00771 
    ____fc_3                 89511                  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.ProcessorDataType = 'int8';
hPCNew.setModuleProperty('conv', 'ConvThreadNumber', 64);
hPCNew.setModuleProperty('fc', 'FCThreadNumber',   16);
hPCNew
hPCNew = 
                    Processing Module "conv"
                            ModuleGeneration: 'on'
                          LRNBlockGeneration: 'on'
                            ConvThreadNumber: 64
                             InputMemorySize: [227 227 3]
                            OutputMemorySize: [227 227 3]
                            FeatureSizeLimit: 2048

                      Processing Module "fc"
                            ModuleGeneration: 'on'
                      SoftmaxBlockGeneration: 'off'
                              FCThreadNumber: 16
                             InputMemorySize: 25088
                            OutputMemorySize: 4096

                   Processing Module "adder"
                            ModuleGeneration: 'on'
                             InputMemorySize: 40
                            OutputMemorySize: 40

              Processor Top Level Properties
                              RunTimeControl: 'register'
                          InputDataInterface: 'External Memory'
                         OutputDataInterface: 'External Memory'
                           ProcessorDataType: 'int8'

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

hPCNew.estimatePerformance(dlquantObj)
### Notice: The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: The layer 'classoutput' with type 'nnet.cnn.layer.ClassificationOutputLayer' is implemented in software.


              Deep Learning Processor Estimator Performance Results

                   LastFrameLatency(cycles)   LastFrameLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                   14306694                  0.04769                       1           14306694             21.0
    ____conv_1             3477191                  0.01159 
    ____maxpool_1          1876680                  0.00626 
    ____conv_2             2932291                  0.00977 
    ____maxpool_2           723536                  0.00241 
    ____conv_3             2611391                  0.00870 
    ____maxpool_3           882544                  0.00294 
    ____conv_4              641788                  0.00214 
    ____maxpool_4            14025                  0.00005 
    ____fc_1                665265                  0.00222 
    ____fc_2                425425                  0.00142 
    ____fc_3                 56558                  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.