Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Yuji Tokuda
January 22, 2020

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

Yuji Tokuda

January 22, 2020
Tweet

More Decks by Yuji Tokuda

Other Decks in Technology

Transcript

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

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

    2bit, 4bit, 8bit • ハードウェアなど周辺動向(論⽂以外)と突き合わせたい Training and Inference with Integers in Deep Neural Networks https://arxiv.org/abs/1802.04680
  3. 論⽂ • 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
  4. 主なエッジ推論最適化 • 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) • 強化学習や遺伝的アルゴリズムを⽤いたモデルネットワーク・パラメータの最適化
  5. 主なエッジ推論最適化 • 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量子化)
  6. 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
  7. 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
  8. 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
  9. Post-training vs Aware training • 精度(変換前からの劣化の⼩ささ): Post < Aware •

    処理のシンプルさ: Post >>> Aware • Fine-tuningを⾏うためのデータセットが必要 • Fake Quantレイヤの追加が必要
  10. 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
  11. 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
  12. 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がターゲット(論文要確認)
  13. 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
  14. 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
  15. 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決定
  16. 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
  17. Quantization for TVM Quantization for TVM (TVM Conference, Dec 12th

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

    type in auto tensorcore https://github.com/apache/incubator-tvm/pull/4546
  19. 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いける」に実装が追いついてきた