この記事は、筆者のWindowsマルチGPU環境で実際に起きた問題を、AIとの調査ログをもとに整理したものです
起きたこと
Windows 11のマルチGPU環境で、ローカルLLMを実行しているときに奇妙な症状に遭遇しました。
nvidia-smiでは2枚のGPUにしっかり負荷がかかっているのに、Windowsのタスクマネージャーでは片方のGPU使用率だけが0%のままになっていました。
今回の構成は、ざっくり言うと次のようなものです。
- Windows 11 Pro
- NVIDIA GeForce RTX 3090 + RTX 3080
- NVIDIA Driver 576.80
- ローカルLLM実行環境: LM Studio
- 片方のGPUは表示出力あり
- もう片方のGPUはモニターなしのヘッドレス状態
- マシンはサブ機で、普段はリモート操作
最終的には、HAGS(ハードウェア アクセラレータによる GPU スケジューリング)を無効化して再起動したところ、タスクマネージャー側でもCUDA負荷が見えるようになりました。
最初に疑ったこと: phantom device
このPCは過去にGPU構成を何度か入れ替えていました。
そのため、まず疑ったのはWindows上に残っている古いGPUの履歴です。Device Managerで「非表示のデバイスを表示」したときに出てくる、いわゆる phantom device / non-present device です。
PowerShellでは次のように確認できます。
Get-PnpDevice -Class Display
実際、過去に使っていたGPUや、同じGPUを別スロットに挿していたときのデバイスインスタンスが
CM_PROB_PHANTOM として残っていました。
不要なphantom deviceは、管理者権限のPowerShellなどから
pnputil で削除できます。
pnputil /remove-device "PCI\VEN_...."
この作業で、Device
Manager相当の表示は現在刺さっている2枚のGPUだけになりました。BlenderのCycles設定にも古いGPUが残っていたので、userpref.blend
のバックアップを取った上でデバイス一覧を再生成しました。
その結果、BlenderやDevice Manager上のGPU一覧は正常になりました。
しかし、タスクマネージャーで片方のGPU使用率が見えない問題はまだ残りました。
nvidia-smiではGPUはちゃんと動いている
ローカルLLMで負荷をかけると、nvidia-smiでは両方のGPUが使われていました。
実測では、おおよそ次のような状態でした。
RTX 3080: GPU使用率 約40%, VRAM 約9.7GB, 消費電力 約150W
RTX 3090: GPU使用率 約60%, VRAM 約19GB, 消費電力 約340W
つまり、GPUが使われていないわけではありません。
一方で、タスクマネージャーやWindowsのGPU Engine counterでは、片方のGPUだけ使用率が0%に見えていました。
Windows側のカウンタは次のように確認できます。
Get-Counter '\GPU Engine(*)\Utilization Percentage'
この時点では、GPUメモリ使用量は見えているのに、GPU Engine utilizationだけが0%という状態でした。
タスクマネージャーとnvidia-smiは同じものを見ていない
ここで重要なのは、Windowsのタスクマネージャーと nvidia-smi
は同じ計測経路を見ているわけではない、ということです。
Microsoftの説明では、タスクマネージャーのGPU表示はWDDMのGPU schedulerやvideo memory manager由来の情報を使っています。
参考:

一方、nvidia-smiはNVIDIAのNVML側からGPU使用率を見ています。
参考:
そのため、CUDAやローカルLLMのようなcompute系の負荷では、nvidia-smiでは見えているのにタスクマネージャーでは見えない、ということが起き得ます。
特に今回のように、片方のGPUがヘッドレス、つまり表示出力を持っていない状態では、Windows側のWDDM GPU Engine counterがうまく出ないことがあるようです。
HAGSとは何か
HAGSは、Hardware-Accelerated GPU Schedulingの略です。
日本語のWindows設定では「ハードウェア アクセラレータによる GPU スケジューリング」と表示されます。
設定場所は次のあたりです。
設定
→ システム
→ ディスプレイ
→ グラフィック
→ 既定のグラフィック設定
→ ハードウェア アクセラレータによる GPU スケジューリング
ざっくり言うと、GPUに投げる仕事の順番管理を、従来よりGPUやドライバ側に寄せる機能です。ゲームではレイテンシやCPU負荷が改善することがあります。
一方で、CUDA、録画、リモート操作、マルチGPU監視などでは、環境によってGPU使用率表示や互換性に影響することがあります。
HAGSを無効化したらCUDA engineが見えるようになった
今回の環境では、HAGSを無効化して再起動したところ、Windows側のGPU Engine counterにCUDA負荷が出るようになりました。
無効化後、同じローカルLLM負荷をかけると、Get-Counterで次のように
engtype_cuda が見えるようになりました。
GPU A: engtype_cuda 約40%
GPU B: engtype_cuda 約53%
nvidia-smi側でも両GPUに負荷が出ており、タスクマネージャー側の表示とも整合するようになりました。
つまり今回の問題は、GPU本体の故障ではありませんでした。
また、phantom deviceの残骸だけが原因でもありませんでした。
最終的には、HAGS有効時に、ヘッドレス側GPUのCUDA engine使用率がWindowsのタスクマネージャーに出ていなかった、という見立てです。
HAGSを無効化する副作用
HAGSを無効化すると、GPUスケジューリングは従来方式に戻ります。
あり得る影響としては、次のようなものがあります。
- 一部ゲームでfpsやレイテンシが少し変わる
- Frame Generationや低遅延系の機能に影響する可能性がある
- 逆に、CUDA、Blender、ローカルLLM、録画、リモート操作、マルチGPU監視では安定する場合がある
今回のPCはゲーム用メインマシンではなく、ローカルLLMやBlenderなどのGPU作業用サブ機です。そのため、HAGSは無効のまま運用することにしました。
切り分け手順まとめ
同じように「GPUは動いているはずなのにタスクマネージャーで使用率が見えない」という場合、次の順番で確認するとよさそうです。
1. nvidia-smiを見る
まずはタスクマネージャーではなく、nvidia-smiで確認します。
nvidia-smi
ここでGPU使用率、VRAM使用量、温度、消費電力が出ていれば、GPU自体は動いています。
2. WindowsのDisplayデバイスを確認する
過去にGPUを差し替えている場合は、phantom deviceが残っていることがあります。
Get-PnpDevice -Class Display
CM_PROB_PHANTOM
の古いGPUが大量に残っている場合は、不要なものを整理する価値があります。ただし、削除対象を間違えると面倒なので、実際に刺さっているGPUのInstance
IDと照合してから作業したほうが安全です。
3. WindowsのGPU Engine counterを見る
タスクマネージャーの元になっているカウンタは、次のように見られます。
Get-Counter '\GPU Engine(*)\Utilization Percentage'
CUDA負荷なら engtype_cuda や compute
系のカウンタに値が出ることがあります。
4. HAGSを無効化して再起動する
HAGSが有効で、特にマルチGPUやヘッドレスGPUで使用率が見えない場合は、HAGS無効化を試す価値があります。
UIから変更するのが一番安全です。
設定
→ システム
→ ディスプレイ
→ グラフィック
→ 既定のグラフィック設定
→ ハードウェア アクセラレータによる GPU スケジューリング
変更後は再起動が必要です。
レジストリで確認する場合は、次のキーを見ます。
Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\GraphicsDrivers' -Name HwSchMode
一般に HwSchMode=1 はHAGS無効、HwSchMode=2
はHAGS有効、値がない場合はWindowsの既定設定に従います。
5. それでもだめならドライバ更新やダミープラグを試す
片方のGPUが完全にヘッドレスの場合、HDMIやDisplayPortのダミープラグを挿すことで、Windows側の扱いが変わることがあります。
ただし、これは原因切り分けとしては有用ですが、常用する必要があるかは環境次第です。
また、NVIDIAドライバのバージョンによって挙動が変わる可能性もあります。古いドライバを使っている場合は、Studio Driverなどの更新も試す価値があります。
まとめ
今回の結論はシンプルです。
GPUはちゃんと動いていた。タスクマネージャーが見えていなかった。原因はHAGSだった。
Windowsのタスクマネージャーは便利ですが、CUDAやローカルLLMの監視では万能ではありません。
特に、マルチGPU、ヘッドレスGPU、HAGS有効、CUDA/compute負荷の組み合わせでは、nvidia-smiやHWiNFO、MSI
Afterburnerなど、別系統の監視ツールも併用したほうがよさそうです。
ローカルLLMやBlender用のWindowsマシンでGPU使用率が変に見える場合は、HAGSを一度疑ってみる価値があります。



コメント