はじめに
LLMの一般的な解説を読むと、モデルのサイズがVRAM容量を超えていても、VRAMとメモリ容量の合計値以内に収まっていれば何とか動くと書いてあります。これが本当なのか実際に試したいと思います。
実験方法
以下の3種類のモデルを使用し、ollama runコマンドをverboseオプション付きで実行して、出力結果を確認することにします。なおLLMに投げる文章は1種類で固定し、モデル毎に3回ずつ計測することにします。
モデルの初回ロードは時間を要するので、記録からは除外します。
C:\>ollama list
NAME ID SIZE MODIFIED
gemma4:e2b 7fbdbf8f5e45 7.2 GB 2 minutes ago
gemma3:4b a2af6cc3eb7f 3.3 GB 22 minutes ago
qwen3.5:2b 324d162be6ca 2.7 GB 27 hours ago
ollama run gemma3:4b --verbose "宇宙について教えて"
例によってPC環境は以下の通りです。Ivy Bridgeおじさん代表として頑張ります。念のためですが、ユニファイドメモリではありません。この環境においては、サイズが18GB以下のLLMであれば、何とか動くのでしょうか…
- グラフィックボード: NVIDIA GeForce GT 1030 GDDR5 2GB
- メモリ: 16GB DDR3
- CPU: Core i7-3770
- OS: Windows 11 Pro 24H2
- Ollama: 0.32.13
- NVIDIAドライバ: 582.66
結果
qwen3.5:2b
C:\>ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen3.5:2b 324d162be6ca 2.4 GB 98%/2% CPU/GPU 4096 4 minutes from now
| 項目 | 1回目 | 2回目 | 3回目 |
|---|---|---|---|
| total duration | 3m30.0777386s | 3m46.4948889s | 3m34.1237653s |
| load duration | 621.9995ms | 631.7303ms | 600.4876ms |
| prompt eval count | 13 token(s) | 13 token(s) | 13 token(s) |
| prompt eval duration | 263.473ms | 232.282ms | 250.814ms |
| prompt eval rate | 49.34 tokens/s | 55.97 tokens/s | 51.83 tokens/s |
| eval count | 1856 token(s) | 1995 token(s) | 1898 token(s) |
| eval duration | 3m29.162912s | 3m45.596551s | 3m33.237677s |
| eval rate | 8.87 tokens/s | 8.84 tokens/s | 8.90 tokens/s |
中では一番サイズが小さいモデルなので期待しておりましたが、処理時間の合計(total duration)が3分を超えてしまいました。何とか動きましたが、ウルトラの戦士的にはアウトですかね。
gemma3:4b
C:\>ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gemma3:4b a2af6cc3eb7f 2.9 GB 96%/4% CPU/GPU 4096 4 minutes from now
| 項目 | 1回目 | 2回目 | 3回目 |
|---|---|---|---|
| total duration | 2m31.768312s | 2m34.3317396s | 1m57.9302277s |
| load duration | 806.3109ms | 803.6214ms | 805.8013ms |
| prompt eval count | 13 token(s) | 13 token(s) | 13 token(s) |
| prompt eval duration | 430.024ms | 429.965ms | 451.729ms |
| prompt eval rate | 30.23 tokens/s | 30.24 tokens/s | 28.78 tokens/s |
| eval count | 1074 token(s) | 1100 token(s) | 849 token(s) |
| eval duration | 2m30.46718s | 2m33.039913s | 1m56.603727s |
| eval rate | 7.14 tokens/s | 7.19 tokens/s | 7.28 tokens/s |
理由は不明ですが、モデルのサイズが大きい程、処理時間の合計(total duration)も増える訳ではないようです。類似のプロンプトであれば、こちらはカップ麺が出来上がる前に、回答が得られそうです。
gemma4:e2b
C:\>ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gemma4:e2b 7fbdbf8f5e45 6.8 GB 98%/2% CPU/GPU 4096 4 minutes from now
| 項目 | 1回目 | 2回目 | 3回目 |
|---|---|---|---|
| total duration | 2m25.7712258s | 2m30.198907s | 2m36.6299708s |
| load duration | 1.0642298s | 792.7418ms | 810.2477ms |
| prompt eval count | 19 token(s) | 19 token(s) | 19 token(s) |
| prompt eval duration | 346.318ms | 358.122ms | 345.214ms |
| prompt eval rate | 54.86 tokens/s | 53.05 tokens/s | 55.04 tokens/s |
| eval count | 1371 token(s) | 1406 token(s) | 1463 token(s) |
| eval duration | 2m24.340609s | 2m29.033488s | 2m35.461284s |
| eval rate | 9.50 tokens/s | 9.43 tokens/s | 9.41 tokens/s |
中では一番サイズが大きそうなモデルですが、処理時間の合計(total duration)は、2番手(gemma3:4b)と変わらないような印象です。また同じプロンプトを投げたのですが、なぜかトークン数(prompt eval count)は13から19に増えています。
まとめ
実運用には程遠いですが、確かに何とか動くようです。例えば学習用に数回試してみるだけであれば、グラボのVRAMが足りないからと早々に諦める必要はないかもしれません。また繰り返しになりますが、よりサイズが大きいモデルを選択しても、なぜか合計処理時間は減るケースもありましたので、色々と試してみるのが良さそうです。