Download - Fpgax20170924
![Page 1: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/1.jpg)
コキュートスでいろいろ動かしてみた話
2017/9/24
株式会社パソナテック西日本支社
夏谷
1
HUMANWARE® changes the world
![Page 2: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/2.jpg)
自己紹介
夏谷実
株式会社パソナテック 株式会社パソナテック
西日本支社
TFUG KANSAI
最近は半導体関連の仕事が多い
FPGAが好き
プログラミングも好き
Deep Learningも好き
2
![Page 3: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/3.jpg)
やったこと
組込向けフレームワークを使って、ラズパイやPYNQでいろいろ動かしてみた。
各手法の報告。FPGAは使ってません>< gccのオプションはデフォルトで-O3 処理の95%以上は3x3 conv2d
3
https://ja.wikipedia.org/wiki/Raspberry_Pi
Raspberry Pi 3 Model B
http://www.pynq.io/
PYNQ
![Page 4: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/4.jpg)
ラズパイ VS PYNQ
4
VGG16 Tiny-YOLO
ラズパイ 188 20
PYNQ メモリ不足で動かず 42 -> 60
単位は秒
VGG16の重みが512MBを超えているので、PYNQにロードできない。
最初42秒だったけど、Emacsインストールしたら遅くなった。
![Page 5: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/5.jpg)
ラズパイ VS PYNQ
5
VGG16 Tiny-YOLO
ラズパイ 188 20
PYNQ メモリ不足で動かず 42 -> 60
単位は秒
VGG16の重みが512MBを超えているので、PYNQにロードできない。
最初42秒だったけど、Emacsインストールしたら遅くなった。
・ラズパイの方が2~3倍速い・PYNQにEmacsは入れるな。
![Page 6: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/6.jpg)
ラズパイ上のTiny-YOLOを早くしたい
6
①3x3 conv2dの計算順を変える。→画処理のコンボリューションではなくフィルター方向へのコンボリューションへ
→メモリライトの数が減る。PC上では速度3倍へ②それに合わせて、データの並びを変える。(チャネルラストへ)③OpenMP
④FP16
⑤Neon+OpenMP
→社内の専門家の知識を使った
順番にやってみた
![Page 7: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/7.jpg)
ラズパイ上のTiny-YOLOを早くしたい
7
名前 Conv2d計算順
チャネルラスト
OpenMP FP16 NEON 処理時間(秒)
C_ori - - - - - 20
C_ori_MP - - 有効 - -
C 変更 - - - -
c_cl 変更 有効 - - -
C_ori_fp16 - - - 有効 -
C_fp_16 変更 - - 有効 -
C_neon - - 有効 - 有効
いろいろやってみた。結果は?
![Page 8: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/8.jpg)
ラズパイ上のTiny-YOLOを早くしたい
8
名前 Conv2d計算順
チャネルラスト
OpenMP FP16 NEON 処理時間(秒)
C_ori - - - - - 20
C_ori_MP - - 有効 - - 計算結果不一致
C 変更 - - - - 31
c_cl 変更 有効 - - - 31
C_ori_fp16 - - - 有効 -
C_fp_16 変更 - - 有効 -
C_neon - - 有効 - 有効
データの並び替え、計算順序の変更では早くならない。実測大事。
![Page 9: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/9.jpg)
ラズパイ上のTiny-YOLOを早くしたい
9
名前 Conv2d計算順
チャネルラスト
OpenMP FP16 NEON 処理時間(秒)
C_ori - - - - - 20
C_ori_MP - - 有効 - - 計算結果不一致
C 変更 - - - - 31
c_cl 変更 有効 - - - 31
C_ori_fp16 - - - 有効 - 46
C_fp_16 変更 - - 有効 - 64
C_neon - - 有効 - 有効
今のARMはFP16サポートしてない。毎回変換が入ってる。
![Page 10: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/10.jpg)
ラズパイ上のTiny-YOLOを早くしたい
10
名前 Conv2d計算順
チャネルラスト
OpenMP FP16 NEON 処理時間(秒)
C_ori - - - - - 20
C_ori_MP - - 有効 - - 計算結果不一致
C 変更 - - - - 31
c_cl 変更 有効 - - - 31
C_ori_fp16 - - - 有効 - 46
C_fp_16 変更 - - 有効 - 64
C_neon - - 有効 - 有効 2.4
さすがNEONや!
![Page 11: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/11.jpg)
まとめ
実際に手を動かすの大事
本命はFP16+NEON
次はFPGAだ!
11
![Page 12: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/12.jpg)
おまけ:ラズパイGPUの実力
12
Tiny-YOLO
ARM+NEON
2.4秒https://www.slideshare.net/notogawa/using-raspberry-pi-gpu-for-dnn
GPU使うと大体4~5倍?
Using Raspberry Pi GPU for DNN
9/3
Deep Learning Acceleration勉強会
中村晃一様
![Page 13: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/13.jpg)
おまけ:ラズパイGPUの実力
13
VGG16
ARM+NEON
7秒Tensorflow(GPUなし)
2秒
Tiny-YOLO
ARM+NEON
2.4秒https://www.slideshare.net/notogawa/using-raspberry-pi-gpu-for-dnn
http://qiita.com/kazunori279/items/1e23679c534a49c0e837
Neonでも十分早くできるのでは?
Using Raspberry Pi GPU for DNN
Deep Learning Acceleration勉強会
![Page 14: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/14.jpg)
おまけ:FPGA(SDSOC)奮戦中
14
データ量が固定でないとバーストできない
アクセスがシーケンシャルじゃないとバーストできない
Conv2D
13x13
Conv2D
416x416
Conv2D
208x208
同じ回路をいくつもつくらないと駄目><データ量で動き変わるぞ・・・
Zynq
7020
c
w
h
DLのコンボリューションは一次元多い!
FP16のくせに、回路規模減らない回路はいらない速度でない
1サイクル1時間コースDSP 741MHz
![Page 15: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/15.jpg)
おまけ:FPGA(SDSOC)奮戦中
15
データ量が固定でないとバーストできない
アクセスがシーケンシャルじゃないとバーストできない
Conv2D
13x13
Conv2D
416x416
Conv2D
208x208
同じ回路をいくつもつくらないと駄目><
Zynq
7020
c
w
h
DLのコンボリューションは一次元多い!
FP16のくせに、回路規模減らない回路はいらない速度でない
同じ回路をいくつもつくらないと駄目><データ量で動き変わるぞ・・・
1サイクル1時間コース
Deep LearningのFPGA実装に、SDSOCはやめとけ(少なくとも今は・・・)
DSP 741MHz
![Page 16: Fpgax20170924](https://reader033.vdocuments.pub/reader033/viewer/2022052117/5a6626947f8b9a214f8b5c71/html5/thumbnails/16.jpg)
ご静聴ありがとうございました。
16