Local / Edge解説

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

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

ローカルAIのVRAM使用量を比べるとき、「タスクマネージャーで8GBだった」「モデルを起動したら12GBになった」という数字だけでは、同じ条件で比較し直すことが難しい。

重要なのは、いつ、何を実行し、どの指標で測った値なのかを固定することだ。

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

図を拡大して見る

図: 容量・設定値・段階差の判断軸を1枚に整理。数値の条件は本文を優先する。

まず測る区間を4つに分ける

最低限、次の4段階を別々に見る。

  1. 待機時 — 実行環境やモデルを動かす前後の基準値
  2. モデル読み込み直後 — モデルをメモリへ配置した時点
  3. 入力処理中 — プロンプトやコンテキストを処理している区間
  4. 生成中 — 出力を生成している区間

長い入力を処理している最中の値と、モデルを読み込んだ直後の値を同じ「必要VRAM」として並べない。

PyTorchではallocatedとreservedを分ける

PyTorchを使う処理では、テンソルなどへ実際に割り当てられているメモリと、PyTorchのメモリアロケーターが確保している領域を別の指標で確認できる。

代表的な関数・指標名は次のとおり。

memory_allocated
max_memory_allocated
memory_reserved
max_memory_reserved

allocatedreservedの値が違うこと自体は異常ではない。何の値を記録したのか、名前を残す。

現在値と最大値を混同しない

画面を見た瞬間の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全体・プロセス全体の使用量は同じ指標ではない
  • モデル、リビジョン、実行環境、量子化・精度、コンテキスト長などの条件と測定ログをセットで残す
同じテーマから

サイト内検索