ローカルLLM運用の必須知識|VRAM・トークン数の正確な計算方法と失敗回避テク
なぜVRAM計算が大事か
ローカルで生成AIを動かすとき、最初にぶつかる壁がメモリ不足です。GPUのVRAM(ビデオメモリ)を超えると、処理が突然落ちたり、システムが重くなったり、最悪GPUが壊れる可能性もあります。でも、計算式さえ知っていれば、導入前に「このマシンで動かせるのか」「予算をいくら積めばいいのか」が分かります。
実感としては、適切に計算して運用すれば、古めのGPUでも意外と大きな生成AIモデルが動きます。逆に、ざっくり見積もると、いざ動かしたときに予想外の失敗に遭います。
VRAM消費量の計算式
生成AIのモデルがVRAMに載るかは、この基本式で判定できます:
必要VRAM(GB)= モデルの重さ(GB) × (1 + 勾配情報の量 + バッチサイズの影響)
より詳しくは:
- 推論時:モデルサイズ × 1.2(オーバーヘッド含む)
- 学習時:モデルサイズ × 3~4(勾配やキャッシュのため)
具体例で見てみよう
例えば、70億パラメータのモデルを推論で動かす場合:
- 70億パラメータ = 約14GB(16ビット精度の場合)
- 推論時の必要VRAM = 14 × 1.2 ≒ 17GB以上
つまり、24GBのGPUなら動きますが、16GBだと危ないです。
また、複数の入力を同時に処理する「バッチサイズ」を増やすと、その分VRAMが増えます。バッチサイズを2倍にするとおおよそVRAM消費も2倍になると考えておくと、ざっくりとした見積もりに役立ちます。
トークン数を事前に数える理由
「トークン」とは、文章を細かく切った1つ1つの単位です。生成AIは、ここからどこまで入力できるかという上限(コンテキストウィンドウ)があります。それを超えるとエラーになります。
例えば、「このモデルのコンテキスト上限は4097トークン」というエラーに遭ったことがあれば、それは入力が上限を超えているサイン。あらかじめ数えておけば、こうした失敗を防げます。
Python での事前カウント方法
ローカル環境なら、専用のライブラリを使ってトークン数を数えることができます。例えば、tiktoken(OpenAIが提供しているトークンカウント用の公式ライブラリ)を使う手法があります。コード例をいくつか参考にできます。
# 例として、カウント処理の流れ
# 1. 入力テキストを準備
# 2. トークンの数を計算
# 3. コンテキスト上限と比較
# 4. 超えていれば、入力を短くする
この流れを組めば、APIリクエスト前や、ローカルモデルの実行前に「大丈夫な量か」をチェックできます。
よくある失敗パターンと回避策
パターン1:オーバーヘッドを忘れる
モデルサイズちょうどのVRAMで「大丈夫」と判断してしまう人が多いです。実際には、バッチ処理や中間結果を保存するため、追加のメモリが必要です。目安として、モデルサイズの2割増しを見ておくとより安全です。
パターン2:コンテキスト長エラーに事前対策しない
会話を続ける際に、過去のやりとり全部を入力に含めていると、いつか必ずトークン上限に引っかかります。「どの部分を含めるか」をあらかじめ決めておく、または古い会話から捨てるルールを作っておくと、運用がスムーズです。
パターン3:異なるモデルで同じ計算を使う
モデルごとに、精度や内部構造が異なるため、VRAMの消費量も変わることがあります。同じパラメータ数でも、アーキテクチャによっては消費量が2割以上変わる可能性があります。新しいモデルに切り替えるときは、再度計算し直しましょう。
応用アイデア
運用スクリプトに組み込む
トークン数カウントをスクリプト化して、モデルの実行前に自動チェックする仕組みを作れば、手作業のミスを減らせます。
GPUの複数台構成を検討するときの判断基準に
将来的にモデルを大きくしたい場合、VRAM計算をしておくと、「今の1台では足りず、2台必要」といった判断が早めに分かります。
コスト見積もりに活かす
クラウド環境でGPUをレンタルする際の料金見積もりも、必要VRAM量があれば、「どのスペックのマシンを選ぶか」が決まるので、無駄な支出を防げます。
出典
上記の計算式とベストプラクティスは、VRAM計算に関する技術記事や、OpenAI APIのトークンカウントに関するQ&Aサイトでの議論をもとにしています。実装の詳細やコード例は、参考ソースを確認することで、より具体的な手順が分かります。
あわせて読みたい
- 生成AIをメモリ8GBで動かすと5回のツール呼び出しで落ちる理由
- Claude 3.5 Sonnetの最新コンテキストウィンドウ、200Kトークンで何ができるか
- Claude Codeでコンテキスト管理を効率化:メモリ管理の実践ガイド