Slide 1

Slide 1 text

岡田真太郎 - Preferred Networks エンジニア エッジ推論の前にやること

Slide 2

Slide 2 text

エッジ推論の速度を決定する3つの要素 入力画像 サイズ デバイス モデル FPN BboxHead MaskHead ResNet50

Slide 3

Slide 3 text

モデル INPUT 計算量 入力画像サイズ

Slide 4

Slide 4 text

モデル INPUT モデル INPUT INPUT 計算量 0.7倍 モデルそのまま タテ・ヨコ 0.7倍 するだけで 入力画像サイズ

Slide 5

Slide 5 text

INPUT INPUT INPUT 計算量 0.7倍 計算量 半分! モデルそのまま タテ・ヨコ 0.7倍 するだけで 入力画像サイズ モデル モデル

Slide 6

Slide 6 text

入力画像サイズ INPUT INPUT INPUT 0.7倍 精度は 大丈 夫? 計算量 半分!

Slide 7

Slide 7 text

逆に聞くけどそのタスクに精度 と速度はどれくらい必要なんで すか??????????? エッジ推論の前に,さっさとハイエンドのデバイス (例えばNVIDIAのGPU)使ってわざと精度落とし たり速度遅くしてモデルの必要性能の下限を明ら かにしましょう!!

Slide 8

Slide 8 text

精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要 精度 速度 タスクに必要 な精度と速度

Slide 9

Slide 9 text

精度 速度 精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要

Slide 10

Slide 10 text

この領域に あればタス クがこなせる 精度 速度 精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要

Slide 11

Slide 11 text

精度 速度 オリジナルのモデル on NVIDIA GPU 精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要

Slide 12

Slide 12 text

精度 速度 デバイスを変えると 速度が落ちる 精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要

Slide 13

Slide 13 text

精度 速度 入力画像サイズで 精度と速度を調整 精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要

Slide 14

Slide 14 text

精度 速度 入力画像サイズで 精度と速度を調整 精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要 再学習の 必要なし 手軽

Slide 15

Slide 15 text

精度 速度 精度と速度はトレードオフ エッジ推論は原則として精度か速度が落ちる どれくらいの精度と速度が必要なのかを見極めるのが重要 モデルを修正するとグ ラフが全体的に右下に 移動する

Slide 16

Slide 16 text

モデル

Slide 17

Slide 17 text

モデル ChainerCVの MaskRCNNFPNResNet50 (= インスタンスセグメン テーションのモデル)

Slide 18

Slide 18 text

ChainerCVの MaskRCNNFPNResNet50 (= インスタンスセグメン テーションのモデル) 画像は https://www.oreilly.com/ideas/introducing-capsule-networks から引用

Slide 19

Slide 19 text

モデル

Slide 20

Slide 20 text

拡大

Slide 21

Slide 21 text

拡大 FPN BboxHead MaskHead ResNet50

Slide 22

Slide 22 text

FPN BboxHead 拡大 MaskHead ResNet50 どの部分の計算 量が多いのか?

Slide 23

Slide 23 text

モデル 拡大 FPN BboxHead MaskHead ResNet50 どの部分の計算 量が多いのか? 掛け算の総量と考えればOK

Slide 24

Slide 24 text

モデルの計算量を算出してくれる Chainer Computational Cost https://github.com/belltailjp/chainer_computational_cost import chainer import numpy as np from chainer_computational_cost import ComputationalCostHook net = chainer.links.VGG16Layers() x = np.random.random((1, 3, 224, 224)).astype(np.float32) with chainer.no_backprop_mode(), chainer.using_config('train', False): with ComputationalCostHook(fma_1flop=True) as cch: y = net(x) cch.show_report(unit='G', mode='md')

Slide 25

Slide 25 text

https://github.com/belltailjp/chainer_computational_cost import chainer import numpy as np from chainer_computational_cost import ComputationalCostHook net = chainer.links.VGG16Layers() x = np.random.random((1, 3, 224, 224)).astype(np.float32) with chainer.no_backprop_mode(), chainer.using_config('train', False): with ComputationalCostHook(fma_1flop=True) as cch: y = net(x) cch.show_report(unit='G', mode='md') Markdown形式で表を 出してくれる モデルの計算量を算出してくれる Chainer Computational Cost

Slide 26

Slide 26 text

計算量

Slide 27

Slide 27 text

計算量 Convolutionがモデル 全体の計算量を決める ことが分かる

Slide 28

Slide 28 text

Convの中でも一部が多くの計算量を占めている たった2つのConvがモ デル全体の計算量の 1/3以上を占めている MaskHead FPN ResNet50

Slide 29

Slide 29 text

Convolution Layerの計算量 入力チャンネル数: N 出力チャンネル数: N kernelサイズ: k 入出力特徴マップサイズ: (H, W)

Slide 30

Slide 30 text

Convolution Layerの計算量 入力チャンネル数: N 出力チャンネル数: N kernelサイズ: k 入出力特徴マップサイズ: (H, W) 入力画像サイズが 効いてくる部分

Slide 31

Slide 31 text

Convolution Layerの計算量 入力チャンネル数: N 出力チャンネル数: N kernelサイズ: k 入出力特徴マップサイズ: (H, W) 約0.7倍

Slide 32

Slide 32 text

Convolution Layerの計算量 入力チャンネル数: N 出力チャンネル数: N kernelサイズ: k 入出力特徴マップサイズ: (H, W) 計算量 半分! 約0.7倍

Slide 33

Slide 33 text

拡大 FPN BboxHead MaskHead ResNet50

Slide 34

Slide 34 text

拡大 FPN BboxHead MaskHead ResNet50 軽量化 全体からすると 約25%の削減 もちろん精度は変わ る 軽量化

Slide 35

Slide 35 text

モデルまとめ モデルのConvのチャンネル数を減らすと 計算量が減る 重たいConvはChainer-computational-costで調 べられる 入力画像サイズの調整と比べると労力が かかる

Slide 36

Slide 36 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須

Slide 37

Slide 37 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須 計算量/秒 のこと モデルによって異なることに注意

Slide 38

Slide 38 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須 計算量/秒 のこと モデルによって異なることに注意 モデルの選定では計算量だけでなく 対象のデバイスで実行した場合の 効率にも注意する必要がある

Slide 39

Slide 39 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須 つまり,入力画像サイズやバッチ サイズが大きい / Convのチャン ネル数が大きいモデルの場合

Slide 40

Slide 40 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須 裏を返すと,計算量が少ない場 合は演算器が無駄になる 特にメモリ転送の比率が大きい モデルでは効率が悪い (ShuffleNet, MobileNet系)

Slide 41

Slide 41 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須

Slide 42

Slide 42 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須 いわゆるIntel Graphics Intel CPUにたいてい付属し ているIntel製のGPU Intel製の推論フレームワークOpenVINOが使える

Slide 43

Slide 43 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須

Slide 44

Slide 44 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPはint8化が必須 複数のチップ,ARMのCPUと GPUとDSPが載ったSoC CPUでも推論はできるが非力

Slide 45

Slide 45 text

デバイス • NVIDIA GPUは計算量が多いなら効率 が良い • Intel GPUがわりと速い • QualcommのSnapdragonはGPUと DSPが使えて,DSPではint8化が必須 いわゆる量子化,精度が保てるかは モデル次第 単純なモデルではほぼ問題ない 量子化用のツールはSNPEに付属

Slide 46

Slide 46 text

使いたいチップのメーカーが出しているものを使え ば大抵OK • NVIDIAならTensorRT • IntelならOpenVINO(a.k.a opencv/dldt) • QualcommならSNPE オペレータ間を埋める必要があれば Menoh/Chainer-Compilerを使う 推論用のフレームワークは?

Slide 47

Slide 47 text

使いたいチップのメーカーが出しているものを使え ば大抵OK • NVIDIAならTensorRT • IntelならOpenVINO(a.k.a opencv/dldt) • QualcommならSNPE オペレータ間を埋める必要があれば Menoh/Chainer-Compilerを使う 推論用のフレームワークは? チップの性能を一番引き出せるのはその チップメーカー 手元でやる小手先の最適化はほぼ無意味

Slide 48

Slide 48 text

• カンタンにできて効果のあることから始めよう • 入力サイズの調整は手軽に精度と速度の調節 がしやすい • モデルはConvのチャンネルを減らすと計算量 が減る • モデルによって実行効率が異なることに注意 • 些細な最適化にこだわるな(フットワークが重くなる, 製品の価値に結びつかない,どうせ無駄になる) 全体のまとめ