🎢

AIモデルの量子化

に公開

AIモデルの量子化について概念的な理解はしていましたが、具体的な手法や処理について理解がなかったためまとめました。

量子化とは

  • モデルが内部に持っている数値の表現ををより低い数値精度で表現すること。

  • モデルが内部に持っている数値とは

    • モデルの重み
    • 活性化関数の出力値
  • 数値の表現とは

    • プログラミング=型、現実の数字=整数・少数みたいなもの
      例)
      int8⇒-128~127の整数
      float16⇒4.56×10^{-5}のような形式で表される浮動小数点の16ビット表現
    • 表現できるビット数が多いほど高精度に数値を表現できるが、メモリ数も必要になる

量子化のメリット・デメリット

メリット

  • モデルサイズの縮小
    • モデルに格納される数値の表現を減らすと、モデル全体の消費メモリも減る
  • 推論速度の向上
    • PCの計算においてデータのサイズが小さくなると計算処理の回数も減らせる
  • 消費電力の削減
    • 消費メモリの削減や推論速度の向上により、学習や推論での電力消費量が減り、時間も短縮される
    • 浮動小数点を扱わなくてよくなると、演算の処理を高速化できる

デメリット

  • モデルの性能劣化の発生
    • 数値の精度を減らす=数値での表現力の低下
    • 数値のちょっとした差が推論結果に影響している場合、数値の精度を荒くすることで、差がなくなってしまい、推論結果に影響を及ぼす場合がある

量子化の手法

大分類

  • 学習後量子化
    • 動的量子化
    • 静的量子化
  • 量子化を意識した学習

学習後量子化(Post-Training Quantization, PTQ)

  • 学習済みモデルに対して量子化をする方法
  • 量子化用のデータセットを使用して、最適な量子化位置を割り出し、モデルの重みと活性化値を量子化する
    • 重みは静的な値のため、量子化後の数値精度に対してそのまま量子化する。
      重みの量子化イメージ(int8⇒int4)
    • 活性化値は動的な値(入力により変動する値)のため、少量のデータセットを使用して値の範囲を探り、値の範囲を対象に量子化する
      活性化値の量子化イメージ(int8⇒int4のMin-Maxキャリブレーション)
  • メリット
    • 既存の学習の流れや大規模学習データセットが不必要
    • 実装が比較的簡単
  • デメリット
    • 量子化誤差を学習されていないため、より低い精度に量子化したときにモデル精度が劣化しやすい
  • PTQの種類
    • 動的量子化(Dynamic Quantization)
      • 事前に実施する量子化は重みのみ
      • 活性化値は推論時に入力ごとに量子化をする
      • 量子化用データセットが不必要になるが、静的量子化ほどの速度向上は期待できない
    • 静的量子化(Static Quantization)
      • 事前に重みと活性化値を量子化する
      • 量子化用データセットが必要だが、動的量子化より高い推論性能を発揮する

量子化を意識した学習(Quantization-Aware Training, QAT)

  • 目的の数値精度になるように意図的に学習させる方法
  • 目的の精度に適応したモデル内のデータ処理やパラメータ更新の処理をモデルに挿入し、学習を実施する
  • メリット
    • モデルが量子化誤差を知ったうえで学習するため、より低い精度の量子化においてPTQよりも精度が高い傾向がある
  • デメリット
    • 実装が複雑化する
    • 学習時間や計算コストが増大する

その他量子化に関連した技術・知見

  • 混合精度
    • 高精度に表現したい部分と表現力が必要ない部分で数値精度を最適化する
    • ハードウェアが混合精度計算可能でないと使えない
  • 外れ値処理
    • SmoothQuant
    • AWQ(Activation-aware Weight Quantization)  等
  • 量子化用データセット(キャリブレーションデータセット)について
    • 推論時に入力されるデータとの統計的特性が類似していないといけない
    • 一般的には100~500データくらい
  • キャリブレーション方法 (量子化範囲の探索方法)
    • 最小値・最大値(Min-Max)キャリブレーション
    • エントロピー(KLダイバージェンス)キャリブレーション
    • パーセンタイルキャリブレーション           等

量子化の良し悪しの評価

  • 量子化アプローチに対して直接的に評価する方法はない
  • 量子化前後のタスク由来の評価指標を使用し、同じデータセットでの精度差や推論結果を見て確認する方法しかない

最後に

量子化は軽量化に大きく貢献する一方でモデル性能劣化を引き起こすことがある。
軽量化とモデル性能を両立するにはモデルや推論データ(タスク)にあった形で調整が必要となるため、各手法の特性を把握し、利用することが重要。

ヘッドウォータース

Discussion