down-left-and-up-right-to-center量子化対応トレーニング(QAT)

Unsloth と PyTorch を使ってモデルを 4 ビットに量子化して精度を回復する方法。

PyTorchと協力して、UnslothにQAT(量子化対応トレーニング)を導入し、次を可能にします: 学習可能な量子化 できるだけ多くの精度を回復します。これにより、標準的な4ビット単純量子化と比べてモデル品質が大幅に向上します。QATは最大で 失われた精度の70% を回復し、 1–3% のモデル性能改善をGPQAやMMLU Proなどのベンチマークで達成できます。

無料の Qwen3(4B)ノートブックarrow-up-right

📚量子化

モデルを単純に量子化することは 事後量子化 (PTQ)と呼ばれます。例えば、8ビット整数に量子化したいと仮定すると:

  1. を探す max(abs(W))

  2. を探す a = 127/max(abs(W)) ここで a は int8 の最大範囲である127です

  3. 次のように量子化します qW = int8(round(W * a))

16ビットに戻すデクオンタイズは単に逆の操作を行い、 float16(qW) / a となります。事後量子化(PTQ)はストレージと推論コストを大幅に削減できますが、少ないビットで高精度値を表現する際に精度が劣化することがしばしばあります。特に4ビット以下では顕著です。これを解決する一つの方法は、 動的GGUF量子化を利用することです。これはキャリブレーションデータセットを使って、重要な重みにより多くの重要度を割り当てるよう量子化手順を変更します。もう一つの方法は、 量子化を賢くする、つまり学習可能にすること!

🔥賢い量子化

賢い量子化を可能にするために、私たちは TorchAOarrow-up-right チームと協力して 量子化対応トレーニング(QAT) をUnsloth内部に直接追加しました。これにより、Unslothでモデルをファインチューニングし、精度改善を伴う4ビットQATフォーマットとして直接エクスポートできるようになりました!

実際に、 QATは66.9%を回復し Gemma3-4BのGPQAにおいて、原精度を+1.0%上げています。Gemma3-12BはBBHで45.5%を回復し、 原精度を+2.1%向上させました。QATは推論時に追加のオーバーヘッドがなく、通常の単純量子化と同じディスクおよびメモリ使用量を利用します!つまり、低ビット量子化の利点をすべて享受しながら、精度を大幅に向上させることができます!

🔍量子化対応トレーニング

QATはトレーニング中に「フェイク量子化」した重みと任意で活性化をシミュレートします。これは通常、高精度の値を量子化された値に丸め(ただし高精度のデータ型、例:bfloat16のまま)、直ちにデクオンタイズすることを意味します。

TorchAOはまず(1)線形層にフェイク量子化操作を挿入し、(2)トレーニング後にフェイク量子化操作を実際の量子化およびデクオンタイズ操作に変換して推論準備を行うことでQATを実現します。ステップ1により、より正確な量子化表現を学習することが可能になります。

QAT + LoRA ファインチューニング

UnslothのQATはさらにLoRAファインチューニングと組み合わせることができ、トレーニング時のストレージと計算要件を大幅に削減しつつ量子化による劣化を緩和するという両方の利点を実現します!私たちは qat_scheme を通じて複数の方式をサポートしており、 fp8-int4, fp8-fp8, int8-int4, int4 などを含みます。今後のリリースでQATのカスタム定義を追加する予定もあります!

🫖QATモデルのエクスポート

Unslothでファインチューニングした後、次を呼び出して model.save_pretrained_torchao TorchAOのPTQフォーマットを使用してトレーニング済みモデルを保存できます。これらをHuggingFaceハブにアップロードすることも可能です!任意の設定をサポートしており、テキストベースの方法も提供し、誰にとってもプロセスをより簡単にする予定です。ただしまず、最終変換ステップのためにQATモデルを次のように準備する必要があります:

そして、どのQATスタイルを使用するか選択できます:

その後、マージされたQAT低精度モデルをvLLM、Unsloth、その他のシステムで推論に実行できます!これらはすべて Qwen3-4B QAT Colabノートブックarrow-up-right にもあります!

🫖トレーニングなしでのモデル量子化

また、QATを行わずに model.save_pretrained_torchao を直接呼び出すこともできます!これは単にPTQまたはネイティブ量子化です。例えば、動的float8形式で保存する例は以下の通りです:

📱ExecuTorch - モバイル展開向けのQAT

UnslothとTorchAOのQATサポートを利用すると、Unslothでモデルをファインチューニングしてシームレスに ExecuTorcharrow-up-right (PyTorchのオンデバイス推論向けソリューション)にエクスポートし、直接モバイルにデプロイすることもできます。動作例を ここarrow-up-right を使って示しており、より詳細なワークフローも準備中です!

発表は間もなく!

🌻QATを有効にする方法

Unslothを最新バージョンにアップデートし、最新のTorchAOもインストールしてください!

dataset[i]["audio"] 無料の Qwen3(4B)ノートブックarrow-up-right

💁謝辞

PyTorchおよびTorchAOチーム全体の支援と協力に大きな感謝を捧げます!QATに関する多くの議論やUnslothへの統合を手伝ってくれたAndrew Or、Jerry Zhang、Supriya Rao、Scott Roy、Mergen Nachinに特に感謝します。ExecuTorchチームにも感謝します!

最終更新

役に立ちましたか?