世界を動かす技術を、日本語で。

「DeepSeek」はスケールで安価だが、ローカルで運用すると高価な理由

概要

  • DeepSeek-V3 のようなモデルは、 大規模運用では高速・低コスト だが、 ローカル実行では非効率
  • バッチ推論 による スループットとレイテンシのトレードオフ が存在
  • GPU効率大きな行列演算(GEMM) で最大化
  • Mixture-of-Experts(MoE)モデル多層モデル は大きなバッチサイズが必要
  • 個人利用では高効率化が困難 な仕組み

DeepSeek-V3の高速・低コストな運用とローカル実行の非効率性

  • DeepSeek-V3大規模なバッチ推論 を前提とした設計
  • GPUは大きな行列演算(GEMM) を得意とし、多数のリクエストを一括処理することで 最大効率 を発揮
  • 個人利用や小規模環境 ではバッチサイズが小さくなり、 GPUリソースが非効率
  • バッチ推論 により 多数ユーザーのリクエストをまとめて処理、1リクエストごとに処理するより遥かに高速
  • ローカル実行 では 1ユーザー分のリクエストしか溜まらず、バッチ化の恩恵を受けられない

AIモデルの応答遅延とスループットのトレードオフ

  • スループット(処理能力)レイテンシ(応答速度)トレードオフ関係
  • バッチサイズを大きく すると スループットは向上 するが レイテンシは増加
  • バッチサイズを小さく すると レイテンシは減少 するが スループットは低下
  • ユーザーリクエストを一定時間(例:200ms)収集まとめて処理、効率優先の設計
  • バッチ推論複数ユーザーのトークン を同時に処理する仕組み

バッチ推論とGPU効率化の仕組み

  • GPUは大きな行列演算(GEMM) を一度に行うことで 最大効率 を発揮
  • 1トークンずつ処理 するより 複数トークンをまとめて処理 した方が圧倒的に高速
  • リクエストごとにキューにトークンを格納 し、 GPUサーバーがバッチ単位で一括処理
  • バッチサイズの調整スループットとレイテンシのバランス を最適化
  • 大規模運用では大量のリクエストが常にキューに溜まるため高効率

Mixture-of-Expertsモデルのバッチ依存性

  • Mixture-of-Experts(MoE)モデル多数の「エキスパート」層 を持つ特殊構造
  • 各エキスパート割り当てられたトークンのみ処理
  • バッチサイズが小さいとエキスパートが十分に活用されず非効率
  • 大きなバッチサイズ全エキスパートをフル活用高スループット を実現
  • DeepSeek-V3 のようなモデルは 高バッチ・高レイテンシ運用が必須

多層モデルとパイプラインバブル問題

  • 大規模モデル では 多数のトランスフォーマ層複数GPUで分担処理
  • 各GPUが一部の層を担当パイプライン化
  • 小さなバッチサイズだと「パイプラインバブル」 (GPUのアイドル時間)が発生
  • バッチサイズを大きくパイプライン全体を効率化
  • バッチ収集ウィンドウ を広げることで バブルを回避

なぜバッチ推論が不可欠なのか

  • Attentionステップのバッチ処理 には 同じ形状(シーケンス長)のトークンが必要
  • ユーザーごとにシーケンス長が異なるため完全な連続処理は困難
  • AttentionとFFNを同時に大きなGEMMで処理 することで メモリ効率も向上
  • バッチ推論の仕組み上、複数ユーザーのリクエストが常に必要

OpenAIやAnthropicの高速応答の理由

  • MoE構造や層数を抑えた効率的アーキテクチャの可能性
  • 独自の高度な推論最適化技術の導入
  • 必要以上に大量のGPUリソース投入による高速化
  • DeepSeek-V3のようなモデルは構造上、個人利用では効率化が難しい

まとめ

  • GPUは大きなGEMMで高効率バッチ推論が必須
  • バッチサイズ(収集ウィンドウ) による スループットとレイテンシの調整
  • MoEモデルや多層モデル大きなバッチサイズが不可欠
  • 個人利用ではバッチ化が困難なため非効率
  • 大規模サービスでこそ真価を発揮する設計

Hackerたちの意見

時間を節約したいなら、バッチ推論が答えだよ。要するに、複数の人の「プロンプト」を同時にモデルインスタンスに通すってこと。モデルインスタンスを厳密にタイムシェアする代わりにね。これが、温度を0に設定しても、固定のシードを使っても、サービスを利用したときに返信にバラつきが出る理由なんだ。他のプロンプトと一緒にバッチ処理されるから、自分のプロンプトだけをコントロールできないんだよね。これってデータ流出攻撃のベクトルになり得るのかな?多分、そこまで「調査」してないけど。

他のプロンプトと一緒にバッチ処理される なんでバッチ処理がバラつきにつながるの?

複数の人の「プロンプト」を同時にモデルインスタンスに通すってこと。 自分はプロバイダーがすべてのモデルでそうしてると思ってた。これってこの(ファミリーの?)モデルだけに通用するの?

他の人のプロンプトと混ざると、すごい攻撃ベクトルになりそうだね。

すごい、まるでDeepseekの素晴らしいパフォーマンスは賢いエンジニアたちの最適化の結果みたいだね。

平均バッチサイズはどれくらい?

バッチ処理。そうだね。ローカルで役立つことの一つは、特定のコンテンツを評価して、それがハルシネーションしていないか確認したいときだね。だから、3回か5回、あるいは…バッチサイズ回投げるんだ。)バッチ処理が最初からあったのは興味深いけど、人々がそれを理解するのには時間がかかるんだね。

自分はMLの研究者でもエンジニアでもないから、話半分に聞いてほしいけど、この投稿にはちょっと混乱してる。Deepseek V3/R1は、通常のローカルモデルに比べてサイズが大きすぎて、ローカルで動かすのは高くつくんだ。アクティブなパラメータの数はフルモデルサイズより明らかに少ないけど、それは計算要件を助けるだけで、メモリ要件には関係ない。複数のH100がない限り、V3/R1はローカルで実用的なスタントとしてしか動かせないし、モデルの一部または全部が低帯域幅のメモリに保存されてる。Deepseek V3のサイズをプロプライエタリなフロンティアモデルと比べることはできないよね、だってそのモデルのサイズもアーキテクチャも全然わからないから。比較されてるモデルは「スケールで高価」だから、ローカルでは全く動かせないけど、ローカルで安く動かせるとは思えないよね?ここで言われてるのとは逆の効果が期待されるはずじゃない?MoEはローカル/シングルユーザーのシナリオにはいいトレードオフだと思う。バッチ処理が難しくて効率が悪いってデメリットは関係ないからね。 > 大きなバッチはレイテンシを上げる、ユーザーのトークンがバッチが十分に満たされるまで200ms待つことがあるけど、フィードフォワードステップでより大きくて効率的なGEMMを可能にすることでスループットを向上させる 本当に掛け算される行列が大きいの?自分の考えでは、バッチ処理の目的は大きな入力行列を得ることじゃないと思ってる。ボトルネックをメモリ帯域幅から計算に移すことが目的だと思う。行列はすでに全体のモデルやレイヤーのサイズよりもずっと小さく分割されてるから、HBMからSRAMに重みの一部をロードして、そのスライスの掛け算をして、すべてのタイルが処理されたら結果を集計するって感じ。バッチ処理を使うと、同じ重みで複数の計算ができるから、メモリ帯域幅あたりの効果的なFLOPSが増えるんだ。 > OpenAIとAnthropicのモデルがすぐに応答するってことは、つまり: それって本当に事実なの?投稿には、3つのプロバイダーのファーストトークンまでの時間に関する数字が全くないよ。

こんにちは、投稿したのは僕です!自分もMLの研究者じゃなくて、ただ興味があるエンジニアだから、いくつかのことを間違えてるかもしれない。 > MoEはローカル/シングルユーザーのシナリオにはいいトレードオフだと思う。バッチ処理が難しくて効率が悪いってデメリットは関係ないからね。言いたかったのは、シングルユーザーのシナリオでは、GPUあたりのスループットが劇的に悪化するってこと。マルチユーザーのバッチ処理の利点を享受できないから(もし彼らが何らかの形で大規模な並列推論リクエストをしていない限り、だと思う)。 > 本当に掛け算される行列が大きいの?自分の考えでは、バッチ処理の目的は大きな入力行列を得ることじゃないと思ってる。ボトルネックをメモリ帯域幅から計算に移すことが目的だと思う。自分の理解では、ボトルネックをメモリから計算に移すために大きな入力行列が必要なんだ。全くバッチ処理をしないと、掛け算されるサイズが小さくなる(重みは同じだけど、重みと掛け算する次のトークンデータは1xdimになるから、バッチサイズx dimではなくなる)。だから、GPUが十分に活用されず、推論はメモリ操作に時間を使いすぎて、掛け算に使う時間が減る。 > 投稿には、3つのプロバイダーのファーストトークンまでの時間に関する数字が全くない。具体的な数字を探すべきだったけど、DeepSeekや他のモデルを試した人は、DeepSeekが明らかに遅いって気づくと思う。

エキスパートの混合はより大きなバッチサイズを必要とする それとも、低バッチサイズ(理想的には=1)のためのAppleシリコン。統一メモリは、通常のGPUよりも帯域幅/FLOPSが低いため、モデルが遅くなる代わりに大きなモデルを動かすことを可能にする。でも、MoEは毎回少数のパラメータしか計算しないから、計算ニーズは低いんだ。Macでのシングルバッチ推論に対して、Deepseekの良い速度を報告してる人も見たことあるよ。でも、多くの人にとっては、十分なメモリを得るのにお金がかかるから、まだ高いって感じる。ある意味、MoEモデルはMac(または同様のマシン)にぴったりだよね。対照的に、アップグレードしたRAMサイズのMacを注文して、VRAMに収まる密なモデルを動かすのは非常に苦痛だ。

簡潔に説明すると: - 高いスパース性は、各行列の掛け算が十分な算術強度を持つために、非常に大きなバッチサイズ(同時に処理されるリクエストの数)が必要になる。 - そんなに大きなバッチサイズでは、HBMに重みやMLA/KVキャッシュを収めるために、かなりの数のGPU(タイプによっては8-16台)が必要になる。でも、8-16台のGPUしかないと、合計スループットが低すぎて、多くの個々のユーザーリクエストがほとんどのアプリケーションにとって受け入れられないほど遅くなる。だから、良いユーザー体験のためには256台くらいのGPUが必要だね。

16台のH100(2ノード)で運用してるよ。リクエストごとに50〜80トークン/秒出てるし、合計で数千も見たことある。TTFTはかなり安定してる。使えるクラウドサービスより速いよ。

高いスパース性は、すごく大きなバッチサイズが必要ってことだよね。ここで君が言ってるつながりがよくわからないんだけど? スパースなマトリックス乗算って、実際にはゼロが入ったマトリックス乗算だと思ってるの?笑

これは面白いブログ記事だね。一般的な結論(「バッチ処理が必要」)は正しいけど、Mixture of Experts(MoE)モデルの推論は実際にはもう少し複雑なんだ。大きなバッチが必要な主な理由は、LLMの推論が計算能力に制限されているわけじゃなくて、VRAMから全ての重みを読み込むことに関係しているからだよ。H100のTFLOPS数とメモリ帯域幅を比べてみると、基本的に1バイトあたり300FLOPの余裕があるんだ。だから大きなバッチが必要なんだよ:メモリから読み込むパラメータや重みに対してたくさんの操作を行えるからね。この制限は「ルーフラインモデル」と呼ばれることが多い。モデルが大きくなると、もはやスケールしなくなる。なぜなら、モデルの重みがGPUメモリに収まらなくなって、GPUやノードに分散させる必要が出てくるから。NVLinkやInfinibandを使っても、これらの通信はVRAMからの読み込みより遅いんだ。NVLinkはテンソル並列処理にはまだ使えるけど、ノード間ではかなり遅い。MoEが可能にするのはエキスパート並列処理で、異なるノードが異なるエキスパートをメモリに保持して、ノード間の通信をあまり必要としないんだ。これは、すべてのエキスパートをVRAMに保持できるだけのノードがあって、他のもの(KVキャッシュや他の重みなど)に十分なオーバーヘッドがある場合にのみ機能する。だから、自然に可能なバッチサイズはかなり大きくなるよ。そしてもちろん、すべてのGPUが実際に働いていることを確認するために、これを最大化したいよね。

単一ノードで異なる「エキスパート」をラウンドロビン方式で読み込んで、同じ「エキスパート」に依存する複数のリクエストが同時にあるときだけ「バッチ」を集約することもできるよ。違いは、「バッチ」ではなく、実際にはキューだけになるってこと。もちろん、これにはかなりの遅延の増加が伴うけど、多くのアプリケーション(「深い研究」ワークフローなど)にはそれが許容されるんだ。

これがAMDの投資ケースなんだけど、モデルが全部一つのシャーシに収まるんだよね。それに、計算をつなぐための関税がかからないネットワーク機器が少なくなるっていう副次的なメリットもある。クラスタリングされた計算の代わりにマップ/リデュースを使う感じ。追記:ダウンボートする時は、どうして反対なのか教えてくれると嬉しいな。

すべてのノードと重みを持つネットワークをアナログ回路に展開して、超高速にできるのかな?

モデルが大きくなるにつれて、もうスケールしなくなる。なぜなら、モデルの重みがGPUメモリに収まらなくなって、GPUやノード間で分散させる必要があるから。NVLinkやInfinibandを使っても、これらの通信はVRAMからの読み込みより遅い。NVLinkはテンソル並列処理にはまだ使えるけど、ノード間ではかなり遅い。推論はレイヤーを計算して、次のレイヤーに入力として送る非常に小さなベクトルを持つことで機能する。モデルが単一のGPUに収まらない場合は、レイヤーに分割して、次のレイヤーを持つGPUにベクトルをファブリック経由で送るだけ。転送は非常に迅速に行われるから、アイドル時間はほとんどなくて、次のレイヤーを計算できる。セレブラの地球上で最速の推論は、この技術を使ってLlama 4 Maverickで2500T/secを実現してるよ。

これはLLMの視点からの素晴らしい説明だね。計算スケジューリングの詳細な説明も見てみたいな。ハイパースケールのLLM企業は、ボトルネックやアイドルバブルを特定するために計算トレースを徹底的に調べて、負荷分散装置やパイプラインアーキテクチャ、スケジューラーを開発しているんじゃないかな。効率のためのバッチ処理の要件は、高セキュリティアプリケーションをかなり難しくする。なぜなら、無関係なクエリを隔離する通常の手法が非常に高価になってしまうから。nVidiaのvGPUはGPUメモリを時間で共有するけど、スイッチするたびにコンテキストスイッチのアンロード/リロードが必要で、重複排除があるかは疑問だね。マルチインスタンスGPU(MIG)はGPUメモリをユーザー間で分割するけど、固定パーティショニング方式だから(変更するにはGPUを再起動しなきゃいけない)、96GBのGPUを4つの24GBに分けたくない人がほとんどだよね。GPUボードにセカンドレベルメモリ(普通のDRAM)を載せることのトレードオフが気になるな。そうすれば、異なるマトリックスデータをPCIeよりも早く読み込めるようになるから、HBMがキャッシュになるんだ。著者のソフトウェアエンジニアリングに関する本の正直さもすごく好きだよ。ドライなIEEE的なものじゃなくて、大企業でのサバイバルガイドみたいな感じ。

「遅くて高価」ってわけじゃないけど、そういう可能性もあるかもね。DDR4メモリを使った2世代前のワークステーションシステムで、約1Kで3トークン/秒が出せるよ、llama.cppを使えばね。

あなたはおそらく、本物のディープシークとその簡略版を混同してるね。192GB以上のRAMがない限りは。

ここにはまだソフトウェアの最適化のチャンスがたくさんあるよ。問題は、実際にDeepseekの最適化を受けるシステムが、1つは小さなGPUと大量のRAM(ktransformers)を持つものと、もう1つは全てのVRAMを持っているシステムだけってこと。例えば192GBのVRAMと標準メモリ(DGXステーション、2xRTX Pro 6000、4xB60 Dualなど)を持つシステムは、理論的にはDeepseekを4bitでかなり早く動かせるはず。Deepseekを中国語でプロンプトしないと、多くのエキスパートが起動しないんだよね。これはプルーニングには簡単な仕事になるけど、やっぱりこれから数年でエンスージアスト向けのシステムが進化して、こういうソフトウェアの最適化がもっと大規模に役立つようになると思う。Redditに16x 3090のシステムを持ってるユーザーがいて(PCIE 3.0 x4のインターコネクトで、テンソル並列処理中にフルバンド幅を使ってないみたい)、llama.cppで7トークン/秒を出してるんだ。単体の3090は24GBのメモリを1秒間に39回スキャンできるだけのVRAM帯域幅があるから、パフォーマンスを制限している何か別の要因があるんだろうね。

単体のMI300xは192GBのVRAMを持ってるよ。

これを見て、AI、特に推論におけるスケールメリットがすごいことを思い出した。人々がLLMが商品化されると言うとき、市場がすごく競争的になるとは思えないんだよね。AIのスケールメリットがさらに大きくなるにつれて(トレーニングコストが増加 + バッチ推論など)、結局3社くらいがLLMを支配する可能性が高いと思う。

推論コストについては、AWSがHetznerより5〜10倍高いっていうのは、クラウドプロバイダーと専用サーバープロバイダーの違いがどうなのか理解できないな。クラウドプロバイダーは、提供する際に余計なコストをたくさん上乗せするみたいだね。

私はDeepseek V3をローカルで日常的に使ってるけど、手頃で速くて効果的だと思ってる。この記事はGPUを前提にしてるけど、私の意見ではこういう大きなモデルをローカルで扱うには最適じゃないと思う。私は約4000ドルで全て込みのSupermicroマザーボードを使った中程度のEPYC 9004シリーズのホームサーバーを運用してる。これは384GBのRAMを持つ単一CPUマシンで(64GBのメモリを使えば768GBにできるけど、もっと高くなる)、GPUがないから電力消費はゲーミングデスクトップよりも少ないよ。RAMの制限があるから、Unsloth Dynamic GGUFを使ってるけど、実際の使用では元のものに非常に近いパフォーマンスを発揮してる。約270GBで、コンテキストに十分な余裕がある。普段は16kのコンテキストを使ってるけど、他の用途もあるから、もっと必要な時は24kに増やせる。トークンは1秒あたり約9〜10個取れるけど、大きなコンテキストだと7トークン/秒に落ちる。似たようなセットアップで2つのCPUを使ってる人もいて、同じくらいのトークン/秒でフルバージョンを動かしてる人がたくさんいるよ。

あなたのプロンプト処理速度はどれくらいですか?この状況では、出力TPSよりもこっちの方が大事だよね。答えが出るまでに数分待たされると、クラウドホスティング版よりもずっと悪くなるから。

すごいね。あなたの個人ウェブサイトがダウンしてる。HNではプライベートメッセージが送れないし。私はジェフ・カーです。デジタルオーシャンの共同創設者なんだ。ここにメールアドレスを投稿できるかは分からないけど、試してみるよ。私のアドレスは: wit AT wit com

CPUは静かにBS 1推論にとって非常にバランスの取れたマシンになってきてるね。最新のインテル・ゼオンは約20 TPSくらいだと思う。