
16GB VRAMで27BクラスのLLMを動かせるか調べた
- 日本語
- ローカルLLM
- VRAM
- RX 9060 XT
- 量子化
- LLM
#はじめに
RX 9060 XT 16GBでgpt-oss-20bを使い始めたあと、もう少し大きなモデルも気になり始めた。
特に27Bクラス。
20Bが動くなら27Bもそれほど遠くないように見える。
しかし、ローカルLLMではパラメータ数だけを見ても、実際にGPUへ収まるか判断できない。
量子化方式、コンテキスト長、KVキャッシュ、ランタイムのオーバーヘッドなども考える必要がある。ここらへん専門領域はなんとなくしか理解できていない…
#27Bを4bitにすると重みだけで約13.5GB
単純化して考えると、27Bパラメータを4bitで保存した場合、
27,000,000,000 × 4bit ÷ 8
なので、重みだけなら約13.5GBになる。
16GB VRAMなら、
入るのでは
と思いたくなる。
ただし、これはあくまで重みだけの理論値だ。
実際の推論ではこれ以外のメモリも必要になる。
#VRAMはモデルの重みだけに使うわけではない
LLMを動かすときは、GPUメモリにモデル本体以外のデータも置く。
代表的なのがKVキャッシュだ。
会話やコードのコンテキストが長くなるほど、保持する情報も増える。
さらにランタイム自体の作業領域も必要になる。
そのため、
16GB VRAM │ ├─ モデルの重み ├─ KVキャッシュ ├─ 実行時バッファ └─ その他のオーバーヘッド
という使われ方になる。
4bitの27Bが理論上13.5GBだからといって、残り2.5GBですべて足りるとは限らない。
#「起動できる」と「快適に使える」を分ける
ローカルLLMではここを分けた方が分かりやすい。
#起動できる
- 量子化を強くする
- コンテキストを短くする
- 一部をRAMへ逃がす
といった調整で動く可能性がある。
#快適に使える
- 十分なコンテキストを確保できる
- 速度が実用的
- 他のアプリと競合しない
- 頻繁にメモリ不足にならない
ことまで求める。
自分がAIコーディングへ使いたいなら、単に起動するだけでは足りない。
#RAMへオフロードする方法がある
VRAMにモデル全体が収まらない場合、一部をシステムRAMへ置く方法もある。
これなら16GB VRAMを超えるモデルも実行できる可能性がある。
ただし、専用のVRAMとPCのメインメモリでは帯域も接続方法も違う。
GPU内だけで完結する場合と比べれば、速度面では不利になりやすい。
容量を増やせば速くなるわけではない。
RAMが多いと「入るモデル」は増えるが、「速くなる」とは限らない
という理解が重要だった。
#現在の32GB RAMでは余裕も考えたい
自宅PCのRAMは32GB。
LLMだけが使うわけではない。
Fedora、ブラウザ、Neovim、Docker、開発サーバーなど、普段の開発環境も同時に動く。
しかも最近はGitHub Self-hosted runnerも稼動しているので枯渇気味だ…
そこへ大きなモデルをRAMオフロードすると、かなりメモリを使う。
ローカルLLM専用マシンなら全部をモデルへ使っても良いが、これは普段のメインPCでもある。
そのため、27Bを動かせるかどうかだけでなく、
27Bを動かしながら普段どおり開発できるか
まで考える必要がある。
#16GBでは20B前後が扱いやすい
現在の自分の環境では、gpt-oss-20bのように16GBでの利用を明確に想定したモデルの方が扱いやすい。
27Bクラスは興味深いが、GPUへきれいに収めて余裕を持って使うには16GBは少し狭い。
強い量子化やRAMオフロードを使えば選択肢は広がる。
ただ、日常的な補助モデルとして使うなら、無理にサイズを大きくする必要もない。
モデルサイズが大きければ、自分の用途で必ず良くなるとも限らない。
#RAMを増やしたら状況は変わる
27Bクラスを試すうえで次に気になったのが、システムRAMだった。
32GBから64GB以上へ増やせば、GPUに収まらない部分を置く余裕はかなり増える。
ただ今の時期はメモリの高騰がすごすぎて手が出せない…
そこで、ローカルLLMではVRAMだけでなくRAM容量も重要だったという点を改めて整理することにした。
#まとめ
16GB VRAMで27BクラスのLLMを動かせるか考えた。
4bit量子化の重みだけなら約13.5GBなので、一見すると16GBへ入りそうに見える。
しかし実際には、
- KVキャッシュ
- ランタイムの作業領域
- コンテキスト長
- 量子化方式
も影響する。
そのため、
16GBで27Bは絶対に無理
でも、
4bitなら余裕
でもない。
調整次第で動く可能性はあるが、自分のように普段の開発PCとしても使うなら、20B前後を余裕を持って動かす方が現在は扱いやすいと考えている。