Raspberry PiのVideoCore GPUを用いた
Deep Learning推論の高速化
Idein株式会社代表取締役 中村晃一

自己紹介• 中村晃一• Idein Inc. 創業者・代表取締役• https://nineties.github.io/• 東京大学情報理工学系理学部情報科学科卒• 最適化コンパイラ技術を研究• 2015年3月に後期博士課程を退学しIdeinを創業

2

会社概要
社名

Idein Inc. (読み: イデイン)

設立日

2015年4月7日

所在地

東京都千代田区

ウェブサイトhttps://idein.jp

資本金（資本剰余金含む）

約12.5億円

役員

CEO/創業者
CTO/創業者
CFO
社外取締役
社外監査役

従業員数

主な外部株主

中村晃一
山田康之
小林大悟
上前田直樹
村岡竜介

33名(アルバイトを除く)46名(アルバイトを含む)(2019年8月時点）
グローバル・ブレイン
アイシン精機博報堂ＤＹベンチャーズ
Sony Innovation Fund by IGV
ソニーフィナンシャルベンチャーズ
DG Lab©2019, Idein Inc. All rights reserved.

• ビジョン
実世界のあらゆる情報をソフトウェアで扱えるようにする• 技術
組み込みデバイス向けのDeep Learningの高速化技術

• 事業
1.

エッジコンピューティングプラットフォーム, Actcast

2.

自動車開発での協業

3.

(コンパイラのライセンス販売)

3エッジコンピューティングアーキテクチャに基づくシステム開発と運用の為の開発者向けクラウドサービス
1. 安価なデバイスへの深層学習モデルの搭載
2. 多数のデバイスとソフトウェアの遠隔運用

｛;｝

｛;｝

https://actcast.io©2019, Idein Inc. All rights reserved.

4

Raspberry PiでのDeep Learning推論高速化

youtube.com/c/IdeinInc

弊社の取組の特長●変換後モデルは元のモデルと数学的に等価● 32-bit ﬂoatのまま● 量子化なし● Pruningなし●従って精度低下なし✔ 今あるモデルをそのままデバイスに載せることが出来る

速度・消費電力
Task

1000-class
Image Classification

Face Detection

Multi Person
Pose Estimation

Style Transfer

Resolution

224x224

192x192

224x224256x256

ModelDevice

Frames/sec(includes display renderingtime)Powerconsumption(excludes power for display)

MobileNet V2 α=1.0 trained on
ImageNet dataset
Top-1: 71.8%
Top-5: 91.0%

Pi 3

10.1fps

2.8W

Pi 0

8.5fps

2.1W

Our custom model based on
MobileNet V2 SSD trained on Open
Images V4.
mAP: 66.3%

Pi 3

12.5fps

3.6W

Pi 0

7.8fps

1.9W

Our custom model based on Pose
Proposal Network trained on MPIIdataset.

Pi 3

9.5fps

2.7W

Pi 06.6fps

2.0W

Pi 3

4.3fps3.2W

Pi 0

3.3fps2.0W

Our custom model based on Fast
Neural Style

The speed of face detection and pose estimation depends on the number of objects in a frame.
This benchmark is taken with one object.
7

VideoCoreとはBroadcom製のマルチメディアプロセッサ。Raspberry Piシリーズ等に搭載• 初代Raspberry Pi～Raspberry Pi 3 Model B+: VideoCore IV• Raspberry Pi 4～: VideoCore VI•

Pi 4はまだ日本では利用できないので未検証。本日は触れません。

性能• Pi Zeroの場合、GPUの方が約14.4倍も理論性能が高い• Pi 3の場合CPUの方が性能が高いが、GPUの方が熱対策が易しい、CPUを他処理に空けたい等の理由で、GPUも活用したい。

DeviceCPU

BCM2835

BCM2837

Pi Zeroなど

Pi 3など1GHz single-core
ARM1176JZF-S

1.2GHz 64-bit
quad-core ARM
Cortex-A53

GPU

VideoCore IV

CPU peak performance

2Gflops

38.4Gflops

GPU peak performance

28.8Gflops

28.8Gflops

ソフトウェアスタック
Deep leaning frameworks

Designed and Developerd byModel Converters

nnoirComputation Graph Representation

Graph Compiler

runtime library

Writing CNN kernels
Doing tests and optimization

py-videocore

Pure-GPU
Code Generation

Neural Network API
No-runtime
Code Generation

libnn
qdnn

VC4

AVX/SSENEONCPUVideoCoreを使う為のSW
拙作のpy-videocoreを使ってVideoCore用のプログラムを書く事が出来ます。

VideoCore IVのドキュメントは公開されている● BroadcomからRaspbery Pi財団への誕生日プレゼント

行列乗算のみGPU化※ラズパイの GPU周波数に対する誤解があり、ここ以前はオーバークロック状態 (400MHz)で測っているケースがありました。
ここ以後はデフォルト周波数 (300MHz)での値です。

もろもろのGPU化や特定計算用の特化コード用意など
レイヤー融合やメモリ転送最適化など

golf, メモリ最適化
タイリング最適化など
いろいろ

pure GPU化
depthwise, pointwise改善
メモリ管理改善などいろいろ

googlenet
top1:68.7%, top5:88.9%

mobilenet v1
top1:70.9%, top5:88.9%

mobilenet v2
top1:71.8%, top5:91.0%

VideoCore IVのアーキテクチャ●

16wayのSIMDコアが4x3個
○
○

●
●
●

●

fp32の乗算,加算
Special function unit

HostからGPUへは
L2 Cache経由とDMA
GPUからHostへはDMAのみ
Register AllocationやScheduling等のハードウェア機能はない
よくある感じの(ちょっと昔の)アーキテクチャ
Using Raspberry Pi GPU for Deep Neural Networkより

CNNライブラリ: qdnn
● py-videocoreを用いてCNNのカーネル群を実装● 数学的には1つでも、無数の実装のバリエーションがあり、最適実装は1つではない

アルゴリズムテンソルのレイアウト

ブロック化

DirectIm2colWinogradFFT

NHWC ?
NCHW ?
NHCW ?

処理単位の形状をどうするのか？

非常に多くのカーネル●

こんな感じに(一番多いところを取ってますが)※python利用はカーネルのコード生成の為。
コンパイラ自体はHaskell実装。

Graph Compiler●複数のレイヤをマージする●アルゴリズムを選択する● Tensorのshapeなどによって最適な実装が変わる● あらかじめweightの変換等も必要● 一部はruntimeに決定●など

レイヤー融合
Convolution
Convolution
Batch Normalization
事前にWeight同士の積、和を計算しておいて一つにまとめてしまう
Convolution
Convolution+ReLU
ReLU
Convolutionの最内ループにReLUをインライン化するなどアルゴリズム●

2D Convolutionのアルゴリズム○

入力サイズ=HxW, フィルタサイズ=3x3の場合

手法

概要

演算回数

メモリ使用量備考

Direct定義通り--

メモリが弱いプロセッサだとこれが強い場合がある

im2col

行列乗算

同じ

入力が9倍

非常によく使われる

winograd

高速乗算

4/9程度に減少

Weightが16/9倍よく使われる。Separable Convに弱い。

FFT

高速乗算

最大2/9程度に減少

WeightがHW/9倍複素演算が必要。あまり使われない。

●

詳しくはConvolutionの数理とアルゴリズム

ループ最適化●

古典的な最適化手法。良く効く。奥が深い。
○
○
○
○

●

ループアンローリング
ループ交換
ソフトウェアパイプライニングなど

ハードウェア特性を意識する事が必要
○
○
○
○
○

アクセス順序アラインメント
レジスタの数
ハードウェアパイプラインの構造など

メモリレイアウト(講演時、以下の図が誤っていましたので修正しました)
CHW

テンソルをメモリ上にどう配置するか？
○ 以下は2Dイメージの場合の絵○ 実際はもう一次元(N,バッチ)ある●

1 2 3 4 5 6 7 8

アドレス

HWC

C
W

12345678

1 2 3 45 6 7 8HCW
1 2 3 4H

5 6 7 8など

並列化
●
●
●

SIMD
マルチコア…
N

C

W

H

●

どこでどう並列化するのか？

テンソルのshapeによって最適実装は変わる●

長さ16のSIMD演算器があったとして、どう使う？
あるレイヤ: 224x224の3チャンネル
224

あるレイヤ: 7x7の1280チャンネル

例えばこの辺の16pixelを計算同じコードだとここの計算が無駄

167

フィルタサイズでも最適実装は変わる
33

11

Pure-GPU化●弊社史上最も異常な最適化●普通● 1 layerずつカーネルを呼び出す●Pure-GPU実装● 1度ioctlを呼び出すと、CNNを全部実行してから戻ってくる● GPU上でコントロールフローを実行する方法を発明

なぜラズパイ？

実は産業用で使われ始めている“2018年6月の時点で、月産される50万～60万台のうち、35万～40万台、つまり約60％が産業用途向けとなっているという。”
EETimes Japan, 「ラズパイ」最初の10年、今後の10年
http://eetimes.jp/ee/articles/1807/11/news042.html

安価である

Raspberry Pi 3 Model B+

Raspberry Pi Zero W

$35

$10

SoMがある● SO-DIMM 200pin ソケットに差して利用

SOC

価格

Compute Module 1

Pi Zeroと同じ$30

Compute Module 3

Pi 3と同じ$30

Compute Module 3 Lite

Pi 3と同じ$25
Ｉｄｅｉｎでも過去に利用供給保証がある✔ 以下は、少なくとも2023年まで入手可能

Raspberry Pi 3 Model B+

Compute Module 1
Compute Module 3
Compute Module 3 Lite

PoEが可能● PoE Hatを使うとLANケーブル1本で給電・通信が可能✔ LANケーブルは最長100m✔ 配線工事に資格が不要

カメラが使える• 公式カメラモジュール✔ 800万画素✔ 赤外線カメラモジュールもある• 市販のUSBカメラも使える

$30

$30

ハードウェアエコシステム● 様々なディスプレイ
● 様々なケース● HAT● 様々なセンサー● LTE接続● GPS● 太陽光発電● などなどNEC Display Solutions

Revolution Pi