RTX4060Ti 8GBにGemma4:12q-it-qatを載せようとしたらちょっとオーバーしたので、設定をして8GBに収めました。その方法を説明します。
今回使うモデル
Ollamaで簡単に利用できる Gemma4:12b-it-qat 7.2GB でテストします。
> ollama list
NAME ID SIZE MODIFIED
gemma4:12b-it-qat 38044be4f923 7.2 GB 8 minutes ago
これをそのまま実行すると、
> ollama run gemma4:12b-it-qat --think=false --verbose "分子動力学法について500文字程度で説明して。"
中略
total duration: 22.6194618s
load duration: 402.0082ms
prompt eval count: 27 token(s)
prompt eval duration: 168.749ms
prompt eval rate: 160.00 tokens/s
eval count: 296 token(s)
eval duration: 22.01991s
eval rate: 13.44 tokens/s
> ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gemma4:12b-it-qat 38044be4f923 8.5 GB 32%/68% CPU/GPU 8192 3 hours from now
VRAM 8GBに収まらず、CPU側に処理が分割されて生成速度が遅くなってしまいました。GPUもフル稼働できず、もったいないです。
Modelfileの作成と登録
テキストエディタで次のような内容のModelfileを作成します。
FROM gemma4:12b
PARAMETER num_gpu 99
num_gpuではGPUに載せるレイヤー数を指定します。大きい数字を指定するという意味で99が書かれています。
なお、場合によっては PARAMETER num_ctx 4096 などを設定し、コンテキスト長を明示的に小さくする必要があるかもしれません。
このModelfileをホームディレクトリに置いた状態で、
> ollama create gemma4:12b-it-qat_gpu -f ./Modelfile
これでlistを見てみると、
> ollama list
NAME ID SIZE MODIFIED
gemma4:12b-it-qat_gpu 695d58251131 7.2 GB 26 minutes ago
gemma4:12b-it-qat 38044be4f923 7.2 GB 3 hours ago
SIZEは同一で、設定だけ書き換えたものができました。詳細を見てみると赤いところが増えます。
> ollama show gemma4:12b-it-qat_gpu
Model
architecture gemma4
parameters 11.9B
context length 262144
embedding length 3840
quantization Q4_0
requires 0.30.5
Capabilities
completion
vision
audio
tools
thinking
Projector
architecture clip
parameters 52.38M
embedding length 3840
dimensions 3840
Parameters
num_gpu 99
temperature 1
top_k 64
top_p 0.95
License
Apache License
Version 2.0, January 2004
...
実行
読み込まれているモデルを一度止めて、先ほど作った新しいモデルを使って生成を実行します。
> ollama stop gemma4:12b-it-qat
> ollama run gemma4:12b-it-qat_gpu --think=false --verbose "分子動力学法について500文字程度で説明して。"
中略
total duration: 12.3639793s
load duration: 399.735ms
prompt eval count: 27 token(s)
prompt eval duration: 163.522ms
prompt eval rate: 165.12 tokens/s
eval count: 295 token(s)
eval duration: 11.772045s
eval rate: 25.06 tokens/s
> ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gemma4:12b-it-qat_gpu 695d58251131 7.6 GB 100% GPU 8192 3 hours from now
「100% GPU」が出ました!
速度を比べると、
| Model | Eval rate [tokens/s] |
|---|---|
| オリジナル | 13.44 |
| 100% GPU | 25.06 |
速度が2倍近く速くなりました。
同じモデルでコンテキスト長も8kで同じなのに、num_gpuを明示するかしないかの違いだけで2倍近い速度の差になりました。SIZEが8.5GBから7.6GBに減っていますが、これはCPUとGPUを併用するためにRAMとVRAMにモデルを分ける部分に無駄があるらしく、GPU onlyにすることで7.6 GBまでコンパクトになるようです。
補足
Context length
OllamaのSettingsでContext lengthを変えていくつかテストをしました。
| Context length が16k以下 | 生成速度が24-25 tokens/s 専用GPUメモリに全部収まる |
| Context length が32k以上 | 生成速度が19 tokens/sに低下 共有GPUメモリに一部はみ出す |
Context lengthを大きくすると使用するRAM量が増えるので、共有GPUメモリ(つまりCPU用のRAM)にデータが分かれてしまい、それによって速度が低下します。エージェント用でコンテキスト長を大きくしたい場合は速度の低下を受け入れましょう。25が19になるくらいなら妥協できる範囲かと思います。
Modelfile
Modelfileには書けるものについて。私が書いたことがあるのは次のようなものです。
FROM gemma4:e4b
PARAMETER num_gpu 99
PARAMETER num_ctx 131072
PARAMETER use_mmap false
num_ctx はコンテキストウィンドウの大きさ。
use_mmap falseは、VRAMが大きいAMD環境でモデルをVRAMとRAMの両方にロードされてしまったときに、これをfalseにすることでVRAMのみに展開し、RAMに余裕を持たせることができました。
コメント