Чтобы сократить время разработки пользовательской сети глубокого обучения, отвечающей требованиям к производительности, перед развертыванием сети проанализируйте задержки на уровне уровня. Сравните производительность сети глубокого обучения на пользовательских конфигурациях процессора битового потока с производительностью на эталонных (транспортных) конфигурациях процессора битового потока.
Чтобы узнать, как использовать информацию в данных таблицы из estimatePerformance для расчета производительности сети см. раздел Выполнение вывода профиля.
В этом примере показано, как вычислить производительность сети глубокого обучения для пользовательской конфигурации процессора.
Создание файла в текущей рабочей папке с именем getLogoNetwork.m. В файле введите:
function net = getLogoNetwork() if ~isfile('LogoNet.mat') url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/logo_detection/LogoNet.mat'; websave('LogoNet.mat',url); end data = load('LogoNet.mat'); net = data.convnet; end
Вызовите функцию и сохраните результат в snet.
snet = getLogoNetwork;
Создать dlhdl.ProcessorConfig объект.
hPC = dlhdl.ProcessorConfig;
Звонить estimatePerformance с snet для извлечения задержек уровня и производительности для сети LogoNet.
hPC.estimatePerformance(snet)
3 Memory Regions created.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 39853460 0.19927 1 39853460 5.0
conv_1 6825287 0.03413
maxpool_1 3755088 0.01878
conv_2 10440701 0.05220
maxpool_2 1447840 0.00724
conv_3 9393397 0.04697
maxpool_3 1765856 0.00883
conv_4 1770484 0.00885
maxpool_4 28098 0.00014
fc_1 2644884 0.01322
fc_2 1692532 0.00846
fc_3 89293 0.00045
* The clock frequency of the DL processor is: 200MHzЧтобы узнать о параметрах и значениях, возвращаемых estimatePerformance, см..
Сравните производительность сети глубокого обучения с настраиваемой конфигурацией битового потока, сравнив ее с производительностью эталонной (транспортной) конфигурации битового потока. Используйте результаты сравнения для настройки пользовательских параметров процессора глубокого обучения для достижения оптимальной производительности.
В этом примере сравните производительность сети ResNet-18 в zcu102_single конфигурации битового потока до производительности в пользовательской конфигурации битового потока по умолчанию.
Предпосылки
Пакет поддержки HDL Toolbox™ глубокого обучения для Xilinx FPGA и SoC
Глубокое обучение Toolbox™
Глубокое обучение HDL Toolbox™
Модель набора инструментов для глубокого обучения для ResNet-18 сети
Загрузить предварительно обученную сеть
Загрузите предварительно обученную сеть.
snet = resnet18;
Восстановить zcu102_single Bitstream Configuration
Чтобы получить zcu102_single конфигурации битового потока, используйте dlhdl.ProcessorConfig объект. Дополнительные сведения см. в разделе dlhdl.ProcessorConfig. Сведения о изменяемых параметрах конфигурации процессора см. в разделе getModuleProperty и setModuleProperty.
hPC_shipping = dlhdl.ProcessorConfig('Bitstream',"zcu102_single")
hPC_shipping =
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: 220
SynthesisTool: 'Xilinx Vivado'
ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM'
SynthesisToolChipFamily: 'Zynq UltraScale+'
SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e'
SynthesisToolPackageName: ''
SynthesisToolSpeedValue: ''
Оценка производительности ResNet-18 для zcu102_single Конфигурация битового потока
Кому estimate производительность сети ResNet-18 DAG, используйте estimatePerformance функции dlhdl.ProcessorConfig объект. Функция возвращает предполагаемую задержку уровня, задержку сети и производительность сети в кадрах в секунду (кадров/с).
hPC_shipping.estimatePerformance(snet)
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
5 Memory Regions created.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 22576184 0.10262 1 22576184 9.7
____conv1 2165372 0.00984
____pool1 646226 0.00294
____res2a_branch2a 966221 0.00439
____res2a_branch2b 966221 0.00439
____res2b_branch2a 966221 0.00439
____res2b_branch2b 966221 0.00439
____res3a_branch2a 757716 0.00344
____res3a_branch2b 919117 0.00418
____res3a_branch1 540749 0.00246
____res3b_branch2a 919117 0.00418
____res3b_branch2b 919117 0.00418
____res4a_branch2a 509261 0.00231
____res4a_branch2b 905421 0.00412
____res4a_branch1 509261 0.00231
____res4b_branch2a 905421 0.00412
____res4b_branch2b 905421 0.00412
____res5a_branch2a 1013837 0.00461
____res5a_branch2b 1939661 0.00882
____res5a_branch1 1013837 0.00461
____res5b_branch2a 1939661 0.00882
____res5b_branch2b 1939661 0.00882
____pool5 54594 0.00025
____fc1000 207850 0.00094
* The clock frequency of the DL processor is: 220MHz
Создание пользовательской конфигурации процессора
Для создания пользовательской конфигурации процессора используйте dlhdl.ProcessorConfig объект. Дополнительные сведения см. в разделе dlhdl.ProcessorConfig. Сведения о изменяемых параметрах конфигурации процессора см. в разделе getModuleProperty и setModuleProperty.
hPC_custom = dlhdl.ProcessorConfig
hPC_custom =
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: ''
Оценка производительности ResNet-18 для пользовательской конфигурации битового потока
Кому estimate производительность сети ResNet-18 DAG, используйте estimatePerformance функции dlhdl.ProcessorConfig объект. Функция возвращает предполагаемую задержку уровня, задержку сети и производительность сети в кадрах в секунду (кадров/с).
hPC_custom.estimatePerformance(snet)
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
5 Memory Regions created.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 22575683 0.11288 1 22575683 8.9
____conv1 2165372 0.01083
____pool1 646226 0.00323
____res2a_branch2a 966221 0.00483
____res2a_branch2b 966221 0.00483
____res2b_branch2a 966221 0.00483
____res2b_branch2b 966221 0.00483
____res3a_branch2a 757716 0.00379
____res3a_branch2b 919117 0.00460
____res3a_branch1 540749 0.00270
____res3b_branch2a 919117 0.00460
____res3b_branch2b 919117 0.00460
____res4a_branch2a 509261 0.00255
____res4a_branch2b 905421 0.00453
____res4a_branch1 509261 0.00255
____res4b_branch2a 905421 0.00453
____res4b_branch2b 905421 0.00453
____res5a_branch2a 1013837 0.00507
____res5a_branch2b 1939661 0.00970
____res5a_branch1 1013837 0.00507
____res5b_branch2a 1939661 0.00970
____res5b_branch2b 1939661 0.00970
____pool5 54594 0.00027
____fc1000 207349 0.00104
* The clock frequency of the DL processor is: 200MHz
Производительность сети ResNet-18 в пользовательской конфигурации битового потока ниже, чем производительность в zcu102_single конфигурация битового потока. Разница между настраиваемой конфигурацией битового потока и zcu102_single конфигурация битового потока - целевая частота.
Изменение пользовательской конфигурации процессора
Измените пользовательскую конфигурацию процессора, чтобы увеличить целевую частоту. Сведения о изменяемых параметрах конфигурации процессора см. в разделе dlhdl.ProcessorConfig.
hPC_custom.TargetFrequency = 220; hPC_custom
hPC_custom =
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: 220
SynthesisTool: 'Xilinx Vivado'
ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM'
SynthesisToolChipFamily: 'Zynq UltraScale+'
SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e'
SynthesisToolPackageName: ''
SynthesisToolSpeedValue: ''
Повторная оценка производительности ResNet-18 для измененной пользовательской конфигурации битового потока
Оцените производительность сети ResNet-18 DAG в измененной конфигурации пользовательского битового потока.
hPC_custom.estimatePerformance(snet)
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
5 Memory Regions created.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 22576184 0.10262 1 22576184 9.7
____conv1 2165372 0.00984
____pool1 646226 0.00294
____res2a_branch2a 966221 0.00439
____res2a_branch2b 966221 0.00439
____res2b_branch2a 966221 0.00439
____res2b_branch2b 966221 0.00439
____res3a_branch2a 757716 0.00344
____res3a_branch2b 919117 0.00418
____res3a_branch1 540749 0.00246
____res3b_branch2a 919117 0.00418
____res3b_branch2b 919117 0.00418
____res4a_branch2a 509261 0.00231
____res4a_branch2b 905421 0.00412
____res4a_branch1 509261 0.00231
____res4b_branch2a 905421 0.00412
____res4b_branch2b 905421 0.00412
____res5a_branch2a 1013837 0.00461
____res5a_branch2b 1939661 0.00882
____res5a_branch1 1013837 0.00461
____res5b_branch2a 1939661 0.00882
____res5b_branch2b 1939661 0.00882
____pool5 54594 0.00025
____fc1000 207850 0.00094
* The clock frequency of the DL processor is: 220MHz
dlhdl.ProcessorConfig | estimatePerformance | estimateResources | getModuleProperty | setModuleProperty