Пользователь хочет развернуть сеть распознавания цифры с целевой эффективностью 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)
Предполагаемые ресурсы индивидуально настраиваемого потока битов совпадают с пользовательским бюджетом ресурса целевого устройства, и предполагаемая эффективность совпадает с целевой производительностью сети.