$30 off During Our Annual Pro Sale. View Details »

ML_Loft_4_エッジ推論.pdf

 ML_Loft_4_エッジ推論.pdf

Shintarou Okada

July 19, 2019
Tweet

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. モデル

    View Slide

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

    View Slide

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

    View Slide

  19. モデル

    View Slide

  20. 拡大

    View Slide

  21. 拡大
    FPN
    BboxHead
    MaskHead
    ResNet50

    View Slide

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

    View Slide

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

    View Slide

  24. モデルの計算量を算出してくれる
    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')

    View Slide

  25. 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

    View Slide

  26. 計算量

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. 拡大
    FPN
    BboxHead
    MaskHead
    ResNet50

    View Slide

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

    軽量化

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide