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