Пользователь хочет развернуть сеть распознавания цифр с целевой производительностью 500 кадров в секунду (FPS) на устройстве Xilinx ZCU102 ZU4CG. Подсчет ресурсов целевого устройства:
Количество фрагментов цифрового сигнального процессора (DSP) - 240
Количество блоков оперативной памяти (BRAM) -128
Ссылка (отгрузка) zcu102_int8 конфигурация потока битов предназначена для устройства Xilinx ZCU102 ZU9EG. Счетчики ресурсов платы по умолчанию:
Количество фрагментов цифрового сигнального процессора (DSP) - 2520
Количество блоков оперативной памяти (BRAM) -912
Количество ресурсов платы по умолчанию превышает бюджет ресурсов пользователя и находится на более высоком уровне спектра затрат. Можно достичь целевой производительности и бюджета использования ресурсов, квантуя целевую сеть глубокого обучения и настраивая пользовательскую конфигурацию битового потока по умолчанию.
В этом примере создайте пользовательскую конфигурацию битового потока в соответствии с бюджетом ресурсов и требованиями к производительности.
Пакет поддержки HDL Toolbox™ глубокого обучения для Xilinx FPGA и SoC
Глубокое обучение Toolbox™
Глубокое обучение HDL Toolbox™
Библиотека квантования модели набора инструментов для глубокого обучения
Для загрузки предварительно обученной сети серии, прошедшей обучение в базе данных Модифицированного национального технологического института (MNIST), введите:
snet = getDigitsNetwork;
Для квантования сети цифр на основе MNIST введите:
dlquantObj = dlquantizer(snet,'ExecutionEnvironment','FPGA'); Image = imageDatastore('five_28x28.pgm','Labels','five'); dlquantObj.calibrate(Image)
ans=21×5 table
Optimized Layer Name Network Layer Name Learnables / Activations MinValue MaxValue
____________________________ __________________ ________________________ _________ ________
{'conv_1_Weights' } {'batchnorm_1'} "Weights" -0.017061 0.013648
{'conv_1_Bias' } {'batchnorm_1'} "Bias" -0.025344 0.058799
{'conv_2_Weights' } {'batchnorm_2'} "Weights" -0.54744 0.51019
{'conv_2_Bias' } {'batchnorm_2'} "Bias" -1.1787 1.0515
{'conv_3_Weights' } {'batchnorm_3'} "Weights" -0.39927 0.44173
{'conv_3_Bias' } {'batchnorm_3'} "Bias" -0.85118 1.1321
{'fc_Weights' } {'fc' } "Weights" -0.22558 0.29637
{'fc_Bias' } {'fc' } "Bias" -0.011837 0.016848
{'imageinput' } {'imageinput' } "Activations" 0 255
{'imageinput_normalization'} {'imageinput' } "Activations" -22.566 232.43
{'conv_1' } {'batchnorm_1'} "Activations" -7.9196 6.7861
{'relu_1' } {'relu_1' } "Activations" 0 6.7861
{'maxpool_1' } {'maxpool_1' } "Activations" 0 6.7861
{'conv_2' } {'batchnorm_2'} "Activations" -8.4641 7.2347
{'relu_2' } {'relu_2' } "Activations" 0 7.2347
{'maxpool_2' } {'maxpool_2' } "Activations" 0 7.2347
⋮
zcu102_int Bitstream ConfigurationЧтобы получить zcu102_int8 конфигурации битового потока, используйте dlhdl.ProcessorConfig объект. Дополнительные сведения см. в разделе dlhdl.ProcessorConfig. Сведения о изменяемых параметрах конфигурации процессора см. в разделе getModuleProperty и setModuleProperty.
hPC_reference = dlhdl.ProcessorConfig('Bitstream','zcu102_int8')
hPC_reference =
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: 'int8'
System Level Properties
TargetPlatform: 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit'
TargetFrequency: 250
SynthesisTool: 'Xilinx Vivado'
ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM'
SynthesisToolChipFamily: 'Zynq UltraScale+'
SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e'
SynthesisToolPackageName: ''
SynthesisToolSpeedValue: ''
zcu102_int8 Конфигурация битового потокаДля оценки производительности сети серии цифр используйте estimatePerformance функции dlhdl.ProcessorConfig объект. Функция возвращает предполагаемую задержку уровня, задержку сети и производительность сети в кадрах в секунду (кадров/с).
Для оценки использования ресурсов zcu102_int8 bitstream, использовать estimateResources функции dlhdl.ProcessorConfig объект. Функция возвращает оцененный объем DSP и использование BRAM.
hPC_reference.estimatePerformance(dlquantObj)
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
3 Memory Regions created.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 57955 0.00023 1 57955 4313.7
____conv_1 4391 0.00002
____maxpool_1 2877 0.00001
____conv_2 2351 0.00001
____maxpool_2 2265 0.00001
____conv_3 2507 0.00001
____fc 43564 0.00017
* The clock frequency of the DL processor is: 250MHz
hPC_reference.estimateResources
Deep Learning Processor Estimator Resource Results
DSPs Block RAM*
------------- -------------
DL_Processor 768 386
conv_module 647 315
fc_module 97 50
adder_module 24 12
debug_module 0 8
sched_module 0 1
* Block RAM represents Block RAM tiles in Xilinx devices and Block RAM bits in Intel devices
Расчетная производительность составляет 4314 FPS, а расчетные значения использования ресурсов:
Количество фрагментов цифрового процессора сигналов (DSP) - 768
Количество блоков оперативной памяти (BRAM) -386
Предполагаемое количество срезов DSP и использование RAM превышает целевой бюджет ресурсов устройства. Настройте конфигурацию битового потока, чтобы уменьшить использование ресурсов.
Для создания пользовательской конфигурации процессора используйте dlhdl.ProcessorConfig объект. Дополнительные сведения см. в разделе dlhdl.ProcessorConfig. Сведения о изменяемых параметрах конфигурации процессора см. в разделе getModuleProperty и setModuleProperty.
Чтобы уменьшить использование ресурсов для пользовательского битового потока, измените KernelDataType для conv, fc, and сумматорные модули. Изменение ConvThreadNumber для уменьшения количества фрагментов DSP. Reduce the InputMemorySize и OutputMemorySize для conv модуль для уменьшения количества BRAM.
hPC_custom = dlhdl.ProcessorConfig; hPC_custom.setModuleProperty('conv','KernelDataType','int8'); hPC_custom.setModuleProperty('fc','KernelDataType','int8'); hPC_custom.setModuleProperty('adder','KernelDataType','int8'); hPC_custom.setModuleProperty('conv','ConvThreadNumber',4); hPC_custom.setModuleProperty('conv','InputMemorySize',[30 30 1]); hPC_custom.setModuleProperty('conv','OutputMemorySize',[30 30 1]); hPC_custom
hPC_custom =
Processing Module "conv"
ConvThreadNumber: 4
InputMemorySize: [30 30 1]
OutputMemorySize: [30 30 1]
FeatureSizeLimit: 2048
KernelDataType: 'int8'
Processing Module "fc"
FCThreadNumber: 4
InputMemorySize: 25088
OutputMemorySize: 4096
KernelDataType: 'int8'
Processing Module "adder"
InputMemorySize: 40
OutputMemorySize: 40
KernelDataType: 'int8'
System Level Properties
TargetPlatform: 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit'
TargetFrequency: 200
SynthesisTool: 'Xilinx Vivado'
ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM'
SynthesisToolChipFamily: 'Zynq UltraScale+'
SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e'
SynthesisToolPackageName: ''
SynthesisToolSpeedValue: ''
Для оценки производительности сети серии цифр используйте estimatePerformance функции dlhdl.ProcessorConfig объект. Функция возвращает предполагаемую задержку уровня, задержку сети и производительность сети в кадрах в секунду (кадров/с).
Для оценки использования ресурсов hPC_custom bitstream, использовать estimateResources функции dlhdl.ProcessorConfig объект. Функция возвращает оцененный объем DSP и использование BRAM.
hPC_custom.estimatePerformance(dlquantObj)
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
3 Memory Regions created.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 348511 0.00174 1 348511 573.9
____conv_1 27250 0.00014
____maxpool_1 42337 0.00021
____conv_2 45869 0.00023
____maxpool_2 68153 0.00034
____conv_3 121493 0.00061
____fc 43409 0.00022
* The clock frequency of the DL processor is: 200MHz
hPC_custom.estimateResources
Deep Learning Processor Estimator Resource Results
DSPs Block RAM*
------------- -------------
DL_Processor 120 108
conv_module 89 63
fc_module 25 33
adder_module 6 3
debug_module 0 8
sched_module 0 1
* Block RAM represents Block RAM tiles in Xilinx devices and Block RAM bits in Intel devices
Расчетная производительность составляет 574 FPS, а расчетные значения использования ресурсов:
Количество фрагментов цифрового сигнального процессора (DSP) - 120
Количество блоков оперативной памяти (BRAM) -108
Оценочные ресурсы настроенного битового потока соответствуют бюджету ресурсов целевого устройства пользователя, а оценочная производительность соответствует производительности целевой сети.