背景
Local PC で LLM を動かすとき、「どの GPU が何 GB 積んでるか」を確認したくなった。
Windows だし Get-WmiObject Win32_VideoController すれば一発かな、と思ったら AdapterRAM が実際の VRAM と全然違う値 を返してきた。
RTX 3060 は 12 GB って聞いてたのに、WMI だと約 4 GB 相当の数字が出てきて「えっ?」ってなった
で、ほんとの数字はどうとるのか?まで
概要
-
WMI の
AdapterRAMは信頼できない場合がある
(特に VRAM のサイズ判定) -
nvidia-smiを使えば正確な VRAM 情報が取れる たぶん - リモート表示アダプタとかが混在すると、WMI の出力がさらに混乱するっぽい
詳細
1. WMI で GPU 情報を取得してみた
まず素直に PowerShell で WMI を叩いてみた。
Get-WmiObject Win32_VideoController | Format-List *
出力を text に保存して確認したところ、2つのビデオコントローラーが列挙された。
- Microsoft Remote Display Adapter(リモートデスクトップ用の仮想ディスプレイ)
- NVIDIA GeForce RTX 3060
問題は RTX 3060 の AdapterRAM が 4293918720 バイト(約 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 モデルなんだって思ってたら、後輩から、そんな少なくないのでは?って突っ込み受けました
いい後輩でした 😁
WMI の AdapterRAM は不正確
Win32_VideoController の AdapterRAM プロパティは、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
- Total:
-
BAR1 Memory Usage (PCIe バー領域):
- Total:
16384 MiB - Used:
16356 MiB - Free:
28 MiB
- Total:
-
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-smi、rocm-smi など)を使うのが確実。
あとがき
GPU の VRAM サイズを正確に知りたいときは nvidia-smi を使うのが正解 だった。
LLM を動かすときは「何 GB 積んでるか」が死活問題なので、次からは気を付けよう
ってことで、GPU 情報を調べるときはベンダーツールを使おう、というメモでした。