Strataで2枚目のGPUをどう使うか|層を分ける方式と補助キャッシュの違いをRTX 5080+5060 Tiで検証

Strataで2枚目のGPUを使う 層を分ける方式と補助キャッシュを比較(比較図) ローカルAI環境

この記事の要点

メインより演算性能が低い2枚目を細い接続で足し、モデルのファイルが2枚の VRAM にも収まらない構成の1例 (RTX 5080 に OCuLink 外付けの RTX 5060 Ti) では、Strata 0.1.39〜0.1.41 で試した構成のどれも、入力の読み込みが 5080 だけのときより遅かった。同じような構成で2枚目を足すなら、起動ログで2枚目の受け持ちを確かめ、同じ入力で1枚の起動と比べてから使い方を決める。

自動の層分割は 0.1.39 でも 0.1.41 でも 5060 Ti に最少の層しか渡さず、0.1.41 では出力の生成の速さ (中央値) も 5080 だけのときより低かった。

補助キャッシュは入力の読み込みを 5080 に残す方式だが、最初の文字が返るまで (0.1.39) も長い入力の所要 (0.1.40) も 5080 だけのときより長かった。0.1.40 で答えの崩れを見た確認では、5080 だけのときと同じくすべて合格した。

2枚目が受け持つものは方式で違い、この PC で試した構成では入力の読み込みはどれも1枚より遅かった

ここで測ったのは、メインの GPU より演算性能が低い2枚目を x4 の外付けのような細い接続で足し、モデルのファイルが VRAM に収まらずエキスパートの多くをメインメモリに置く構成だ。この PC の RTX 5080 と、OCuLink で外付けした RTX 5060 Ti はその1組で、同じ特徴を持つ別の組で同じ結果になるかは確かめていない。動かした Qwen3.8-Flash-Next の IQ3_S は、配布されている2つのファイルの合計 (ダウンロードの量) が約84GB あり、2枚の VRAM (各16GB) を合わせても収まらない。Strata はエキスパート本体をメインメモリに置き、よく使うものを GPU のエキスパートキャッシュ (VRAM 上の、エキスパートを置いておく領域) に載せて計算する。公式の測定記録には、使われるエキスパートのほぼすべてが速い2枚のキャッシュに載る構成で、手で選んだ分け方のとき入力の読み込みが 5080 1枚より速くなった例がある。公式の文書は、使われるエキスパートが速いカードに収まらないときは枚数を増やす価値があるとも書くが、5080 と 3090 の測定記録ではその場合は試せていない。この PC はモデルのファイルが2枚の VRAM に収まらない点で公式の測定と違うが、使われるエキスパートが収まらない場合にあたるかは確かめていない (数値と基準の注意は「公式の測定との違い」の節)。

2枚目の使い方として試したのは、モデルの層を2枚に分けて受け持たせる層分割 (layer split) と、2枚目に追加のエキスパートを置いて 5080 を手伝わせる補助キャッシュ (helper expert cache) の2つ。見たのは、入力の読み込み (prefill。入力をまとめて読む段階) と、出力の生成 (decode。1トークンずつ出していく段階) のどこが変わるかだ。層分割には K という値が出てくる。K は後ろのカードが受け持ち始める層の番号 (先頭のカードは層 0〜K-1) で、入力の長さとは別のものだ。

Strata のバージョン (ver) の読み方

  • 0.1.39 (2026年10月6日): 層分割 (自動と K=32) と補助キャッシュ (最適化のオプション --remote-expert-opt なし・あり。中身は「Strataで2枚目のGPUを使う3つの方法」の節) の速さを測った。
  • 0.1.40 (同じ日): 補助キャッシュで答えの合否と長い入力の所要を確かめた。0.1.40 では層分割を測っていない。測ったのは10月6日時点の 0.1.40 で、その後の 0.1.40.1〜0.1.40.4 では測っていない。
  • 0.1.41 (2026年10月9日): 自動の層分割の分け方が変わったため、自動の層分割と 5080 1枚の速さだけを測り直した。0.1.41 では K=32 と補助キャッシュを測っていない。

peer tier (GPU 間の直接転送を使う方式)、同じ型番の GPU を2枚つないだ構成、x16 での接続、Linux、3枚以上の構成は試していない。

約32,000 トークンの入力で最初の文字が返るまで (中央値) を見ると、2枚を使った構成はどれも 5080 1枚より長かった。

  • 0.1.41 の自動の層分割 (K=2、5060 Ti が先頭) は 32.7秒で、5080 1枚 (9.02秒) の数倍かかった。
  • 0.1.39 では、自動の層分割 (K=47、5080 が先頭) が 62.1秒、K=32 (5080 が先頭) が 15.2秒、補助キャッシュが最適化なし 13.1秒・あり 13.3秒で、どれも 5080 1枚 (8.86秒) より長かった。

0.1.40 では、最初の文字が返るまでではなく、1リクエストの所要を見た。約240,000 トークンの入力で、補助キャッシュ (最適化あり) は 5080 1枚の 82.0秒に対して 112.4秒かかり、その大半はエンジンが記録した入力の処理時間 (prompt_ms) だった。層分割と補助キャッシュを同じ観点で並べた表は「2枚目をどう使うか」の節に置いた。

このほか、Windows では2枚目を使った構成で、エキスパートを置いたメインメモリのうち中継を挟まずに GPU が直接読める部分が、5080 1枚の 46GiB 分から 7GiB 分に減っていた。8GiB の上限を変えた測定はしていないので、これが遅さの原因かどうかは分からない。詳しくは「Windowsで2枚目を使うと、GPUが直接読めるメインメモリが減る」の節にまとめた。

Strata の基本の使い方や、別の量子化で層分割の分け方を5通り試した結果は「Strataで125BのQwen3.8-Flash-NextをVRAM 12GB・16GBで実測」で扱っている。

Strataで2枚目のGPUを使う3つの方法

Strata の公式ドキュメント (v0.1.41 の SECOND_GPU.md と MULTI_GPU.md) の記述を整理すると、2枚目の GPU の使い方は次の3つになる。公式が「3つ」と数えているわけではない。オプションの値の書き方は、この2つの文書に任せる。

  • 層分割 (--layer-split): 層を2枚に分けて置く。
  • 補助キャッシュ (--expert-cache-device1): 2枚目に追加のエキスパートを置き、1枚目を手伝わせる。
  • peer tier (--peer-device): GPU 間の直接転送 (P2P や NVLink) を使う。0.1.41 では入力の分担に限り P2P なしでも動かせる。

公式の記述では、peer tier は層分割とも補助キャッシュとも併用できない。

MULTI_GPU.md の説明によると、層分割ではどのカードも密な重みのコピー、会話の状態 (KV キャッシュ)、入力を読むためのバッファ、受け持つ層のエキスパートキャッシュを持ち、最後のカードは出力ヘッドと先読み用の層も持つ。エキスパート本体はメインメモリに1つだけ置き、どのカードにも無いものは CPU が計算する。カードの間の受け渡しは、先読みした下書きをまとめて検証する1回 (verify window) ごとに1回だけで、NVLink や P2P は要らないとされている。

補助キャッシュは、SECOND_GPU.md によると、1枚目が密な層・KV キャッシュ・MTP (次の数トークンを先読みして下書きする層。下書きは本体のモデルが検証する)・自分のエキスパートキャッシュをそのまま持ち、2枚目は追加のエキスパートを持つ。入力の読み込み (prefill) は1枚目だけが行い、2枚目は出力の生成 (先読みの検証を含む) を手伝う。こちらも P2P は要らないとされる。

補助キャッシュには最適化のオプション (--remote-expert-opt) がある。SECOND_GPU.md では、エンジンの既定はオフで、0.1.39b からはセットアップ (Strata の起動の設定を作る手順) が2枚以上の構成に付けると書かれている。最適化ありでは、2枚目が自分の計算したエキスパートの結果を足し合わせてから1トークンにつき1つのベクトルとして返し、CPU で計算されていたよく使うエキスパートを、あまり使われないものと入れ替えて引き受ける。加算の順序が変わるので、出力がビット単位で同じになるとは公式も言っていない。働くのは補助キャッシュがあるときだけで、層分割は付けても従来どおりに動く。0.1.41 の MULTI_GPU.md は、層分割だけの構成ではこのオプションは何もしないので、セットアップはそこには付けなくなったと書いている。

この記事の層分割の構成 (0.1.39 の自動と K=32、0.1.41 の自動) は --remote-expert-opt を付けて起動したが、公式の説明どおりなら層分割には働かないので、最適化のあり・なしの比較にはなっていない。最適化の有無は、補助キャッシュの構成で別に測った。

起動ログに出た割り当てを次の表にまとめた。列「入力を読む区切り」は入力を何トークンずつ読むかの単位で、詳しくは「層を分ける方式:自動は5060 Tiに最少の層しか渡さなかった」の節で扱う。列「Strata」は測った ver を示す。

構成 Strata 5080 が受け持つ層 5060 Ti が受け持つもの 5080 のエキスパートキャッシュ 5060 Ti のエキスパートキャッシュ 入力を読む区切り
RTX 5080 1枚 0.1.41 全48層 なし 3752個 (7.17GiB) - 8192トークン
層分割・自動 (K=2) 0.1.41 2〜47と出力ヘッド 層0〜1 (先頭) 3880個 (7.44GiB) 1024個 (1.76GiB) 2048トークン
RTX 5080 1枚 0.1.39 全48層 なし 3762個 (7.19GiB) - 8192トークン
層分割・自動 (K=47) 0.1.39 0〜46 (先頭) 層47と出力ヘッド 4533個 (8.58GiB) 512個 (1.27GiB) 768トークン
層分割・K=32 0.1.39 0〜31 (先頭) 層32〜47と出力ヘッド 4795個 (8.85GiB) 4093個 (8.22GiB) 8192トークン
補助キャッシュ (最適化なし・あり) 0.1.39 全48層 追加のエキスパート 3832個 (7.32GiB) 7548個 (14.28GiB) 8192トークン

層は 0 から数えて48層ある。エキスパートキャッシュの「個」は (層, エキスパート) の組の数。0.1.41 の自動ではカードの順序が入れ替わり、5060 Ti が先頭になった。補助キャッシュの最適化なし・ありは割り当てが同じだったので1行にまとめた。5080 は画面表示にも使っていて、その分の VRAM も使っている。5060 Ti のエキスパートキャッシュの列を見ると、層分割の自動では 512〜1024 個、K=32 では 4093 個、補助キャッシュでは 7548 個で、方式と分け方によって2枚目に載る量が大きく違う。

5060 Ti は OCuLink の PCIe 4.0 x4 で外付けしている。起動時に測られたメインメモリから GPU への転送は、5080 が 40GB/s 台、5060 Ti が 7.0GB/s で、接続の速さだけを変えた測定はしていないので、この差が結果に効いたのかどうかも分からない。2026年10月9日にこの PC で nvidia-smi topo -p2p r を実行すると、5080 と 5060 Ti の間の P2P の読み取りは NS (対応していない) と表示された。0.1.41 のリリースノートによると、P2P の無い GeForce の組でも、peer tier の入力の分担を、メインメモリ上の受け渡し用の領域を経由して使えるようになった。既定ではオフで、公式の例では生成が4〜5%遅くなり、答えの下位のビットが変わるとされる。この記事では peer tier をどちらの経路でも試していない。

0.1.41で自動の層分割と5080 1枚を比べた

0.1.41 で、5080 1枚と自動の層分割 (K=2、5060 Ti が先頭) に同じ入力を送った結果を示す。条件は「検証環境と測り方」の節にまとめた。

構成 最初の文字まで 約1,000 最初の文字まで 約4,000 最初の文字まで 約32,000 約32,000 の読み込み 約32,000 の生成
RTX 5080 1枚 1.24秒 1.60秒 9.02秒 3,522 tok/s 82.6 tok/s
層分割・自動 (K=2) 2.32秒 5.29秒 32.7秒 969 tok/s 57.0 tok/s
最初の文字が返るまで (Strata 0.1.41、中央値)5080 1枚と自動の層分割で、入力の長さごとに最初の文字が返るまでの時間を比べる5080 1枚 約1,0001.24秒層分割・自動 約1,0002.32秒5080 1枚 約4,0001.60秒層分割・自動 約4,0005.29秒5080 1枚 約32,0009.02秒層分割・自動 約32,00032.7秒単位: 秒
図: Strata 0.1.41・IQ3_S・RTX 5080 と RTX 5060 Ti (OCuLink の PCIe 4.0 x4)。各5回の中央値、2026年10月9日測定。思考なし・温度0

約1,000〜約32,000 トークンのすべてで 5080 1枚のほうが最初の文字が返るまでが短く、入力が長いほど差が開いた。

生成の速さ (エンジンの記録の中央値) も、約1,000・約4,000 では 5080 1枚の 76.8・73.2 tok/s に対して層分割が 68.5・64.7 tok/s で、3つの長さのどれでも中央値は層分割のほうが低かった。約1,000・約4,000 では各5回の範囲が 5080 1枚と重なっていて、差があるとは言い切れない。約32,000 では範囲も重ならなかった (層分割 53.8〜68.3 tok/s、5080 1枚 73.8〜90.6 tok/s)。回答の中身は、この測定では採点していない。

次の補足が関わるのは 5080 1枚の約1,000 の値だけで、約4,000・約32,000 の結果は変わらない。0.1.41 のリリースノートによると、0.1.41 では NVIDIA の GPU 1枚で 1,024 トークン未満の入力の区切りを読むとき、CPU が一部のエキスパートを受け持つのが既定になった (答えがわずかに変わることがあり、STRATA_PREFILL_CPU_SHARE=0 で切れる。層分割には入らない)。5080 1枚の約1,000 の5回のうち1回 (1,002 トークン) がこれに当たる。

自動がなぜこの分け方を選んだかは「層を分ける方式:自動は5060 Tiに最少の層しか渡さなかった」の節で扱う。

0.1.39で比べた5つの構成

0.1.39 で、5080 1枚と、2枚を使う4つの構成を測った結果を示す。

構成 最初の文字まで 約1,000 最初の文字まで 約4,000 最初の文字まで 約32,000 約32,000 の読み込み 約32,000 の生成
RTX 5080 1枚 1.22秒 1.50秒 8.86秒 3,621 tok/s 78.5 tok/s
層分割・自動 (K=47) 2.89秒 8.64秒 62.1秒 511 tok/s 68.3 tok/s
層分割・K=32 3.01秒 4.09秒 15.2秒 2,103 tok/s 73.6 tok/s
補助キャッシュ・最適化なし 2.19秒 2.74秒 13.1秒 2,444 tok/s 74.5 tok/s
補助キャッシュ・最適化あり 2.13秒 2.69秒 13.3秒 2,400 tok/s 81.5 tok/s

2枚を使う4つの構成はどれも、約1,000・約4,000・約32,000 のすべてで、最初の文字が返るまでが 5080 1枚より長かった。

生成の速さ (エンジンの記録の中央値) は、2枚を使う4つの構成のどれも、約1,000・約4,000・約32,000 のすべてで各5回の範囲が 5080 1枚と重なっていて、差があるとは言い切れない。中央値だけを見ると、補助キャッシュの最適化ありは3つの長さのどれでも 5080 1枚より高く (約32,000 で 81.5 tok/s と 78.5 tok/s)、自動 (K=47、5080 が先頭) はどれでも低かった。最適化なしと K=32 は、約1,000・約4,000 では高く、約32,000 では低かった。

0.1.39 の表と「0.1.41で自動の層分割と5080 1枚を比べた」の表は、ver と測った日が違う。同じ PC・同じ起動の設定・同じ測定の手順 (入力の作り方・回数・出力の上限) で測ったが、交互に入れ替えた比較ではない。約32,000 で最初の文字が返るまでの中央値は、自動が 0.1.39 (K=47、5080 が先頭) で 62.1秒、0.1.41 (K=2、5060 Ti が先頭) で 32.7秒、5080 1枚は 0.1.39 で 8.86秒、0.1.41 で 9.02秒だった。ver の間のどの変更が効いたかは特定していない。

補助キャッシュは 0.1.40 で扱いが変わったので、「0.1.39で比べた5つの構成」の表にある補助キャッシュの値は、0.1.39 での値として読む。0.1.40 での確認は「0.1.40で補助キャッシュを確かめた:合否は同じ、長い入力でも所要は1枚より長かった」の節にまとめた。

層を分ける方式:自動は5060 Tiに最少の層しか渡さなかった

自動の分け方の選び方

K は後ろのカードが受け持ち始める層の番号で、先頭のカードが層 0〜K-1 を、次のカードが K 以降を受け持つ (入力の長さの「約32,000 トークン」とは別の数)。0.1.41 の MULTI_GPU.md は、分け方を自動 (auto) にすると、考えられる分け方を全部試し、エキスパートの使われやすさの記録 (expert profile) のよく使われるものほど重く数えて、キャッシュに最も多く載る分け方を選ぶ、と説明している。

一方、0.1.41 のソース (generate.cpp) では、2枚のとき K を 2 から順に試し、分け方ごとに生成の1回分 (先読みした数トークンをまとめて検証する1回。ソースの語では decode window) にかかる時間を予測して、最も短いものを選んでいる。予測には、各カードの層あたりの時間と、キャッシュに載らないエキスパートの負担が入る。負担には、起動時に測った各カードの接続の速さから求めた倍率を掛けていて、接続が遅いカードほど大きく見積もる。この予測は生成1回分の時間を対象にしたもので、入力の読み込みの時間を直接予測するものではない。ただし、入力の読み込みを始められない分け方は選ばない。予測が同じになった分け方の間では、受け持ちが最も重いカードの時間 (層の数×1層の時間) が小さいほうを選ぶ。始められる分け方が1つも無いときは、始められるかどうかの条件だけを外して選び直す。MULTI_GPU.md の「キャッシュに最も多く載る」とは、基準の書き方が違う。同じリポジトリの層分割の測定記録 (bench の README) も、分け方ごとに生成1回分の時間を予測して最も速いものを選ぶと書き、その測定の PC では K=22 を選んだとしている。予測の値は起動ログに出るので、手元でも確かめられる。

0.1.41 からは、自動の層分割で速いカード (SM の数×最大クロック) を最後に置くようになった。MULTI_GPU.md によると、最後のカードは出力ヘッド・先読み用の層・検証を受け持ち、入力の区切りもそれを待つためで、RTX 4070 Ti SUPER と RTX 5060 Ti の組で約6,000 トークンの入力の読み込みが、順序によって50秒と15秒に分かれた例が挙げられている。"gpu_order": "as_given" にすると、指定した順序のままにできる。リリースノートによると、自動の分け方は各カードの PCIe の接続も見るようになった。

0.1.41 の結果:5060 Ti が先頭で層 0〜1 だけを受け持った

この PC で 0.1.41 の自動にすると、カードの順序が入れ替わり (サーバーのログに card order 1,0)、5060 Ti が先頭で層 0〜1 を、5080 が層 2〜47 と出力ヘッドを受け持った (K=2)。起動ログは、5060 Ti を1層 0.78ms・キャッシュに載らないエキスパートの負担の倍率 (ログでは miss cost) ×2.85、5080 を1層 0.33ms・倍率 ×1.00 と見積もり (倍率は、起動時に測った接続の速さで 20GB/s を割った値で、1 より小さくはしない)、46通りの分け方のうち K=2 の予測 (27.0ms) が最も短かったと表示した。この予測は2枚の分け方どうしを比べたもので、5080 1枚との比較は含まない。予測が最短だったことと、1枚より遅かった実測は両立する。K=2 は、2枚のときにソースが試す範囲の下限で、先頭のカードの受け持ちが最も少ない分け方にあたる。

このとき 5060 Ti のエキスパートキャッシュには、層 0〜1 のエキスパートがすべて載った (1つの層のエキスパートは 512 個)。入力を読む区切り (prompt chunk) は 2048 トークンで、警告は出なかった。

0.1.39 の結果:5080 が先頭で、5060 Ti は最後の1層だけ

0.1.39 にはカードの順序を入れ替える処理が無く、自動でも順序は指定どおり (5080 が先頭) だった。選ばれたのは K=47 で、5060 Ti に渡ったのは最後の1層 (層 47) と出力ヘッドだけ。5060 Ti の VRAM には空きが残っていた。0.1.39 の起動ログは K=47 の行に生成1回分の予測 (25.9ms) を表示するだけで、何通りのうち最短だったかの表示は無い。0.1.39 の選び方のソースは確認していない。

この起動では、ログに警告が出た。要旨は、5060 Ti のキャッシュが足りないため、入力を読む区切りを 8192 トークンから 768 トークンに縮めた、というものだ。内訳として、8192 トークンの区切りで読むには 5060 Ti のキャッシュから 512 個分を借りる必要があるが、5060 Ti のキャッシュは 512 個分しかなく、128 個分は残し、貸せるのは 85% までという決まりがある、と書かれていた。警告は入力の読み込みが 5080 1枚より遅くなるとも書いていたが、これはエンジンの見込みで、この PC での寄与を測ったものではない。VRAM に空きがあっても、この警告は入力用の領域をキャッシュの枠から借りる前提で区切りを縮めていた。MULTI_GPU.md は層分割でどのカードも入力を読むためのバッファを持つと説明しており、この警告との関係は確かめていない。

同じ警告の次の行は、キャッシュがこれだけしか持てない割り当てなら、層を分ける1段としてではなく補助のエキスパートキャッシュとして使えると案内し、層分割を外して --expert-cache-device1 を付ける方法を示していた。この記事の補助キャッシュの測定では、値を auto にした (--expert-cache-device1 auto)。

0.1.39 で分け方を K=32 に固定すると (5080 が先頭)、5060 Ti は層 32〜47 と出力ヘッドを受け持ち、入力を読む区切りは 8192 トークンのままだった。それでも最初の文字が返るまでは 5080 1枚より長かった。区切りだけを変えた測定はしていないので、区切りの縮小が遅さに効いたのかどうかも含め、原因は特定していない。K=32 は試した固定の分け方の1つで、ほかの値は試していない。

0.1.41 の K=2 はソースが試す範囲の下限、0.1.39 の K=47 は最後の1層で、どちらの ver でも 5060 Ti に渡った層は最少だった。なお、Strata が付ける CUDA の番号は並べ替えた後の順序なので、0.1.41 のこの起動では CUDA0 が 5060 Ti、CUDA1 が 5080 で、0.1.39 ではその逆になる。

公式の測定との違い

MULTI_GPU.md とその参照先の測定記録に載っている層分割の測定は、コミュニティの方の PC (Windows 11・Ryzen 9 9950X3D) の RTX 5080 (x16) と RTX 3090 (PCIe 4.0 x4、約6GB/s) の組で、Coder モデル (IQ1_M、エキスパートは約23GB)・文脈 約32,000 トークンという条件のものだ。K=18 以上では、使われるエキスパートの 98〜100% が2枚のキャッシュに載っていた。手で選んだ最良の分け方 (K=26) では、約16,000〜約28,000 トークンの入力の読み込みが 5080 1枚より 18〜20% 速いと公式はまとめている。ただし公式の表は、約16,000 での 5080 1枚の値を 1,726 tok/s と 2,017 tok/s の2行で載せている。K=26 の 2,039 tok/s は、K を変えながら測った同じ一連の測定の 1,726 に対しては 18% 上回り、別の測定の 2,017 に対しては約1% 上回る。約28,000 では K=26 が 2,357 tok/s、5080 1枚が 1,970〜1,974 tok/s だった。生成は、K=26〜28 で物語が同程度、コードが 4〜7% 速いと公式はまとめている (比べた相手は、生成を3回繰り返して測った 5080 1枚の行。表の値から計算すると K=26 だけなら約4%)。公式の表の自動 (K=22) は、約16,000 トークンで 2,037 tok/s (5080 1枚は 1,726〜2,017)、約28,000 トークンで 2,073 tok/s (5080 1枚は 1,970〜1,974) だった。

この PC との違いは、モデルの大きさ (この記事の IQ3_S はファイルの合計が約84GB で、2枚の VRAM に収まらない)、2枚目のカード、文脈の長さにある。2枚目の接続は、どちらも PCIe 4.0 x4 級だ。測定記録自身も、速い2枚にエキスパートの大半が収まらない大きなモデルの場合は、その PC のメインメモリ (62GB) では試せなかったとしている。

MULTI_GPU.md は、5080 と 3090 の2枚で既にモデルを持てている構成に、ずっと遅い RTX 2080 Ti を3枚目として足すと遅くなった例を挙げ、そのような遅いカードは外すよう書いている。これは3枚目の話で、2枚の構成のうち遅いほうを外せという助言ではない。同じ文書は、使われるエキスパートが速いほうのカードに収まらないときは枚数を増やす価値があるとも書いているが、5080 と 3090 の測定記録ではこの場合は試せていない。この PC はモデルのファイルが2枚の VRAM に収まらない構成だが、使われるエキスパートが速いカードに収まらない場合にあたるかは確かめていない。ここでは2枚目で入力の読み込みは速くならなかった。1台・1組の結果で、公式の見立てを否定するものではない。

手元の PC で確かめる方法

  1. 起動時の割り当てを見る。サーバーのログの card order の行でカードの順序を (この行は順序が入れ替わったときだけ出る。この記事の 0.1.39 の自動のログには無かった)、起動ログの layer split auto: K= の行で分け方と予測を、prompt chunk auto: の行で入力を読む区切りを確かめる。
  2. 同じ長さの入力を、1枚の起動と2枚の起動に送り、最初の文字が返るまでを比べる。
  3. 自動の層分割が1枚より遅ければ、K を固定して同じ入力で比べる。この記事で固定したのは 0.1.39 の K=32 (5080 が先頭) だけなので、どの K がよいかは言えない。K の意味は先頭のカードがどちらかで変わるので、固定するときは先頭にしたカードも控えて比べる。

ログの置き場所は起動の仕方で変わる。この記事の測定では、サーバーとエンジンの出力をそれぞれファイルに書き出して読んだ。0.1.39 の自動では区切りが 8192 から 768 に縮んだときにエンジンが警告を出し、0.1.41 の自動は最初から 2048 で警告は出なかった。この PC では、補助キャッシュへの切り替えと K=32 の固定も試した。

補助キャッシュ:入力の読み込みは5080のまま、5060 Tiは生成を手伝う

補助キャッシュでは、入力の読み込み (prefill) は 5080 だけが行い、5060 Ti は出力の生成を手伝う。0.1.39 のこの PC では、5060 Ti に 7548個分の追加のエキスパートが載り、入力を読む区切りも 8192 トークンのままだった。5080 のエキスパートキャッシュは、5080 1枚のときとほぼ同じだった。

それでも最初の文字が返るまでは 5080 1枚より長く、最適化の有無ではほとんど変わらなかった (数値は「0.1.39で比べた5つの構成」の表)。入力の読み込みは 5080 だけなのに遅くなった理由は特定していない。候補の1つは、Windows で2枚目を使うと GPU が直接読めるメインメモリが 5080 1枚のときの 46GiB 分より少なくなること (「Windowsで2枚目を使うと、GPUが直接読めるメインメモリが減る」の節) だが、その上限を変えた測定はしていない。

Windowsで2枚目を使うと、GPUが直接読めるメインメモリが減る

ここでいう「直接読める」部分は、メインメモリに置いたエキスパートのうち、GPU が PCIe 越しにそのまま読める状態にしてある部分のこと。それ以外の部分は、いったん中継用の領域に写してから GPU へ送る。エキスパートを置く領域の大きさは、この PC では 5080 1枚でも2枚の構成でも同じ約47GiB で、2枚にしても領域そのものが小さくなるわけではない。Windows で2枚目を使うときの 8GiB の上限は、層分割にも補助キャッシュにも同じようにかかる。

MULTI_GPU.md によると、Windows (と WSL2) のドライバー方式 (WDDM) では、2枚目を使うとき、エキスパートを置いた領域のうち GPU が直接読める部分が 8GiB までに制限され、残りは中継用の領域を通して流す。Linux のドライバーにはこの上限が無く、0.1.31 から全体を GPU が直接読めるようにする。公式はその経緯として、この上限が Linux にも掛かっていた時期に、RTX 4090 と RTX 3060 の層分割が入力の読み込みの速さの3分の2を失った例を挙げている。これは Linux の事例で、Windows で上限がどれだけ効くかを示す数字ではない。

この PC のログでは、GPU が直接読める部分は 5080 1枚のときが 46GiB 分 (0.1.39 も 0.1.41 も。ログの GiB は小数点以下を切り捨てた表示で、1枚のときは領域の全体にあたる)、2枚目を使った構成ではどれも 7GiB 分だった (0.1.39 の4構成と 0.1.41 の自動)。2枚の構成のログは、multi-GPU under WDDM, or remote experts を理由に 8GiB に制限したと書いている。

手元で確かめるには、起動ログで cudaHostRegister limited to 8 GiB の行を探す。Windows でこの行が出ていれば、その環境でも GPU が直接読める部分が減っていると読める。上限を変える設定 (STRATA_ARENA_PIN_GIB) は、この記事では試していない。

2枚にして入力の読み込みが遅くなった原因が、この直接読める量の違いなのかは切り分けていない。言えるのは、直接読める量が減ったことと読み込みが遅くなったことが、同じ構成で起きていたというところまでだ。

0.1.40で補助キャッシュを確かめた:合否は同じ、長い入力でも所要は1枚より長かった

0.1.40 では、補助キャッシュまわりの扱いが1つ変わった。SECOND_GPU.md によると、1枚目が PCIe 経由で読むエキスパートの割り当てに、補助キャッシュが既に持つものまで入っていた問題が直され、別の機械 (RX 6900 XT 2枚) では、1回の検証あたりに1枚目が待つ時間が大きく減ったとされる。そこで 0.1.40 で、補助キャッシュを別に確かめた。0.1.39 で測った補助キャッシュの速さは 0.1.39 での値として読み、0.1.40 とは同じ条件で比べていない。

まず、思考設定 medium の同じ8問を5回ずつ出した結果を示す。

構成 合格 所要の中央値 答えの文面が 5080 1枚と同じ回
RTX 5080 1枚 40/40 5.71秒 (比べる基準)
補助キャッシュ・最適化なし 40/40 5.95秒 25/40
補助キャッシュ・最適化あり 40/40 6.05秒 25/40

3つの構成とも40回すべて合格した。答えの文面まで 5080 1枚の同じ回の答えと同じだったのは、最適化なしも最適化ありも40回中25回で、残りは文面が違っても合格した。所要の中央値は、所要が約2秒から約60秒まで違う8問をまとめた値なので、0.1〜0.3秒の差は読まない。補助キャッシュの2つは8問×5回だけの起動で、5080 1枚は16問×4つの思考設定を回した同じ起動のうち、medium・同じ8問の40回分を使った。この8問は2枚目を足しても答えが崩れていないかの確認で、答えの質の差を測れる規模ではない。

出した問題の例を次に示す (原文は英語で、要旨を日本語にした)。8問は、JSON で答える4問 (誰が犯人かを3人の発言から決める・重なる区間をまとめる・注文の合計・税の計算) と、壊れた Python の関数を直す4問 (設定ファイルの読み取り・ログの集計・区間をまとめる・税込み合計) で、コードを直す問題は直したコードを関数のテストにかけて採点した。

問題 内容 正解
誰が犯人かを3人の発言から決める (JSON) A「犯人は B」、B「犯人は B ではない」、C「犯人は A ではない」。本当のことを言っているのは1人だけで、犯人も1人 A
重なる区間をまとめる (JSON) [5,8]・[1,3]・[3,6]・[10,11]・[10,12] のうち、重なるか接する区間をまとめ、始まりの順に並べる [1,8]・[10,12]
税の計算 (JSON) 税抜き 105円 (税率10%) と 1031円 (税率8%)。税は品ごとに四捨五入して整数円にし、税と合計を答える 税 11円・82円、合計 1229円
税込み合計の関数を直す (コード) 税を組み込みの round で丸めている関数を、品ごとに四捨五入 (0.5 は切り上げ) し、浮動小数点の誤差が出ないように直す 105円と1031円で 1229 を返す (ほかに4つの値で確かめた)

2枚目の働きは、エンジンがリクエストごとに出す計数で見た。補助キャッシュの40回について、5060 Ti の計数をそのリクエストの出力トークン数で割った中央値は次のとおり。

構成 5060 Ti で計算したエキスパート (1トークンあたり) 1枚目へ返したデータ量 (1トークンあたり) ホストが 5060 Ti を待った時間 (1トークンあたり)
補助キャッシュ・最適化なし 87.9 0.86 MiB 0.31 ms
補助キャッシュ・最適化あり 318.7 0.54 MiB 1.58 ms

最適化ありでは、5060 Ti で計算したエキスパートが増え、1枚目へ返したデータ量は減った。一方で、ホスト (CPU) が 5060 Ti の結果を待った時間は増えた。返したデータ量はエンジンが数えた量で、PCIe を実際に流れた量や帯域を測ったものではない。どちらがどう効いたかは断定できず、所要の中央値にもはっきりした差は出なかったので、この測定では最適化の有無を選ぶ決め手にはならなかった。

長い入力では、コードの資料に値を埋め込んだ入力から値を探す課題を、思考なしで各5回出した。所要は1リクエストの開始から終わりまで、入力の処理時間はエンジンが記録した prompt_ms で、どちらも中央値。補助キャッシュは最適化ありで測った。

構成 約32,000 の所要 約32,000 の入力の処理時間 約240,000 の所要 約240,000 の入力の処理時間
RTX 5080 1枚 10.3秒 9.47秒 82.0秒 80.4秒
補助キャッシュ (最適化あり) 14.7秒 13.9秒 112.4秒 110.8秒

約32,000・約240,000 トークンのどちらでも、補助キャッシュは 5080 1枚より長くかかり、その大半は入力の処理時間だった。実際に送ったトークン数の中央値は、約32,000 が 30,990、約240,000 が 238,988。この結果は、Windows のメモリの使われ方を記録する別の測定の一部だ。約32,000 は記録を止めた回、約240,000 は記録を取った回の値で、約32,000 で両方を比べると差は0.1秒前後で、比べ方には影響しない。0.1.39・0.1.41 の速さの測定とは入力の作り方が違うので、それらの表とは並べて比べない。

2枚目をどう使うか

この節の表は1台の PC・1組のカードで測った結果で、方式の順位の根拠にはならない。各セルの値は、同じ ver の 5080 1枚の値と対にしてある。

見たいこと 層分割・自動 層分割・K=32 補助キャッシュ
約32,000 の入力で最初の文字が返るまで (中央値) 0.1.41: 5080 1枚 9.02秒に対し 32.7秒。0.1.39: 8.86秒に対し 62.1秒 0.1.39: 8.86秒に対し 15.2秒 0.1.39: 8.86秒に対し 最適化なし 13.1秒・あり 13.3秒
約240,000 の入力の所要 (0.1.40、中央値) 測っていない 測っていない 5080 1枚 82.0秒に対し 112.4秒 (最適化あり)
出力の生成の速さ (中央値) 0.1.39・0.1.41 とも 5080 1枚より低かった (各5回の範囲が重ならなかったのは 0.1.41 の約32,000 だけ) 0.1.39: 約1,000・約4,000 では 5080 1枚より高く、約32,000 では低かった (各5回の範囲はどの長さでも重なった) 0.1.39 の最適化ありは 5080 1枚と同程度かやや高く、範囲は重なった
答えの合否 測っていない 測っていない 0.1.40 の8問で 5080 1枚と同じく40回すべて合格
ログで確かめる行 card order (順序が入れ替わったときだけ出る) / layer split auto: K= / prompt chunk auto: layer split: CUDA1 runs layers / prompt chunk auto: additional experts

この条件では、長い入力で最初の文字が返るまでを縮める点では、2枚目の効果は見えなかった。0.1.39 の約32,000 トークンでは、5080 1枚 (8.86秒) との差が最も小さかったのは補助キャッシュ (最適化なし 13.1秒・あり 13.3秒)、次が K=32 (15.2秒) で、最も大きかったのは自動 (K=47、62.1秒) だった。この並びはこの1組での差の大きさで、方式の優劣を示すものではない。

検証環境と測り方

0.1.41 の速さ (2026年10月9日) は、Strata 0.1.41・Qwen3.8-Flash-Next の IQ3_S・最大の文脈 262,144 トークンで測った。KV キャッシュは int8 で、VRAM に置くのは 32,768 トークン分、VRAM の余白指定は 1200MiB。思考なし・温度0・出力の上限 256 トークンで、コードの資料から作った約1,000・約4,000・約32,000 トークンの入力を各5回送り、中央値をとった。読み込みと生成の速さはエンジンの記録による。

0.1.39 の速さ (2026年10月6日) は、ver 以外の条件と入力を 0.1.41 と同じにして測った。測定のコマンドは出力先とラベルを除いて同じだが、0.1.39 の 5080 1枚だけは、約1,000・約4,000・約32,000 に続けて約64,000・約128,000 も同じ起動で測った。表に載せたのは、それより先に測った約1,000〜約32,000 の分だ。

0.1.40 の補助キャッシュの確認 (2026年10月6日) は、Strata 0.1.40・IQ3_S・最大の文脈 262,144 トークンで行った。8問の確認は思考設定 medium・温度0・出力の上限 8192 トークンで、3つの構成とも 5080 のエキスパートキャッシュを 3742 個分にそろえ、補助キャッシュの 5060 Ti には 7548 個分 (14.28GiB) が載った。長い入力は思考なし・出力の上限 256 トークンで、どちらの構成も 5080 のエキスパートキャッシュを 3827 個分にそろえた。

どの測定も、構成ごとにサーバーを1回起動して続けて測っており、構成を交互に入れ替えた比較ではない。速さの測定は出力の上限が 256 トークンと短いので、生成の速さのわずかな差は読まない。

5060 Ti は OCuLink の PCIe 4.0 x4 でつないでいる。CPU やメインメモリを含む PC の詳しい構成は、検証環境のページに載せている。

本記事の実測値は、Strata 0.1.39・0.1.40 を2026年10月6日に、0.1.41 を2026年10月9日に、この測定機・設定で計測したもの。

まとめ

この PC で試した構成では、0.1.39・0.1.40・0.1.41 のどれでも、入力の読み込みは 5080 1枚より遅かった。自動の層分割は、0.1.39 では K=47 (5080 が先頭)、0.1.41 では K=2 (5060 Ti が先頭) を選び、どちらの ver でも 5060 Ti に渡した層は最少だった (0.1.41 は試す範囲の下限の2層、0.1.39 は最後の1層)。いずれも、性能の違うカードを細い接続で足したこの PC で、0.1.39〜0.1.41 を動かした条件での結果だ。目的ごとに見ると、この条件では次のようになった。

  • 最初の文字が返るまでを縮めたい: 試した構成では効果は見えなかった。補助キャッシュも、0.1.39 では最初の文字が返るまで、0.1.40 では長い入力の所要が 5080 1枚より長かった。
  • 生成を速くしたい: 補助キャッシュは 0.1.39 で各5回の範囲が 5080 1枚と重なり、差があるとは言い切れなかった。自動の層分割は中央値で 5080 1枚より低かった (0.1.41 の約32,000 では範囲も重ならなかった)。
  • 答えが崩れないかを見たい: 0.1.40 の補助キャッシュは、8問の確認で 5080 1枚と同じく40回すべて合格した (確認の規模は小さい)。

2枚目を足したときや ver を上げたときは、「手元の PC で確かめる方法」の手順 (補助キャッシュの確認に使う行は「2枚目をどう使うか」の表の最終行) で割り当てのログを見てから、同じ長さの入力で1枚の起動と比べる。

Strata 0.2 系で2枚目の GPU を足したときの測定と、メインメモリの量・VRAM 12GB・16GB からのモデルの選び方は「Strataで動かせるモデルと必要なメモリ」にまとめた。

参考資料

タイトルとURLをコピーしました