量子化は、ニューラルネットワークの重み、場合によっては活性化を表現するために用いる数値精度を低下させ、モデルサイズを縮小し、実行に必要な計算量を削減する技術である。ニューラルネットワークは通常、32ビットまたは16ビットの浮動小数点数で訓練されるが、訓練済みモデルが実際に良好に表現する必要がある値の多くは、8ビットや4ビットの整数といったはるかに低い精度の形式で近似でき、精度の損失は小さく、多くの場合許容可能である。Large language modelに適用すると、量子化はモデルのメモリ使用量を元の訓練精度と比較して4分の1以上に削減でき、本来必要となるメモリよりもはるかに少ないメモリしか持たないハードウェア上でモデルを実行可能にする。
量子化は、デジタル信号処理やコンピューティングにおける一般的な技術として、ディープラーニングよりはるかに古くから存在するが、ニューラルネットワーク、特に大規模言語モデルへの応用は、2020年代初頭にモデルサイズが数百億パラメータ規模に成長し、フル精度での展開が多くのユーザーにとって法外に高価になったことから広く実践されるようになった。2023年のLlamaのような大規模オープンウェイトモデルの公開は、量子化へのコミュニティの関心を特に急増させた。なぜなら、これにより個人が数百億パラメータのモデルを単一のコンシューマーGPUやノートパソコンで実行できるようになり、フル精度では不可能だったことが実現したからである。
仕組み
量子化は、連続的または高精度の重み値の範囲を、より小さな離散的な低精度値の集合にマッピングする。通常は、元の値をターゲット形式の表現可能な範囲にスケーリングし、丸めを行う。訓練後量子化は、追加の訓練なしで訓練済みモデルにこの変換を適用するもので、最も一般的で低コストなアプローチであり、各重みを独立に変換するだけの単純なものから、キャリブレーションデータを使用して特定のモデルに対して導入される誤差を最小化するスケーリング係数を選択する、より洗練されたものまであり、層ごとや重みグループごとに行われることもある。量子化を考慮した訓練は、代わりに訓練プロセス自体に低精度の影響を組み込むもので、非常に低いビット幅でも精度をより維持できるが、訓練インフラとデータへのアクセスが必要であり、事前訓練済みモデルのほとんどのユーザーはこれを持っていない。2020年代半ば時点での一般的なターゲット形式には、通常は無視できる品質損失を生じる8ビット整数量子化や、より積極的な4ビット、場合によってはそれ以下の形式が含まれ、これらはより大きな、しかし多くの場合依然として控えめな品質低下と引き換えに、モデルサイズを大幅に縮小する。
応用
量子化は、Knowledge distillationやMixture of expertsなどのアーキテクチャ的手法と並ぶ主要な技術の一つであり、豊富なGPUメモリを持つデータセンター外での大規模モデルの実用的な展開を可能にする。これは、ほとんどのローカルおよびEdge AIでの言語モデル展開の基盤となっており、オープンウェイトモデルをコンシューマーハードウェア、単一のアクセラレータカード、さらにはモバイルデバイス上で実行できるようにする。また、大規模AIラボの本番サーバーインフラでも、大規模なInference (AI)のコストを削減するために使用されている。低精度計算は、専用の低精度演算ユニットを備えたGPU (in AI)ハードウェアなどの現代のアクセラレータ上で一般的に高速かつ低コストだからである。ローカルで大規模モデルを量子化して実行するための人気のあるオープンソースツール(効率的な整数および低ビット推論を中心に構築された形式やライブラリを含む)は、Hugging Faceなどのリポジトリと並んで、オープンウェイトエコシステムの広く普及した一部となった。
トレードオフと限界
量子化における中心的なトレードオフは、サイズと速度の利得と精度損失のバランスであり、この損失は一様ではない。特に正確な算術や細かい推論を必要とするタスクは、自由形式のテキスト生成よりも、積極的な量子化の下で顕著に劣化する傾向がある。2ビット以下などの極端に低いビット幅は、補償するための専門的な技術なしでは、ほとんどのユースケースで実質的でしばしば許容できない品質低下を生じる。量子化は通常、訓練後に適用され、比較的安価で高速に実行できるため、元のフル精度バージョンが許容するよりも厳しいメモリやレイテンシの制約下でモデルを実行する必要がある場合、実務者が最初に手を伸ばす最も簡単な手段となることが多く、QLoRAなどのLoRAベースのFine-tuning技術と併用されることが頻繁にある。これは、量子化されたベース重みと、訓練可能な低ランクアダプタの小さなセットを組み合わせるものである。