Чтобы оценить использование ресурсов пользовательского процессорного строения, сравните использование ресурсов для пользовательского процессорного строения с использованием ресурсов ссылки битового потока строения. Анализируйте эффекты пользовательских параметров глубокого процессора глубокого обучения на использование ресурсов.
Вычислите использование ресурсов для пользовательского строения процессора.
Создайте dlhdl.ProcessorConfig
объект.
hPC = dlhdl.ProcessorConfig
hPC = Processing Module "conv" ConvThreadNumber: 16 InputMemorySize: [227 227 3] OutputMemorySize: [227 227 3] FeatureSizeLimit: 2048 KernelDataType: 'single' Processing Module "fc" FCThreadNumber: 4 InputMemorySize: 25088 OutputMemorySize: 4096 KernelDataType: 'single' Processing Module "adder" InputMemorySize: 40 OutputMemorySize: 40 KernelDataType: 'single' 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: ''
Функции estimateResources
для получения информации об использовании ресурсов.
hPC.estimateResources
Deep Learning Processor Estimator Resource Results DSPs Block RAM* ------------- ------------- DL_Processor 368 524 conv_module 343 481 fc_module 17 34 adder_module 8 6 debug_module 0 2 sched_module 0 1 * Block RAM represents Block RAM tiles in Xilinx devices and Block RAM bits in Intel devices
Возвращенная таблица содержит использование ресурсов для всего процессора и отдельных модулей.
Пользователь хочет развернуть сеть распознавания цифр с целевой эффективностью 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
Предполагаемые ресурсы настраиваемого потока битов совпадают с бюджетом ресурса целевого устройства, а предполагаемая эффективность соответствует эффективности целевой сети.
dlhdl.ProcessorConfig
| estimatePerformance
| estimateResources
| getModuleProperty
| setModuleProperty