FC2カウンター FPGAの部屋 DnnWeaverをやってみる2

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

DnnWeaverをやってみる2

DnnWeaverをやってみる1”の続き。

Vengineer さんにDnnWeaver は、TensorFlow をインストールすると make できるというのを教えて頂いたので、VirtualBox 上のUbuntu 16.04 にTensorFlow をインストールすることができた。
今回は、~/dnnweaver.public/fpga ディレクトリで make してみよう。
Vivado 2016.2 は2016.2 と2016.3 の間に壁があるので、インストールすることにして、インストールを行った。

~/dnnweaver.public/fpga ディレクトリに cd して、make を行った。
DnnWeaver_25_170519.png

途中省略

DnnWeaver_26_170519.png

「Fatal error: can't create arm_software/obj/standalone/standalone.o: そのようなファイルやディレクトリはありません」というエラーが出て止まってしまった。

make 後の全表示を貼っておく。

(tensorflow) masaaki@masaaki-VirtualBox2:~/dnnweaver.public/fpga$ make
Generating instructions for DnnWeaver
Config = 8 PEs, 1 PUs
Initializing DW Network
Network Name:        CIFAR10_full_deploy
Input Dimensions:    32 x 32 x 3
Number of Layers:    13

Layer Name:        conv1
Layer Type:        Convolution 5x5 - s1
Macro Layer Name:        conv1

Layer Name:        pool1
Layer Type:        Pooling 3x3 - s2

Layer Name:        relu1
Layer Type:        ReLU

Layer Name:        norm1
name: "norm1"
type: "LRN"
bottom: "pool1"
top: "norm1"
lrn_param {
  local_size: 3
  alpha: 4.99999987369e-05
  beta: 0.75
  norm_region: WITHIN_CHANNEL
}

Layer Type:        Normalization 3x3

Layer Name:        conv2
Layer Type:        Convolution 5x5 - s1

Layer Name:        relu2
Layer Type:        ReLU

Layer Name:        pool2
Layer Type:        Pooling 3x3 - s2

Layer Name:        norm2
name: "norm2"
type: "LRN"
bottom: "pool2"
top: "norm2"
lrn_param {
  local_size: 3
  alpha: 4.99999987369e-05
  beta: 0.75
  norm_region: WITHIN_CHANNEL
}

Layer Type:        Normalization 3x3

Layer Name:        conv3
Layer Type:        Convolution 5x5 - s1

Layer Name:        relu3
Layer Type:        ReLU

Layer Name:        pool3
Layer Type:        Pooling 3x3 - s2

Layer Name:        ip1
Layer Type:        FullyConnected 

Layer Name:        prob

Connecting Prev:conv1 and Next:pool1
Connecting Prev:pool1 and Next:relu1
Connecting Prev:relu1 and Next:norm1
Connecting Prev:norm1 and Next:conv2
Connecting Prev:conv2 and Next:relu2
Connecting Prev:relu2 and Next:pool2
Connecting Prev:pool2 and Next:norm2
Connecting Prev:norm2 and Next:conv3
Connecting Prev:conv3 and Next:relu3
Connecting Prev:relu3 and Next:pool3
Connecting Prev:pool3 and Next:ip1
Connecting Prev:ip1 and Next:prob
Head: conv1
Curr layer = pool1
Appending: pool1
Curr layer = relu1
Appending: relu1
Curr layer = norm1
New macro node norm1
Macro Layer Name:        norm1
Curr layer = conv2
New macro node conv2
Macro Layer Name:        conv2
Curr layer = relu2
Appending: relu2
Curr layer = pool2
Appending: pool2
Curr layer = norm2
New macro node norm2
Macro Layer Name:        norm2
Curr layer = conv3
New macro node conv3
Macro Layer Name:        conv3
Curr layer = relu3
Appending: relu3
Curr layer = pool3
Appending: pool3
Curr layer = ip1
New macro node ip1
Macro Layer Name:        ip1
Curr layer = prob
PE   : conv1 5x5 s1     |     Pool : pool1 3x3 s2     |     Act  : relu1 ReLU      
PE   : norm1 3x3        |     Pool : None             |     Act  : None            
PE   : conv2 5x5 s1     |     Pool : pool2 3x3 s2     |     Act  : relu2 ReLU      
PE   : norm2 3x3        |     Pool : None             |     Act  : None            
PE   : conv3 5x5 s1     |     Pool : pool3 3x3 s2     |     Act  : relu3 ReLU      
PE   : ip1 64x10        |     Pool : None             |     Act  : None            
**************************************************
Generating Compute Binary : hardware/include/pu_controller_bin.vh
**************************************************
Layer conv1+pool1+relu1 weight size 6144
Layer norm1 weight size 0
Layer conv2+relu2+pool2 weight size 65536
Layer norm2 weight size 0
Layer conv3+relu3+pool3 weight size 131072
Layer ip1 weight size 32800



**************************************************
generating instructions for macro layer conv1+pool1+relu1
Layer name = conv1+pool1+relu1
Layer input  Dim = <google.protobuf.pyext._message.RepeatedScalarContainer object at 0x7fd4a19cc8b8>
Layer output Dim = [1, 32, 16, 16]



**************************************************
generating instructions for macro layer norm1
Layer name = norm1
Layer input  Dim = [1, 32, 16, 16]
Layer output Dim = [1, 32, 16, 16]



**************************************************
generating instructions for macro layer conv2+relu2+pool2
Layer name = conv2+relu2+pool2
Layer input  Dim = [1, 32, 16, 16]
Layer output Dim = [1, 32, 8, 8]



**************************************************
generating instructions for macro layer norm2
Layer name = norm2
Layer input  Dim = [1, 32, 8, 8]
Layer output Dim = [1, 32, 8, 8]



**************************************************
generating instructions for macro layer conv3+relu3+pool3
Layer name = conv3+relu3+pool3
Layer input  Dim = [1, 32, 8, 8]
Layer output Dim = [1, 64, 4, 4]



**************************************************
generating instructions for macro layer ip1
Layer name = ip1
Layer input  Dim = [1, 64, 4, 4]
Layer output Dim = [1, 10, 1, 1]
**************************************************
Generating Memory Read Binary : hardware/include/rd_mem_controller.vh
**************************************************
generating memory instructions
Layer name = conv1+pool1+relu1
Layer input  Dim = <google.protobuf.pyext._message.RepeatedScalarContainer object at 0x7fd4a19cc8b8>
Layer output Dim = [1, 32, 32L, 32L]
generating memory instructions
Layer name = norm1
Layer input  Dim = [1, 32, 16, 16]
Layer output Dim = [1, 32, 16, 16]
generating memory instructions
Layer name = conv2+relu2+pool2
Layer input  Dim = [1, 32, 16, 16]
Layer output Dim = [1, 32, 16, 16]
generating memory instructions
Layer name = norm2
Layer input  Dim = [1, 32, 8, 8]
Layer output Dim = [1, 32, 8, 8]
generating memory instructions
Layer name = conv3+relu3+pool3
Layer input  Dim = [1, 32, 8, 8]
Layer output Dim = [1, 64, 8, 8]
generating memory instructions
Layer name = ip1
Layer input  Dim = [1, 64, 4, 4]
Layer output Dim = [1, 10, 1, 1]
**************************************************
Generating Memory Write Binary : hardware/include/wr_mem_controller.vh
**************************************************
generating memory instructions
Layer name = conv1+pool1+relu1
Layer output Dim = [1, 32, 16, 16]
generating memory instructions
Layer name = norm1
Layer output Dim = [1, 32, 16, 16]
generating memory instructions
Layer name = conv2+relu2+pool2
Layer output Dim = [1, 32, 8, 8]
generating memory instructions
Layer name = norm2
Layer output Dim = [1, 32, 8, 8]
generating memory instructions
Layer name = conv3+relu3+pool3
Layer output Dim = [1, 64, 4, 4]
generating memory instructions
Layer name = ip1
Layer output Dim = [1, 10, 1, 1]
**************************************************
Generating DnnWeaver Parameters : hardware/include/dw_params.vh
**************************************************
**************************************************
Generating DnnWeaver MMAP : hardware/include/mmap.txt
**************************************************
**************************************************
Generating DnnWeaver Testbench MMAP : hardware/include/tb_mmap.vh
**************************************************
#@python ../compiler/compiler.py -prototxt ../compiler/sample_prototxts/cifar10_full.prototxt -b hardware/include -fpga zynq
Synthesizing DnnWeaver
DnnWeaver: Creating Project
DnnWeaver: Top module is : zynq_wrapper
DnnWeaver: Frequency is : 150 MHz
DnnWeaver: Verilog Path is : hardware
DnnWeaver: Generating Zynq block
DnnWeaver: Generating Zynq block - done
DnnWeaver: Running Synthesis
DnnWeaver: Generating utilization report
DnnWeaver: Running Placement
DnnWeaver: Checking for Timing violations after placement
DnnWeaver: No timing violations found
DnnWeaver: Running Routing
DnnWeaver: Generating Bitfile ./synthesis-output/zynq_wrapper
DnnWeaver: Generating HDF
DnnWeaver: Generating utilization report
DnnWeaver: Done!
Compiling arm_software/src/standalone.c ...arm_software/src/standalone.c: In function 'main':
arm_software/src/standalone.c:7:34: warning: initialization from incompatible pointer type
 #define AXI_GP0_MASTER_BASE_ADDR (u16*)0x43C00000
                                  ^
arm_software/src/standalone.c:20:34: note: in expansion of macro 'AXI_GP0_MASTER_BASE_ADDR'
  volatile u32 * control_master = AXI_GP0_MASTER_BASE_ADDR;
                                  ^
arm_software/src/standalone.c:21:32: warning: initialization makes pointer from integer without a cast
  volatile u16 * rd_address   = *(control_master + 2);
                                ^
arm_software/src/standalone.c:22:32: warning: initialization makes pointer from integer without a cast
  volatile u16 * wr_address   = *(control_master + 3);
                                ^
Assembler messages:
Fatal error: can't create arm_software/obj/standalone/standalone.o: そのようなファイルやディレクトリはありません
Makefile:126: ターゲット 'arm_software/obj/standalone/standalone.o' のレシピで失敗しました
make: *** [arm_software/obj/standalone/standalone.o] エラー 1


~/dnnweaver.public/fpga ディレクトリは、Vivado のログを除くと、synthesis-output, vivado ディレクトリが新規作成されて、fsm_encoding.os, get-pip.py が増えている。
DnnWeaver_27_170519.png
  1. 2017年05月19日 05:19 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:1

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
  1. 2017/05/19(金) 21:25:10 |
  2. |
  3. #
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3804-07bdde8d
この記事にトラックバックする(FC2ブログユーザー)