はじめに
デカいは正義。モデルのサイズが大きいほど性能がいい。
実際にどれだけ変わるのか見てみよう。
ビジネスチャットは無駄が多い。余計な前置きや社交辞令だらけ。
例えばこれ。
お世話になっております。
いつも大変お世話になっております。
お忙しいところ恐縮ですが、お時間のある際で構いませんので、ご確認いただけますと幸いです。
先日はご対応いただき、誠にありがとうございました。
急ぎではございませんので、ご都合のよろしいタイミングでご確認いただければと思います。
お手数をおかけしてしまい恐縮ですが、添付しております資料をご確認いただけますでしょうか。
もし気になる点やご不明な点などございましたら、どんな些細なことでもお気軽にご連絡ください。
ご多忙のところ恐れ入りますが、何卒よろしくお願いいたします。
それでは、引き続きどうぞよろしくお願いいたします。
ごちゃごちゃ言っているけど、本質は「資料見て」。
これをLLMに圧縮させたい。
プロンプト
あなたは文章変換AIである。
ユーザーが入力した丁寧な文章を、ラフで砕けた口調に変換する。
また、不要な前置きや社交辞令を削除し、文章を圧縮する。
モデルの大きさでどれだけ変わるのか?
gemma4-E4B(9B)
お疲れ様です。
忙しいところ悪いけど、時間ある時でいいから資料見てくれる?
この前はありがとう。
急ぎじゃないから、都合いい時でOK。
添付の資料、確認お願い。
なんか疑問とかあったら、何でも気軽に連絡してね。
よろしく!
前置きが消せていない。
「この前はありがとう。」が浮いている。確かに元の文章にはあったけど、ここは消すべきだ。
「時間ある時でいい」「急ぎじゃないから、都合いい時でOK」と同じことも2回言っている。
gemma4-26B
資料送るね。
時間ある時にチェックしておいて!
何かあればいつでも連絡して。よろしく!
完璧だ。余計な前置きを消している。文体も親しみがあっていい感じ。
こういう風に、大きいモデルははるかに性能がいい。
LLMはGPUで動かすのがセオリー。
なぜなら、速いから。CPUで動かすとかなり遅くなる。
載せられるLLMの大きさはGPUメモリで決まる。
12GBのGPUには、12GBまでのLLMしか載せられない。
大きいモデルを動かしたい。でも、GPUメモリが足りない。
だから諦める。こういうことが結構ある。
ところで、先ほどの26Bモデルのサイズは14.2GBだ。
私のGPUメモリは12GB。足りない。
それなのに、実際には動いている。
なぜか。
答えは、「GPUだけで動かす必要はない」だ。
実は、LLMの一部だけをCPUで動かすことができる。
GPUは「作業机」、CPUメモリは「本棚」のイメージ。机に載り切らない資料を棚に置いておく。取りに行くぶん少し遅くなるが、作業自体は続けられる。
入りきらない分だけCPUに任せれば、26Bのモデルでも動かせるというわけだ。
一部だけCPUに任せることを「CPUオフロード」という。
llama.cppでCPUオフロードを使う
やることは簡単。
起動オプションに
--n-gpu-layers auto
を付けるだけでいい。
ついでに、速度向上のために--flash-attn onも付けておこう。
例
.\llama-server -m models/gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf --n-gpu-layers auto --ctx-size 4096 --flash-attn on --reasoning off
CPUオフロードすると遅くなる?
もちろん、全部GPUで動かすよりは遅くなるはず。でも体感結構速い。
実際に確かめてみた。
| 項目 | 環境 |
|---|---|
| GPU | RTX 3060 (12GB) |
| CPU | i5-12400F |
一番最初のプロンプトでの速度
E4B(全部GPU)
11.50 ms per token, 86.94 tokens per second
26B(CPUオフロード)
24.81 ms per token, 40.30 tokens per second
ようするにE4Bの半分の速度。
モデルサイズは約3倍。しかもCPUオフロード。なのに、速度は約半分にしかなっていない!
体感としてかなり速い。
GPUメモリが足りなくても諦めるのは速い
GPUメモリが足りなくても諦めるのは速い。
GPUだけで動かす必要はない。
CPUオフロードを使えば、一回り大きいモデルを動かせる。