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

Strataの複数GPUレイヤー分割:設定と実測

各GPUが異なるレイヤー段階を担当し、メモリを単純に合算する機能ではありません。

Strataの複数GPU1モードはpipeline/layer parallelismで連続するモデルレイヤーを各カードに割り当てます。--gpus 0,2で選ぶか、設定のgpuとlayer_splitを調整します。RTX 5080+3090のCoder測定では入力処理量が約18~20%増え、デコード2は物語文とコードで結果が異なりました。NVLinkは不要ですが、遅いカードを追加しても必ず速くなるわけではありません。

実行条件と要点
  • レイヤー分割はモデルを連続した範囲に分け、GPUごとに別の段階を担当させます。
  • NVIDIAの複数GPU構成にNVLinkは不要で、GPU間の受け渡しはホストメモリを経由します。
  • モデルと条件を揃え、入力処理と回答デコードを別々に比較します。

レイヤー分割は各カードにモデルの範囲を割り当てます

Strataの複数GPUレイヤー分割は、1つのモデルの連続したレイヤー範囲を各カードに割り当てます。最初のGPUが前半を処理して渡し、次のGPUが後半を処理します。各カードは担当レイヤーの専門家キャッシュを持ち、最後のGPUは出力ヘッドとdraft/MTPレイヤーも処理します。

これは layer/pipeline parallelism です。GPU ごとに別のレイヤーを担当し、tensor parallelism3 のように一つのレイヤーの行列を複数の GPU に分割しません。

verify window ごとにトークン4データをホストメモリ経由でカード間に一度渡します。NVLink や GPU 間の peer-to-peer 接続は不要で、PCIe x4 や x1 でも実行できます。

黒いタワー型PCと画面が空白のモニター、その横に置かれたRAMモジュール
GPUごとに異なるモデルレイヤー範囲を担当します。

1枚のカードで専門家キャッシュが足りないときに追加を検討します

2枚でレイヤーを分けると、各カードが担当段階の専門家をキャッシュします。1枚では頻繁に使う専門家を十分に保持できない場合、2枚目のキャッシュによってデコード時のCPU5処理を減らせます。各カードにはdense weight、全文脈のKV状態、verify window、入力バッファも必要なため、VRAM6の合計だけでは適合性を判断できません。

カードを増やすと PCIe の転送負荷も増えるため、遅い GPU を追加しても常に速くなるわけではありません。Strata は 2 枚構成で分割位置を試し、専門家プロファイルを最も多く載せられる配置を選びます。

異なるアーキテクチャのカードを使う場合は、ランタイム7の対応状況とビルド条件を確認してください。NVIDIA と AMD を一回の実行で混在させる構成には対応していません。

2 枚目の VRAM が 8GB 未満の場合、セットアップツールが警告を表示します。各カードに dense weight とプロンプト8バッファが必要なため、VRAM が少ないと全体の配置が制限されます。

カードを追加する前に、現在の 1 枚構成でキャッシュヒット率と CPU 使用率を確認してください。2 枚目でどのボトルネックを減らすのか決めてから試すと、結果を判断しやすくなります。

セットアップまたは設定ファイルでGPUを選びます

WindowsではStrataフォルダーからSTART-HERE.bat --gpus 0,2を実行して2枚を選び、設定を保存します。Linuxでは./setup.sh --gpus 0,2を使います。NVIDIAの番号はnvidia-smiの順です。--gpus allは利用可能な対応カードすべて、--gpu 0はその起動だけ1枚を指定します。

設定ファイルではgpu配列とlayer_splitを指定します。gpuを[0, 2]、layer_splitをautoにすると自動配置になります。手動のlayer_split 26は、2枚目がレイヤー26から担当する意味です。3枚なら18,32のように後続段階の開始レイヤー番号を昇順で指定します。担当レイヤー数ではありません。

Strataは自動分割で選ばれたカード順を起動ログに表示します。後続のmain/0.1.41系の文書とsetup.pyでは、autoが高速なカードを最後に並べると説明されています。この自動並べ替えとgpu_order設定はv0.1.40.2にはないため、その版ではセットアップ画面と起動ログに表示された順序を基準にします。

クリーム色の木製デスクにグラフィックカード、RAM、NVMe SSDが置かれています
GPUを追加するときは各カードのメモリとPCIe経路を確認します。

5080+3090では入力処理の伸びがより大きくなりました

Ryzen 9 9950X3D、文脈32KでCoderを実行した測定です。RTX 5080単体とRTX 5080+3090の自動・手動分割を分け、2種類の入力長での処理量と、物語文・コード回答のデコードを別々に記録しています。

別構成で低速なRTX 2080 Tiを3枚目に加えると、物語文・コードのデコードは68・90 tok/sに下がりました。カード数やVRAM合計ではなく、追加カードで解消する処理上のボトルネックを確認してください。

左右にスクロールして各項目を比較できます。

Coderの測定:RTX 5080単体と5080+3090分割
構成16K入力 tok/s28K入力 tok/s物語文デコード tok/sコードデコード tok/s
RTX 5080単体1,726–2,0171,97083–8788–105
5080+3090・自動K=222,0372,07380109
5080+3090・手動K=262,0392,35784110

出典:Strata v0.1.40.2 MULTI_GPU.mdのCoder測定表です。入力処理量と回答デコードは別の処理なので、各列を分けて確認します。

組み立て済みPCケースの中に2枚のグラフィックカードが取り付けられています
2枚のグラフィックカードがPC内部に搭載されています。

用語の注釈

  1. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

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

    本文に戻る
  3. テンソル並列 — モデルの層内の行列や演算を複数の装置に分割して計算する方式です。部分結果をまとめるために装置間通信が必要です。

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

    本文に戻る
  5. CPU — OSや一般的なプログラム命令を実行する中央処理装置です。AIでは前処理やデータ転送などの汎用処理も担います。

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

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

    本文に戻る
  8. プロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
Strataの複数GPUモードはpipeline/layer parallelismで連続するモデルレイヤーを各カードに割り当てます。--gpus 0,2で選ぶか、設定のgpuとlayer_splitを調整します。RTX 5080+3090のCoder測定では入力処理量が約18~20%増え、デコードは物語文とコードで結果が異なりました。NVLinkは不要ですが、遅いカードを追加しても必ず速くなるわけではありません。
必要なメモリはどのくらいですか?
verify window ごとにトークンデータをホストメモリ経由でカード間に一度渡します。NVLink や GPU 間の peer-to-peer 接続は不要で、PCIe x4 や x1 でも実行できます。
選ばないほうがよいのはどのような場合ですか?
2枚でレイヤーを分けると、各カードが担当段階の専門家をキャッシュします。1枚では頻繁に使う専門家を十分に保持できない場合、2枚目のキャッシュによってデコード時のCPU処理を減らせます。各カードにはdense weight、全文脈のKV状態、verify window、入力バッファも必要なため、VRAMの合計だけでは適合性を判断できません。