量子化(モデル量子化)とは?仕組み・PTQとQATの違いと実装判断を解説【2026年版】
量子化は、連続した値を決まった段階の離散値へ置き換える処理を指します。機械学習の文脈では、32ビット浮動小数点で保持しているモデルの重みや活性化を8ビット整数などの狭い型へ写し、モデルサイズと推論時のメモリ帯域を圧縮する手法を指すのが一般的です。この記事では、信号処理側の量子化との関係から入り、スケールとゼロ点という共通の仕組み、PTQとQATの分かれ道、INT8とINT4の実務ライン、PyTorchやLiteRTなどフレームワーク別の実装手順、そして量子化後の評価と採用判断までを実装の順序で並べました。GPTQやAWQといったLLM固有のアルゴリズムと配布形式の比較はLLM量子化とは?仕組みとGPTQ・AWQ・GGUFの違いで扱っているため、本記事はモデル量子化全般の原理と実装判断に絞ります。
まとめ:量子化はビット幅と評価手順を先に決めれば失敗しない
量子化の失敗は、手法選びより順序で起きます。先にライブラリの既定設定で変換し、精度がどれだけ落ちたかを測る土台がないまま調整に入る流れが典型です。着手前に決めるのは3つ、許容できる精度劣化の幅、評価データ、本番と同じハードウェアでの計測条件です。
ビット幅はINT8を出発点に置いてください。FP32からINT8への変換はモデルサイズがおよそ4分の1になり、精度劣化は多くの分類・回帰タスクで1ポイント前後に収まります。INT4まで踏み込むのは、重みだけを量子化するweight-only構成でメモリ制約が厳しい場合に限る判断が扱いやすく、3ビット以下は品質が急に崩れる領域です。
手法はPTQから試します。学習後に変換するPTQで目標精度に届けば、再学習の工数もデータ整備も不要になるからです。届かなければQATへ進み、それでも足りないなら蒸留や小型モデルへの置き換えを検討する順序が現実的でしょう。
実装の入口はフレームワークによって変わります。PyTorchでは2026年7月時点でtorchao側のPT2E方式が現行の案内で、旧来のtorch.ao.quantizationは移行対象です。エッジ端末向けはLiteRT、サーバー側の推論エンジンに載せるならONNX RuntimeのQDQ形式かTensorRTという分担になります。
量子化とは何か|信号処理の量子化とモデル量子化の共通点と違い
同じ「量子化」でも、検索して出てくる説明は2系統に割れます。両者は無関係ではなく、根っこの考え方は共通しています。
信号のデジタル化における量子化と、量子化誤差という共通の考え方
音声や電圧のような物理量は連続値であり、そのままでは計算機で扱えません。そこで一定間隔で値を測る標本化を行い、測った値を決まった段階のどれかへ丸める処理が量子化です。8ビットで表すなら256段階、16ビットなら65,536段階に割り当てられ、実際の値と丸めた値のずれが量子化誤差として残ります。
段階を細かくすれば誤差は小さくなり、データ量は増える。この綱引きが量子化という語の本質で、モデル量子化でも同じ構図が現れます。「標本化・量子化・符号化」という情報系の並びを知っていれば、モデル側の議論も同じ枠組みで読めるはずです。
モデル量子化はFP32の重みと活性化を整数へ置き換える圧縮手法
学習済みモデルのパラメータは、既定では32ビット浮動小数点(FP32)で保持されています。モデル量子化は、この重みと、層の出力である活性化を8ビット整数などの狭い型へ写す処理です。1パラメータあたり4バイトが1バイトになるため、10億パラメータのモデルなら約4GBが約1GBに縮みます。
効くのはサイズだけではありません。行列積は演算そのものよりメモリからパラメータを読み出す帯域で待たされる場面が多く、読み出す量が4分の1になれば待ち時間も縮みます。整数演算ユニットを持つCPUやNPUなら、演算自体も速く回るでしょう。全体の内訳はLLM推論の仕組みと高速化の手法で整理しています。
モデル量子化の仕組み|スケールとゼロ点で低ビット整数へ写す処理
実装で迷わないために、変換式の中身を押さえておきます。ライブラリの引数名はここから来ています。
スケールとゼロ点の求め方と、対称量子化と非対称量子化の使い分け
浮動小数点の値xを整数qへ写すとき使うのは2つの定数、何倍に縮めるかを表すスケールと、0の位置を表すゼロ点です。qはxをスケールで割って丸め、ゼロ点を足した値で、推論時にはこの逆をたどって元のスケールへ戻します。
ゼロ点を0に固定する方式が対称量子化です。値の分布が0を中心に広がる重みでは扱いやすく、計算も軽い。一方、ReLUの出力のように正の側へ偏る活性化では、ゼロ点をずらす非対称量子化のほうが段階を無駄なく使えます。重みは対称、活性化は非対称という組み合わせが既定になっている実装が多いのはこのためです。
| 方式 | ゼロ点 | 向く対象 | 注意点 |
|---|---|---|---|
| 対称量子化 | 0に固定 | 重み | 片側に偏る分布で不利 |
| 非対称量子化 | 可変 | 活性化 | バックエンド非対応あり |
per-tensorとper-channelの粒度差が精度に効く場面と計算コスト
スケールをどの単位で持つかを粒度と呼びます。テンソル全体で1組だけ持つper-tensorは軽い代わりに、値域の広いチャネルに引きずられて他のチャネルの分解能が落ちます。出力チャネルごとにスケールを持つper-channelにすると、この引きずりが消えて精度が戻る場合が多いでしょう。
畳み込みや全結合の重みはper-channelが既定に近い扱いで、追加コストはスケール配列の分だけです。より細かく128要素単位などで区切るgroup-wiseもあり、こちらは4ビット級の重み量子化で使われます。粒度を細かくするほど保持するスケールが増えるので、圧縮率と精度のどちらを取るかという判断に戻ってきます。
重みだけ量子化するweight-onlyと活性化も含めるW8A8の違い
量子化の対象を重みだけに絞る構成をweight-onlyと呼び、重みと活性化の両方を8ビットにする構成はW8A8と表記されます。weight-onlyは推論時に重みを浮動小数点へ戻して計算するため、演算そのものは速くなりません。それでも効果が出るのは、1トークンずつ生成するような処理がメモリ帯域で律速しているからです。
バッチサイズを上げて計算そのものが詰まる場面では、活性化まで整数化するW8A8が効きます。画像分類のようにバッチで流す推論はW8A8、対話型の生成はweight-onlyが目安でしょう。生成側は重み以外もメモリを食うため、KVキャッシュの仕組みとメモリ削減と合わせて内訳を出してから決めてください。
PTQとQATの違い|キャリブレーションで足りる場面と再学習が要る場面
手法は大きく2つに分かれます。学習が終わったモデルを変換するか、学習の段階から量子化を織り込むかという違いです。
学習後に量子化するPTQと、動的量子化と静的量子化の使い分け
PTQ(Post-Training Quantization)は、学習済みの重みをそのまま変換する方法です。工数が小さく、数分から数十分で試せます。PTQはさらに2つに分かれ、活性化のスケールを推論のたびに実行時に求める動的量子化と、事前に代表データを流してスケールを固定する静的量子化があります。
動的量子化は代表データの準備が不要で、行列積が支配的な言語モデル系に向きます。静的量子化は事前計算のぶん実行時のオーバーヘッドが消えるので、畳み込み中心のモデルやエッジ端末で選ばれる方式です。まず動的で当たりを付け、速度が足りなければ静的へ移る進め方が扱いやすいでしょう。
キャリブレーションデータの選び方と、外れ値が精度を崩す仕組み
静的量子化では、活性化の値域を決めるために代表データを流します。ここで使うのは本番と同じ分布のデータで、数百サンプルもあれば足りることが多い。学習データの先頭から機械的に取ると、クラスの偏りやドメインのずれがそのままスケールに乗るため、無作為抽出を挟んでください。
値域の決め方にも幅があります。最大値と最小値をそのまま使うMinMaxは単純ですが、まれに現れる極端な外れ値が値域を広げ、通常の値に割り当てる段階が痩せます。上位0.1%を切り捨てるパーセンタイル方式へ切り替えると、この痩せを避けられるでしょう。
QATで再学習に踏み込む条件と、必要になる工数とデータの前提
QAT(Quantization-Aware Training)は、学習の計算グラフに量子化と復元の疑似演算を挟み、丸め誤差がある前提で重みを調整する方法です。丸め処理は微分できないため、勾配をそのまま通す近似(Straight-Through Estimator)を使って学習を回します。
踏み込む条件は明確です。PTQで許容幅を超える劣化が出て、かつ学習データと学習環境が手元にあり、数エポックの追加学習に見合う効果が見込めるときに限ります。学習データを持たない受託案件では、そもそもQATという選択肢が成立しません。
| 比較軸 | PTQ | QAT |
|---|---|---|
| 必要なもの | 学習済みモデル | 学習データと学習環境 |
| 工数の目安 | 数分から数時間 | 数日規模 |
| 精度の傾向 | INT8なら概ね実用域 | 低ビットでも粘る |
| 向く場面 | まず試す全般 | INT4以下や小型モデル |
ビット幅の決め方|INT8とINT4とFP8で変わる精度と速度の損益分岐
どこまで削るかは、精度の要件とハードウェアの対応状況という2つの側面で決まります。ここを感覚で決めると、あとから戻れなくなります。
INT8を基準線に置く理由と、圧縮率とメモリ帯域の関係の見立て
INT8が基準になるのは、対応するハードウェアが広く、精度劣化が読みやすいからです。FP32比で4分の1、FP16比でも半分にサイズが落ち、CPU・GPU・NPUのいずれでも整数演算の経路が用意されています。画像分類や物体検出では、per-channelの静的量子化で1ポイント以内に収まる報告が多い水準でしょう。
速度の伸びは帯域の詰まり具合に比例します。演算器が遊んでメモリ待ちが支配的なモデルほど効き、逆に演算そのもので詰まっているモデルでは、サイズが縮んでも待ち時間は減りません。事前にプロファイラで帯域律速か計算律速かを見てから、期待値を置いてください。
INT4と3ビット以下で品質が崩れる境目と、weight-onlyの前提
INT4は、重みだけを量子化する構成と細かい粒度を組み合わせる前提でようやく実用に乗ります。活性化まで4ビットにすると多くのモデルで出力が破綻するため、W4A16のように重み4ビット・活性化16ビットという組み合わせが標準的です。大規模言語モデルでこの構成が広く使われている背景はLLM量子化の手法比較にまとめました。
3ビット以下は、後から圧縮する発想では品質が保てない領域に入ります。この帯域を狙うなら、学習の段階から低ビット前提で設計されたモデルを選ぶほうが筋がいい。訓練時から三値表現で設計された1bit LLM「Bonsai」のような系統がその例です。
FP8とFP4など浮動小数点系の低精度型が使える条件と対応環境
整数型のほかに、指数部を残したまま幅を詰めるFP8やFP4という型もあります。整数型より値域が広く、外れ値の多い活性化を扱いやすい特性を持ちます。ただし恩恵を受けるにはハードウェア側の対応が要り、NVIDIAではHopper世代以降でFP8、Blackwell世代でFP4が案内されている状況です。
手元のGPU世代が古い場合、FP8を指定しても内部で変換が挟まり速度が出ないことがあります。対応表を確認し、対応していなければINT8へ戻す判断で構いません。
実装フレームワーク別の量子化手順|PyTorchとLiteRTとONNXの違い
ここからは実装の入口です。フレームワークごとにAPIの世代交代が起きているので、2026年7月時点の現行経路を押さえておきます。
PyTorchのtorchaoとPT2E方式|eagerモードからの移行の現在地
PyTorchの量子化は、モデルを手で書き換えるeagerモードから、torch.exportで取り出したグラフに対して量子化を当てるPT2E方式へ移りました。手順は、エクスポートしたグラフに観測器を挿すprepare_pt2e、代表データを流すキャリブレーション、量子化演算へ置き換えるconvert_pt2eという3段です。QATを行う場合は準備側をprepare_qat_pt2eに差し替えます。
注意したいのは所在の変更です。量子化関連の開発はtorchaoへ集約が進み、2026年7月時点で公開されているtorchao 0.17系のドキュメントがPT2E方式を案内しています。torch.ao.quantization配下は非推奨へ移り、PyTorch 2.10系での削除方針が示されているため、新規実装はtorchao側で書き始めてください。
LiteRTでの整数量子化と、代表データセットを渡す変換の流れ
端末側で動かすモデルは、TensorFlow Liteの後継として整理されたLiteRTへ書き出します。名称は変わっても書き出し形式は.tfliteのままで、TensorFlow 2.21系の案内では実運用向けの位置づけです。変換器に既定の軽量化指定を渡すだけで重みのINT8化が入り、代表データを返す関数をrepresentative_datasetに渡すと活性化まで含めた完全整数化に進みます。
マイコンやNPUのように整数演算しか受け付けない環境では、入出力の型まで整数に固定する指定を明示してください。忘れると入口と出口だけ浮動小数点で残り、対象デバイスで読み込めません。端末側で処理を完結させる設計の判断材料はエッジAIとクラウドAIの違いと実装判断にまとめています。
ONNX RuntimeのQDQ形式と、TensorRTでの推論時の展開の違い
学習側と推論側を切り離す構成では、いったんONNX形式へモデルを変換してから量子化する経路が使えます。ONNX Runtimeの量子化はQDQ形式とQOperator形式の2系統で、QDQは量子化と復元のノードをグラフに挿す表現、QOperatorは量子化済み演算子へ直接置き換える表現です。扱える型はint8とuint8が中心になります。
QDQ形式を選ぶ利点は、下流の推論エンジンが自分の都合で融合できる点です。TensorRTはQDQ付きのONNXを取り込み、対応区間をINT8やFP8のカーネルへまとめ直します。QOperator形式で固めるとエンジン側の新しいカーネルに載らない場合があるため、サーバー推論を見据えるならQDQが無難でしょう。
量子化後の評価手順|精度劣化とレイテンシを同じ物差しで測る方法
量子化は、測らなければ効果も損失も判定できません。評価の型を先に決めておきます。
タスク精度とレイテンシとメモリを同一条件で測る評価の組み立て
測る指標は3つに絞ります。タスクそのものの精度、1件あたりの応答時間、そしてピークメモリです。応答時間は平均だけでなく95パーセンタイルまで見て、量子化前と同じハードウェア・同じバッチサイズ・同じ入力長でそろえてください。条件がずれた比較は、あとで必ず食い違いを生みます。
精度側は、学習に使っていない評価データで測ります。分類なら正解率とクラス別の再現率、生成タスクなら定型の評価セットに加え、案件固有の代表入力を数十件目視で確認する二段構えが効きます。数値が同等でも、日本語の言い回しが崩れる質的な劣化は指標に出にくいからです。
層ごとの感度を測って混合精度へ寄せる、精度を戻す手順の並べ方
目標に届かないときは、いきなりQATへ行かず順番に手を打ちます。粒度をper-tensorからper-channelへ上げ、次に値域の決め方をパーセンタイル方式へ変え、それでも足りなければ感度の高い層だけ16ビットへ戻します。
感度の測り方は単純で、1層ずつ量子化した状態と元の状態で出力の差を取り、差が大きい層を候補にします。入口の埋め込み層や出口の分類層は感度が高いことが多く、この2つを浮動小数点に残すだけで精度が戻る場合もあるでしょう。層単位で精度を混ぜるこの構成が混合精度で、圧縮率をわずかに落とす代わりに品質を確保します。
演算子の非対応でCPUへ落ちる失敗と、速度が出ない場合の切り分け
サイズは縮んだのに速くならない、という相談の多くは実行経路の問題です。量子化した演算子をアクセラレータ側が受け付けず、その区間だけCPUへ落ちて処理されると、区間の前後で型変換が入って往復の分だけ遅くなります。
切り分けは実行ログから始めてください。多くの推論エンジンは、どの区間をどのバックエンドへ割り当てたかを出力できるはずです。落ちている演算子が分かれば、対応する演算へ置き換える、その層だけ量子化から外す、対称量子化へそろえるといった手が選べます。エンジンの版を上げるだけで解消する例もあります。
量子化を採用すべき条件と見送るべき場面|受託開発での判断基準
ここまでの内容を、案件で使える判断に落とします。条件を満たさないなら、無理に量子化しないほうが総工数は小さくなります。
量子化を採用してよい条件|メモリ制約と同時実行数から決める線
採用してよいのは次の条件がそろったときです。第一に、モデルが載らない、または同時実行数が足りないというメモリ側の制約が実測で確認できていること。第二に、許容できる精度劣化の幅が発注側と合意できていること。第三に、劣化を測る評価データが手元にあること。この3つが埋まれば、INT8のPTQから着手して構いません。
効果が読みやすいのは、端末やオンプレミスのGPU1枚に収める案件です。1枚のメモリに収まるかで構成費が段違いになるため、4分の1の圧縮が調達コストの削減に直結します。クラウドのAPIを呼ぶだけの構成では、量子化はサービス提供側の領分です。
量子化を見送るべき場面|精度の要件と検証工数が見合わない条件
見送るべき場面もはっきりしています。医療画像の判定や与信のように、わずかな精度低下が説明責任に直結する領域では、量子化の得より検証の負担が上回ります。推論時間が全体のごく一部で、前処理やデータベース参照が支配的な構成でも効果は体感に届きません。
代替も検討してください。より小さなモデルへ置き換える、あるいは大きなモデルの振る舞いを小さなモデルへ移す知識蒸留のほうが、目標を満たす場合があります。最初から小型に設計されたSLM(小規模言語モデル)を選ぶ判断も有力な選択肢です。どの軽量化手段が案件の制約に合うかの見極めから入る進め方は、機械学習モデル開発の初期フェーズで実データを見ながら固めています。
よくある質問
量子化の検討で相談の多い論点に回答します。
量子化するとモデルはどれくらい小さくなりますか?
FP32からINT8ならおよそ4分の1、FP16からINT8なら約半分が目安です。重みだけを4ビットにするweight-only構成では、FP16比でおよそ4分の1まで縮みます。ただしスケールやゼロ点を保持する分が上乗せされ、粒度を細かくするほど上乗せは増えます。変換後のファイルサイズを実測してください。
量子化で精度はどの程度落ちますか?
タスクとビット幅で幅がありますが、per-channelの静的量子化によるINT8であれば、画像分類や物体検出で1ポイント以内に収まる例が多い水準です。INT4のweight-onlyでも、粒度を細かく取れば実用域に留まる場合があります。数値は必ず自前の評価データで測ってください。公開ベンチマークは案件のデータ分布とずれます。
PTQとQATはどちらから試すべきですか?
PTQからです。工数が桁違いに小さく、INT8で足りるケースが実務では大半を占めます。PTQで許容幅を超えた場合に限り、学習データと学習環境がそろっていることを確認してQATへ進んでください。学習データが手元にない受託案件ではQATが成立しないため、ビット幅を戻すか別の軽量化へ切り替える判断になります。
CPUだけの環境でも量子化の効果は出ますか?
出ます。むしろCPU推論のほうが体感しやすい場面もあり、整数演算命令を持つ環境ではINT8の行列積が浮動小数点より速く回る構成が一般的です。ただし効果の大きさは命令セットの対応状況に左右され、古い世代では変換のオーバーヘッドが上回ることもあります。導入前に、対象マシンで小さな検証を1本回して確かめてください。
量子化と蒸留やプルーニングはどう使い分けますか?
量子化は数値の表現幅を削る手法、プルーニングは不要な結合を削る手法、蒸留は小さなモデルへ振る舞いを移す手法です。工数が最も小さいのは量子化なので、まずここから入ります。届かないときに蒸留や置き換えを検討し、重ねる場合は1手ずつ効果を測ってください。
関連記事
- LLM量子化とは?仕組みとGPTQ・AWQ・GGUFの違い・企業の採用判断を解説【2026年版】:LLM固有の手法と採用判断を扱っています。
- GGUFとは?量子化モデルフォーマットの仕組みとGPTQ・AWQとの違い・採用判断を解説【2026年版】:量子化済みモデルの配布形式を整理しています。
- 知識蒸留(Model Distillation)とは?仕組み・実装手順とLLM軽量化の判断基準:量子化以外の軽量化手段を比較する材料になります。
- エッジAIとは?クラウドAIとの違い・仕組み・実装の判断基準を解説:端末側で推論を完結させる構成の前提条件をまとめています。
- LLM推論とは?仕組みと高速化の手法・推論基盤の選び方を実装視点で解説【2026年】:推論高速化の全体像と測定の前提を扱っています。