exponenta event banner

Начало работы с развертыванием FPGA для глубокого обучения на платформе Intel Arria 10 SoC

В этом примере показано, как создавать, компилировать и развертывать dlhdl.Workflow объект, имеющий сетевой объект серии обнаружения рукописных символов с помощью пакета поддержки Deep Learning HDL Toolbox™ для Intel FPGA и SoC. Используйте MATLAB ® для извлечения результатов прогнозирования из целевого устройства .

Предпосылки

  • Комплект для разработки программного обеспечения Intel Arria™ 10

  • Пакет поддержки Toolbox™ HDL для Intel FPGA и SoC

  • Глубокое обучение HDL Toolbox™

  • Глубокое обучение Toolbox™

Загрузка предварительно обученной сети серии

Для загрузки предварительно обученной сети серии, прошедшей обучение в базе данных Модифицированного национального технологического института (MNIST), введите:

snet = getDigitsNetwork();

Для просмотра уровней предварительно обученной сети серии введите:

analyzeNetwork(snet)

Создание целевого объекта

Создайте целевой объект с пользовательским именем для целевого устройства и интерфейсом для подключения целевого устройства к хост-компьютеру. Опции интерфейса - JTAG и Ethernet. Для использования JTAG установите Intel™ Quartus™ Prime Standard Edition 18.1. Настройте путь к установленному исполняемому файлу Intel Quartus Prime, если он еще не настроен. Например, чтобы задать траекторию движения инструмента, введите:

% hdlsetuptoolpath('ToolName', 'Altera Quartus II','ToolPath', 'C:\altera\18.1\quartus\bin64');
hTarget = dlhdl.Target('Intel')
hTarget = 
  Target with properties:

       Vendor: 'Intel'
    Interface: JTAG

Создание объекта рабочего процесса

Создание объекта dlhdl.Workflow класс. При создании объекта укажите сеть и имя битового потока. Укажите в качестве сети сохраненную предварительно обученную нейронную сеть MNIST, snet. Убедитесь, что имя битового потока соответствует типу данных и целевой плате FPGA. В этом примере целевой платой FPGA является плата Intel Arria 10 SOC, и битовый поток использует один тип данных.

hW = dlhdl.Workflow('network', snet, 'Bitstream', 'arria10soc_single','Target',hTarget)
hW = 
  Workflow with properties:

            Network: [1×1 SeriesNetwork]
          Bitstream: 'arria10soc_single'
    ProcessorConfig: []
             Target: [1×1 dlhdl.Target]

Компиляция сети серии MNIST

Для компиляции сети серии MNIST выполните функцию компиляции dlhdl.Workflow объект.

dn = hW.compile;
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
          offset_name          offset_address    allocated_space 
    _______________________    ______________    ________________

    "InputDataOffset"           "0x00000000"     "4.0 MB"        
    "OutputResultOffset"        "0x00400000"     "4.0 MB"        
    "SystemBufferOffset"        "0x00800000"     "28.0 MB"       
    "InstructionDataOffset"     "0x02400000"     "4.0 MB"        
    "ConvWeightDataOffset"      "0x02800000"     "4.0 MB"        
    "FCWeightDataOffset"        "0x02c00000"     "4.0 MB"        
    "EndOffset"                 "0x03000000"     "Total: 48.0 MB"

Передача битового потока в FPGA и загрузка веса сети

Для развертывания сети на оборудовании Intel Arria 10 SoC выполните функцию развертывания dlhdl.Workflow объект. Эта функция использует выходные данные функции компиляции для программирования платы FPGA с помощью файла программирования. Он также загружает веса сети и отклонения. Функция развертывания запускает программирование устройства FPGA, отображает сообщения о ходе выполнения и время, необходимое для развертывания сети.

hW.deploy
### FPGA bitstream programming has been skipped as the same bitstream is already loaded on the target FPGA.
### Loading weights to FC Processor.
### FC Weights loaded. Current time is 28-Jun-2020 13:45:47

Прогон прогнозирования для примера изображения

Чтобы загрузить пример изображения, выполните функцию прогнозирования dlhdl.Workflow объект, а затем просмотрите результат FPGA, введите:

inputImg = imread('five_28x28.pgm');
imshow(inputImg);

Выполните прогнозирование с профилем «on», чтобы увидеть результаты задержки и пропускной способности.

[prediction, speed] = hW.predict(single(inputImg),'Profile','on');
### Finished writing input activations.
### Running single input activations.


              Deep Learning Processor Profiler Performance Results

                   LastLayerLatency(cycles)   LastLayerLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                      49243                  0.00033                       1              49807           3011.6
    conv_module              25983                  0.00017 
        conv_1                6813                  0.00005 
        maxpool_1             4705                  0.00003 
        conv_2                5205                  0.00003 
        maxpool_2             3839                  0.00003 
        conv_3                5481                  0.00004 
    fc_module                23260                  0.00016 
        fc                   23260                  0.00016 
 * The clock frequency of the DL processor is: 150MHz
[val, idx] = max(prediction);
fprintf('The prediction result is %d\n', idx-1);
The prediction result is 5

Связанные темы