FC2カウンター FPGAの部屋 BinaryBrain Version 3 を試してみよう2
FC2ブログ

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

FPGAの部屋

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

BinaryBrain Version 3 を試してみよう2

BinaryBrain Version 3 を試してみよう1”の続き。

前回、ryuz/BinaryBrain のBinaryBrain Version 3 を Nvidia Docker で試してみたが、コンパイル時にエラーになってしまった。今回は、Docker を使用しないでやってみた。

なお、Nvidia のドライバは入れてある。nvidia-cuda-toolkit も apt でインストールしてある。

もうすでにgit clone は実行されているので、コンパイルからやってみよう。
cd ~/Docker/BinaryBrain/sample/mnist/
make WITH_CUDA=Yes all

BinaryBrain_9_190320.png

うまく行ったようだ。ログを示す。

masaaki@masaaki-H110M4-M01:~/Docker/BinaryBrain/BinaryBrain/sample/mnist$ make WITH_CUDA=Yes all
make -C ../../cuda
make[1]: ディレクトリ '/home/masaaki/Docker/BinaryBrain/BinaryBrain/cuda' に入ります
nvcc -c -I ../include Manager.cu -o Manager.o
nvcc -c -I ../include MicroMlp.cu -o MicroMlp.o
nvcc -c -I ../include Im2Col.cu -o Im2Col.o
nvcc -c -I ../include Col2Im.cu -o Col2Im.o
nvcc -c -I ../include MaxPooling.cu -o MaxPooling.o
nvcc -c -I ../include BatchNormalization.cu -o BatchNormalization.o
nvcc -c -I ../include ReLU.cu -o ReLU.o
nvcc -c -I ../include Binarize.cu -o Binarize.o
nvcc -c -I ../include Vector.cu -o Vector.o
nvcc -c -I ../include HorizontalSum.cu -o HorizontalSum.o
ar rcs libbbcu.a Manager.o MicroMlp.o Im2Col.o Col2Im.o MaxPooling.o BatchNormalization.o ReLU.o Binarize.o Vector.o HorizontalSum.o
make[1]: ディレクトリ '/home/masaaki/Docker/BinaryBrain/BinaryBrain/cuda' から出ます
nvcc -Xcompiler '-O2 -mavx2 -mfma -fopenmp -std=c++14' -I../../include -I../../eigen -I../../cereal/include -DBB_WITH_CEREAL -DBB_WITH_CUDA -c main.cpp
nvcc -Xcompiler '-O2 -mavx2 -mfma -fopenmp -std=c++14' -I../../include -I../../eigen -I../../cereal/include -DBB_WITH_CEREAL -DBB_WITH_CUDA -c MnistSimpleLutMlp.cpp
nvcc -Xcompiler '-O2 -mavx2 -mfma -fopenmp -std=c++14' -I../../include -I../../eigen -I../../cereal/include -DBB_WITH_CEREAL -DBB_WITH_CUDA -c MnistSimpleLutCnn.cpp
nvcc -Xcompiler '-O2 -mavx2 -mfma -fopenmp -std=c++14' -I../../include -I../../eigen -I../../cereal/include -DBB_WITH_CEREAL -DBB_WITH_CUDA -c MnistDenseAffine.cpp
nvcc -Xcompiler '-O2 -mavx2 -mfma -fopenmp -std=c++14' -I../../include -I../../eigen -I../../cereal/include -DBB_WITH_CEREAL -DBB_WITH_CUDA -c MnistSimpleMicroMlpScratch.cpp
nvcc -o sample-mnist -Xcompiler '-O2 -mavx2 -mfma -fopenmp -std=c++14' -I../../include -I../../eigen -I../../cereal/include -DBB_WITH_CEREAL -DBB_WITH_CUDA main.o MnistSimpleLutMlp.o MnistSimpleLutCnn.o MnistDenseAffine.o MnistSimpleMicroMlpScratch.o ../../cuda/libbbcu.a


nvcc のバージョンを見てみた。
nvcc --version
BinaryBrain_10_190320.png

ログを示す。

masaaki@masaaki-H110M4-M01:~/Docker/BinaryBrain/BinaryBrain/sample/mnist$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85


nvidia-smi を実行した。
BinaryBrain_11_190320.png

make WITH_CUDA=Yes run
BinaryBrain_12_190321.png

うまく行ったようだ。
ログを示す。

masaaki@masaaki-H110M4-M01:~/Docker/BinaryBrain/BinaryBrain/sample/mnist$ make WITH_CUDA=Yes run
wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
--2019-03-20 06:00:28--  http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
yann.lecun.com (yann.lecun.com) をDNSに問いあわせています... 216.165.22.6
yann.lecun.com (yann.lecun.com)|216.165.22.6|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 9912422 (9.5M) [application/x-gzip]
`train-images-idx3-ubyte.gz' に保存中

train-images-idx3-u 100%[===================>]   9.45M  1.75MB/s    時間 9.4s  

2019-03-20 06:00:38 (1.01 MB/s) - `train-images-idx3-ubyte.gz' へ保存完了 [9912422/9912422]

gzip -c -d train-images-idx3-ubyte.gz  > train-images-idx3-ubyte
wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
--2019-03-20 06:00:38--  http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
yann.lecun.com (yann.lecun.com) をDNSに問いあわせています... 216.165.22.6
yann.lecun.com (yann.lecun.com)|216.165.22.6|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 28881 (28K) [application/x-gzip]
`train-labels-idx1-ubyte.gz' に保存中

train-labels-idx1-u 100%[===================>]  28.20K   148KB/s    時間 0.2s  

2019-03-20 06:00:39 (148 KB/s) - `train-labels-idx1-ubyte.gz' へ保存完了 [28881/28881]

gzip -c -d train-labels-idx1-ubyte.gz  > train-labels-idx1-ubyte
wget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
--2019-03-20 06:00:39--  http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
yann.lecun.com (yann.lecun.com) をDNSに問いあわせています... 216.165.22.6
yann.lecun.com (yann.lecun.com)|216.165.22.6|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1648877 (1.6M) [application/x-gzip]
`t10k-images-idx3-ubyte.gz' に保存中

t10k-images-idx3-ub 100%[===================>]   1.57M   463KB/s    時間 3.6s  

2019-03-20 06:00:43 (443 KB/s) - `t10k-images-idx3-ubyte.gz' へ保存完了 [1648877/1648877]

gzip -c -d t10k-images-idx3-ubyte.gz   > t10k-images-idx3-ubyte
wget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
--2019-03-20 06:00:43--  http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
yann.lecun.com (yann.lecun.com) をDNSに問いあわせています... 216.165.22.6
yann.lecun.com (yann.lecun.com)|216.165.22.6|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4542 (4.4K) [application/x-gzip]
`t10k-labels-idx1-ubyte.gz' に保存中

t10k-labels-idx1-ub 100%[===================>]   4.44K  --.-KB/s    時間 0s    

2019-03-20 06:00:43 (174 MB/s) - `t10k-labels-idx1-ubyte.gz' へ保存完了 [4542/4542]

gzip -c -d t10k-labels-idx1-ubyte.gz   > t10k-labels-idx1-ubyte
./sample-mnist All
binary mode
----------------------------------------------------------------------
[Sequential] 
  --------------------------------------------------------------------
  [RealToBinary] 
   input  shape : {28, 28, 1}   output shape : {28, 28, 1}
  --------------------------------------------------------------------
  [MicroMlp] 
    ------------------------------------------------------------------
    [MicroMlpAffine] 
     input  shape : {28, 28, 1}     output shape : {1024}
    ------------------------------------------------------------------
    [BatchNormalization] 
     input  shape : {1024}     output shape : {1024}
    ------------------------------------------------------------------
    [ReLU] 
     input  shape : {1024}     output shape : {1024}
  --------------------------------------------------------------------
  [MicroMlp] 
    ------------------------------------------------------------------
    [MicroMlpAffine] 
     input  shape : {1024}     output shape : {360}
    ------------------------------------------------------------------
    [BatchNormalization] 
     input  shape : {360}     output shape : {360}
    ------------------------------------------------------------------
    [ReLU] 
     input  shape : {360}     output shape : {360}
  --------------------------------------------------------------------
  [MicroMlp] 
    ------------------------------------------------------------------
    [MicroMlpAffine] 
     input  shape : {360}     output shape : {60}
    ------------------------------------------------------------------
    [BatchNormalization] 
     input  shape : {60}     output shape : {60}
    ------------------------------------------------------------------
    [ReLU] 
     input  shape : {60}     output shape : {60}
  --------------------------------------------------------------------
  [BinaryToReal] 
   input  shape : {60}   output shape : {10}
----------------------------------------------------------------------
fitting start : MnistSimpleLutMlp
     12.79s epoch[  1] test_accuracy : 0.8074 train_accuracy : 0.8030          
     28.98s epoch[  2] test_accuracy : 0.8771 train_accuracy : 0.8679          
     44.87s epoch[  3] test_accuracy : 0.8801 train_accuracy : 0.8788          
     61.03s epoch[  4] test_accuracy : 0.8647 train_accuracy : 0.8597          
fitting end

lut_accuracy : 0.8647                                                          
export : MnistSimpleLutMlp.v

binary mode
----------------------------------------------------------------------
[Sequential] 
  --------------------------------------------------------------------
  [RealToBinary] 
   input  shape : {28, 28, 1}   output shape : {28, 28, 1}
  --------------------------------------------------------------------
  [LoweringConvolution] 
    ------------------------------------------------------------------
    [ConvolutionIm2Col] 
     input  shape : {28, 28, 1}     output shape : {3, 3, 1}
    ------------------------------------------------------------------
    [Sequential] 
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {3, 3, 1}         output shape : {192}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {192}         output shape : {192}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {192}         output shape : {192}
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {192}         output shape : {32}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {32}         output shape : {32}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {32}         output shape : {32}
    ------------------------------------------------------------------
    [ConvolutionCol2Im] 
     input  shape : {32}     output shape : {26, 26, 32}
  --------------------------------------------------------------------
  [LoweringConvolution] 
    ------------------------------------------------------------------
    [ConvolutionIm2Col] 
     input  shape : {26, 26, 32}     output shape : {3, 3, 32}
    ------------------------------------------------------------------
    [Sequential] 
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {3, 3, 32}         output shape : {192}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {192}         output shape : {192}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {192}         output shape : {192}
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {192}         output shape : {32}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {32}         output shape : {32}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {32}         output shape : {32}
    ------------------------------------------------------------------
    [ConvolutionCol2Im] 
     input  shape : {32}     output shape : {24, 24, 32}
  --------------------------------------------------------------------
  [MaxPooling] 
   input  shape : {24, 24, 32}   output shape : {12, 12, 32}
  --------------------------------------------------------------------
  [LoweringConvolution] 
    ------------------------------------------------------------------
    [ConvolutionIm2Col] 
     input  shape : {12, 12, 32}     output shape : {3, 3, 32}
    ------------------------------------------------------------------
    [Sequential] 
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {3, 3, 32}         output shape : {192}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {192}         output shape : {192}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {192}         output shape : {192}
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {192}         output shape : {32}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {32}         output shape : {32}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {32}         output shape : {32}
    ------------------------------------------------------------------
    [ConvolutionCol2Im] 
     input  shape : {32}     output shape : {10, 10, 32}
  --------------------------------------------------------------------
  [LoweringConvolution] 
    ------------------------------------------------------------------
    [ConvolutionIm2Col] 
     input  shape : {10, 10, 32}     output shape : {3, 3, 32}
    ------------------------------------------------------------------
    [Sequential] 
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {3, 3, 32}         output shape : {192}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {192}         output shape : {192}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {192}         output shape : {192}
      ----------------------------------------------------------------
      [MicroMlp] 
        --------------------------------------------------------------
        [MicroMlpAffine] 
         input  shape : {192}         output shape : {32}
        --------------------------------------------------------------
        [BatchNormalization] 
         input  shape : {32}         output shape : {32}
        --------------------------------------------------------------
        [ReLU] 
         input  shape : {32}         output shape : {32}
    ------------------------------------------------------------------
    [ConvolutionCol2Im] 
     input  shape : {32}     output shape : {8, 8, 32}
  --------------------------------------------------------------------
  [MaxPooling] 
   input  shape : {8, 8, 32}   output shape : {4, 4, 32}
  --------------------------------------------------------------------
  [MicroMlp] 
    ------------------------------------------------------------------
    [MicroMlpAffine] 
     input  shape : {4, 4, 32}     output shape : {480}
    ------------------------------------------------------------------
    [BatchNormalization] 
     input  shape : {480}     output shape : {480}
    ------------------------------------------------------------------
    [ReLU] 
     input  shape : {480}     output shape : {480}
  --------------------------------------------------------------------
  [MicroMlp] 
    ------------------------------------------------------------------
    [MicroMlpAffine] 
     input  shape : {480}     output shape : {80}
    ------------------------------------------------------------------
    [BatchNormalization] 
     input  shape : {80}     output shape : {80}
    ------------------------------------------------------------------
    [ReLU] 
     input  shape : {80}     output shape : {80}
  --------------------------------------------------------------------
  [BinaryToReal] 
   input  shape : {80}   output shape : {10}
----------------------------------------------------------------------
fitting start : MnistSimpleLutCnn
    130.57s epoch[  1] test_accuracy : 0.7246 train_accuracy : 0.7235          
    304.45s epoch[  2] test_accuracy : 0.8018 train_accuracy : 0.7884          
    474.70s epoch[  3] test_accuracy : 0.8517 train_accuracy : 0.8375          
    645.89s epoch[  4] test_accuracy : 0.8854 train_accuracy : 0.8797          
fitting end

fitting start : MnistDenseAffine
[initial] test_accuracy : 0.1566 train_accuracy : 0.1472                       
     96.61s epoch[  1] test_accuracy : 0.8704 train_accuracy : 0.8643          
    200.47s epoch[  2] test_accuracy : 0.8979 train_accuracy : 0.9049          
    303.05s epoch[  3] test_accuracy : 0.9138 train_accuracy : 0.9224          
    405.96s epoch[  4] test_accuracy : 0.9237 train_accuracy : 0.9414          
fitting end

accuracy : 0.153032
accuracy : 0.176794
accuracy : 0.207094
accuracy : 0.216566


Docker でうまく行かなかったのはなぜなんだろう?設定がうまく行ってなかったか?

MnistSimpleLutMlp.v ができていた。
BinaryBrain_13_190321.png

MnistSimpleLutMlp.v の一部を示す。
BinaryBrain_14_190321.png

Verlog HDL に変換してくれるのね?
  1. 2019年03月21日 04:37 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4478-2d5d2a6c
この記事にトラックバックする(FC2ブログユーザー)