実行プログラムと拡張機能

3090アンロックでローカルLLMは速くなる?プリフィル・バッチ・デコード

1リクエストのデコードより、プリフィル・同時リクエスト・ファインチューニングで差が出る可能性があります。

RTX 3090のBF161アンロックは行列演算の処理量を上げますが、1リクエストのトークン2生成はメモリ帯域に縛られます。長い文書を一度に読むプリフィル3、複数リクエストをまとめるバッチ、LoRA4ファインチューニングは演算比率が高く、影響が出る可能性があります。ただし3090自体の公開測定値はまだないため、期待値を決めて自分で測るのが先です。

実行条件と要点
  • デコードは936GB/sの帯域に縛られ、BF16処理量が上がってもほとんど変わりません。
  • プリフィル・バッチ・LoRAは演算比率が高く、アンロックの影響が出る可能性があります。
  • 測定では電力上限とモデル・量子化を固定し、前後を同じ条件で比較する必要があります。

デコードは演算ではなく帯域がボトルネックです

1トークンずつ生成するとき、モデルは各段階で重みをメモリから読みます。RTX 3090の936GB/sがこの読み出し待ちを決め、BF16行列演算ユニットの処理量が速度を決めるわけではありません。演算率が上がっても1リクエストのtok/sはほとんど変わりません。

当サイトで公開した3090の測定も同じ方向です。Qwen3.8 27B UD-Q4_K_XL、MTP5 n-max 3の条件で、350W時に68.9 tok/s、250W時に51.0 tok/sでした。電力上限を下げると遅くなりますが、これは演算ではなくクロックと電力の問題です。

RTX 3090を挿したケース、色のブロックがコンベヤーで棚へ運ばれ、ネットワーク図のカードが置かれた作業空間
デコード速度はメモリ帯域に縛られ、演算アンロックだけでは大きく変わりません。

プリフィルは演算ボトルネックで変わる可能性があります

長い文書を一度に読むプリフィルは、入力トークン全体に対して行列積を実行する演算ボトルネックの段階です。BF16でプリフィルするランタイム6なら、アンロック後に最初のトークンまでの時間が短くなる余地があります。llama.cppの量子化7カーネルのようにBF16行列積を使わない経路では影響は小さいです。

どのランタイムがBF16でプリフィルするかはモデルとカーネルによります。同じモデルでもvLLMとllama.cppは同じ経路を使わないため、プリフィルの利得を計算するには使うランタイムのカーネルから確認します。

同時リクエストとバッチで差が広がります

複数リクエストを同時に処理すると同じ重みを再利用でき、帯域負担が減って演算比率が上がります。そのときはBF16処理量が全体の処理量を左右し得ます。連続バッチングを使うvLLMのようなサーバーでアンロックの効果が大きく出る理由です。

逆に1人が1件ずつしか送らない環境ではバッチが形成されず、この利点はほとんどありません。サーバー運用者か個人PC利用者かで期待値が変わります。

ファインチューニングと画像生成は別に見ます

LoRAファインチューニングはBF16行列積を多く使うため、理論上はアンロックの利得が最も大きい作業です。しかし3090の24GB VRAM8がバッチサイズ9と系列長を制限するため、演算率より先にメモリが制約になります。大きなバッチを回す人ほど効果の余地があります。

画像生成はモデル・解像度・ステップ数によって演算とメモリの比率が変わります。FP1610行列積が多い区間では助けになりますが、高解像度ではVRAMと帯域が先に制約になります。画像生成の前後差はモデル・解像度・ステップ数の組み合わせごとに変わるため、使う設定でそのまま測る方が早いです。

ファン一つの短いグラフィックスカードと、ファン二つの長いカードが並んだ図
同じ24GBカードでも世代と帯域が違うため、アンロックとは別に比較する必要があります。

電力固定で前後を比較して測ります

同じモデル・量子化・文脈長11・電力上限で基準線を測り、アンロック後にコールドブートで同じ条件を繰り返します。デコード12だけでは差がほとんど見えないため、プリフィル時間と同時リクエスト処理量も記録します。

作業別のボトルネックと期待値
作業ボトルネック期待
1リクエストのデコードメモリ帯域ほぼなし
長文プリフィル行列演算ランタイムのカーネル次第
同時リクエスト数行列演算バッチが大きいほど大きい
LoRAファインチューニング行列演算、VRAMVRAMが先に制約

それで買うべきか

アンロックはすでに持っている3090の演算余裕を確認する実験です。新しく買う理由としては弱く、デコードが目的なら5090や48GB改造など別の選択肢を見るべきです。3090の強みは24GBの容量と価格で、演算率ではありません。

判断は測定から出ます。同じカードで前後を測ってから決めてください。

RTX 3090の350W・300W・275W・250W上限ごとのデコード68.9・65.3・62.3・51.0 tok/sと、実測GPU電力347.7・298.7・274・249.5Wを棒で比較したチャート
電力上限を下げるとデコード速度が落ちるため、前後比較でも電力を固定します。

用語の注釈

  1. BF16 — モデルの数値に使う16ビット浮動小数点形式です。指数部はFP32と同じ幅で、同程度に広い値の範囲を表せます。

    本文に戻る
  2. トークン — モデルが入力や出力を分けて処理する単位です。

    本文に戻る
  3. プリフィル — LLMが入力プロンプトを読み、各トークンの内部表現を計算する段階です。プロンプトが長いほど処理するトークンが増えます。

    本文に戻る
  4. LoRA — 基本モデルの動作を調整する小さな追加の重みを学習・適用する方法です。基本モデルとアダプターを組み合わせ、画風の調整や少ないステップでの生成などに使います。

    本文に戻る
  5. MTP — 複数の将来トークンを一度に予測する学習目標、またはそれを行うモデル構成です。投機的デコーディングでは、その予測を候補トークンとして提案できます。

    本文に戻る
  6. ランタイム — プログラムの実行時に必要な機能を提供するソフトウェア環境です。ローカルAIではモデル実行エンジンを指すこともあります。

    本文に戻る
  7. 量子化 — モデルの重みや計算値を少ないビット数で表し、保存容量やメモリ使用量を減らす方法です。表現が粗くなるため、精度にも影響することがあります。

    本文に戻る
  8. VRAM — グラフィックカードのGPUが使うメモリです。モデルの重みや計算途中の値を保存します。

    本文に戻る
  9. バッチサイズ — 1回の処理単位にまとめる入力またはリクエストの数です。

    本文に戻る
  10. FP16 — 16ビット浮動小数点形式です。BF16とビット幅は同じですが、指数部と仮数部の配分が異なります。

    本文に戻る
  11. コンテキスト長 — 1回のリクエストでモデルが扱える入力と生成内容のトークン範囲です。上限や実際のメモリ使用量はモデルと実行設定によります。

    本文に戻る
  12. トークンのデコード — 入力とそれまでの回答をもとに、次の出力トークンを順に生成する段階です。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
RTX 3090のBF16アンロックは行列演算の処理量を上げますが、1リクエストのトークン生成はメモリ帯域に縛られます。長い文書を一度に読むプリフィル、複数リクエストをまとめるバッチ、LoRAファインチューニングは演算比率が高く、影響が出る可能性があります。ただし3090自体の公開測定値はまだないため、期待値を決めて自分で測るのが先です。
必要なメモリはどのくらいですか?
1トークンずつ生成するとき、モデルは各段階で重みをメモリから読みます。RTX 3090の936GB/sがこの読み出し待ちを決め、BF16行列演算ユニットの処理量が速度を決めるわけではありません。演算率が上がっても1リクエストのtok/sはほとんど変わりません。