量子化どこまでできる? #tfug / Edge device quantization

00832883f7309c0f1ad832815bf97010?s=47 Yuji Tokuda
January 22, 2020

量子化どこまでできる? #tfug / Edge device quantization

00832883f7309c0f1ad832815bf97010?s=128

Yuji Tokuda

January 22, 2020
Tweet

Transcript

  1. 量⼦化どこまでできる? 2020/01/22 NN論⽂を肴に酒を飲む会 #10

  2. profile.yml name: '徳田 祐二(トクダ ユウジ)' company: 'OPTiM Corporation' twitter: '@dakuton'

    keyword: - '時系列データ分析' - 'うどん' - '日本酒' 1 2 3 4 5 6 7 8 9 10
  3. 読んだ⽬的 • 「量⼦化」の中で実ライブラリで使えるものを明らかにする • weight, activation, gradient, error • 1bit(XNOR),

    2bit, 4bit, 8bit • ハードウェアなど周辺動向(論⽂以外)と突き合わせたい Training and Inference with Integers in Deep Neural Networks https://arxiv.org/abs/1802.04680
  4. 論⽂ • Quantization and Training of Neural Networks for Efficient

    Integer- Arithmetic-Only Inference • https://arxiv.org/abs/1712.05877 • Quantizing deep convolutional networks for efficient inference: A whitepaper • https://arxiv.org/abs/1806.08342 • Post training 4-bit quantization of convolutional networks for rapid- deployment • https://arxiv.org/abs/1810.05723 TensorFlow whitepaper NeurIPS 2019
  5. 元ネタ • エッジデバイス推論向けのTensorFlow最適化を掘り下げてみる #GoogleMLSummit • https://tech-blog.optim.co.jp/entry/2019/07/12/173000

  6. エッジ推論のメリット・課題 • メリット(クラウド実⾏と⽐較) 1. 推論リクエスト通信によって発⽣するlatencyを抑える 2. ネットワークから切断された環境でも推論可能 3. プライバシー配慮データが必要な際、アップロードなしで推論可能 •

    課題(4つのリソース制約に対処) 1. プロセッサ(CPUやGPUなど)が限られている 2. メモリが限られている 3. バッテリー消費 4. モデルサイズ
  7. 主なエッジ推論最適化 • Post-training quantization • 学習済みモデルのもつweightやactivationを少ないbit数の整数表現に変換 • Quantization-aware training(During training)

    • モデルの⽣成時にあらかじめ量⼦化することを前提に学習 • Low-order precision floating point • 整数ではなく、FP32->FP16など少ない実数表現に変換 • Compression • Pruning(ネットワークのweightが0となる数を増やして計算短縮)やファイル圧縮などを組み合 わせて、実⾏速度とモデルサイズ削減のバランスをとる • Binarization(Extremely low-bit quantization) • 2値化(bit数が整数よりさらに⼩さい量⼦化)表現に置き換えて、論理演算可能にすることで⾼ 速化 • Neural Architecture Search(NAS) • 強化学習や遺伝的アルゴリズムを⽤いたモデルネットワーク・パラメータの最適化
  8. 主なエッジ推論最適化 • Post-training quantization • 学習済みモデルのもつweightやactivationを少ないbit数の整数表現に変換 • Quantization-aware training(During training)

    • モデルの⽣成時にあらかじめ量⼦化することを前提に学習 • Low-order precision floating point • 整数ではなく、FP32->FP16など少ない実数表現に変換 • Compression • Pruning(ネットワークのweightが0となる数を増やして計算短縮)やファイル圧縮などを組み合 わせて、実⾏速度とモデルサイズ削減のバランスをとる • Binarization(Extremely low-bit quantization) • 2値化(bit数が整数よりさらに⼩さい量⼦化)表現に置き換えて、論理演算可能にすることで⾼ 速化 • Neural Architecture Search(NAS) • 強化学習や遺伝的アルゴリズムを⽤いたモデルネットワーク・パラメータの最適化 今回の紹介範囲(INT量子化)
  9. • Post training, Quantization-aware trainingどちらも clippingを利⽤している • -∞〜∞の範囲からmax範囲を決定(ReLUなど) • INT8であれば256種類に収まるようにFP32を丸める

    量⼦化イメージ
  10. • Post-training quantization: range決め打ちで決定 • Quantization-aware training: fine tuningによる解析的なrange 決定

    Post-training or Quantization-aware training
  11. • Post-training quantization: range決め打ちで決定 • Quantization-aware training: fine tuningによる解析的なrange 決定

    Post-training or Quantization-aware training 精度低下の原因に
  12. Quantization-aware training Quantization and Training of Neural Networks for Efficient

    Integer-Arithmetic-Only Inference https://arxiv.org/abs/1712.05877 forward: FakeQuant backward: FP32
  13. Quantization-aware training Quantization and Training of Neural Networks for Efficient

    Integer-Arithmetic-Only Inference https://arxiv.org/abs/1712.05877 forward backward forward: FakeQuant backward: FP32
  14. Quantization-aware training Linear weight FP32 bias FP32 x FP32 y

    FP32 Linear weight INT8 bias FP32 x INT8 y INT8 weight quantization activation quantization Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference https://arxiv.org/abs/1712.05877
  15. Post-training vs Aware training • 精度(変換前からの劣化の⼩ささ): Post < Aware •

    処理のシンプルさ: Post >>> Aware • Fine-tuningを⾏うためのデータセットが必要 • Fake Quantレイヤの追加が必要
  16. TensorFlowによる量⼦化 Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only

    Inference https://arxiv.org/abs/1712.05877 • TFLiteConverterによる変換 • Whitepaperでは3種類(a,b,d) • TensorFlow 2.xドキュメントでは4種類(a,b,c,d) • Approaches 1. Post Training Quantization a. Weight Quantization: Dataset不要 b. Full integer quantization: Datasetで分布調整 c. Float16 quantization: 半精度 2. Quantization-Aware Training d. weight + activation: Datasetによるfine-tuning
  17. TensorFlowによる量⼦化 Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only

    Inference https://arxiv.org/abs/1712.05877 • TFLiteConverterによる変換 • Whitepaperでは3種類(a,b,d) • TensorFlow 2.xドキュメントでは4種類(a,b,c,d) • Approaches 1. Post Training Quantization a. Weight Quantization: Dataset不要 b. Full integer quantization: Datasetで分布調整 c. Float16 quantization: 半精度 2. Quantization-Aware Training d. weight + activation: Datasetによるfine-tuning
  18. PyTorchによる量⼦化 • PyTorch 1.3からExperimental Support開始 • パフォーマンス(FP32->INT8) 1. 1/4 in

    the model size 2. 1/4 in memory bandwidth requirements 3. 2-4x faster (Hardware support for INT8 computations) • Approaches 1. Dynamic Quantization: weight, Dataset不要 2. Post Training Quantization: weight + activation, Datasetで分布調整 3. Quantization-Aware Training: weight + activation, Datasetによるfine-tuning https://pytorch.org/blog/pytorch-1-dot-3-adds-mobile-privacy-quantization-and-named-tensors/#quantization- experimental LSTMがターゲット(論文要確認)
  19. INT8よりbit数を短くできるか? • 論⽂としては存在する • Post training 4-bit quantization of convolutional

    networks for rapid-deployment • https://arxiv.org/abs/1810.05723 • ただし速度が向上するか?は利⽤プロセッサやフレームワーク次第 • 例えばARM NEONのSIMD命令を利⽤してINT8演算を並列化している • https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/kernels/in ternal/optimized
  20. Analytical Clipping for Integer Quantization (ACIQ) + Per-channel bit allocation

    Post training 4-bit quantization of convolutional networks for rapid-deployment https://arxiv.org/abs/1810.05723
  21. Analytical Clipping for Integer Quantization (ACIQ) + Per-channel bit allocation

    Post training 4-bit quantization of convolutional networks for rapid-deployment https://arxiv.org/abs/1810.05723 post trainにて解析的にrange決定
  22. Analytical Clipping for Integer Quantization (ACIQ) + Per-channel bit allocation

    Post training 4-bit quantization of convolutional networks for rapid-deployment https://arxiv.org/abs/1810.05723 ResNet Post Training • weight 4bit • activation 4bit
  23. Quantization for TVM Quantization for TVM (TVM Conference, Dec 12th

    2018) https://sampl.cs.washington.edu/tvmconf/slides/11-Ziheng-Jiang.pdf FPGA向け?
  24. TVM TensorCore INT4/INT1対応 [CODEGEN] Support cuda tensorcore subbyte int data

    type in auto tensorcore https://github.com/apache/incubator-tvm/pull/4546
  25. TVM TensorCore INT4/INT1対応 [CODEGEN] Support cuda tensorcore subbyte int data

    type in auto tensorcore https://github.com/apache/incubator-tvm/pull/4546 • NVIDIA Turing世代 • TensorCore INT4/INT1を試験的にサポート • ただ、cuBLAS(⾏列演算ライブラリ)はINT8まで • CUTLASS(INT/FP混合演算向けライブラリ) 1.1以降で置き換 える必要あり • NVIDIAに先⾏してTVMがGPU INT4サポートしてきた • つまり「理論上INT4いける」に実装が追いついてきた
  26. まとめ • 現時点(2020/01/22)では • 理論上はResNetのINT4量⼦化で精度確保可能 • TensorFlow/PyTorchはINT8が速度性能限界 • 「理論上INT4いける」に実装が追いつくものが出てきた