Пользователь хочет развернуть сеть распознавания цифр с целевой эффективностью 500 систем координат в секунду (FPS) на устройстве Xilinx ZCU102 ZU4CG. Счетчики ресурсов целевого устройства:
Количество срезов на цифровом сигнальном процессоре (DSP) - 240
Блокируйте счетчик памяти с произвольным доступом (BRAM) -128
Ссылка (доставка) zcu102_int8 bitstream строения предназначен для устройства Xilinx ZCU102 ZU9EG. Счетчики ресурсов платы по умолчанию:
Количество срезов цифрового процессора сигналов (DSP) - 2520
Блокируйте счетчик памяти с произвольным доступом (BRAM) -912
Количество ресурсов платы по умолчанию превышает бюджет пользовательских ресурсов и находится на более высоком конце спектра затрат. Вы можете достичь целевой эффективности и бюджета использования ресурсов путем квантования целевой нейронной сети для глубокого обучения и настройки пользовательских строений битового потока по умолчанию.
В этом примере создайте пользовательское строение битового потока, которая будет соответствовать вашему бюджету ресурсов и требованиям к эффективности.
Пакет поддержки Deep Learning HDL Toolbox™ для Xilinx FPGA и SoC
Deep Learning Toolbox™
Deep Learning HDL Toolbox™
Библиотека квантования модели Deep Learning 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 bitstream строения, используйте 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 битовый поток ,использовать 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 и использование BRAM превышает целевой бюджет ресурсов устройства. Настройте строение битового потока, чтобы уменьшить использование ресурсов.
Чтобы создать пользовательское строение процессора, используйте 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 битовый поток ,использовать 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
Предполагаемые ресурсы настраиваемого потока битов совпадают с бюджетом ресурса целевого устройства, а предполагаемая эффективность соответствует эффективности целевой сети.