16GB VRAMで27BクラスのLLMを動かせるか調べた

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で保存した場合、

text
27,000,000,000 × 4bit ÷ 8

なので、重みだけなら約13.5GBになる。

16GB VRAMなら、

入るのでは

と思いたくなる。

ただし、これはあくまで重みだけの理論値だ。

実際の推論ではこれ以外のメモリも必要になる。

#VRAMはモデルの重みだけに使うわけではない

LLMを動かすときは、GPUメモリにモデル本体以外のデータも置く。

代表的なのがKVキャッシュだ。

会話やコードのコンテキストが長くなるほど、保持する情報も増える。

さらにランタイム自体の作業領域も必要になる。

そのため、

text
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前後を余裕を持って動かす方が現在は扱いやすいと考えている。