This article was translated from Chinese by Gemini 2.5 Pro.
正直なところ、多くの方はICECHUIが無料のモデルAPIを提供していることをご存じないかもしれません。これは1日あたり最大600万トークンをサポートしており、もちろん開発者の申請が必要です。現在、様々なQwenモデルが利用可能で、私自身も非常に快適に使わせていただいています。
しかし、これは広告記事ではありません。これは、大規模言語モデルの軽量化というトピックへの序章、すなわち「量子化とは何か」についての記事です。
簡単に言うと#
量子化とは、モデルパラメータの数値精度を下げることで、各パラメータの保存に必要なビット数を削減することを目的とした技術です。
一般的なAIモデルの学習プロセスでは、モデルのパラメータ、すなわち重み(weights)とバイアス(biases)は、通常32ビット浮動小数点数(FP32)形式で保存されます。この形式は非常に高い精度を持ち、7.892345678のような非常に広範で微細な数値を表現することができます。
しかし、量子化技術は、このような高精度の数値を、8のような低精度の8ビット整数(INT8)に近似することができます。このプロセスの本質は、許容可能な精度低下と引き換えに、モデルの効率を大幅に向上させることにあります。
このプロセスをより具体的に理解するために、包括的な学術書を子供向けの本や要約に簡略化する様子を想像してみてください。
学術書には豊富な専門用語や複雑な文構造が含まれており、情報量は多いですが、その分重く、素早く読むのは困難です。
対照的に、子供向けの本や要約は、より平易な言葉と少ないページ数で中心的なアイデアを伝えます。
簡略化の過程でいくつかの巧妙な詳細や微妙なニュアンスは失われるかもしれませんが、中心的な内容は保持され、保存、伝達、理解がより容易になります。
AIモデルの量子化は、まさにこの簡略化プロセスのようなものです。モデル内部の複雑な数値言語(高精度浮動小数点数)を、より簡潔で効率的な言語(低精度整数)に変換し、表現の精度をわずかに犠牲にすることで、モデルをより軽く、より速くします。
なぜ量子化するのか?#
その理由は非常に分かりやすいです。量子化の最も直接的で顕著な利点は、モデルのストレージサイズを劇的に削減できることです。モデルのサイズは、主にそのパラメータ数と各パラメータの保存精度によって決まります。
パラメータを標準の32ビット浮動小数点数(FP32、4バイトを占有)から8ビット整数(INT8、1バイトを占有)に変換すると、各パラメータのストレージ要件は75%も減少します。数十億、あるいは数百億のパラメータを持つ大規模モデルにとって、この削減効果は絶大です。
サイズの削減に加えて、量子化はモデルの推論(inference)速度、つまりモデルが学習した知識を用いて予測を行ったりコンテンツを生成したりするプロセスを大幅に高速化することもできます。
この速度向上は、主に2つの要因に由来します。
- 整数演算は本質的に浮動小数点演算よりも高速です。GPUやAI専用に設計されたハードウェア(GoogleのTPUやNVIDIAのTensor Coreなど)では、整数演算を実行する回路の方が単純で、遅延が少なく、スループットが高いです。モデル内の膨大な数の積和演算を浮動小数点数から整数に変換することで、このハードウェアの利点を直接活用し、計算時間を短縮できます。
- メモリ帯域幅への負荷を軽減します。メモリ帯域幅とは、プロセッサとメモリ間のデータ転送速度のことで、AIコンピューティングにおける主要なボトルネックとなることがよくあります。量子化されたモデルはサイズが小さいため、計算時にメモリからプロセッサのキャッシュにロードする必要のあるデータ量も減少します。データ転送が少なければ待ち時間も短くなり、プロセッサは実際の計算により効率的に専念できます。
さらに、計算効率はエネルギー消費に直結します。整数演算は浮動小数点演算よりも単純であるため、消費エネルギーも少なくて済みます。したがって、量子化されたモデルは実行時によりエネルギー効率が高くなります。
これら3つの点を総合すると、従来のAIアプリケーションの多くはクラウドAIモデルに従っています。つまり、端末デバイス(スマートフォンなど)がデータをクラウド上のサーバーに送信して処理を行い、結果を受け取るというものです。
このモデルは安定した高速なネットワーク接続に依存し、データプライバシー漏洩のリスクも伴います。一方、エッジAIは、端末デバイス自体に計算能力を持たせ、AIをローカルで実行させることを目指しています。
数学の芸術#
高精度の浮動小数点数から低精度の整数への変換を実現するためには、明確で信頼性の高い数学的フレームワークが必要です。
このプロセスは翻訳の芸術と見なすことができ、その中心的な課題は、無限の可能性を持つ連続的な区間(例:-15.0から+15.0までのすべての浮動小数点数)を、有限個の値しか持たない離散的な整数の集合(例:INT8で表現可能な-128から127までの256個の値)に、いかに正確に対応付けるかという点にあります。
この芸術の核心にあるのが、アフィン量子化スキーム(Affine Quantization Scheme)として知られる線形マッピング手法です。
小さな数学、楽々マスター!#
アフィン量子化の基本的な考え方は非常にシンプルです。線形方程式を用いて浮動小数点数と整数の間の対応関係を確立します。この関係は次の式で要約できます。
ここで、は元の浮動小数点値、はそれに対応する整数値です。式中のscaleとzero_pointは、この翻訳の具体的なルールを共に定義する2つの重要な量子化パラメータです。
この式は本質的に単純な線形変換であり、温度を摂氏から華氏に変換するプロセスと同様に、スケーリングとシフトによって単位の変換を行います。
逆に、浮動小数点数 を整数 に変換したい場合は、上記の式を移項するだけで、量子化の核心となる計算ステップが得られます。
ここで、はscale(スケールファクター)、はzero_point(ゼロポイント)を表します。この式は、浮動小数点数 を量子化するプロセスが3つのステップからなることを示しています。まず をスケールファクター で割り、次にゼロポイント を加え、最後に結果を最も近い整数に丸めます。この整数 が、元の浮動小数点数 の量子化された表現です。
あらかじめ設定された浮動小数点範囲 を超える値は、その範囲で表現可能な最も近い整数値にクリッピング(clipped)され、すべての入力が有効な整数空間にマッピングされるように保証されます。
スケールファクター?ゼロポイント?#
scaleは正の浮動小数点数で、量子化の粒度を定義します。これは、整数世界での1単位のステップサイズが、浮動小数点世界でどれだけの数値範囲を表すかと考えることができます。
例えば、scaleが0.1の場合、整数値5と6の差は0.1の浮動小数点数値の変化を表します。
scaleの値が小さいほど精度は高くなります。なぜなら、各整数がより狭い浮動小数点数の範囲に対応するからです。逆に、scaleの値が大きいほど粒度は粗くなり、精度の損失も大きくなります。
zero_pointは整数で、その役割は浮動小数点世界の特別な値である0.0が、整数世界のいずれかの値によって正確に表現されることを保証することです。
これは極めて重要です。なぜなら、ニューラルネットワークにおいて0は非常によく現れる、意味のある値だからです。例えば、ReLU活性化関数では、すべての負の入力は0に設定されます。また、畳み込み演算では、パディング(padding)に0が頻繁に使用されます。
もし浮動小数点数の0.0が量子化後に正確に表現できない場合、体系的なバイアスが導入され、モデルの計算結果に継続的に影響を与えてしまいます。zero_pointは、まさにその0.0に正確に対応する整数値なのです。
それで?#
浮動小数点数の値の分布特性に応じて、scaleとzero_pointを決定するために2つの異なるマッピング戦略、すなわち非対称量子化と対称量子化を採用することができます。
- 非対称量子化 (Asymmetric Quantization) は、最も一般的なアフィン量子化スキームです。これは、あらゆる範囲の浮動小数点数に適しています。例えば、ReLU活性化関数で処理された後のテンソルの数値範囲は となることがあります。この場合、浮動小数点数の0は範囲の中心に位置しません。非対称量子化は、ゼロでないを用いて整数マッピング区間全体をシフトさせ、この非対称な浮動小数点範囲に完全に整列させます。
- 対称量子化 (Symmetric Quantization) は、単純化された特殊なケースで、数値範囲がおおよそ0を中心に対称に分布しているテンソル(例えば、範囲がの重み)に適しています。対称量子化では、を強制的に0とします。この利点は、量子化式がに簡略化され、計算時に加算操作を1回省略できるため、わずかな速度向上が期待できることです。しかし、データの実際の分布が厳密に対称でない場合、対称量子化を強制的に使用すると、表現精度がいくらか犠牲になる可能性があります。
実際には、数学の芸術はこれらの式を適用することだけにあるのではなく、モデルの各層の重みと活性化値に対して最適な量子化範囲を決定し、そこから最も適切なscaleとzero_pointを計算する方法にこそあります。このパラメータを決定するプロセスは**キャリブレーション(calibration)**と呼ばれます。
モデルの重みについては、その数値範囲は量子化時に既知であり静的です。しかし、活性化値については、その値は入力データごとに動的に変化します。すべての可能な入力に適応するために固定の範囲をどのように選択するかが、量子化における中心的な課題となります。
キャリブレーションプロセスでは通常、代表的なデータサンプルを少量モデルに入力し、活性化値の典型的な分布範囲を観察・統計します。
範囲を狭すぎると、範囲外の多くの外れ値がクリッピングされ、大きなクリッピング誤差が生じます。一方、範囲を広すぎると、一般的な値の多くが粗い粒度で表現されることになり、大きな丸め誤差が生じます。
このトレードオフの中で最適なバランスを見つけ出すことこそ、さまざまな量子化方法論(静的量子化、動的量子化、量子化を意識した学習など)が解決しようとしている核心的な問題なのです。
PTQ:学習後量子化#
その名の通り、学習後量子化(Post-Training Quantization)は、高精度(FP32など)で完全に学習済みのモデルに対して行われる操作です。
これは学習プロセスの一部というよりは、モデルの変換や後処理のステップに近いです。そのワークフローは通常、事前学習済みのモデルを取得し、量子化アルゴリズムを適用してそのパラメータを低精度形式に変換するというものです。
PTQの最大の利点は、その手軽さと効率性です。モデルの再学習を必要としないため、プロセス全体が非常に速く、通常は数分から数時間で完了します。
さらに、データ要求量もはるかに少なく、時には全くデータが不要な場合もあります。このため、PTQは、特に既存の事前学習済みモデルがありながら、元の学習データセットや十分な計算リソースがない場合に、非常に魅力的な選択肢となります。
PTQは、さらにいくつかの異なる技術に細分化でき、その中で最も一般的な2つは次のとおりです。
- 静的量子化 (Static Quantization): この手法では、モデルの重みと活性化値の両方を量子化します。重みは固定されているため、その量子化は比較的直接的です。しかし、入力によって変化する活性化値については、静的量子化は追加の**キャリブレーション(calibration)**ステップを必要とします。このステップでは、開発者は代表的なサンプルデータを少量モデルに入力し、各層の活性化値の動的範囲を記録します。これらの統計情報に基づき、アルゴリズムは各層の活性化値に対して固定的で最適な量子化パラメータを計算します。実際の推論時には、モデルはこれらの事前に計算されたパラメータを使用して活性化値を量子化します。すべてのパラメータが推論前に決定されるため、静的量子化は実行時の追加の計算オーバーヘッドがなく、推論速度が最も速くなります。
- 動的量子化 (Dynamic Quantization): 静的量子化とは異なり、動的量子化は通常、モデルの重みのみを事前に量子化し、活性化値は推論中にその都度(on-the-fly)量子化されます。具体的には、新しい入力データが来るたびに、システムは現在の活性化値の範囲(最大値と最小値)をリアルタイムで計算し、それに基づいて動的に量子化パラメータを生成します。この手法の利点は、量子化パラメータが各入力の具体的な状況に完全に適合するため、通常は静的量子化よりも高い精度が得られることです。しかし、その代償として、推論のたびに量子化パラメータを計算するオーバーヘッドが加わるため、全体的な推論速度は静的量子化よりも遅くなる可能性があります。
QAT:量子化を意識した学習#
量子化を意識した学習(Quantization-Aware Training)は、PTQとは全く異なるアプローチを取ります。これは、学習が完了した後に量子化を導入するのではなく、量子化プロセスをモデルの学習またはファインチューニングの段階に直接統合します。
その中心的な目標は、モデルが学習時に将来量子化されるという事実を「意識」し、量子化によって生じる精度の低下に自ら適応し、補うように学習させることです。
QATは、一般に疑似量子化またはシミュレーション量子化と呼ばれる巧妙なメカニズムによって実装されます。学習の各イテレーションにおける具体的なプロセスは次のとおりです。
- フォワードパス (Forward Pass): ネットワークの出力を計算する際、モデルは量子化操作をシミュレートします。まず、完全精度の重みと活性化値を疑似量子化(つまり、量子化ルールに従って対応する整数値を計算し、それを逆量子化式で浮動小数点数に戻す。この浮動小数点数には既に量子化誤差が含まれている)します。次に、このシミュレートされた誤差を持つ値を使用してネットワークの計算を完了します。
- バックワードパス (Backward Pass): 勾配を計算して重みを更新する際、モデルはフォワードパスでの量子化操作を無視します。勾配は元の完全精度の重みに基づいて計算され、更新も完全精度の重みに対して行われます。この設計(通常、Straight-Through Estimatorと呼ばれる技術で実現)により、学習プロセスの安定性と勾配の効果的な伝播が保証されます。
このようにして、モデルは学習プロセス全体を通じて量子化がもたらす影響を継続的に体験し、量子化後も性能が最適となるような解を見つけるために重みを調整します。
これは、射撃選手が練習時に風速の影響を考慮して照準を積極的に調整するようなもので、試合当日に初めて風の力を感じるのとは異なります。
したがって、QATの最大の利点は、モデルの精度を最大限に維持できることです。
モデルは量子化誤差と共存する方法を学習しているため、その最終的な量子化バージョンは、ほとんどの場合PTQよりも高い精度を達成でき、時には元のFP32モデルのレベルに近づくことさえあります。そのため、アプリケーションが極めて厳しい精度要件を持つ場合、QATが最適な選択肢となります。
もちろん、この高精度には代償が伴います。QATは完全な学習パイプラインを必要とし、それは大規模な学習データセットへのアクセスと、モデルの再学習やファインチューニングのための大量の計算リソースが必要であることを意味します。
予告はここまで、ここからは伏線#
PTQとQATが量子化技術の核心的なフレームワークを形成していますが、この分野は絶えず進化しており、特定のシナリオやニーズに対応するための多くの専門的なツールや、より先進的な技術が登場しています。
GPTQ#
GPTQ(Generalized Post-Training Quantization)は、GPTアーキテクチャベースのモデル専用に設計された、先進的な学習後量子化手法です。
その際立った特徴は、性能の低下を極めて低く抑えながら、モデルをINT4やINT3といった非常に低いビット幅に量子化できる能力です。GPTQは、層ごとの量子化アプローチと量子化誤差の精密な分析を組み合わせることで、従来のPTQ手法よりも優れた精度対圧縮率を実現します。
実際の応用では、GPTQで量子化されたモデルはGPU上で非常に高い推論速度を示すことが多く、GPUユーザーが大規模モデルを実行するための主要な選択肢の一つとなっています。
GGML#
GGMLは機械学習用に設計されたテンソルライブラリであり、量子化モデルを保存するための一連のカスタムバイナリフォーマットを含んでいます。主にGPUを対象とするGPTQとは異なり、GGMLフォーマットのモデルはCPU上での実行時に卓越した性能を発揮します。
これにより、高性能なグラフィックカードを持たないユーザーでも、自身のノートPCやデスクトップPCで大規模言語モデルを体験することが可能になります。GGMLは複数の量子化レベル(例えば、ファイル名でよく見られるq4_0、q5_1など)をサポートしており、ユーザーにモデルサイズと性能の間で柔軟な選択肢を提供します。
極端な量子化#
- 2値化 (Binarization) は、最も極端な量子化形式の一つです。2値化ニューラルネットワーク(BNN)では、モデルの重みは通常またはスケーリングされたという2つの可能な値のみに制限されます。
- 3値化 (Ternarization) はこの制約をわずかに緩和し、重みが通常またはという3つの値を取ることを許可します。
まとめ#
量子化とは、突き詰めれば、巨大で複雑なAIモデルをより小さく、より速く、よりエネルギー効率の良いものにするための最適化技術です。
これにより、LLMのような大規模モデルが、リソースが豊富なクラウドデータセンターを飛び出し、私たちの日常生活で使われる様々なリソースに制約のあるデバイスに展開されることが可能になります。
モデルの体積を大幅に削減してスマートフォンに搭載したり、推論を高速化して自動運転のリアルタイムな意思決定をサポートしたり、消費電力を下げてウェアラブルデバイスのバッテリー寿命を延ばしたりと、量子化は不可欠な役割を果たしています。
それは、AI技術の普及、実用化、そして民主化を推進する核心的な工学的支柱の一つとなっています。
脚注#
Hugging Face. (n.d.). Quantization. In Optimum documentation. Hugging Face. Retrieved August 20, 2025, from https://huggingface.co/docs/optimum/concept_guides/quantization ↗ Li, J. (2024, May 27). Mechanistic Interpretability of Binary and Ternary Transformers (arXiv:2405.17703) [Preprint]. arXiv. https://doi.org/10.48550/arXiv.2405.17703 ↗