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

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

FPGAの部屋

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

BinaryBrain Version 3 を試してみよう3

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

前回は、ryuz/BinaryBrain のBinaryBrain Version 3 をコンパイルして実行したが、バージョンが新しくなったということで、もう一度やってみよう。

まずは、~/Docker/BinaryBrain ディレクトリで、rm -rf BinaryBrain してディレクトリを消去した。
git clone でBinaryBrain を持ってきた。
git clone --recursive -b ver3_release https://github.com/ryuz/BinaryBrain.git
BinaryBrain_15_190322.png

BinaryBrain_16_190322.png

cd BinaryBrain/sample/mnist/
make WITH_CUDA=Yes all

BinaryBrain_17_190322.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


make WITH_CUDA=Yes run
BinaryBrain_18_190322.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-21 22:55:05--  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  2.83MB/s    時間 3.3s  

2019-03-21 22:55:09 (2.83 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-21 22:55:09--  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   161KB/s    時間 0.2s  

2019-03-21 22:55:10 (161 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-21 22:55:10--  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  1.19MB/s    時間 1.3s  

2019-03-21 22:55:11 (1.19 MB/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-21 22:55:12--  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-21 22:55:12 (196 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}
  --------------------------------------------------------------------
  [MicroMlp] 
    ------------------------------------------------------------------
    [MicroMlpAffine] 
     input  shape : {60}     output shape : {10}
    ------------------------------------------------------------------
    [BatchNormalization] 
     input  shape : {10}     output shape : {10}
    ------------------------------------------------------------------
    [ReLU] 
     input  shape : {10}     output shape : {10}
  --------------------------------------------------------------------
  [BinaryToReal] 
   input  shape : {10}   output shape : {10}
----------------------------------------------------------------------
fitting start : MnistSimpleLutMlp
     13.36s epoch[  1] test_accuracy : 0.7730 train_accuracy : 0.7721          
     29.92s epoch[  2] test_accuracy : 0.8502 train_accuracy : 0.8425          
     46.17s epoch[  3] test_accuracy : 0.8627 train_accuracy : 0.8567          
     62.37s epoch[  4] test_accuracy : 0.8740 train_accuracy : 0.8649          
     78.69s epoch[  5] test_accuracy : 0.8574 train_accuracy : 0.8561          
     95.02s epoch[  6] test_accuracy : 0.8728 train_accuracy : 0.8687          
    111.27s epoch[  7] test_accuracy : 0.8762 train_accuracy : 0.8670          
    127.36s epoch[  8] test_accuracy : 0.8512 train_accuracy : 0.8435          
fitting end

lut_accuracy : 0.8512                                                          
export : verilog/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
    124.06s epoch[  1] test_accuracy : 0.7005 train_accuracy : 0.6954          
    289.07s epoch[  2] test_accuracy : 0.7654 train_accuracy : 0.7505          
    452.73s epoch[  3] test_accuracy : 0.8321 train_accuracy : 0.8249          
    608.97s epoch[  4] test_accuracy : 0.8677 train_accuracy : 0.8623          
    763.16s epoch[  5] test_accuracy : 0.8865 train_accuracy : 0.8776          
    918.64s epoch[  6] test_accuracy : 0.8932 train_accuracy : 0.8867          
   1072.93s epoch[  7] test_accuracy : 0.9020 train_accuracy : 0.8948          
   1227.28s epoch[  8] test_accuracy : 0.9118 train_accuracy : 0.9069          
fitting end

fitting start : MnistDenseAffine
[initial] test_accuracy : 0.1566 train_accuracy : 0.1472                       
     94.77s epoch[  1] test_accuracy : 0.8678 train_accuracy : 0.8640          
    195.43s epoch[  2] test_accuracy : 0.9004 train_accuracy : 0.9061          
    294.99s epoch[  3] test_accuracy : 0.9139 train_accuracy : 0.9227          
    395.53s epoch[  4] test_accuracy : 0.9248 train_accuracy : 0.9418          
    495.72s epoch[  5] test_accuracy : 0.9264 train_accuracy : 0.9440          
    595.85s epoch[  6] test_accuracy : 0.9356 train_accuracy : 0.9590          
    696.22s epoch[  7] test_accuracy : 0.9369 train_accuracy : 0.9606          
    796.36s epoch[  8] test_accuracy : 0.9419 train_accuracy : 0.9673          
fitting end

accuracy : 0.153032
accuracy : 0.176794
accuracy : 0.207094
accuracy : 0.216566
accuracy : 0.2188
accuracy : 0.216499
accuracy : 0.219384
accuracy : 0.219834


BinaryBrain/sample/mnist/verilog ディレクトリに MnistSimpleLutMlp.v が生成された。
BinaryBrain_19_190322.png

MnistSimpleLutMlp.v を示す。
BinaryBrain_20_190322.png

最初に、module MnistSimpleLutMlp が定義されている。
  1. 2019年03月22日 04:40 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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