ローカルAIのVRAM使用量を正しく測る方法

目次
ローカルAIのVRAM使用量を比べるとき、「タスクマネージャーで8GBだった」「モデルを起動したら12GBになった」という数字だけでは、同じ条件で比較し直すことが難しい。
重要なのは、いつ、何を実行し、どの指標で測った値なのかを固定することだ。
図: 容量・設定値・段階差の判断軸を1枚に整理。数値の条件は本文を優先する。
まず測る区間を4つに分ける
最低限、次の4段階を別々に見る。
- 待機時 — 実行環境やモデルを動かす前後の基準値
- モデル読み込み直後 — モデルをメモリへ配置した時点
- 入力処理中 — プロンプトやコンテキストを処理している区間
- 生成中 — 出力を生成している区間
長い入力を処理している最中の値と、モデルを読み込んだ直後の値を同じ「必要VRAM」として並べない。
PyTorchではallocatedとreservedを分ける
PyTorchを使う処理では、テンソルなどへ実際に割り当てられているメモリと、PyTorchのメモリアロケーターが確保している領域を別の指標で確認できる。
代表的な関数・指標名は次のとおり。
memory_allocated
max_memory_allocated
memory_reserved
max_memory_reserved
allocatedとreservedの値が違うこと自体は異常ではない。何の値を記録したのか、名前を残す。
現在値と最大値を混同しない
画面を見た瞬間のVRAM使用量は、その処理で到達した最大値とは限らない。
VRAM容量の判断へ使うなら、最大値の追跡をリセットできる環境では測定開始前にリセットし、対象の処理を最後まで通した後に最大値を読む。
最大値の記録をリセット
→ モデル読み込み
→ 入力処理
→ 生成
→ 最大値を取得
ただし、PyTorchが記録する最大値は「GPU上で動いているすべてのプロセスを含むGPU全体の最大使用量」と同じではない。PyTorch内の指標なのか、OSやGPU監視ツールの値なのかを明記する。
VRAMの数字と一緒に実行条件を保存する
同じモデル名でも、設定が違えばメモリ使用量は変わる。
GPU / ドライバー:
OS:
実行環境 / バージョン:
モデル / リビジョン:
量子化・精度:
コンテキスト長:
入力トークン数:
生成トークン数:
バッチ:
オフロード設定:
測定した指標:
画像・動画生成なら、コンテキスト長の代わりに解像度、フレーム数、バッチ数、使用したモデル構成などを記録する。
モデルを読み込めたときの値だけを必要VRAMにしない
モデルが読み込めた直後の値は重要だが、生成中に到達する最大値とは限らない。
LLMではコンテキスト長やKV cache、画像・動画生成では解像度、フレーム数、追加モデルなどが実行中のメモリ使用量へ影響する。
そのため、モデルファイルの容量や読み込み直後の値だけを見て「必要VRAMはこれ」と決めない。
最終結果だけでなく測定ログを残す
あとから同じ条件で比較できるよう、結果の数字だけでなく測定記録を保存する。
測定ID:
開始時刻:
実行条件:
待機時:
読み込み後の現在値 / 最大値:
入力処理中の現在値 / 最大値:
生成中の現在値 / 最大値:
エラー:
元ログの保存先:
モデルや実行環境を更新した後も、同じ手順で再測定できる。
比較するときは測定区間と指標をそろえる
A環境のmax_memory_allocatedと、B環境のタスクマネージャーを一瞬見た値を同じ列へ並べても、公平な比較にはならない。
同じ区間を、同じ種類の指標で測る。 まず一つのワークフローで待機時→モデル読み込み→入力処理→生成まで固定し、現在値・最大値・allocated・reservedのどれを使ったかと元ログを残す。
速度指標も同時に整理したい場合は、tokens/s・TTFT・レイテンシの違いを確認できる。
まとめ
- VRAM使用量は、待機時、モデル読み込み直後、入力処理中、生成中を分けて測る
- PyTorchのallocatedとreserved、現在値と最大値はそれぞれ別の指標として記録する
- PyTorchのメモリアロケーターが示す値と、GPU全体・プロセス全体の使用量は同じ指標ではない
- モデル、リビジョン、実行環境、量子化・精度、コンテキスト長などの条件と測定ログをセットで残す