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

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

Необходимые условия

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

  • Deep Learning HDL Toolbox™ поддержки для Intel FPGA и SoC

  • Deep Learning HDL Toolbox™

  • Deep Learning Toolbox™

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

Для загрузки предварительно обученной последовательной сети, которая была обучена базе данных Модифицированного национального института стандартов технологии (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"

Программа Bitstream на 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

Похожие темы