fpgax20170924
TRANSCRIPT
コキュートスでいろいろ動かしてみた話
2017/9/24
株式会社パソナテック西日本支社
夏谷
1
HUMANWARE® changes the world
自己紹介
夏谷実
株式会社パソナテック 株式会社パソナテック
西日本支社
TFUG KANSAI
最近は半導体関連の仕事が多い
FPGAが好き
プログラミングも好き
Deep Learningも好き
2
やったこと
組込向けフレームワークを使って、ラズパイや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
ラズパイ VS PYNQ
4
VGG16 Tiny-YOLO
ラズパイ 188 20
PYNQ メモリ不足で動かず 42 -> 60
単位は秒
VGG16の重みが512MBを超えているので、PYNQにロードできない。
最初42秒だったけど、Emacsインストールしたら遅くなった。
ラズパイ VS PYNQ
5
VGG16 Tiny-YOLO
ラズパイ 188 20
PYNQ メモリ不足で動かず 42 -> 60
単位は秒
VGG16の重みが512MBを超えているので、PYNQにロードできない。
最初42秒だったけど、Emacsインストールしたら遅くなった。
・ラズパイの方が2~3倍速い・PYNQにEmacsは入れるな。
ラズパイ上のTiny-YOLOを早くしたい
6
①3x3 conv2dの計算順を変える。→画処理のコンボリューションではなくフィルター方向へのコンボリューションへ
→メモリライトの数が減る。PC上では速度3倍へ②それに合わせて、データの並びを変える。(チャネルラストへ)③OpenMP
④FP16
⑤Neon+OpenMP
→社内の専門家の知識を使った
順番にやってみた
ラズパイ上のTiny-YOLOを早くしたい
7
名前 Conv2d計算順
チャネルラスト
OpenMP FP16 NEON 処理時間(秒)
C_ori - - - - - 20
C_ori_MP - - 有効 - -
C 変更 - - - -
c_cl 変更 有効 - - -
C_ori_fp16 - - - 有効 -
C_fp_16 変更 - - 有効 -
C_neon - - 有効 - 有効
いろいろやってみた。結果は?
ラズパイ上の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 - - 有効 - 有効
データの並び替え、計算順序の変更では早くならない。実測大事。
ラズパイ上の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サポートしてない。毎回変換が入ってる。
ラズパイ上の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や!
まとめ
実際に手を動かすの大事
本命はFP16+NEON
次はFPGAだ!
11
おまけ:ラズパイ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勉強会
中村晃一様
おまけ:ラズパイ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勉強会
おまけ:FPGA(SDSOC)奮戦中
14
データ量が固定でないとバーストできない
アクセスがシーケンシャルじゃないとバーストできない
Conv2D
13x13
Conv2D
416x416
Conv2D
208x208
同じ回路をいくつもつくらないと駄目><データ量で動き変わるぞ・・・
Zynq
7020
c
w
h
DLのコンボリューションは一次元多い!
FP16のくせに、回路規模減らない回路はいらない速度でない
1サイクル1時間コースDSP 741MHz
おまけ:FPGA(SDSOC)奮戦中
15
データ量が固定でないとバーストできない
アクセスがシーケンシャルじゃないとバーストできない
Conv2D
13x13
Conv2D
416x416
Conv2D
208x208
同じ回路をいくつもつくらないと駄目><
Zynq
7020
c
w
h
DLのコンボリューションは一次元多い!
FP16のくせに、回路規模減らない回路はいらない速度でない
同じ回路をいくつもつくらないと駄目><データ量で動き変わるぞ・・・
1サイクル1時間コース
Deep LearningのFPGA実装に、SDSOCはやめとけ(少なくとも今は・・・)
DSP 741MHz
ご静聴ありがとうございました。
16