VRAMに収まらない大きなAIモデルは、llama.cppの新機能で速くなる?〜RTX 5060 Ti(VRAM 16GB)でGLM-5.3-Flashを測った

本ページは広告(アフィリエイトプログラム)を含みます。詳しくはプライバシーポリシーをご覧ください。

自分のGPUに載らない大きなモデルを動かすとき、MoE(Mixture of Experts=混合エキスパート。入力ごとに、モデル内の一部の「専門家」だけが働く仕組み)のモデルは、専門家の重みをRAMに置き、CPUで計算させる方法が使えます。llama.cpp では、この指定が -cmoe(–cpu-moe)です。ところが2026年10月、llama.cpp に、RAMに置いた専門家のうち、よく使うものをVRAMに写して持っておく「MoEキャッシュ」(–moe-cache-mib)が入りました。VRAMの一部をキャッシュに回すと、書く速さがどれだけ変わるのかを、実機で測りました。

2026年10月28日時点の内容です。

スポンサーリンク

何を測ったのか

ミニPC(EVO-X2)にOCuLinkで接続したRTX 5060 Ti(VRAM 16GB)で、GLM-5.3-Flash(MoEモデル・93GB)を -cmoe で動かし、MoEキャッシュの容量を変えながら、書く速さ [tok/s]・入力の処理時間 [ms]・VRAM使用量 [MiB] を測りました。キャッシュなしの状態を基準にして、キャッシュを付けたときとの差を見ています。

書く速さは、1秒あたりに生成するトークン数 [tok/s] です(トークンは、文章を分けた単位)。大きいほど速く書きます。

回答の質(文章の良し悪し)は、評価していません。

スポンサーリンク

目的

次の3つを確かめます。1つ目は、キャッシュ容量を 2,200 / 4,400 / 6,600 / 8,800 MiB と変えると、書く速さが何 tok/s になるか。2つ目は、キャッシュに回した分だけVRAMがどれだけ増えるか。3つ目は、入力の処理時間が、キャッシュで変わるか。

方法

使ったもの

項目 内容
機体 EVO-X2(ミニPC)。メインメモリは約122GiB
GPU NVIDIA GeForce RTX 5060 Ti(VRAM 16GB)。OCuLink接続(PCIe Gen4 x4)。このGPU1枚だけが見える設定(CUDA_VISIBLE_DEVICES=1)で測定
ソフト llama.cpp b11946(公式配布の CUDA 12.8 版)。llama-server を使用
モデル GLM-5.3-Flash(unsloth 配布の GGUF・量子化 UD-IQ1_S・3分割で合計約93GB)
起動の指定 -ngl 99 -cmoe -fa on -c 4096 -t 16 –no-warmup。キャッシュありの場合は –moe-cache-mib に容量 [MiB] を指定

-cmoe は、専門家の重みをRAMに置いてCPUで計算する指定です。–moe-cache-mib は、そのうちVRAMに写しておく量 [MiB] の指定です。b11946 は、キャッシュの入れ替え方式が LRU(いちばん長く使われていないものから捨てる)から、50/50 SLRU という方式に改良された版を含みます。

モデルの重みは、10/23 公開の別条件の記事で使ったものと、合計バイト数が違いました(10/23の記事は 93,077,724,536 バイト、今回の配布元の表示は 93,087,245,088 バイトで、約9.5MBの差)。配布元で更新された可能性があります。今回の重みは、配布元が示すハッシュ値(sha256)と一致することを確かめています。

測り方

項目 設定
入力と出力 入力473トークン(毎回、先頭の文を変えて、前回の計算の再利用を避けた)・生成128トークン・temperature 0
回数 各6回。1回目は起動直後の状態で測るため別扱い。残り5回のうち、いちばん速い1回といちばん遅い1回を除いた3回の中央値
書く速さ [tok/s] llama-server が返す timings の predicted_per_second
入力の処理時間 [ms] 同じく timings の prompt_ms(入力473トークンを処理する時間)
VRAM [MiB] nvidia-smi の使用量の最大値(このGPUのみ)
転送量の記録 キャッシュ4,400 MiB の測定中に、nvidia-smi dmon で、GPUのPCIe受信量 [MB/s] と使用率 [%] を15回記録
スポンサーリンク

結果

–moe-cache-mib [MiB] 書く速さ 中央3点の中央値 [tok/s] 基準との比 1回目の書く速さ [tok/s] 入力の処理時間 中央3点の中央値 [ms] VRAM最大 [MiB]
なし(基準) 17.846 1.00 17.354 11,128 8,487
2,200 2.774 約0.16 2.768 11,701 10,663
4,400 3.943 約0.22 3.953 11,342 12,863
6,600 4.428 約0.25 4.438 10,969 15,063
8,800 起動時に、GPUのメモリ(CUDA0 バッファ)を確保できず失敗(OOM)。測定できず

キャッシュなしでは、書く速さが 17.846 tok/s でした。キャッシュを付けると、2,200 MiB で 2.774 tok/s、4,400 MiB で 3.943 tok/s、6,600 MiB で 4.428 tok/s で、どれも基準より遅くなりました。キャッシュ容量を増やすほど速くなる傾向はありますが、基準の約4分の1までしか戻りませんでした。

4,400 MiB は、念のため測り直しました(3回・中央値)。結果は 3.955 tok/s で、1回目の測定と同じ水準でした。

入力の処理時間は、4条件とも約11,000 ms(約11秒)で、キャッシュの有無による差は見えませんでした。入力の処理(473トークン)は、今回の条件では、キャッシュの影響を受けていません。

VRAMは、キャッシュなしでも最大 8,487 MiB 使いました。-cmoe を指定しても、アテンション(文脈を読む層)など専門家以外の重みと、計算用のバッファはGPUに載るためと考えられます。キャッシュを付けると、VRAMは、指定した容量に近い分だけ増えました(2,200 MiB 指定で約2,180 MiB 増、4,400 MiB で約4,380 MiB 増、6,600 MiB で約6,580 MiB 増)。8,800 MiB は、8,487 MiB に加えると16GBのVRAMを超えるため、起動で失敗したと考えられます。失敗の詳しい原因は確かめていません。

スポンサーリンク

考察

この条件では、なぜ遅くなったのか

原因は、今回の測定だけでは断定できません。観測できたのは次の点です。キャッシュ4,400 MiB の測定中、GPUのPCIe受信量は、15回の記録で 4,293〜7,761 MB/s でした。リンクは Gen4 x4 で、GPU使用率は 94〜100% でした。PCIe Gen4 x4 の片方向の理論上の上限は約7.9GB/s です。受信量が、この上限の近くまで上がる記録が多くありました(15回のうち 6,280 MB/s 以上が12回)。

この観測から、キャッシュに入っていない専門家をRAMからVRAMへ送る転送が、OCuLinkのリンクで頭打ちになっている可能性があります。基準(キャッシュなし)では、専門家をCPUがメモリから直接読んで計算するため、この転送は発生しません。ただし、キャッシュに入っていた割合(命中率)は、ログに出ないため確かめていません。転送が原因かどうかは、確かめていません。

もし転送の頭打ちが主な原因なら、帯域の広い接続(PCIe x16)では、差が縮むはずです。この確認は、していません。

キャッシュ容量と書く速さ

キャッシュを大きくすると、書く速さは 2.774 → 3.943 → 4.428 tok/s と上がりました。増え方は、2,200 MiB から 4,400 MiB で約1.2 tok/s、4,400 MiB から 6,600 MiB で約0.5 tok/s です。今回の3点だけでは、これ以上に容量を増やしたとき(8,800 MiB は失敗)どうなるかは分かりません。

VRAMの余裕

16GBのGPUでも、キャッシュなしで 8,487 MiB を使うため、キャッシュに回せる量は、今回の条件では 6,600 MiB(VRAM最大 15,063 MiB)までが、今回成功を確認できた最大でした(間の値は測っていません)。VRAMが小さいGPUでは、回せる量はさらに小さくなります。

スポンサーリンク

今回の測定で確かめていないこと

次のことは、今回確かめていません。

接続は、OCuLink(PCIe Gen4 x4)だけです。PCIe x16 で直接挿した機体での結果は、ありません。

モデルは、GLM-5.3-Flash の UD-IQ1_S(約1.56ビットの量子化)だけです。ほかのMoEモデルや、ほかの量子化では測っていません。量子化が小さいことが結果に影響したかどうかは、切り分けていません。

GPUは、RTX 5060 Ti だけです。同じ機体のRTX 3060(VRAM 12GB)や、内蔵GPUでの挙動は、測っていません。

キャッシュの命中率は、確かめていません。キャッシュ8,800 MiB の起動失敗は、ログの末尾(メモリ確保の失敗)を見ただけで、原因の詳細は調べていません。

入力は473トークン・出力は128トークンの1種類です。長い入力や、長い出力での挙動は、測っていません。回答の質は、評価していません。

まとめ

見たこと 結果(RTX 5060 Ti 16GB・OCuLink・GLM-5.3-Flash UD-IQ1_S・-cmoe)
書く速さ [tok/s] キャッシュなし 17.846 / 2,200 MiB 2.774 / 4,400 MiB 3.943 / 6,600 MiB 4.428
入力の処理時間 [ms] 約11,000 ms。キャッシュの有無で差は見えない
VRAM最大 [MiB] キャッシュなし 8,487 / 2,200 MiB 10,663 / 4,400 MiB 12,863 / 6,600 MiB 15,063。8,800 MiB は起動失敗
転送の観測(4,400 MiB) PCIe受信 4,293〜7,761 MB/s・Gen4 x4・GPU使用率 94〜100%。転送で頭打ちの可能性(命中率は未確認)

この条件では、MoEキャッシュを付けると、書く速さは、キャッシュなしの約0.16〜0.25倍に下がりました。入力の処理時間は変わらず、VRAMは、指定した量に近い分(約2,180〜6,580 MiB)増えました。

スポンサーリンク

自分の機体で試すときは

今回の数字から言えるのは、この条件についてだけです。キャッシュを付けると何が上がり、何の制約が付くかを、次の表に並べます。

見たいこと 今回の結果
書く速さ この条件では、付けた分だけ下がった(17.846 → 2.774〜4.428 tok/s)。容量が大きいほど下がり方は小さい
入力の処理時間 変化なし(約11,000 ms)
VRAM 指定した容量ぶん増える。キャッシュなしでも8,487 MiB使う
接続の帯域 PCIe Gen4 x4 では、受信量が上限近くまで上がった。x16 の機体は未測定

自分の機体で試す場合は、キャッシュなしの -cmoe で一度測り、そのうえで –moe-cache-mib を足して、同じ入力で書く速さを比べると、差を確かめられます。機体の接続(x4 か x16 か)やモデルが違えば、結果が逆になる可能性があります。

参考: 提案者の報告値(本編の表とは別条件・私は再現していません)

この機能の提案(llama.cpp の Pull Request #29887)には、提案者が報告した速度があります。条件が本編と違うため、本編の表の値とは並べず、私が再現した値でもありません。

項目 提案者の報告 本編との違い
GPU RTX 4090 と RTX 5090 本編は RTX 5060 Ti(VRAM 16GB)
接続 PCIe 4.0 x16 本編は OCuLink(PCIe Gen4 x4)
モデル Qwen3.8-Flash-Next(Q4_0) 本編は GLM-5.3-Flash(UD-IQ1_S)
書く速さ 25.0 → 39.4 tok/s(約1.57倍・4090・キャッシュ6.4GB)/30.8 → 54.5 tok/s(約1.77倍・5090) 本編は、キャッシュありで下がった

この値は、PRに書かれた数字を、そのまま写したものです。条件がこれだけ違うため、本編の結果と食い違っているとは言えません。

スポンサーリンク

次の一歩