この記事の要点
VRAM の少ない GPU 1枚とメインメモリの多い PC で Qwen の Flash-Next を動かすと、この検証環境では、Strata のほうが MTP なしの素の llama.cpp より生成も読み込みも大きく速かった。量子化は速さなら Q2_0 だが、答えに中国語が繰り返し混ざり、同じ課題を出した IQ3_XXS では混ざらなかった (生成は遅め)。
2枚目の GPU (検証は OCuLink の外付け) は、自動の分け方のままだと読み込みが RTX 5080 1枚より遅く、手で分けても 5080 1枚は超えなかった。
Qwen の 27B と比べると、32K の長い入力は Strata が速く、論文の仕分けのような短い判定は 27B が速かった。写真の説明は 27B が正しかった。Claude Code (サポート外の使い方) は、Strata はテンプレートを変えずに、27B はチャットテンプレートを1行直して完走した。
VRAM 16GBの1枚で、Strataは素のllama.cppを大きく上回った
Qwen のモデルカードによると、Qwen3.8-Flash-Next (以下 Flash-Next) は、言語モデルの本体が 125B で、1トークンごとに使うのはそのうち 6B の MoE モデル。本体とは別に、n-gram 埋め込み 51B と MTP 4B を持つ。文脈長は 262,144 トークンとされている。Strata は、この 125B のモデルを NVIDIA の GPU 1枚とメインメモリで動かすためのエンジンで、README では「GPU 1枚 (12〜24GB) とメインメモリ 64GB」を目安に挙げ、Windows と Linux で動くと書かれている。
メインメモリ 96GB の検証環境で測った結果を GPU ごとに分けると、次のようになった。
- RTX 5060 Ti 1枚 (OCuLink の外付けの値): 生成は 57〜68 tok/s、32K トークンの入力の読み込みは約 1,400 tok/s (最初の文字まで約22秒)
- RTX 5080 1枚: 生成は 74〜112 tok/s (2周の測定で揺れた)、32K の読み込みは約 3,100 tok/s (最初の文字まで約10秒)
- 同じ Q2_0 を素の llama.cpp で動かした場合: 生成は RTX 5060 Ti で 11〜17 tok/s、RTX 5080 で 16〜21 tok/s にとどまり、2枚に載せても 23〜26 tok/s だった (llama.cpp 側は MTP なし)
この記事でいう「読み込み」は入力 (プロンプト) を処理する速さ、「生成」は答えを出力する速さを指す。モデルのファイルを読み込むことは「起動」と書く。速さは1秒あたりに処理するトークンの数 (tok/s) で表す。
検証環境は Intel Core i7-14700F・メインメモリ 96GB の Windows 11 の PC で、PCIe 5.0 x16 に RTX 5080 を挿し、RTX 5060 Ti は OCuLink で外付けしている (PCIe 4.0 x4)。エンジンは Strata v0.1.31 と llama.cpp b11218 を使った。
自分の PC で足りるかは「必要なもの」、2枚目の GPU を持っているなら「2枚目のGPU」、Qwen3.8-27B と迷っているなら「Qwen3.8-27Bと比べて」、Claude Code で使いたいなら「Claude Codeの裏で動かす」の節から読める。導入と起動のコマンドは後ろの「起動の仕方」にまとめた。
Strataの仕組みと、必要なメモリ・ディスク
Strata の README によると、Strata は PC の部品ごとに仕事を次のように分けている。
- GPU: どのトークンを出すときにも必ず通る部分を計算し、呼ばれることの多いエキスパート数千個も置いておく。どのエキスパートを置くかは、使っているあいだに入れ替わる
- メインメモリ: 24,576 個のエキスパートを全部置く。GPU に無いエキスパートが要るときは CPU が計算し、GPU の計算と同時に進める
- SSD: 大きな検索表 (2本目のファイルの n-gram 埋め込み) を置いたままにし、1トークンにつき必要な数か所だけを読む
答えを書き出すときは、モデルに入っている小さな補助部分 (MTP) が次の数トークンを予想し、本体がまとめて確かめる。README は、本体がすべてのトークンを決めるので答えの質は同じで、1.6〜1.8 倍速く出るとしている。この倍率は Strata の開発者の値で、この記事では MTP の有無による差を測っていない。
VRAM に収まらないモデルをメインメモリへ逃がして動かす方法の基本は、VRAMに収まらない大型LLMをRAMオフロードで動かす方法を扱った記事で別に説明している。
必要なもの
README が挙げている条件は次のとおり。
- GPU: VRAM 12GB 以上の NVIDIA RTX 20〜50 系
- メインメモリ: 選んだサイズ (README での呼び方で、量子化の種類のこと) の「1本目のファイル + 約10GB」が目安。64GB なら全サイズ (IQ3_S は他のアプリをほとんど開かない前提)、48GB なら Q2_0 と IQ2_XS が入るとしている
- ディスク: 約80GB の空き
README には、GPU が大きいと速くなるが、必要なメインメモリは減らないとも書かれている。
サイズごとの1本目のファイル (起動時にメインメモリと GPU に載せる部分) の大きさは、README の表では次のとおり。2本目のファイル (約29GB の表) は SSD に置いたままになる。
| サイズ | 1本目のファイル | README での扱い |
|---|---|---|
| Q2_0 | 37.6GB | — |
| IQ2_XS | 39.2GB | 推奨 |
| IQ3_XXS | 47.0GB | — |
| IQ3_S | 54.8GB | — |
検証環境で、起動の前と後で Windows の空き物理メモリがどれだけ減ったかを見ると、Q2_0 は 33.3〜36.6GiB、IQ3_XXS は 42.9〜44.5GiB だった (測ったすべての構成の範囲で、後の「量子化を変えると」の節の表の最後の列にはその一部を載せている)。この差は GiB (2進) の値で、README のファイルの大きさは10進の GB なので、そのままでは比べられない。10進に直すと Q2_0 は約36〜39GB、IQ3_XXS は約46〜48GB で、どちらも1本目のファイルの大きさとほぼ同じ量だった。なお、検証環境のメインメモリは 96GB で、メインメモリ 64GB の PC では測っていない。
Ollama と Unsloth の GGUF
2026年10月2日に確認した Ollama の公式ライブラリの qwen3.8-flash-next のタグ一覧では、125b-a6b-nvfp4 (105GB) と 125b-mlx (105GB) に MLX の表示が付き、MLX の表示の無いもので最も小さいのは 125b-a6b-q4_K_M の 120GB だった。この 120GB のタグは、検証環境のメインメモリ 96GB と VRAM 16GB の容量を単純に足した 112GB より大きい。この記事では実際に動かせるかは試していない。MLX の表示の付いたタグが Windows と NVIDIA の GPU で使えるかどうかも確かめていない。
同じ日に確認した Unsloth の GGUF では、UD-IQ3_XXS が 82GB、UD-Q2_K_XL が 78.9GB と表示されていた。このうち UD-IQ3_XXS は、後の「素のllama.cppと比べると」の節で llama.cpp で動かした。
1枚での速さ(RTX 5060 TiとRTX 5080)
Strata v0.1.31 の Q2_0 を、GPU を1枚に絞って測った。値はエンジンのログの tok/s で、各長さ3回の中央値。同じ測定を、間に別の構成を挟んで2回ずつ (表の「1周目」「2周目」) 行った。
| 構成 | 周 | 読み込み 1K | 読み込み 4K | 読み込み 32K | 生成 1K | 生成 4K | 生成 32K | 32Kの最初の文字まで |
|---|---|---|---|---|---|---|---|---|
| RTX 5060 Ti 1枚 | 1周目 | 278 tok/s | 920 tok/s | 1,426 tok/s | 68 tok/s | 67 tok/s | 57 tok/s | 22.3秒 |
| RTX 5060 Ti 1枚 | 2周目 | 277 tok/s | 917 tok/s | 1,421 tok/s | 67 tok/s | 65 tok/s | 61 tok/s | 22.4秒 |
| RTX 5080 1枚 | 1周目 | 1,208 tok/s | 2,391 tok/s | 3,128 tok/s | 75 tok/s | 86 tok/s | 74 tok/s | 10.4秒 |
| RTX 5080 1枚 | 2周目 | 1,170 tok/s | 2,355 tok/s | 3,132 tok/s | 112 tok/s | 107 tok/s | 96 tok/s | 10.2秒 |
この RTX 5060 Ti は OCuLink の外付け (PCIe 4.0 x4) で、Strata の起動ログに出た転送速度は毎秒7.0GB だった (RTX 5080 は毎秒38〜46GB)。標準のスロットに挿した 5060 Ti の値ではなく、接続が太い場合に表より速くなるかどうかは測っていない。
5060 Ti は2周とも近い値になった。5080 は読み込みが2周でほぼ同じだった一方、生成は1周目 (75・86・74 tok/s) と2周目 (112・107・96 tok/s) で揺れた。揺れの理由は切り分けていない。「32Kの最初の文字まで」は 32K トークンの入力を送ってから最初のトークンが返るまでの秒数 (中央値) で、MTP が先読みしたトークンが本体に採用された割合 (採択率) は、長さごとの中央値で 0.68〜0.78 だった。
Strata の開発者の推定値との違い
Strata の docs/DETAILS.md には RTX 5060 Ti 16GB の値が載っているが、これは実測ではなく推定で、±20% と見なすよう書かれている。読み込みの値はエンジン 0.1.13 より前の推定のままとされている。Q2_0 の推定値は、1K で読み込み約 341 tok/s・生成約 80 tok/s、4K で約 472・約 87 tok/s、32K で約 501・約 81 tok/s だった。
この測定の 5060 Ti と並べると、生成はどの長さでも推定より低く、読み込みは 4K と 32K で推定より高かった (1K は推定より少し低い)。差の理由は切り分けておらず、CPU・接続・推定のあとのエンジンの改良のどれによるものかは分けていない。手元の速さの見込みには、推定値より実測の表を使うほうが近い。
素のllama.cppと比べると
RTX 5060 Ti と RTX 5080 のそれぞれ1枚で、同じ Q2_0 のファイルを llama.cpp b11218 の llama-server で動かした。エキスパートの重みを全部 CPU に置いた場合 (-ot) も、GPU に載せる量を --fit に任せた場合も、生成と読み込みはどちらの GPU でも Strata より大きく遅かった。Unsloth の UD-IQ3_XXS を llama.cpp で動かしても同じ程度だった。表で比べやすいのは「生成」と「32Kの最初の文字まで」の列で、読み込みの列はエンジンによって測り方が違う (表の後に書いた)。
| エンジンとモデル | GPU | 読み込み 1K | 読み込み 4K | 読み込み 32K | 生成 1K | 生成 4K | 生成 32K | 32Kの最初の文字まで | VRAM |
|---|---|---|---|---|---|---|---|---|---|
| Strata・Flash-Next Q2_0 | RTX 5060 Ti | 278 tok/s | 920 tok/s | 1,426 tok/s | 68 tok/s | 67 tok/s | 57 tok/s | 22.3秒 | 14,864MiB |
| Strata・Flash-Next Q2_0 | RTX 5080 | 1,208 tok/s | 2,391 tok/s | 3,128 tok/s | 75 tok/s | 86 tok/s | 74 tok/s | 10.4秒 | 15,761MiB |
| Strata・Flash-Next IQ3_XXS | RTX 5060 Ti | 203 tok/s | 696 tok/s | 1,162 tok/s | 49 tok/s | 51 tok/s | 49 tok/s | 27.3秒 | 14,876MiB |
| Strata・Flash-Next IQ3_XXS | RTX 5080 | 985 tok/s | 2,141 tok/s | 2,954 tok/s | 71 tok/s | 72 tok/s | 62 tok/s | 10.8秒 | 15,700MiB |
| llama.cpp・Flash-Next Q2_0 (-ot でエキスパートを CPU へ) | RTX 5060 Ti | 88 tok/s | 108 tok/s | 110 tok/s | 11 tok/s | 12 tok/s | 12 tok/s | 287.6秒 | 5,390MiB |
| llama.cpp・Flash-Next Q2_0 (-ot でエキスパートを CPU へ) | RTX 5080 | 174 tok/s | 206 tok/s | 221 tok/s | 18 tok/s | 17 tok/s | 16 tok/s | 143.3秒 | 6,188MiB |
| llama.cpp・Flash-Next Q2_0 (–fit に任せる) | RTX 5060 Ti | 118 tok/s | 139 tok/s | 142 tok/s | 17 tok/s | 17 tok/s | 14 tok/s | 221.9秒 | 13,936MiB |
| llama.cpp・Flash-Next Q2_0 (–fit に任せる) | RTX 5080 | 202 tok/s | 257 tok/s | 275 tok/s | 21 tok/s | 19 tok/s | 18 tok/s | 114.8秒 | 14,506MiB |
| llama.cpp・Flash-Next Unsloth UD-IQ3_XXS (–fit に任せる) | RTX 5060 Ti | 75 tok/s | 90 tok/s | 93 tok/s | 21 tok/s | 20 tok/s | 17 tok/s | 341.4秒 | 13,484MiB |
| llama.cpp・Flash-Next Unsloth UD-IQ3_XXS (–fit に任せる) | RTX 5080 | 139 tok/s | 174 tok/s | 182 tok/s | 26 tok/s | 27 tok/s | 24 tok/s | 173.1秒 | 14,291MiB |
| llama.cpp・Qwen3.8-27B UD-Q3_K_XL (全部 GPU + MTP) | RTX 5060 Ti | 657 tok/s | 781 tok/s | 738 tok/s | 51 tok/s | 50 tok/s | 38 tok/s | 42.8秒 | 15,556MiB |
| llama.cpp・Qwen3.8-27B UD-Q3_K_XL (全部 GPU + MTP) | RTX 5080 | 1,190 tok/s | 1,493 tok/s | 1,077 tok/s | 91 tok/s | 92 tok/s | 57 tok/s | 29.3秒 | 15,801MiB |
RTX 5060 Ti では、Strata の Q2_0 の生成は素の llama.cpp の Q2_0 の4〜6倍ほどで、32K の入力の最初の文字までは 22.3秒に対して 221.9〜287.6秒だった。
表の読み込みの値は、エンジンによって測り方が違う。Strata はエンジンのログの値、llama.cpp は API の応答の時刻から計算した値 (入力のトークン数 ÷ 最初のトークンまでの秒数) で、同じ測り方で並んでいるのは「32Kの最初の文字まで」の列。
VRAM は起動直後の GPU 全体の使用量で、RTX 5080 は画面表示を兼ねているため、起動の前から使われていた約0.6〜1.3GB を含む。表の Strata の RTX 5080 の値は「1枚での速さ」の節の1周目のもの。
図は RTX 5060 Ti の値。RTX 5080 でも、素の llama.cpp の Flash-Next (16〜27 tok/s) が Strata (62〜86 tok/s) より大きく遅い点は同じだが、27B の位置は GPU で違い、RTX 5080 の 4K では 27B (92 tok/s) が Strata の IQ3_XXS より速く、Q2_0 と同じ程度だった (後の「Qwen3.8-27Bと比べて」の節)。llama.cpp の --fit に任せた Q2_0 は、32K の3回のうち1回だけ読み込みが 49 tok/s と遅かった (中央値には影響しない)。
llama.cpp の設定は次の2通り。-ot の設定では -ngl 99 と -ot でエキスパートの重みを全部 CPU に置き、--fit off にした。--fit の設定では -ngl も -ot も付けず、既定で on の --fit に GPU に載せる量を任せた。どちらも文脈 65536・KV キャッシュ q8_0・flash attention on・-lm mmap --lazy-mode on (n-gram の表を必要なときにディスクから読む) で動かしている。この2通りしか試しておらず、-ot の書き方や --n-cpu-moe の値を詰めた結果ではない。
比べるときの条件(MTP の有無)
この記事で llama.cpp で動かした Flash-Next には MTP が入っていない。b11218 は 2026年9月27日のビルドで、llama.cpp が Flash-Next (qwen4exp) に対応した PR #27742 は 2026年8月27日にマージされたが、その PR では MTP は作業中とされていた。
その後、2026年10月1日に PR #29761 (Qwen4Exp: add MTP) がマージされ (この変更は llama.cpp の master にも入っている)、別ファイルの MTP 用 GGUF を --model-draft と --spec-type draft-mtp で渡して Flash-Next の MTP を使う形になった。ただし 2026年10月2日の朝に確認した時点で配布されていたビルドのうち一番新しい b11327 も、このマージより前のコミットから作られていて、MTP の対応はまだ入っていなかった。配布のビルドはコミットから数時間遅れて出るので、MTP 入りのビルドが出ているかは使う前に確かめたほうがよい。
MTP を使った llama.cpp との比較はしておらず、Strata との差のうちどれだけが MTP によるものかは分けていない。表の差は、この検証環境とこの2通りの設定での結果として読む必要がある。MoE のオフロードを別のエンジンで比べた例は、VRAMに収まらないMoEモデルのデコードを比べた記事で扱っている。
同じ表の Qwen3.8-27B の値は、後の「Qwen3.8-27Bと比べて、どちらを使うか」の節で扱う。
2枚目のGPUは、自動の分け方では読み込みが遅くなった
先に結論を書くと、この検証環境 (2枚目は OCuLink で外付けした RTX 5060 Ti) では、2枚目を足しても RTX 5080 1枚より速くはならなかった。生成は 5080 1枚と同じ程度で、読み込みは、手で決めた中で最も速い分け方 (K=32〜40) でも 5080 1枚の約6〜9割で、自動のままでは 32K で約5分の1まで落ちた。
Qwen のモデルカードでは、Flash-Next は 48 層で、エキスパートは 512 個、1トークンあたり 10 個と共有の 1 個を使うとされている。
Strata の docs/MULTI_GPU.md によると、Strata の複数 GPU は層を前半と後半に分けて別の GPU に置く方式で、NVLink や GPU 間の直接アクセス (P2P) は要らず、x4 や x1 のスロットの GPU でも動くとされている。layer_split を auto (自動) にすると、全部の分け方を試し、各 GPU のキャッシュに載るエキスパートが最も多くなる分け方を選ぶとされている。ただしこの検証環境の起動ログでは、自動は「生成1回分 (MTP の先読みを含む1区切り) の予測時間 22.4ms」を示して K=47 を選んでいて、このとき2枚のキャッシュに載るエキスパートは、手で K=32 に固定したときより少なかった。読み込みの速さが選び方に入っているかは確かめていない。
測定では RTX 5080 に前半、RTX 5060 Ti に後半を持たせた。下の表の K は「2枚目 (5060 Ti) に渡す最初の層の番号」で、小さいほど2枚目の受け持ちが多い (層は 0 から数えて 48 層)。5060 Ti は K から 47 までの層と出力ヘッドと MTP の層を持つ。「自動」は layer_split を auto にした既定の構成で、K=16・24・32・40 は layer_split に数字を書いて固定した。設定ファイルへの書き方は、後ろの「起動の仕方」の節にまとめた。
| 分け方 | 2枚目 (5060 Ti) が受け持つ層 | 読み込み 1K | 読み込み 4K | 読み込み 32K | 生成 1K | 生成 4K | 生成 32K | 32Kの最初の文字まで | 5060 Ti の VRAM |
|---|---|---|---|---|---|---|---|---|---|
| K=16 | 16〜47 | 414 tok/s | 1,010 tok/s | 1,565 tok/s | 91 tok/s | 85 tok/s | 77 tok/s | 20.3秒 | 14,952MiB |
| K=24 | 24〜47 | 532 tok/s | 1,165 tok/s | 1,997 tok/s | 96 tok/s | 98 tok/s | 88 tok/s | 15.9秒 | 14,952MiB |
| K=32 | 32〜47 | 707 tok/s | 1,371 tok/s | 2,766 tok/s | 102 tok/s | 95 tok/s | 95 tok/s | 11.5秒 | 14,952MiB |
| K=40 | 40〜47 | 682 tok/s | 1,366 tok/s | 2,681 tok/s | 100 tok/s | 102 tok/s | 90 tok/s | 11.9秒 | 10,358MiB |
| 自動 (K=47、1周目) | 47 (最後の1層だけ) | 454 tok/s | 552 tok/s | 591 tok/s | 86 tok/s | 91 tok/s | 82 tok/s | 53.8秒 | 5,574MiB |
| 自動 (K=47、2周目) | 47 (最後の1層だけ) | 474 tok/s | 577 tok/s | 522 tok/s | 95 tok/s | 88 tok/s | 82 tok/s | 60.7秒 | 5,574MiB |
値は3回の中央値で、比べる先の RTX 5080 1枚は前の「1枚での速さ」の節の表 (32K の読み込みは 3,128 tok/s と 3,132 tok/s)。K=16・24・32・40 は各1周、自動は2周測った。試した分け方はこの5つだけ。
この検証環境では、自動は K=47 を選び、5060 Ti には最後の1層と出力ヘッドだけが渡った。このとき 32K の読み込みは 5080 1枚の約5分の1に落ちた。
K を手で 16・24・32・40 に固定した構成 (5060 Ti に 32・24・16・8 層を持たせる。どれも自動より外付け側に多くの層を渡す設定) は、どれも自動より読み込みが速かった。16→24→32 の順に速くなり、40 は 32 とほぼ同じだった。外付け側の層が最も少ない自動が最も遅かったので、外付け側に渡す層の数だけでは説明がつかない。理由は切り分けていない。
K=32 と K=40 の読み込みは、32K の入力では 5080 1枚の約9割まで戻ったが、1K と 4K の入力では約6割だった。読み込みはどの分け方でも 5080 1枚を超えなかった。生成は K=32〜40 で 90〜102 tok/s で、5080 1枚の2周の値 (74〜112 tok/s) の範囲に収まるため、2枚にして生成が速くなったとも遅くなったとも言えない。5060 Ti 1枚と比べると、生成は自動を含むどの分け方でも2枚のほうが速かった。読み込みは、手で固定した K=16〜40 では 1K・4K・32K のすべてで2枚のほうが速かったが、自動 (K=47) は 1K だけが速く、4K と 32K では 5060 Ti 1枚を下回った (32K の最初の文字までは 53.8〜60.7秒と、5060 Ti 1枚の 22.3〜22.4秒の倍以上かかった)。
2枚 (K=32) の Strata の Q2_0 でも、後の「Claude Codeの裏で動かす」の節の3つの課題は完了し、時間は RTX 5080 1枚と同じ程度だった (同じ節の表)。
素の llama.cpp を2枚で動かすと
同じ2枚で、素の llama.cpp b11218 にも Flash-Next を載せた。CUDA_VISIBLE_DEVICES で2枚とも見せ、-ngl も -ot も付けずに、GPU に載せる量と分け方を --fit に任せた (ほかの設定は前の節と同じ)。値は3回の中央値で、比べる先は RTX 5080 1枚で --fit に任せた値。
| モデル | 構成 | 読み込み 1K | 読み込み 4K | 読み込み 32K | 生成 1K | 生成 4K | 生成 32K | 32Kの最初の文字まで | VRAM (5080 / 5060 Ti) |
|---|---|---|---|---|---|---|---|---|---|
| Flash-Next Q2_0 | RTX 5080 1枚 | 202 tok/s | 257 tok/s | 275 tok/s | 21 tok/s | 19 tok/s | 18 tok/s | 114.8秒 | 14,506MiB / — |
| Flash-Next Q2_0 | 2枚 | 269 tok/s | 337 tok/s | 364 tok/s | 25 tok/s | 26 tok/s | 23 tok/s | 86.9秒 | 15,043MiB / 13,990MiB |
| Flash-Next Unsloth UD-IQ3_XXS | RTX 5080 1枚 | 139 tok/s | 174 tok/s | 182 tok/s | 26 tok/s | 27 tok/s | 24 tok/s | 173.1秒 | 14,291MiB / — |
| Flash-Next Unsloth UD-IQ3_XXS | 2枚 | 169 tok/s | 204 tok/s | 212 tok/s | 27 tok/s | 26 tok/s | 21 tok/s | 148.7秒 | 15,102MiB / 13,778MiB |
2枚にすると、Q2_0 は読み込みが約3割、生成がおおむね3割速くなった (表の値で 19〜37%、丸める前の値では 16〜33%)。UD-IQ3_XXS は読み込みが2割ほど速くなったが、生成は同じ程度で、32K では遅くなった。どちらも、Strata を RTX 5060 Ti 1枚で動かした値 (生成 57〜68 tok/s、32K の最初の文字まで 22.3秒) には届かなかった。llama.cpp の2枚の分け方や -ot の指定を詰めた結果ではない。
Strata のドキュメントにある測定と注意
Strata の開発者が RTX 5080 + RTX 3090 (CPU は Ryzen 9 9950X3D、Coder・32K の文脈) で測った値では、16K の入力の読み込みが 5080 1枚の 1,726〜2,017 tok/s から、2枚 (K=26) で 2,039 tok/s になったと書かれている。2枚で読み込みが伸びた例だが、カードも接続もモデルもこの記事と違うので、ここでは並べて比べない。
同じドキュメントの制限の項には、Windows (WDDM) と WSL2 では、複数 GPU のときにメインメモリ上のエキスパートの領域のうち固定 (ピン留め) されるのは 8GiB までで、残りは別の経路で流すと書かれている。Strata の開発者の別の環境 (RTX 4090 + RTX 3060) では、Linux 側でこの上限を外す前に、上限のせいで読み込みの速さが3分の2落ちたとされている。上限は STRATA_ARENA_PIN_GIB で変えられる。
この測定の2枚の起動ログには、K の値によらず (自動でも 16〜40 でも)「multi-GPU under WDDM: at most 8 GiB of the expert arena is pinned」という表示が出ていた。Windows の2枚の構成では、メインメモリ側の固定する領域が 8GiB で頭打ちになる (1枚の起動ログでは、エキスパートの領域全体を固定していた)。この上限が、分け方ごとの差や 1枚との差にどれだけ関わったかは分かっていない。上限は STRATA_ARENA_PIN_GIB で変えられるが、試していない。
OCuLink でつないだ2枚目の GPU で別のモデルを動かした例は、16GB VRAMからあふれるMoEを2枚目のGPUで動かした記事にある。
量子化を変えると(Q2_0・IQ3_XXS・Coder)
README によると、Coder は ISTA-DASLab のコード向けのもので、エキスパートを半分に減らし、コード・ツール・画像に使うものを残している。1本目のファイルは 29.6GB で、メインメモリ 32GB の PC に載るとされ、コード以外では弱いと書かれている。
IQ3_XXS と Coder (IQ1_M) も Q2_0 と同じオプション (文脈 65536・KV 8bit) で setup を実行し、同じベンチで測った。2枚の K=32 は layer_split を 32 に固定している。各構成3回 (1周) の中央値で、Q2_0 の値は前の節の1周目のもの。最後の列は、起動の前と直後の Windows の空き物理メモリの差 (GiB) で、メインメモリの使用量の目安になる。
| 量子化 | 構成 | 読み込み 1K | 読み込み 4K | 読み込み 32K | 生成 1K | 生成 4K | 生成 32K | メインメモリの使用量 (GiB、起動前後の空きの差) |
|---|---|---|---|---|---|---|---|---|
| Q2_0 | RTX 5060 Ti 1枚 | 278 tok/s | 920 tok/s | 1,426 tok/s | 68 tok/s | 67 tok/s | 57 tok/s | 33.3 |
| Q2_0 | RTX 5080 1枚 | 1,208 tok/s | 2,391 tok/s | 3,128 tok/s | 75 tok/s | 86 tok/s | 74 tok/s | 35.4 |
| IQ3_XXS | RTX 5060 Ti 1枚 | 203 tok/s | 696 tok/s | 1,162 tok/s | 49 tok/s | 51 tok/s | 49 tok/s | 42.9 |
| IQ3_XXS | RTX 5080 1枚 | 985 tok/s | 2,141 tok/s | 2,954 tok/s | 71 tok/s | 72 tok/s | 62 tok/s | 43.2 |
| IQ3_XXS | 2枚 (K=32) | 408 tok/s | 1,114 tok/s | 2,211 tok/s | 78 tok/s | 78 tok/s | 74 tok/s | 44.5 |
| Coder (IQ1_M) | RTX 5060 Ti 1枚 | 370 tok/s | 1,187 tok/s | 1,582 tok/s | 59 tok/s | 48 tok/s | 46 tok/s | 27.3 |
| Coder (IQ1_M) | RTX 5080 1枚 | 1,460 tok/s | 2,640 tok/s | 3,271 tok/s | 77 tok/s | 69 tok/s | 63 tok/s | 26.9 |
| Coder (IQ1_M) | 2枚 (K=32) | 946 tok/s | 1,666 tok/s | 3,192 tok/s | 94 tok/s | 87 tok/s | 85 tok/s | 27.9 |
IQ3_XXS は、同じ GPU で比べると Q2_0 より生成が遅かった。2枚 (K=32) にすると IQ3_XXS の生成は 5060 Ti 1枚より速く、5080 1枚との差は小さかった (読み込みは 5080 1枚を下回った)。Coder は読み込みが3つの中で最も速かった。生成は 5060 Ti ではどの長さでも Q2_0 より遅く、5080 では Q2_0 の値が2周の測定で揺れているので、どちらが速いとは言えない。Coder も2枚 (K=32) では読み込みが 5080 1枚を超えず (32K で約98%)、生成はこの1周の値では 5080 1枚より速かった。答えの質の差はこの節では比べておらず、後の「Qwen3.8-27Bと比べて」と「Claude Codeの裏で動かす」の節で扱う。
1本目のファイルの大きさを GiB に直すと Q2_0 は 35.0GiB、IQ3_XXS は 43.8GiB、Coder は 27.6GiB になる。サーバーの起動から応答できるまでの時間は Q2_0 で 12.0〜28.0 秒、IQ3_XXS で 24.0〜30.0 秒、Coder で 10.0〜16.0 秒だった。どれもモデルのダウンロードと setup を済ませたあとの起動で、それぞれの量子化の最初の起動も範囲に含まれる。ファイルの一部が OS のキャッシュに残っていた可能性があり、PC を再起動した直後の起動 (コールドスタート) は測っていない。
量子化の選び方としては、速さを優先するなら Q2_0 が候補になる (RTX 5060 Ti では測った3つの中で生成が最も速く、RTX 5080 では Coder と区別がつかない)。日本語で使うなら IQ3_XXS も候補になる。README は IQ3_XXS を品質で Q2_0 より上に置いていて、この記事のチャットのコードの説明と Claude Code の説明では、Q2_0 に出た中国語の混ざりが IQ3_XXS には出なかった (後の節)。その代わり生成は遅く、メインメモリの使用量も約8〜10GiB 多かった。README が推奨する IQ2_XS は、この記事では測っていない。
Qwen3.8-27Bと比べて、どちらを使うか
32K のような長い入力で読み込みと生成の速さを優先し、メインメモリが README の目安を満たすなら Strata の Flash-Next、メインメモリが少ないなら Qwen3.8-27B (UD-Q3_K_XL) が向く。短い入力では差が小さく、27B が速かったのは RTX 5060 Ti の 1K の読み込みと、論文の仕分けのような短い判定だった。RTX 5080 の 1K は読み込みも生成も同じ程度で、画像の短い課題やコードを書く課題は Strata が速かった。この記事の少数の課題では、チャットと Claude Code の答えに中国語が混ざったのは Strata の Flash-Next (Q2_0 と Coder) だけだった (27B も、文書の要約の1本に1語混ざった)。ただし Flash-Next はメインメモリ 96GB の検証環境でしか測っていない。
27B を VRAM 16GB で使うときの設定は別の記事にまとめている。量子化3種と必要な VRAM はQwen3.8-27BをVRAM 16GBで実測した記事、MTP の設定はQwen3.8-27BのMTPは16GBで速くなるかを測った記事、16GB で使える文脈の長さは指定できる文脈長と使える文脈長の違いを扱った記事を参照。
速さ(RTX 5060 Ti と RTX 5080)
「素のllama.cppと比べると」の節の表で、27B (llama.cpp で全部 GPU に載せ、MTP あり) と Strata の Q2_0 の値を GPU ごとに比べると、次のようになった。
- RTX 5060 Ti: 生成はどの長さでも Strata が速かった (57〜68 tok/s と 38〜51 tok/s)。読み込みは 4K と 32K では Strata、1K では 27B が速かった
- RTX 5080: 32K の入力では、最初の文字までが Strata 10.4秒・27B 29.3秒で、生成も Strata が速かった (74〜96 tok/s と 57 tok/s)。1K と 4K の生成は 27B (91〜92 tok/s) が Strata の2周の値 (75〜112 tok/s) の範囲に入り、1K の読み込みも同じ程度だった
27B の MTP の採択率 (先読みが採用された割合) は、RTX 5060 Ti の測定で 0.69〜0.78 だった。
チャットと画像(RTX 5080 で各3回)
先に結果を書くと、表とタイトル文字の書き起こしは3つとも毎回一致し、コードも3つとも書けた。差が出たのは、税の計算 (27B だけが3回とも正解)、写真の説明 (Q2_0 は3回とも「2枚」と誤った)、答えへの中国語の混ざり (Q2_0 に繰り返し出た) だった。
RTX 5080 1枚で、Strata の Q2_0 と IQ3_XXS (どちらも画像用のファイル (mmproj) を GPU で使う設定) と、llama.cpp b11218 の 27B (mmproj-F16 を付け、MTP あり) に同じ課題を3回ずつ出した。IQ3_XXS は、同じ Flash-Next で量子化だけが違うものとして並べている。OpenAI 形式の API で、チャットは思考あり (reasoning_effort high)・上限 8,192 トークン、画像は思考なし・上限 1,024 トークン、どちらも温度0。画像は3枚で、こちらで作った表の画像、写真の下にタイトル文字の帯が重なった画像 (タイトル文字を書き出させた)、GPU 1枚の写真にタイトル文字が重なった画像 (写真の説明を求めた。タイトル文字には「2枚」「RTX 5080+5060 Ti」などが含まれる) を使った。
| 課題 | Flash-Next Q2_0 (Strata) | Flash-Next IQ3_XXS (Strata) | Qwen3.8-27B (llama.cpp) |
|---|---|---|---|
| 税の計算 (思考あり) | 3回中2回正しい答え (1,229円)。1回は最後の足し算を誤り 1,129円 (時間は3回の中央値 17.0秒) | 3回中2回正しい答え。1回は上限 8,192 トークンに達し答えなし (時間は答えの出た2回の遅いほう 65.5秒) | 3回とも正しい答え・11.0秒 |
| ログを数える Python の関数 (思考あり) | 3回とも関数を書いた。1回は説明とコメントに『文件』『递归』が混ざった (時間は3回の中央値 10.8秒) | 3回とも関数を書いた・33.0秒 | 3回とも関数を書いた・24.3秒 |
| 条件を挙げて PC の構成を相談する質問 (思考あり) | 3回とも上限に達し答えなし・80.5秒 | 3回とも上限に達し答えなし・123.4秒 | 3回とも上限に達し答えなし・137.9秒 |
| 表の画像を書き起こす | 3回とも全セル一致・2.7秒 | 3回とも全セル一致・3.5秒 | 3回とも全セル一致・4.2秒 |
| 画像の下のタイトル文字を書き出す | 3回とも区切りの記号を除いて一致・1.6秒 | 3回とも区切りの記号を除いて一致・2.0秒 | 3回とも区切りの記号を除いて一致・6.5秒 |
| GPU の写真の説明 | 3回とも部品は正しいが『2枚のグラフィックカードが写っている』と誤った・2.5秒 | 1回は『2枚』と誤り、1回はタイトル文字の内容を写真の説明に持ち込んだ・2.6秒 | 3回とも1枚のカードとして正しく説明・6.4秒 |
時間は要求を送ってから応答が終わるまでで、3回の中央値。27B は温度0で3回とも同じ答えを返したので、27B の「3回とも」は同じ答えが再現されたという意味になる。Strata は温度0でも回ごとに答えが変わった。
中国語の混ざりは Q2_0 に繰り返し出て、IQ3_XXS ではチャットでも後の節の Claude Code でも出なかった。量子化の違いと関係していそうだが、3回ずつの観察なので原因とまでは言えない。Q2_0 よりビット数の少ない Coder (IQ1_M、エキスパートを減らした別の版) も Claude Code の説明で3回のうち2回混ざった。IQ3_XXS に Q2_0 と同じ課題を出したのは、チャットと Claude Code だけになる。写真の説明は、Q2_0 が3回とも、IQ3_XXS が3回のうち2回、タイトル文字の内容 (「2枚」など) を写真の説明に含めた。
PC の構成の相談に答えが出なかったときに設定を変えると
PC の構成を相談する質問では、3つとも答えを書く前に上限 8,192 トークンに達していた。思考の中身を見ると、どれも英語で「この点も入れるか」と論点を挙げ続けていて、Strata の Q2_0 は3回とも、IQ3_XXS は3回のうち2回、同じ型の文を何度も繰り返す状態になっていた (27B は繰り返しではなく、列挙が長く続いていた)。そこで RTX 5080 で、同じ質問を設定を変えて1回ずつ出した (どちらも画像用のファイルなしで起動した)。
| 設定 | Flash-Next Q2_0 (Strata) | Qwen3.8-27B (llama.cpp) |
|---|---|---|
| 思考 high・上限 32,768 トークン | 180.0秒で上限に達し答えなし (同じ文の繰り返し) | 202.1秒で答えた (答えを書き始めるまで135.9秒) |
| 思考 low・上限 8,192 トークン | 75.0秒で上限に達し答えなし (同じ文の繰り返し) | 78.6秒で答えた |
| 思考なし・上限 8,192 トークン | 19.5秒で答えた (説明に『权重』が混ざった) | 24.7秒で答えた |
27B は思考が 8,192 トークンより長くなっていただけで、上限を広げるか思考を減らすと答えた。Strata の Q2_0 は、上限を4倍にしても思考を low にしても同じ文の繰り返しから抜けず、思考を切ると答えた。答えの内容の正しさは採点していない。
RTX 5060 Ti で同じ課題を出すと
RTX 5060 Ti 1枚でも、Strata の Q2_0 と 27B に同じチャットと画像の課題を1回ずつ出した。RTX 5080 と同じ傾向の結果が1回ずつ出て、Strata の Q2_0 はコードの説明に『文件』が混ざり、写真を「2枚」と誤った。PC の構成の質問はどちらも上限に達した。27B の写真の説明は、1枚のカードとして正しかった。
27B に画像用のファイルを付けて文脈 65536 で起動すると、RTX 5060 Ti の 16GB には収まらず、Windows のパフォーマンスカウンター (GPU Adapter Memory) で、専用のメモリ 16,048MiB に加えて、メインメモリ側の共有 GPU メモリの使用量が約1GB になっていた。このとき画像の課題は 9.6〜20.9秒かかり、RTX 5080 の 4.2〜6.5秒より大きく遅かった (遅さのうちどれだけがあふれによるものかは切り分けていない)。画像も扱うなら、RTX 5060 Ti では文脈を短くするなどして 16GB に収めるほうが安全と考えられるが、収めた設定はこの記事では試していない。Strata の Q2_0 は、画像を扱う設定でも RTX 5060 Ti で表 6.5秒・タイトル文字 5.0秒・写真 6.5秒だった。
文書の一括処理(RTX 5060 Ti と RTX 5080)
先に結果を書くと、採点した範囲 (要約の見出しと日本語の割合、仕分けの正解率) では差が見えず、差が出たのは速さだった。仕分けはどちらの GPU でも 27B が速かった。
RTX 5060 Ti と RTX 5080 のそれぞれ1枚で、Strata の Q2_0 と llama.cpp b11218 の 27B (全部 GPU・MTP あり) に、一括処理の例として2種類の作業を1回ずつさせた。どちらも OpenAI 形式の API で思考なし。要約は英語のニュースや投稿10本を、決まった項目 (主題・切り口・要点5つ・登場する製品名・検索需要・信頼度) の日本語で書かせた (温度0.3・上限2,048トークン)。仕分けは arXiv の論文40本の題と要旨から、ローカルで AI を動かす人の役に立つかを JSON で判定させた (温度0.1・上限1,200トークン)。仕分けの正解は人ではなく、事前に上位のモデル (Claude Opus) で付けたラベルで、役立つ16本 (うち判断が割れる6本)、役立たない24本とした。表の適合率は「役立つと判定した論文のうち正解の割合」、再現率は「役立つ論文のうち拾えた割合」。
| 処理 | Q2_0 (Strata)・5060 Ti | 27B (llama.cpp)・5060 Ti | Q2_0 (Strata)・5080 | 27B (llama.cpp)・5080 |
|---|---|---|---|---|
| 日本語で要点がまとまった要約の本数 (主題と要点の見出しがあり、日本語の文字が35%以上) | 10本 | 10本 | 9本 | 10本 |
| 要約1本の時間 (中央値) | 10.5秒 | 10.8秒 | 4.6秒 | 6.1秒 |
| 仕分けの適合率 / 再現率 (判断が割れる6本を『役立つ』に数えた場合) | 0.92 / 0.75 | 1.00 / 0.75 | 1.00 / 0.81 | 1.00 / 0.75 |
| 仕分けの適合率 / 再現率 (判断が割れる6本を『役立たない』に数えた場合) | 0.77 / 1.00 | 0.83 / 1.00 | 0.77 / 1.00 | 0.83 / 1.00 |
| 仕分け1本の時間 (中央値) | 5.2秒 | 2.3秒 | 1.6秒 | 1.2秒 |
要約の時間は、RTX 5060 Ti ではほぼ同じで、RTX 5080 では Strata のほうが短かった。採点したのは主題と要点の見出しがあるか・日本語の文字の割合・時間だけで、ほかの項目が揃っているかや内容の正しさは採点していない。RTX 5080 の Strata の要約1本は、製品名の英語が多く、日本語の文字が35%をわずかに下回った。Strata の要約にも「エンド点」「渲染」のような混ざりがあり、RTX 5080 の 27B の要約も10本のうち1本に「后续」が混ざった。
仕分けはどちらの GPU でも 27B のほうが1本あたりの時間が短く、40本とも JSON として読めた。2つのモデルの判定が違ったのは、どちらの GPU でも40本のうち1本だけだった。Strata の判定は RTX 5060 Ti と RTX 5080 のあいだでも2本変わり (27B は同じだった)、適合率と再現率の差はこの程度の揺れの中にあるので、40本・1回ずつの結果では優劣とは言えない。
この節の比較は、どれも少数の課題での観察。Flash-Next と 27B は量子化の方式も違うので、モデルの差と量子化の差は混ざっている。
Claude Codeの裏で動かす
Claude Code の公式ドキュメントによると、Claude Code は対応する API 形式を持つゲートウェイなら接続でき、接続先は ANTHROPIC_BASE_URL で指定する。ただし Anthropic は、どのゲートウェイ経由でも Claude Code を Claude 以外のモデルへ流す使い方をサポートしていない。以下はサポートの外で試した結果。
Claude Code 2.1.284 を -p (非対話) で動かし、ANTHROPIC_BASE_URL を手元のサーバーに向けた。課題は、税の計算を持つ小さな Python のライブラリ (関数4つ、テスト6件、うち1件が端数処理の誤りで失敗する) に対する、説明 (ファイルは変えない)・バグ修正 (テストを通す)・機能追加 (CSV から読む関数とそのテストを足し、既存の失敗も直す) の3つで、課題ごとにプロジェクトを元の状態から始めた。RTX 5080 1枚では各課題を3回、RTX 5060 Ti 1枚と2枚 (K=32、画像用のファイルなし) では1回動かした。Strata は v0.1.31 の Q2_0・IQ3_XXS・Coder (IQ1_M)、文脈 65536 で、Q2_0 と IQ3_XXS は画像用のファイル (mmproj) も GPU に載せる設定 (VRAM を 700MiB 空ける) のサーバー、Coder は画像なしの設定で測った。27B は llama.cpp b11218 の llama-server で UD-Q3_K_XL を全部 GPU に載せ、MTP あり・--parallel 1・文脈 65536・KV q8_0 にした。27B の RTX 5080 の2回目と3回目は mmproj も付け、RTX 5060 Ti では mmproj を付けずに測った (付けると 16GB に収まらなかったため。前の節)。
| モデル (エンジン) | GPU・回数 | 説明 | バグ修正 | 機能追加 | テスト |
|---|---|---|---|---|---|
| Flash-Next Q2_0 (Strata) | RTX 5080・3回 | 33.9秒 (27.9〜38.4) | 38.5秒 (37.9〜44.0) | 115.0秒 (86.0〜129.6) | 3回ともすべて成功 |
| Flash-Next IQ3_XXS (Strata) | RTX 5080・3回 | 56.0秒 (48.3〜60.7) | 58.5秒 (53.0〜59.5) | 148.1秒 (136.1〜227.5) | 3回ともすべて成功 |
| Flash-Next Coder IQ1_M (Strata) | RTX 5080・3回 | 46.1秒 (43.8〜53.2) | 50.7秒 (48.7〜51.8) | 92.7秒 (68.8〜336.8) | 3回ともすべて成功 |
| Qwen3.8-27B (llama.cpp、チャットテンプレートを1行変更) | RTX 5080・3回 | 83.9秒 (56.5〜147.8) | 90.4秒 (89.2〜98.9) | 168.0秒 (163.4〜239.8) | 3回ともすべて成功 |
| Qwen3.8-27B (llama.cpp、チャットテンプレートのまま) | RTX 5080・1回 | 最初の要求でエラー | 最初の要求でエラー | 最初の要求でエラー | 変更なし (1件失敗のまま) |
| Flash-Next Q2_0 (Strata) | RTX 5060 Ti・1回 | 70.5秒 | 70.2秒 | 180.1秒 | すべて成功 |
| Flash-Next Coder IQ1_M (Strata) | RTX 5060 Ti・1回 | 143.6秒 | 105.5秒 | 351.2秒 | すべて成功 |
| Qwen3.8-27B (llama.cpp、チャットテンプレートを1行変更) | RTX 5060 Ti・1回 | 102.1秒 | 168.1秒 | 139.9秒 | すべて成功 |
| Flash-Next Q2_0 (Strata) | 2枚 (K=32)・1回 | 31.8秒 | 42.9秒 | 84.5秒 | すべて成功 |
時間は Claude Code を起動してから終わるまでで、3回のものは中央値 (括弧は最小〜最大)。テストの結果は課題のあとに別に pytest を実行して確かめ、「すべて成功」はバグ修正のあとの6件と、機能追加のあとのテスト (モデルが足した分を含めて10〜27件) がすべて通ったという意味。小さな課題3つの結果であり、大きなリポジトリや長い作業は試していない。
Strata の3つの量子化と、チャットテンプレートを変えた 27B は、どの回も3つの課題を完了し、テストが通った。RTX 5080 で課題を終えるまでの時間は、説明とバグ修正では Strata の Q2_0 が最も短かった。機能追加は回ごとの揺れが大きく、Coder は1回だけ出力が約36,000トークンと長くなって 336.8秒かかったが、ほかの2回は 92.7秒と 68.8秒だった。Claude Code の最初の要求は約16,000トークンあり、Strata の Q2_0 はこれを RTX 5080 で約 2,200〜2,900 tok/s (9回の範囲) で読み込み、2回目以降の要求では会話の前半を再利用した。
説明の答えには、Strata の Q2_0 では RTX 5080 の3回とも「单元测试」「测试结果」のような中国語の語が混ざり (2枚の1回にも混ざった)、Coder でも3回のうち2回 (1回は「再导出」の1語だけ) 混ざった。IQ3_XXS と 27B の Claude Code の答えには混ざらなかった。
接続の仕方
PowerShell の1つのウィンドウの中だけで接続先を Strata に向け、Claude Code に課題を渡す例が次のコマンド。API キーは Strata が見ないので何でもよく、ほかのウィンドウの Claude Code には影響しない。
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:8080"
$env:ANTHROPIC_API_KEY = "local-strata"
claude -p "テストが全部通るようにバグを直してください" --model strata --allowedTools "Read,Edit,Write,Glob,Grep,Bash(python -m pytest:*)"
Claude Code の公式ドキュメントによると、-p (非対話) で動かすとき、ファイルの編集や Bash のコマンドを許可待ちなしで使わせるには --allowedTools で許可するツールを指定する。計測ではファイルの読み書き・検索と python -m pytest だけを許可した。まずはこの3行で試す。うまく動かないときは、計測で使った次の設定を足す (計測ではこれらも入れて Strata v0.1.31 の Q2_0 で3つの課題が完了した。3行だけで完走するかは確かめていない)。実行の前に既存の CLAUDE_ と ANTHROPIC_ で始まる環境変数を外し、モデル名を ANTHROPIC_MODEL・ANTHROPIC_SMALL_FAST_MODEL・ANTHROPIC_DEFAULT_HAIKU_MODEL・ANTHROPIC_DEFAULT_SONNET_MODEL・ANTHROPIC_DEFAULT_OPUS_MODEL ですべて strata に固定し、DISABLE_TELEMETRY・CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC・DISABLE_AUTOUPDATER を 1 にして、--output-format json と --max-turns 30 を付け、設定のフォルダを課題ごとに新しく作った。
Qwen3.8-27B はチャットテンプレートを1行変えて動かした
Unsloth の Qwen3.8-27B の GGUF に入っているチャットテンプレート (会話をモデルへ渡すときの書式の定義) のままでは、llama-server が最初の要求で「System message must be at the beginning」という例外を出し、500 を返して止まった。問題は llama.cpp の既定ではなく、GGUF に入っているチャットテンプレートによる。
そこで GGUF の tokenizer.chat_template を Python の gguf パッケージで取り出し、この例外を出している行 (取り出したテンプレートでは 110 行目) を次のように書き換えて .jinja として保存し、llama-server の --chat-template-file で渡した。会話の途中に来るシステムメッセージを例外にせず、そのまま system の発言として渡す変更で、これで3つの課題が完了した。
変更前:
{{- raise_exception('System message must be at the beginning.') }}
変更後:
{{- '<|im_start|>system\n' + content + '<|im_end|>' + '\n' }}
これは公式の修正ではなく、この記事で試した変更。
起動の仕方
Strata の導入は、公式の README にある START-HERE.bat (Windows) の手順に任せる。ここでは導入スクリプト (setup) が済んだあとの起動の仕方を書く。
setup が済んだ Strata のフォルダで、ブラウザを開かずにサーバーだけを起動するには、コマンドプロンプトで次のように実行する。--gpu は nvidia-smi の番号で、GPU を1枚に絞るときに付ける。準備ができると ready: で始まる行が出る。
.venv\Scripts\python.exe serve\server.py --engine strata --config strata-q2_0.json --port 8080 --gpu 0
検証環境では 2026年10月1〜2日に、setup で作られた .venv と strata-q2_0.json を使い、--gpu 0 と --gpu 1 の両方で起動して /health が応答してから計測した (計測ではフォルダの絶対パスを指定した)。
2枚で使うときは --gpu を付けずに起動し、設定ファイルの gpu と layer_split を使う。setup が作った strata-q2_0.json の layer_split を auto から数字に書き換えると、その番号の層から先を2枚目の GPU が受け持つ (前の「2枚目のGPU」の節でいう K)。
"gpu": [
0,
1
],
"layer_split": "32"
検証環境では コピーした strata-q2_0.json の layer_split を 16・24・32・40 に変えて起動し、起動ログに出る「CUDA1 runs layers 32-47」(2枚目の GPU が 32〜47 番目の層を受け持つ、という意味) のような表記で、分け方が変わったことを確かめた。
README によると、サーバーは既定で PC 内の 8080 番ポートで待ち受け、OpenAI 形式 (/v1) と Anthropic 形式 (/v1/messages) の両方を受け付け、API キーとモデル名は何でもよい。
試した環境と条件
検証環境の詳しい構成は検証環境のページにまとめている。この記事の測定に関わる条件は次のとおり。
- CPU とメモリ: Intel Core i7-14700F・メインメモリ 96GB
- GPU と接続: RTX 5080 16GB は PCIe 5.0 x16 で画面表示を兼ねる。RTX 5060 Ti 16GB は OCuLink の外付けで PCIe 4.0 x4、画面表示なし (Strata の起動ログの転送速度は 5080 が毎秒38〜46GB、5060 Ti が毎秒7.0GB)
- ドライバと OS: NVIDIA ドライバ 610.47、Windows 11 (WSL ではなく Windows 上で直接)
- Strata v0.1.31: setup のオプションで文脈 65536・KV キャッシュ 8bit・画像なし・2枚使用を指定して導入した構成。KV の一部をメインメモリへ置く設定 (32768 から)、MTP の先読み 4 トークン。1枚の構成は
server.pyの--gpuで GPU を1枚に絞った。画像の課題と、Q2_0・IQ3_XXS の Claude Code は、コピーした設定ファイルに画像の設定 (--visionと、VRAM を 700MiB 空ける--vram-reserve-mib 700) を足して起動した - モデル: ISTA-DASLab の Qwen3.8-Flash-Next-GSQ-RCO-GGUF の Q2_0 と IQ3_XXS、Qwen3.8-Flash-Next-GSQ-RCO-Coder-GGUF の IQ1_M。llama.cpp 側は同じ Q2_0、Unsloth の UD-IQ3_XXS (3分割、計約82GB)、Unsloth の Qwen3.8-27B UD-Q3_K_XL
- llama.cpp b11218: llama-server、文脈 65536・KV キャッシュ q8_0・flash attention on・
-lm mmap --lazy-mode on。GPU はCUDA_DEVICE_ORDER=PCI_BUS_IDとCUDA_VISIBLE_DEVICESで、使う1枚だけを見せた (5060 Ti は 1、5080 は 0。2枚の構成は 0 と 1)。Flash-Next は-otと--fitの2通りで MTP なし。27B は-ngl 99で全部 GPU、--parallel 1、MTP (--spec-type draft-mtp --spec-draft-n-max 2) あり - ベンチ: Strata のリポジトリに入っているベンチのスクリプトを使った。コード系の入力を 1K・4K・32K トークンの長さで作り、毎回違う接頭辞を付けて前の入力の処理結果を使い回さないようにし、思考なし・温度0で 256 トークンを生成。各長さ3回の中央値。1枚の構成は3回を2周し、2周は別の日時ではなく同じ夜に、間に別の構成を挟んで測った
- チャット・画像・文書の一括処理・Claude Code: RTX 5080 では、チャット・画像・Claude Code を各3回 (27B のチャットテンプレートのままの Claude Code と、PC の構成の質問の設定違いは1回)、文書の一括処理を1回。RTX 5060 Ti と2枚 (K=32) の構成は各1回。温度は 0 (文書の一括処理は 0.3 と 0.1、Claude Code は Claude Code の既定)
- Ollama は計測中にモデルを載せていなかった
本記事の実測値は2026年10月1日〜2日に、上記の検証環境・設定で計測したもの (RTX 5080 の素の llama.cpp・27B の速さ、2枚の llama.cpp と Coder、品質の課題の2回目と3回目、RTX 5060 Ti のチャット・画像・Claude Code は10月2日)。結果はすべて1台の検証環境でのもので、RTX 5060 Ti の値は x4 の外付けの値であり、x8 や x16 で挿した 5060 Ti の値ではない。
測っていないことは次のとおり。コールドスタート (初回の起動)、64K 以上の文脈、Linux、IQ2_XS と IQ3_S の量子化、x16 でつないだ2枚の構成、メインメモリ 64GB の PC、別の CPU やメモリでの差、出力の質の体系的な比較は、この記事の測定に含まれていない。
まとめ
この記事の検証環境 (メインメモリ 96GB、RTX 5080 と OCuLink 外付けの RTX 5060 Ti) での結果から、状況ごとに選ぶと次のようになる。
- メインメモリが README の目安 (64GB) を満たし、長い入力を扱うことが多い: Strata の Flash-Next。まず Q2_0 を試し、答えに中国語が混ざるのが気になるなら IQ3_XXS
- メインメモリが少ない、写真の説明も任せたい: Qwen3.8-27B
- 2枚目の GPU がある: 自動のままにせず
layer_splitを手で決める。ただしこの検証環境では、手で決めても RTX 5080 1枚より速くはならなかった。細い接続や、Windows で2枚のときの固定の上限が関わったかは分けていない - Claude Code の裏で使いたい (サポート外): Strata はテンプレートを変えずに、27B はチャットテンプレートを1行直すと、小さな課題3つを完走した
- 思考ありの長い相談で Q2_0 が同じ文を繰り返して止まらない: RTX 5080 で1回試した限りでは、思考を切ると答えが返った (答えには中国語の語が混ざった)
よくある質問
Ollama でそのまま動かせますか
2026年10月2日に確認した Ollama の公式ライブラリのタグは、MLX の表示の付いた 105GB のものと、それ以外で最も小さい 120GB の 125b-a6b-q4_K_M だった。MLX の表示の無い 120GB のタグは、検証環境のメインメモリ 96GB と VRAM 16GB の容量を単純に足した 112GB より大きい。MLX の表示の付いたタグが Windows と NVIDIA の GPU で使えるかは確かめておらず、どちらのタグも動くかどうかは確かめていない。
メインメモリ 64GB で足りますか
Strata の README は、メインメモリの目安を「1本目のファイル + 約10GB」とし、64GB なら全サイズ (IQ3_S は他のアプリをほとんど開かない前提)、48GB なら Q2_0 と IQ2_XS が入るとしている。ディスクは約80GB の空きが必要とされる。検証環境では Q2_0 の起動後に空き物理メモリが 33.3〜36.6GiB 減った。64GB の PC では測っていない。
2枚目の GPU を足すと速くなりますか
この検証環境 (2枚目は OCuLink の x4 の外付け) では、読み込みは試した5つの分け方のどれでも RTX 5080 1枚を超えなかった。自動の分け方は大きく下回り、手で固定した中で最も速かった分け方でも 32K の入力で5080 1枚の約9割だった。生成は 5080 1枚と同じ程度だった。5060 Ti 1枚と比べると、生成は2枚のほうが速かった。読み込みは手で固定した分け方では速かったが、自動の分け方では 4K と 32K の入力で 5060 Ti 1枚を下回った。素の llama.cpp は、--fit に任せて2枚にすると Q2_0 の生成がおおむね3割速くなったが (UD-IQ3_XXS はほぼ変わらなかった)、Strata の1枚には届かなかった。x16 でつないだ2枚と、固定の上限が無いとされる Linux では測っていない。
日本語で使うと中国語が混ざりますか
この記事のチャットと Claude Code の課題では、Strata の Q2_0 の答えに「单元测试」「文件」のような中国語の語が繰り返し混ざった。同じ課題を出した同じ Flash-Next の IQ3_XXS と、Qwen3.8-27B では混ざらなかった (27B は文書の要約の1本に1語混ざった)。各3回ほどの観察で、量子化が原因とまでは言えない。
Flash-Next と Qwen3.8-27B のどちらを使えばよいですか
32K のような長い入力で読み込みと生成の速さを優先し、メインメモリが README の目安を満たすなら Strata の Flash-Next、メインメモリが少ないなら 27B が向く。短い入力では差が小さく、27B が速かったのは RTX 5060 Ti の 1K の読み込みと論文の仕分けで、RTX 5080 の 1K は同じ程度だった。この記事の少数の課題では、チャットと Claude Code の答えに中国語が混ざったのは Strata の Flash-Next の Q2_0 と Coder だけで、同じ課題を出した IQ3_XXS と 27B では混ざらなかった。Flash-Next はメインメモリ 96GB の検証環境でしか測っていない。
参考資料
- Qwen/Qwen3.8-Flash-Next (Hugging Face)
- Strata README (v0.1.31)
- Strata docs/DETAILS.md (v0.1.31)
- Strata docs/MULTI_GPU.md (v0.1.31)
- ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-GGUF (Hugging Face)
- ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-Coder-GGUF (Hugging Face)
- unsloth/Qwen3.8-Flash-Next-GGUF (Hugging Face)
- unsloth/Qwen3.8-27B-GGUF (Hugging Face)
- llama.cpp PR #27742: model: add Qwen3.8-Flash-Next (qwen4exp)
- llama.cpp PR #29761: Qwen4Exp: add MTP
- Ollama: qwen3.8-flash-next のタグ一覧
- Claude Code Docs: Other LLM gateways
- Claude Code Docs: Run Claude Code programmatically
