【2022】ディープラーニングの「量子化」とは?動的・静的量子化をわかりやすく解説

  • このエントリーをはてなブックマークに追加
ディープラーニングの量子化

ディープラーニングは次世代のAI開発を支える重要な技術ですが、その反面、課題となっているのが運用負担の大きさです。高度な処理能力を実現するためには相応のマシンスペックが必要であり、現在はまだ小型のPCなどで十分なパフォーマンスを確保することはできません。

そこで注目されているのが、モデルの軽量化やモデル圧縮と呼ばれるアプローチです。量子化をはじめとするさまざまな手法により、ディープラーニングの演算処理の負担を軽くしようという試みが行われています。

今回は、ディープラーニングの軽量化手法の一種である量子化について解説します。

エッジAIの活躍と課題

ディープラーニングへの注目度が高まる中、それと深く関連している技術が「エッジAI」です。エッジAIとは、各種センサーや測定機器など、データの収集に使われるハードウェアに内蔵されているAIを指します。

従来のセンシング技術では、センサーや測定器がデータを収集し、ネットワークを介してクラウドデータサーバーにデータを送信し、クラウド上でデータを分析するという方法が一般的でした。しかし、エッジAIはデータを送信する前に、収集したデータを内蔵のAIを使って現場で分析を行うことができるため、情報収集を効率的に行うことができます。

エッジAIが評価される理由

クラウド上のデータサーバーと現場のハード上でデータを処理することの最大の違いは、通信量を抑えられるという点です。

従来のセンサーなどでは、収集したデータをそのままサーバーに送信していたため、その情報量は膨大なものとなり、高速通信環境が保証されていなければ、通信速度に難が出る可能性がありました。

しかし、エッジAIであれば、センサー上であらかじめ分析の上、必要なデータのみをサーバーに送信するので通信量は全体で見れば小さくなり、通信コストの削減や電波の不安定な場所での運用も可能となります。また、データを第三者に傍受されるリスクも小さくなるため、セキュリティの向上にも役立つことが強みです。

エッジAIの課題

そんな便利な技術であるエッジAIですが、現状では運用面での課題も抱えています。

最大の問題は、適切なAI運用をできるだけのマシンスペックを、小さなセンサーに搭載できるレベルでは実現が難しいという点です。コンピュータの小型化は日進月歩ですが、ディープラーニングのような高度な演算処理を行うためには、まだまだ物理的なサイズの制約が大きく、小型デバイスでの実現は難しいとされています。

そのため、エッジAIを実装する上では大きさの面での自由度を確保できず、運用できるタイミングは限られています。

モデルの軽量化

そんなエッジAIの問題を解決するために注目されているのが、モデルの軽量化と呼ばれる手法です。モデル圧縮とも呼ばれるこの方法は、そもそもの計算量の総量を小さくしたり、メモリの使用量を削減したりすることを可能にするアプローチです。

計算スピードを従来よりも高速化できるため、センシング技術には欠かせないリアルタイムでの情報収集と分析を実現する上では、非常に重要な役割を果たします。小さいデバイスでも十分な計算スピードが得られるため、デバイスを開発・生産するコストの削減や、量産の負担を削減できることから、地球環境への負荷を抑えられる効果も期待されています。

ディープラーニングの量子化とは

モデルの軽量化にはいくつかの手法がありますが、ここではその一種である量子化(Quantization)について解説します。

ディープラーニングの量子化とは、AIの学習モデルに含まれるパラメータをより少ないビット数で表現することにより、ネットワークの構成を変えることなくモデルを小さくすることのできるアプローチです。32ビットのモデルを8ビットで表現するように、そのモデルで使用されている数字を小さくすることで、計算の負担を軽くするイメージで考えてもらうとわかりやすいでしょう。

計算を通常よりもシンプルな数字で行えるため、マシンのメモリ負担を抑え、スペックに難のあるエッジコンピューターでも十分な計算処理能力が得られるというわけです。ビット数をどうやって小さくしているのか、というのは複雑な関数の計算が発生するため、ここでは紹介を控えますが、とにかく計算方法に工夫を加えることで、モデルの計算負担を小さくできるのが大きなポイントです。

ディープラーニングの量子化の種類

大きく分けて、量子化には「Dynamic Quantization」「Static Quantization」という2つの方法があります。これらの方法は、計算コストや計算結果の誤差において大きな差があるため、最適な手法を使い分けることが大切です。ここでは、それぞれの特徴について解説しましょう。

Dynamic Quantization(動的量子化)

Dynamic Quantizationは、日本語では「動的量子化」と呼ばれる量子化手法の一つです。AIの推論時に量子化を実行する方法で、多層化されたディープラーニングの各層ごとで量子化パラメータを求められることが特徴です。また、量子化したい層と量子化しない層を織り交ぜながら計算を行うため、漠然と量子化を行うよりも高い精度で演算の結果を得られやすいことも特徴です。

Dynamic Quantizationは精度に優れますが、その一方で計算コストが比較的重くなりやすいという問題も抱えています。マシンへの負担を極限まで減らしたいという場合には、あまり適していない手法です。

Static Quantization(静的量子化)

Static Quantizationは、日本語では「静的量子化」と呼ばれる量子化手法の一つです。Dynamic Quantizationとは異なる性質を持っており、中間層をあらかじめ量子化する方法を採用しています。

そのデータにおける代表のようなデータ集合を用意の上、その上で中間層の量子化したパラメータを算出するため、Dynamic Quantizationのように層ごとの計算を行わず、計算負担が小さいというメリットがあります。どのデータを代表とするかというデータ選定の重要性が高いことは注意すべき点ですが、量子化手法の中でも負荷の小さいアプローチとなっています。

ただ、負荷が小さい分、得られる精度はDynamic Quantizationに劣る場面も多いため、確実な結果を求める場合には不向きといえます。

ライブラリの量子化への対応状況

ディープラーニングの量子化は比較的新しい軽量化手法ではあるものの、いくつかのライブラリではすでに公式に対応しているものも登場しています。

TensorFlow Lite

TensorFlowを使用している場合、量子化の際にはTensorFlow Lite(TFLite)を用います。TensorFlow LiteはTensorFlowを使って学習したモデルのデプロイに特化したツールで、量子化のフォーマットも備えていることが特徴です。

活用できるフォーマットは、次の3種類が用意されています。

  • Post-training dynamic range quantization
  • Post-training integer (static) quantization
  • Quantization-aware training

Post-training dynamic range quantizationは最もシンプルな量子化手法で、数行コードを追加するだけで量子化を実行できます。

Post-training integer (static) quantizationでは静的量子化を実行でき、こちらも負荷が小さい比較的容易な手法です。

Quantization-aware trainingは、モデルの学習後に量子化を行なった際、不備が生じた際に用いる手法です。量子化を前提とした学習を実行し、チューニングを行います。

PyTorch

PyTorchはAI開発のスタンダードなライブラリですが、量子化への対応が進んでいます。PyTorchの特徴は、量子化前のモデルと量子化後のモデルでAPIが同じであるため、比較検証やデバッグが行いやすいという特徴を備えています。

サポートしている量子化手法は

  • Post-training dynamic range quantization
  • Post-training integer (static) quantization
  • Quantization-aware training

とTensorFlowと大きな違いはないため、使い慣れているライブラリを選んで運用すると良いでしょう。

TVM

TVMはディープラーニングコンパイラと呼ばれる、学習プロセスにおける推論をさまざまなデバイスで実行するためのフレームワークです。ライブラリとは少し異なりますが、任意のデバイスでの計算の高速化に適した機能が実装されているため活用機会は多いです。

量子化のアプローチとしては、次の2種類が用意されています。

  • Automatic integer quantization
  • Framework pre-quantized model conversion

Automatic integer quantizationは、ライブラリで学習を行った量子化前のモデルを入力することで、TVM上で量子化を実行する機能です。Framework pre-quantized model conversionは、ライブラリで学習と量子化を行なった学習モデルを入力し、チューニングを行えるものです。

ライブラリと併用することで、より最適なパフォーマンスを得られることが特徴です。

量子化以外のモデル軽量化手法

量子化以外にも、モデルを軽量化する方法にはいくつかの種類があります。

蒸留

蒸留は、学習モデルが巨大で汎用性に欠ける場合に活躍する軽量化手法です。巨大な学習モデルの関数をより小さいスケールで再現し、同様のパフォーマンスを小さなモデルで実現し、負荷を小さくできます。

枝刈り

枝刈りは、学習モデルにおける重要性の低いノードを削除することで、モデルサイズそのものを小さくしたり、パラメータの数を減らしたりする方法です。刈り取るノードによってはパフォーマンスに影響を及ぼす可能性もありますが、軽量化手法としてはポピュラーな部類に入ります。

極小量子化技術

量子化技術を発展させ、データを極小サイズで運用できる技術開発も進んでいます。極小量子化技術と呼ばれるこの方法は、従来限界とされてきた8ビット未満のサイズへの量子化技術を指すもので、制度を低下させることなく、さらなるモデルの縮小が可能となってきました。

実用化はこれからですが、量子化技術は現在よりもさらに使いやすくなることにも期待されています。

まとめ

ディープラーニングのモデル軽量化手法である量子化について解説しました。

より小さいビット数でパラメータを表現するこの方法は、ネットワーク構造を変えることなくメモリへの負担を抑えることができる点が高く評価されています。量子化はすでにディープラーニング運用ではお馴染みのライブラリにおいても対応が進んでおり、エッジAIの開発・運用や、高度なディープラーニングを実践したいと考えている際には積極的に採用したいところです。

また、ディープラーニングのパフォーマンスを底上げしたい場合には、シンプルにマシンスペックを強化する選択肢が効果的です。当社モルゲンロット株式会社が提供する「M:CPP」では、そんなディープラーニング運用に最適なクラウドGPUを、優れたコストパフォーマンスにて提供しています。

MCPP

大手クラウドGPUと比べて最大1/2程度の費用負担で豊富なリソースを利用できるだけでなく、専有サーバーで他のユーザーの干渉を心配する必要もないので、信頼できるサービスです。ディープラーニングのパフォーマンス向上をご検討の際には、M:CPPまでお気軽にお問い合わせください。

  • このエントリーをはてなブックマークに追加