Чтобы сократить время, необходимое для разработки пользовательской нейронной сети для глубокого обучения, отвечающего эффективности требованиям, перед развертыванием сети, анализируйте задержки слоя уровня. Сравните производительность нейронной сети для глубокого обучения на пользовательском процессоре bitstream строений с производительностью на ссылку (shipping) процессоре bitstream строений.
Чтобы узнать, как использовать информацию в данных таблицы из 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
, см..
Оцените эффективность нейронной сети для глубокого обучения на пользовательском строении битового потока, сравнив ее с эффективностью на ссылочном (shipping) строении битового потока. Используйте результаты сравнения, чтобы настроить пользовательские параметры глубокого обучения для достижения оптимальной эффективности.
В этом примере сравните эффективность ResNet-18 сети на zcu102_single
строение битового потока к эффективности в пользовательском строении битового потока по умолчанию.
Необходимые условия
Пакет поддержки Deep Learning HDL Toolbox™ для Xilinx FPGA и SoC
Deep Learning Toolbox™
Deep Learning HDL Toolbox™
Deep Learning Toolbox модель для ResNet-18 сети
Загрузка предварительно обученной сети
Загрузите предварительно обученную сеть.
snet = resnet18;
Извлечение zcu102_single Bitstream Configuration
Как извлечь zcu102_single
bitstream строения, используйте 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