メインコンテンツへスキップ
DGX Sparkが備える 128GB規模のユニファイドメモリプールは、最大の強みであると同時にチューニングの難点でもあります。個別のGPUの場合はVRAMが固定されシステムRAMとは分離されていますが、Grace CPUとBlackwell GPUは同一のメモリプールを共有します。このためメモリが枯渇すると、適切なメモリ不足エラーが発生する代わりにシステムが応答不能状態になってしまうのです。本ページではメモリがどのように消費されるか、KVキャッシュの適切なサイズ設定法、そしてワークロードに合わせたvLLMパラメーターの調整法を説明します。

How unified memory works on GB10

DGX Spark uses NVIDIA’s GB10 chip, which combines a Grace ARM CPU and a Blackwell GPU on one package. They share 128GB of LPDDR5X memory over a 273 GB/s interconnect. 専用のVRAMは存在しません。vLLMが「GPUメモリ」として割り当てる領域も、DGX OSやCUDAランタイム、その他のアプリケーションが利用する同一の 128GBプール内の一部に過ぎません。つまり以下のような特性が生じます。
  • gpu_memory_utilizationは全体プールの一部を制御するだけであり、専用のGPUメモリ枠を確保するわけではない。
  • システムプロセスも同じメモリ領域を争う形になる。DGX OSやバックグラウンドサービス、CUDAコンテキストのオーバーヘッドもモデルが利用可能なメモリ量を減少させる要因となる。
  • メモリ不足時の強制終了機能が存在しない。プールが枯渇すると、問題のプロセスが強制終了されるのではなくシステム全体がフリーズしてしまう。
現実的なメモリ予算の目安は次の通りです。

KV cache overhead on 128GB

KVキャッシュには、アクティブなすべてのシーケンス内の各トークンに対応するキー・値テンソルが保存される。そのサイズは 3 の要素によって増大する。具体的にはコンテキスト長、同時に処理されるシーケンス数、そしてモデルのアーキテクチャ(レイヤー数やKVヘッド数)である。

計算式

特定のコンテキスト長における単一シーケンス用として:
The factor of 2 accounts for both keys and values.

例:さまざまなコンテキスト長における70B型の密なモデル

一般的な70Bモデルで層数が80、KVヘッド数が8、ヘッド次元が128だと仮定すると:
FP8形式のKVキャッシュを利用してメモリ使用量を半減させることが可能です。vLLMの起動コマンド内で --kv-cache-dtype fp8 を設定してください。ほとんどのベンチマークにおいて品質への影響は 2% 未満であり、同時に処理可能なシーケンス数やコンテキスト長も実質的に倍増します。

例:35B形式のMoEモデル

MoE models have the same KV cache math as dense models for their total layer count. A 35B MoE model with ~64 layers at the same KV head configuration: At 35B MoE with NVFP4 weights (~18 GB), you can fit 128K context with FP8 KV cache and still have ~65 GB of headroom.

コンテキスト長とバッチサイズのトレードオフ

アクティブな各シーケンスにおけるすべてのコンテキストトークンがKVキャッシュメモリを消費します。全体のKVキャッシュ容量は以下の通りです。
実際には、DGX Sparkにおけるこのトレードオフは次のようになります。 For a 70B dense model at NVFP4 (~35 GB weights, ~75 GB remaining for KV cache):

実際のベンチマークとNVIDIAの主張との比較

NVIDIAがDGX Sparkについて公表した 82,739 トークン/秒 という数値は、複数ユーザーでのファインチューニング時の総スループットを示したものであり、単一ユーザーでの推論性能を示すものではありません。実際のインタラクティブなサービング時の数値は以下の通りです:
ここで示されている 82,739トークン/秒という数値は、複数の微調整処理が並行して行われた際の総合的なスループットを表している。単一ユーザー向けの対話型推論は別のワークロードであり、モデル規模やエンジンによって 15から120トークン/秒程度の速度が見込まれる。これでもリアルタイムのチャットやコーディングエージェント利用には十分な速さだ。

メモリ保護機能:システムのフリーズを防ぐ

DGX Sparkにおいて最も重要なチューニングパラメーターは --gpu-memory-utilizationである。この値を高く設定しすぎると復旧不可能なエラーでシステムがフリーズしてしまう。控えめな値に設定すればKVキャッシュの余裕が減少する。

推奨される初期値

DGX Sparkでは絶対にgpu_memory_utilizationを0.90より大きく設定してはいけません。 個別のGPUとは異なり、統合メモリが枯渇するとシステム全体が応答不能になります。復旧には強制電源リセットが必要になります。まずは控えめな値から始め、実際のワークロード下で安定性が確認できてから増やしていくようにしてください。

メモリ使用状況をリアルタイムで監視する

別のターミナルを開き、サービス実行中のメモリ使用量を確認してください:
もし memory.free の値が 2 から 3 GB未満まで下がると、システムがフリーズする恐れがあります。その場合は max_model_len、max_num_seqs、または gpu_memory_utilization の値を減らしてください。

各パラメーターの調整に関する参考情報

DGX Sparkにおいて最も影響力の大きい vLLM フラグを、影響度の高い順に示します:

決定表:一般的な設定例

チューニングの手順例

シングルユーザー向けのスループットを最大化する方法

Maximize concurrent users for 70B

大規模モデル用の最も安全な設定例

次に行うべき手順

DGX Spark上でのvLLMの利用方法

各モデルサイズごとのインストールおよび起動コマンド一覧

モデルの互換性について

どのモデルが128GBのメモリ容量に対応しており、どのような量子化オプションが利用可能か。

スパークを一つ使用する場合と二つ使用する場合の違い

メモリ調整だけでは不十分で、第二のスパークが必要になるケースについて

KVキャッシュの基本概念について

各種モデルアーキテクチャにおけるKVキャッシュの仕組みに関する詳細な解説