В этом примере показано, как создать пользовательскую конфигурацию процессора и оценить производительность предварительно обученной сети серии. Затем можно изменить параметры пользовательской конфигурации процессора и повторно оценить производительность. После выполнения требований к производительности можно создать пользовательский битовый поток с помощью пользовательской конфигурации процессора.
Предпосылки
Пакет 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: ''
Кому 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 введите:
dlquantObj = dlquantizer(snet,'ExecutionEnvironment','FPGA'); Image = imageDatastore('heineken.png','Labels','Heineken'); dlquantObj.calibrate(Image);
Для оценки производительности сети серии 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.