Gemma4:12b-it-qatをVRAM 8GBに収める

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」が出ました!
速度を比べると、

ModelEval rate [tokens/s]
オリジナル13.44
100% GPU25.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に余裕を持たせることができました。

コメント

タイトルとURLをコピーしました