0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GPU の VRAM を確認したら実際と違ってハマった話。VRAM 値の測定方法

Posted at

背景

Local PC で LLM を動かすとき、「どの GPU が何 GB 積んでるか」を確認したくなった。
Windows だし Get-WmiObject Win32_VideoController すれば一発かな、と思ったら AdapterRAM が実際の VRAM と全然違う値 を返してきた。

RTX 3060 は 12 GB って聞いてたのに、WMI だと約 4 GB 相当の数字が出てきて「えっ?」ってなった
で、ほんとの数字はどうとるのか?まで

概要

  • WMI の AdapterRAM は信頼できない場合がある :thinking: (特に VRAM のサイズ判定)
  • nvidia-smi を使えば正確な VRAM 情報が取れる たぶん
  • リモート表示アダプタとかが混在すると、WMI の出力がさらに混乱するっぽい

詳細

1. WMI で GPU 情報を取得してみた

まず素直に PowerShell で WMI を叩いてみた。

Get-WmiObject Win32_VideoController | Format-List *

出力を text に保存して確認したところ、2つのビデオコントローラーが列挙された。

  1. Microsoft Remote Display Adapter(リモートデスクトップ用の仮想ディスプレイ)
  2. NVIDIA GeForce RTX 3060

問題は RTX 3060 の AdapterRAM4293918720 バイト(約 4.09 GB)だった点。

AdapterCompatibility         : NVIDIA
AdapterRAM                   : 4293918720
Caption                      : NVIDIA GeForce RTX 3060
DriverVersion                : 32.0.15.8157
VideoProcessor               : NVIDIA GeForce RTX 3060

RTX 3060 は 12 GB モデル なのに、WMI は 4 GB 相当の値を返してきた。
当初これで、あ、4G モデルなんだって思ってたら、後輩から、そんな少なくないのでは?って突っ込み受けました :sweat_smile: いい後輩でした 😁

WMI の AdapterRAM は不正確
Win32_VideoControllerAdapterRAM プロパティは、OS やドライバの報告をそのまま返すため、実際の物理 VRAM と一致しない場合があるらしい。特にリモート表示アダプタが混在していたり、ドライバが仮想メモリを含めた値を返すケースでは、VRAM の正確な容量を得られない。

2. nvidia-smi で確認したら正解が出た

NVIDIA GPU のベンダーツールである nvidia-smi を使えば、正確な VRAM 情報が取れた

nvidia-smi --query-gpu=memory.total,name,driver_version --format=csv,noheader,nounits

出力:

12288, NVIDIA GeForce RTX 3060, 581.57

VRAM は 12288 MiB = 12 GB で正しい。WMI の 4 GB とは全然違う。

さらに詳細情報を取るには -q オプションを使う。

nvidia-smi -q

これで以下の情報が取れる:

  • FB Memory Usage (フレームバッファ = VRAM):
    • Total: 12288 MiB
    • Used: 516 MiB
    • Free: 11600 MiB
  • BAR1 Memory Usage (PCIe バー領域):
    • Total: 16384 MiB
    • Used: 16356 MiB
    • Free: 28 MiB
  • Driver Version: 581.57
  • CUDA Version: 13.0
  • PCIe Link: Gen1 x16 (スナップショット時点)

FB Memory と BAR1 の違い

  • FB Memory (Frame Buffer): GPU の物理 VRAM。モデルやテクスチャ、計算データが格納される。
  • BAR1 Memory: PCIe Base Address Register 1。ホスト CPU から GPU メモリへのアクセス用領域。GPU によっては VRAM 全体を BAR1 にマップする設定もあるため、サイズが大きくなることがある。

3. 複数 PC の VRAM を比較してみた

実際に 2 台の PC で nvidia-smi を実行して、VRAM の使用状況を比較した。

項目 PC1 PC2
GPU モデル NVIDIA GeForce RTX 3060 NVIDIA GeForce RTX 3060
FB Memory Total 12288 MiB 12288 MiB
FB Memory Used 516 MiB 1587 MiB
FB Memory Free 11600 MiB 10541 MiB
Driver Version 581.57 546.33
CUDA Version 13.0 12.3
PCIe Link Gen1 x16 Gen4 x16
WMI AdapterRAM 4293918720 bytes (約 4.09 GB) (未取得)

ポイント:

  • 両方とも 12 GB の RTX 3060 で正しい
  • WMI の AdapterRAM は約 4 GB と報告されていて不正確
  • nvidia-smi なら一発で正確な VRAM 情報が取れる

4. なぜ WMI は間違った値を返すのか?

WMI の Win32_VideoController は、OS が管理するドライバ情報をもとに値を返す。しかし:

  • リモート表示アダプタ(Remote Display Adapter)などの仮想ディスプレイデバイスが混在すると、情報が混乱する
  • ドライバが報告する値が不正確な場合がある(特に古いドライバや仮想化環境)
  • システムが管理する共有メモリやアドレス空間の一部AdapterRAM として報告するケースがある

結果として、物理 VRAM のサイズを正確に取得するには ベンダー提供のツール(nvidia-smirocm-smi など)を使うのが確実

あとがき

GPU の VRAM サイズを正確に知りたいときは nvidia-smi を使うのが正解 だった。

LLM を動かすときは「何 GB 積んでるか」が死活問題なので、次からは気を付けよう
ってことで、GPU 情報を調べるときはベンダーツールを使おう、というメモでした。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?