Пользователь хочет развернуть сеть распознавания цифры с целевой эффективностью 500 кадров в секунду (фут в секунду) к устройству Xilinx™ ZCU102 ZU4CG. Количества ресурса целевого устройства:
Количество среза цифрового сигнального процессора (DSP) - 240
Количество-128 оперативной памяти блока (BRAM)
Ссылка (поставляющая) zcu102_int8 настройка потока битов для устройства ZCU102 ZU9EG Xilinx. Количества ресурса платы по умолчанию:
Количество среза цифрового сигнального процессора (DSP) - 2520
Количество-912 оперативной памяти блока (BRAM)
Количества ресурса платы по умолчанию превышают пользовательский бюджет ресурса, и находится на более верхнем уровне спектра стоимости. Можно достигнуть целевой эффективности и бюджета на использование ресурса путем квантования целевой нейронной сети для глубокого обучения и настройки пользовательской настройки потока битов по умолчанию.
В этом примере создают пользовательскую настройку потока битов, чтобы совпадать с вашим бюджетом ресурса и требованиями к производительности.
Пакет поддержки Deep Learning HDL Toolbox™ для FPGA Xilinx и SoC
Deep Learning Toolbox™
Deep Learning HDL Toolbox™
Библиотека квантования модели Deep Learning Toolbox
Загружать предварительно обученную серийную сеть, которая была обучена на базе данных Modified National Institute Standards of Technology (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"
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: 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 объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (Frames/s).
Оценить использование ресурса zcu102_int8 bitstream, используйте the estimateResources функция dlhdl.ProcessorConfig объект. Функция возвращает предполагаемый срез DSP и использование BRAM.
hPC_reference.estimatePerformance(dlquantObj)
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
### 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 58101 0.00023 1 58101 4302.9
____conv_1 4391 0.00002
____maxpool_1 2877 0.00001
____conv_2 2351 0.00001
____maxpool_2 2265 0.00001
____conv_3 2651 0.00001
____fc 43566 0.00017
* The clock frequency of the DL processor is: 250MHz
hPC_reference.estimateResources
Deep Learning Processor Estimator Resource Results
DSPs Block RAM* LUTs(CLB/ALUT)
------------- ------------- -------------
Available 2520 912 274080
------------- ------------- -------------
DL_Processor 768( 31%) 386( 43%) 193454( 71%)
* Block RAM represents Block RAM tiles in Xilinx devices and Block RAM bits in Intel devices
Предполагаемая эффективность составляет 4 303 кадр/с, и предполагаемые количества использования ресурса:
Количество среза цифрового сигнального процессора (DSP) - 768
Количество-386 оперативной памяти блока (BRAM)
Предполагаемое количество среза DSP и использование количества BRAM превышают бюджет ресурса целевого устройства. Настройте настройку потока битов, чтобы уменьшать использование ресурса.
Чтобы создать пользовательскую настройку процессора, используйте dlhdl.ProcessorConfig объект. Для получения дополнительной информации смотрите dlhdl.ProcessorConfig. Чтобы узнать о модифицируемых параметрах настройки процессора, смотрите getModuleProperty и setModuleProperty.
Чтобы уменьшать использование ресурса для пользовательского потока битов, измените KernelDataType для conv, fc, and модули сумматора. Измените ConvThreadNumber уменьшать срез DSP count. Reduce the InputMemorySize и OutputMemorySize для conv модуль, чтобы уменьшать количество BRAM.
hPC_custom = dlhdl.ProcessorConfig; hPC_custom.ProcessorDataType = '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"
ModuleGeneration: 'on'
LRNBlockGeneration: 'on'
ConvThreadNumber: 4
InputMemorySize: [30 30 1]
OutputMemorySize: [30 30 1]
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: '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 объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (Frames/s).
Оценить использование ресурса hPC_custom bitstream, используйте the estimateResources функция dlhdl.ProcessorConfig объект. Функция возвращает предполагаемый срез DSP и использование BRAM.
hPC_custom.estimatePerformance(dlquantObj)
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
### 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 267467 0.00134 1 267467 747.8
____conv_1 25628 0.00013
____maxpool_1 42337 0.00021
____conv_2 30957 0.00015
____maxpool_2 68153 0.00034
____conv_3 56981 0.00028
____fc 43411 0.00022
* The clock frequency of the DL processor is: 200MHz
hPC_custom.estimateResources
Deep Learning Processor Estimator Resource Results
DSPs Block RAM* LUTs(CLB/ALUT)
------------- ------------- -------------
Available 2520 912 274080
------------- ------------- -------------
DL_Processor 120( 5%) 108( 12%) 69517( 26%)
* Block RAM represents Block RAM tiles in Xilinx devices and Block RAM bits in Intel devices
Предполагаемая эффективность составляет 750 кадр/с, и предполагаемые количества использования ресурса:
Количество среза цифрового сигнального процессора (DSP) - 129
Количество-108 оперативной памяти блока (BRAM)
Предполагаемые ресурсы индивидуально настраиваемого потока битов совпадают с пользовательским бюджетом ресурса целевого устройства, и предполагаемая эффективность совпадает с целевой производительностью сети.