量子化と投機的デコーディング
セルフホストモデルでは、メモリ削減にint8/int4量子化を、スループット向上に投機的デコーディングを使います。
「量子化と投機的デコーディング」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
セルフホストモデルの最適化
セルフホストのオープンモデルでは、速度とコストに大きな効果をもたらす方法が2つあります。
- 量子化— 重みを小さくし、RAM/VRAMの使用量を減らして推論を高速化します
- 投機的デコーディング— 1ステップで複数のトークンを生成します
量子化の基礎
モデルは通常、FP16(重みあたり16ビット)として保存されます。量子化によって、より少ないビット数に削減します。
- FP16— ベースライン
- INT8— 2分の1のサイズで、品質の低下はほぼ無視できる程度
- INT4 / Q4_K_M— 4分の1のサイズで、品質がわずかに低下
- INT2 / 1.58-bit— 8分の1以下のサイズで、品質が明確に低下
GGUFと量子化レベル
GGUFはllama.cppで使われる形式です。一般的なレベルは次のとおりです。
- Q4_K_M — 品質とサイズのバランスが最適
- Q5_K_M — やや大きく、品質もやや高い
- Q8_0 — FP16に近い品質で、2倍に圧縮
Quantise With llama.cpp
./llama-quantize models/llama-3-8b-f16.gguf models/llama-3-8b-q4_k_m.gguf Q4_K_M
# Or download pre-quantised from TheBloke / unsloth on HuggingFaceハードウェアへの影響
8BのFP16モデルには約16GBのVRAMが必要です。同じモデルをQ4にすると約5GBのVRAMに収まり、はるかに安価なGPUで実行できます。
投機的デコーディング
仕組みは次のとおりです。小規模な「draft」モデルでトークンを提案し、その後、大規模な「target」モデルで1回のフォワードパスで検証します。速度が2~3倍になることもよくあります。
from transformers import AutoModelForCausalLM
target = AutoModelForCausalLM.from_pretrained('meta-llama/Llama-3.1-70B')
draft = AutoModelForCausalLM.from_pretrained('meta-llama/Llama-3.1-8B')
outputs = target.generate(
input_ids,
assistant_model=draft, # speculative decoding
max_new_tokens=200
)機能する理由
draftはK個のトークンを提案します。targetはそれらをすべてPARALLEL(並列)に処理します(フォワードパスは1回です)。受け入れられたトークンはそれぞれ「無料」です。却下された場合はロールバックしますが、通常は大部分が受け入れられます。
その他のデコーディング高速化手法
- Lookahead decoding— 1ステップで複数のdraftを生成
- Medusa— 複数のデコーディングヘッドを共同学習
- EAGLE— 高速なツリーベースの投機
これらを実装するツール
- vLLM— 量子化(AWQ、GPTQ、FP8)と投機的デコーディングの両方に対応
- llama.cpp— 量子化に対応し、--draft-modelで投機的デコーディングを利用可能
- TensorRT-LLM— NVIDIAの本番用サーバー
- SGLang— 連続バッチ処理に対応した、高速でバッチ処理に適したサーバー
連続バッチ処理
vLLMの主要機能です。長さの異なる複数のリクエストを、同じフォワードパスで処理します。本番サーバーではスループットが大幅に向上します。
量子化レベルの選択
候補となる各レベルを、自分の評価セットでテストしてください。まずはQ4_K_Mを標準の出発点とし、品質がしきい値を下回る場合は、より高いレベルにします。
トークン単位のレイテンシーとスループット
最適化手法によって、改善できる指標は異なります。
- 単一リクエストのレイテンシー:投機的デコーディング
- 複数ユーザーでのスループット:連続バッチ処理
- メモリコスト:量子化
量子化の効果
int4量子化の主な効果は何でしょうか?
まとめ
メモリと速度のためにQ4へ量子化します。レイテンシーには投機的デコーディングを使います。スループットには連続バッチ処理を使います。vLLMとllama.cppは、これら3つすべてを実装しています。
よくある質問
「量子化と投機的デコーディング」レッスンは無料ですか?
はい。「量子化と投機的デコーディング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「量子化と投機的デコーディング」で何を学びますか?
セルフホストモデルでは、メモリ削減にint8/int4量子化を、スループット向上に投機的デコーディングを使います。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「量子化と投機的デコーディング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。