6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

あなたのボトルネックはどれ? — ローカルLLMを速くする手段の早見表(RTX 4070 実測)

6
Posted at

はじめに

ローカルでLLMを動かしてみたものの、「返事が遅い」「長い資料が入りきらない」「複数人で使うと待たされる」——そんな壁にぶつかっていませんか?

このブログでは RTX 4070(12GBのゲーミングGPU)1枚で、こうした困りごとを1つずつ実測しながらつぶしてきました。この記事は、その総ざらい——「どんな困りごとに、何をすれば、どれだけ速くなるか」を1枚の早見表にまとめたものです。仕組みの細かい話は各記事に譲って、ここでは「自分のケースに効くのはどれか」を最短で見つけられるようにします。

こんな困りごとに効く手段の早見表

こんな困りごと やること どれだけ変わるか(実測) 詳しくは
返事が全体的に遅い ① 量子化(モデルを軽くする) 約1.4倍速く(2B AWQ4、164 tok/s) 量子化・MTP比較記事
長い文章の生成が遅い ② 投機デコード(先読み生成)+ 量子化 約1.3倍速く(2B FP8+MTP n=1、147 tok/s) MTP基礎記事
長い資料が入りきらない・エラーになる ③ KVキャッシュをfp8に 96k tokensまで載る・速度劣化0.4%未満 FP8 KV Cache実測記事
複数人で使うと最初の返答まで待たされる ④ サーバをSGLangに 最初の応答待ち(TTFT)が最大1/8 エンジン比較記事
RAGで毎回同じ資料を読ませて2回目以降も遅い ⑤ prefix再利用(prefix cache) 2回目以降の待ちが最大88%減 prefix cache / RadixAttention 実測

自分の困りごとに近い行を見つけたら、対応する手段の節に飛んでください。


手段① 量子化 — 返事が全体的に遅いとき

困りごと: チャットで質問するたびに、とにかく返事が遅い。

対策: モデルの重み(パラメータ)を圧縮して小さくすることで、GPUが読み込む量が減り、そのまま生成速度が上がります。

実測結果(Qwen3.5-2B、Long生成、concurrency 1):

構成 tok/s FP16比
FP16 baseline 115.97 1.00x
FP8 123.88 1.07x
AWQ4(4bit) 164.05 約1.4倍

2B AWQ4でFP16比約1.4倍(164 tok/s)。FP8はそこまで伸びませんが、4B以上ではVRAMを節約して他の手段(投機デコードや長コンテキスト)を載せる土台になります。まず最初に試すべき手段です。

詳細: Qwen3.5-2B で Multi-Token Prediction を試す ② 量子化と MTP の組み合わせ比較


手段② 投機デコード — 長文の生成が遅いとき

困りごと: 要約や記事執筆など、長い文章を生成させると特に遅い。

対策: 「次の数トークンを先読みして予測し、まとめて検証する」方式(MTP / D-Flash など)で、うまくいけば1回の処理で複数トークン進みます。

実測結果(Qwen3.5-2B + qwen3_next_mtp、Long生成):

構成 tok/s baseline比
FP16 + MTP n=1 133.47 1.15x
FP8 + MTP n=1 147.34 約1.3倍
AWQ4 + MTP n=1 172.91 1.49x

2B FP8 + MTP n=1で約1.3倍(147 tok/s)。投機トークン数(n)は大きければよいわけではなく、2Bではn=1が最良でした。

重要な実用判断: 4B FP8に投機デコードを足しても、RTX 4070 12GB環境では約70 tok/sが上限です。速度重視なら「2B + MTP n=1(147 tok/s)」のほうが4B系の2倍以上速く、「4Bの品質がほしいなら4B、速度がほしいなら2B+MTP」という棲み分けになります。なお以前出回っていた「4B D-Flashで2.4〜2.6倍」という数字は特殊な計測条件(thinking ON)のもので、通常条件では再現しません。

詳細: Qwen3.5-2B で MTP を試す ① 基礎 / Qwen3.5-4B + D-Flash を 12GB GPU で動かす / 日本語だと D-Flash が伸びない?日英ベンチ比較


手段③ KVキャッシュ量子化 — 長い資料が入りきらないとき

困りごと: 長い資料やドキュメントを読み込ませようとするとエラーになる、または途中で切れる。

対策: 会話の文脈を保持するメモリ(KVキャッシュ)をfp8形式に圧縮すると、同じ12GBにより長い文章を載せられます。

実測結果(Qwen3.5-4B FP8):

KV dtype 起動できたmax_model_len 速度劣化
auto(16bit) 64kまで 基準
fp8 96kまで 0.4%未満

fp8 KVにしても生成速度はほぼ落ちません(劣化<0.4%)。これは「速くする」手段ではなく、速度を犠牲にせず載せられる長さを伸ばす手段です。長文RAGや長い会話履歴を扱うなら、まずここで「席を確保」してください。

詳細: VRAM 12GB 環境で FP8 KV Cache は実用投入できるか / 長文運用の限界 — FP8 KV Cache でより長い長文を処理する


手段④ エンジン選択 — 複数人で使うと待たされるとき

困りごと: 自分だけで使うときは問題ないのに、複数人で同時に使うと最初の返答が来るまで異常に待たされる。

対策: サーバのソフト(サービングエンジン)を変えると、最初の応答までの待ち時間(TTFT:Time To First Token)が大きく変わります。vLLMとSGLangを比較しました。

実測結果(Qwen3.5-4B FP8、並列8リクエスト同時):

指標 vLLM SGLang
生成スピード(aggregate tok/s) 277.66 465.35 1.68x
最初の応答待ち(p95 TTFT) 2,295 ms 277 ms 約8倍差
1トークンごとの遅延(p95 ITL) 20.4 ms 17.0 ms ほぼ同等

生成スピード自体はほぼ互角でも、最初の1文字が返るまでの待ちが約8倍ちがいます。SGLangは並列リクエストの捌き方が効率よく、複数ユーザーが同時に使う環境では体感が大きく変わります。なお、使用するattention backendの差(FlashAttention / FlashInfer / Tritonなど)はこのスケールでは1%以下でほぼ誤差でした。

詳細: vLLM × SGLang 準備編 / attention backend の実測検証 / 並列はどこまでスケールするか


手段⑤ prefix再利用 — RAGで毎回同じ資料を読ませているとき

困りごと: RAGやAgentで毎回同じ長文(system prompt・参照ドキュメント・tool定義)を先頭に積んでいるのに、2回目以降も毎回遅い。

対策: 一度処理したprefixの計算結果(KVキャッシュ)を使い回します。vLLMのprefix cache、SGLangのRadixAttentionがこれにあたります。毎回同じ宿題を渡して最初から読ませる代わりに、前回の答えの途中から再開するイメージです。

実測結果: 同じprefixの2回目以降、最初の応答待ち(TTFT)が最大88%減。prefixが長いほど効果は大きく、RAG / Agent運用に直撃する手段です。詳細はこちら:

prefix cache / RadixAttention の実測記事: 「ローカルLLMでのRAG の回答が遅い。それ、毎回同じ長文を prefill していませんか? — prefix cache / RadixAttention を RTX 4070 で実測」
vLLM prefix cache と SGLang RadixAttention を cache on/off × prefix 長 ~512〜8k で同条件比較し、2 回目以降の TTFT がどこまで落ちるかを定量化します。


まとめ — 困りごとから手段を選ぶ

こんな困りごと 使う手段 目安
返事が全体的に遅い ① 量子化(2BならAWQ4) 約1.4倍(164 tok/s)
長文生成が遅い ② 投機デコード + ① 量子化 約1.3倍(147 tok/s)、言語とacceptance率に注意
長いコンテキストが載らない ③ KV cache fp8 96kまで、速度ほぼ無劣化
複数ユーザーで体感を上げたい ④ エンジン選択(SGLang) 並列でTTFT約8倍差
同じ長文を毎回投げている(RAG/Agent) ⑤ prefix再利用 2回目TTFT最大88%減(→ 別記事

5つの手段は排他ではなく、組み合わせられます。土台に量子化を敷き、KV fp8で席を作り、用途に応じて投機デコード・エンジン選択・prefix再利用を足す——RTX 4070 12GBという限られた1枚でも、組み合わせ次第でかなり戦えます。


実験環境: RTX 4070 12GB / Ubuntu / vLLM nightly (v0.21.1rc1.dev243) / SGLang lmsysorg/sglang:latest / モデル: Qwen3.5-2B 系・RedHatAI/Qwen3.5-4B-FP8-dynamic

このブログの関連シリーズ:

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?