はじめに
gpt-oss-120bのような大きなモデルは自分のマシンだと動かないと思っていたのだけど、Redditを覗いていたら以下の書き込みを発見。
llama-serverのオプション(--n-cpu-moe)を使えば、VRAMの少ない環境(8GB)などでも25 tokens/secくらいの速度で動作させられるらしい。
--n-cpu-moeは、MoEの重みをCPUに保持させるオプションとのこと。
とういことで、コンシューマ用のマシンでどの程度の処理速度が出るか検証してみた。
環境
私の環境は以下の通り。
項目 (Item) | 内容 (Content) |
---|---|
OS | Kubuntu 24.04.03 |
CPU | Ryzen 5 7600 |
メモリ (Memory) | DDR5-5600 64GB |
マザーボード (Motherboard) | MSI MAG B650 TOMAHAWK WIFI |
GPU1 | ZOTAC GAMING GeForce RTX 5060 Ti 16GB Twin Edge |
GPU2 | MSI GeForce RTX 3060 VENTUS 2X 12G OC |
GPUドライババージョン | 575.64.03 |
$ nvidia-smi
Sun Aug 17 09:41:29 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.64.03 Driver Version: 575.64.03 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 5060 Ti Off | 00000000:01:00.0 On | N/A |
| 0% 46C P5 13W / 180W | 1567MiB / 16311MiB | 5% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 3060 Off | 00000000:06:00.0 Off | N/A |
| 0% 54C P8 18W / 170W | 15MiB / 12288MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
動かして処理速度検証
--n-cpu-moeの数値を調整すれば、GPUと組み合わせて動作させることができるようなので、以下の4パターンで検証してみた。
- CPUのみ
- CPU + RTX5060ti
- CPU + RTX3060
- CPU + RTX5060ti + RTX3060
CPUのみ
すべてCPUで処理。gpt-oss-120bは36レイヤということで、--n-cpu-moeには36を指定。
docker run \
--rm \
-v ./models:/models \
-p 22015:8000 \
ghcr.io/ggml-org/llama.cpp:server-cuda-b6152 \
--model /models/gpt-oss-120b-GGUF/gpt-oss-120b-mxfp4-00001-of-00003.gguf \
--port 8000 \
--host 0.0.0.0 \
--ctx-size 32768 \
--jinja \
--reasoning-format none \
--n-cpu-moe 36 \
--flash-attn \
--temp 1.0 \
--top-p 1.0
結果: 12.14 tokens/sec
動くは動くけれども、快適とは言えない速度。
CPU + RTX5060ti
36レイヤのうち、30レイヤをCPUで、6レイヤをRTX5060tiで処理。RTX5060tiの場合、--n-cpu-moe 30が限界で、これ以上、--n-cpu-moeの値を小さくするとOOMが発生する。
docker run \
--rm \
--gpus all \
-v ./models:/models \
-p 22015:8000 \
-e CUDA_VISIBLE_DEVICES=0 \
ghcr.io/ggml-org/llama.cpp:server-cuda-b6152 \
--model /models/gpt-oss-120b-GGUF/gpt-oss-120b-mxfp4-00001-of-00003.gguf \
--port 8000 \
--host 0.0.0.0 \
--ctx-size 32768 \
--jinja \
--reasoning-format none \
--n-gpu-layers 1000 \
--n-cpu-moe 30 \
--flash-attn \
--temp 1.0 \
--top-p 1.0
結果: 24.10 tokens/sec
早くはないけど、十分実用的な速度。
CPU + RTX3060
36レイヤのうち、31レイヤをCPUで、5レイヤをRTX3060で処理。RTX3060の場合、--n-cpu-moe 31が限界で、これ以上、--n-cpu-moeの値を小さくするとOOMが発生する。
docker run \
--rm \
--gpus all \
-v ./models:/models \
-p 22015:8000 \
-e CUDA_VISIBLE_DEVICES=1 \
ghcr.io/ggml-org/llama.cpp:server-cuda-b6152 \
--model /models/gpt-oss-120b-GGUF/gpt-oss-120b-mxfp4-00001-of-00003.gguf \
--port 8000 \
--host 0.0.0.0 \
--ctx-size 32768 \
--jinja \
--reasoning-format none \
--n-gpu-layers 1000 \
--n-cpu-moe 31 \
--flash-attn \
--temp 1.0 \
--top-p 1.0
結果: 23.09 tokens/sec
あんまりRTX5060tiと変わらないのは意外。
CPU + RTX5060ti + RTX3060
36レイヤのうち、24レイヤをCPUで、RTX5060ti, RTX3060でそれぞれ6レイヤを処理。
なお、マルチGPUの場合は、--tensor-splitも合わせて使用する必要があるらしい。
正直、上記の書き込みを見てもどうやって指定すればよいかチンプンカンプンであったが、試行錯誤の結果、後述のtensor-splitとn-cpu-moeの指定の組み合わせで、GPUのVRAM使用量をギリギリまで使うような設定にできた。
docker run \
--rm \
--gpus all \
-v ./models:/models \
-p 22015:8000 \
-e CUDA_VISIBLE_DEVICES=0,1 \
ghcr.io/ggml-org/llama.cpp:server-cuda-b6152 \
--model /models/gpt-oss-120b-GGUF/gpt-oss-120b-mxfp4-00001-of-00003.gguf \
--port 8000 \
--host 0.0.0.0 \
--ctx-size 32768 \
--jinja \
--reasoning-format none \
--n-gpu-layers 1000 \
--tensor-split 24,6,6 \
--n-cpu-moe 24 \
--flash-attn \
--temp 1.0 \
--top-p 1.0
結果: 25.29 tokens/sec
マルチGPUにしても単一GPUと大して変わらない。なぜだ....
まとめ
今回は、gpt-oss-120bをローカルで実行して、処理速度を検証してみた。1つGPUを使うだけでも、それなりに実用的な速度がでることが確認できた。
測定結果まとめ:
パターン | tokens/sec |
---|---|
CPUのみ | 12.14 |
CPU + RTX5060ti | 24.1 |
CPU + RTX3060 | 23.09 |
CPU + RTX5060ti + RTX3060 | 25.29 |