Настройте настройку потока битов, чтобы удовлетворить требования использования ресурса

Пользователь хочет развернуть сеть распознавания цифры с целевой эффективностью 500 кадров в секунду (фут в секунду) к устройству ZCU102 ZU4CG Xilinx. Количества ресурса целевого устройства:

  • Количество среза цифрового сигнального процессора (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"
                            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 объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (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'
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

Предполагаемая эффективность составляет 4 314 кадр/с, и предполагаемые количества использования ресурса:

  • Количество среза цифрового сигнального процессора (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.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 объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (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'
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 кадр/с, и предполагаемые количества использования ресурса:

  • Количество среза цифрового сигнального процессора (DSP) - 120

  • Количество-108 оперативной памяти блока (BRAM)

Предполагаемые ресурсы индивидуально настраиваемого потока битов совпадают с пользовательским бюджетом ресурса целевого устройства, и предполагаемая эффективность совпадает с целевой производительностью сети.

Для просмотра документации необходимо авторизоваться на сайте