fpgax20170924

16
コキュートスでいろいろ動かしてみた話 2017/9/24 株式会社パソナテック 西日本支社 夏谷 1 HUMANWARE ® changes the world

Upload: natsutani-minoru

Post on 23-Jan-2018

1.191 views

Category:

Devices & Hardware


1 download

TRANSCRIPT

Page 1: Fpgax20170924

コキュートスでいろいろ動かしてみた話

2017/9/24

株式会社パソナテック西日本支社

夏谷

1

HUMANWARE® changes the world

Page 2: Fpgax20170924

自己紹介

夏谷実

株式会社パソナテック 株式会社パソナテック

西日本支社

TFUG KANSAI

最近は半導体関連の仕事が多い

FPGAが好き

プログラミングも好き

Deep Learningも好き

2

Page 3: Fpgax20170924

やったこと

組込向けフレームワークを使って、ラズパイや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

ラズパイ VS PYNQ

4

VGG16 Tiny-YOLO

ラズパイ 188 20

PYNQ メモリ不足で動かず 42 -> 60

単位は秒

VGG16の重みが512MBを超えているので、PYNQにロードできない。

最初42秒だったけど、Emacsインストールしたら遅くなった。

Page 5: Fpgax20170924

ラズパイ VS PYNQ

5

VGG16 Tiny-YOLO

ラズパイ 188 20

PYNQ メモリ不足で動かず 42 -> 60

単位は秒

VGG16の重みが512MBを超えているので、PYNQにロードできない。

最初42秒だったけど、Emacsインストールしたら遅くなった。

・ラズパイの方が2~3倍速い・PYNQにEmacsは入れるな。

Page 6: Fpgax20170924

ラズパイ上のTiny-YOLOを早くしたい

6

①3x3 conv2dの計算順を変える。→画処理のコンボリューションではなくフィルター方向へのコンボリューションへ

→メモリライトの数が減る。PC上では速度3倍へ②それに合わせて、データの並びを変える。(チャネルラストへ)③OpenMP

④FP16

⑤Neon+OpenMP

→社内の専門家の知識を使った

順番にやってみた

Page 7: Fpgax20170924

ラズパイ上の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

ラズパイ上の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

ラズパイ上の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

ラズパイ上の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

まとめ

実際に手を動かすの大事

本命はFP16+NEON

次はFPGAだ!

11

Page 12: Fpgax20170924

おまけ:ラズパイ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

おまけ:ラズパイ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

おまけ:FPGA(SDSOC)奮戦中

14

データ量が固定でないとバーストできない

アクセスがシーケンシャルじゃないとバーストできない

Conv2D

13x13

Conv2D

416x416

Conv2D

208x208

同じ回路をいくつもつくらないと駄目><データ量で動き変わるぞ・・・

Zynq

7020

c

w

h

DLのコンボリューションは一次元多い!

FP16のくせに、回路規模減らない回路はいらない速度でない

1サイクル1時間コースDSP 741MHz

Page 15: Fpgax20170924

おまけ: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

ご静聴ありがとうございました。

16