このところ生成AIというかLLMにハマっているけれども、自作PCだとハードウェア資源の利用状況が気になってしまう。そして日曜エンジニアだとWindowsを使いながらWSL2を起動し、タスクマネージャでCPU、GPU、メモリ、ディスク、ネットワークの利用状況を一覧表示してくれるタスクマネージャから離れられない。
さらにWindows 3.1やWindows 95を知っている世代としては、システムが少しくらい不安定になっても全く気にならないので、レジストリを書き換えてNVIDIA Telsa P40をタスクマネージャで監視できるようにしてしまった。ただしご存じの通りレジストリ内容というのはWindows任せなので、油断していると書き換えられてしまう。そこで小細工により、Windows起動時にレジストリを毎回書き換えて常時監視できるようにしてみた。
ちなみにネットではNVIDIAのGPUをタスクマネージャで監視することが出来ないという悲鳴を散見するけれども、タスクマネージャーではWDDMモードで動作しているGPUしか認識することが出来ない。GPUが正常に設定されて動作しているかはnvidia-smiコマンド、そしてCUDAも含めて動作確認したければPyTorchをインストール後に下記コマンドを実行すると良いだろう。無事に動作していれば"True"を、動作していなければ"False"をリターン表示してくれる。
python3 -c "import torch; print(torch.__version__, torch.cuda.is_available())"
さて前置きが長くなってしまったけれども、具体的にどうやって書き換えているかを紹介する。
採用案:タスク・スケジューラ
「パンが食べれないなら、お菓子を食べれば良いじゃない」ではないけれども、残念ながら「レジストリを毎回書き換えたければスタートアップにバッチファイルを登録すれば良いじゃない」というアプローチは通用しない。それが今回の記事の発端だったりする。
実際に下記内容を書き込んだバッチファイルをスタートアップに登録してみたら、レジストリのキーを上書きすることは叶わず、妙てけりんなキーを新規登録する結果に終わってしまった。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0001” /v EnableMsHybrid /t “REG_DWORD” /d “1” /f
日曜エンジニアには分からないけれども、どうもスタートアップに登録されたプログラムが実行されるタイミングでは、レジストリキーの読み込みも完了しないのかもしれない。ログイン後に普通にクリックしてみたら、特に問題なくレジストリ内容を上書きしてくれた。
ちなみに上記はEnableMsHybridというDWORD(32bit)キーを新規作成するか、または既に存在するEnableMsHybridキーに対して1を書き込む処理である。"/f"というのは試してみると分かるけれども、バッチ処理の際に「本当にやっちゃいますか?」と尋ねる処理を省略するためのフラグである。
で、GPT3.5様にお伺いしてみて採用したのが、タスク・スケジューラにバッチファイルを登録する方法だ。なおWindows 11ではWindows 10と異なり、管理系ツールは "Windowsツール" にまとめられている。
この中にタスク・スケジューラが含まれているので、まずはそれをダブルクリックして起動する。それから「操作」-->「基本タスクの作成」と進み、バッチファイル(当方の場合はwddm-tcc.bat)を「ログイン時に実行」で登録する。
あとはレジストリエディタをregeditコマンドなどで起動し、内容確認すればオッケーだ。
不採用案:ファイル名を指定して実行
Windows利用時に必ず実施する操作といえば、電源オン操作と電源オフ操作である。電源オフ操作に着目すると、「電源オフ操作をバッチ処理でやることにして、その際にレジストリ書き換えとシャットダウンを実施する」という方法もある。
shutdown /r /t 0
バッチファイルに上記を書き加えて、「スタートアップ」-->「ファイル名を指定して実行」やショートカットキー登録すれば良い。
そういえば弊社の場合は22時を過ぎると深夜残業ということで大騒ぎになるので、タスク・スケジューラに「21時57分になったら強制シャットダウンのバッチファイルを実行」と登録している人も存在する。ガラスの靴を残したシンデレラのように、仕事をやり残したことになるけれども、ともかく問題を起こさないという点では悪くないかもしれない。
(ちなみに当方は設定していない)
まとめ
以上の通りで、タスクスケジューラを活用することによって毎回起動時or終了時にレジストリの内容を書き換えることが可能となる。
なお妙な意地を張らずに、素直にnvidia-smiコマンドを定期的に実行するのも悪くはない。コンソールを立ち上げるのが面倒であれば、バッチファイルにpauseコマンドとexitコマンドを加えるといった方法もある。
それとUbuntuの場合はwatchコマンドが使えるので、定期的(例えば0.5秒単位)にnvidia-smiコマンドを実行するということが可能である。
watch -n 0.5 nvidia-smi
ただし... やっぱり基本リソースの稼働状態を一覧表させるのはタスク・マネージャで「パフォーマンス」を選択するのが便利だし、GPU設定内容を表示するGPU-Zツールも存在する。vBIOSを書き換えるnvflash64もWindows環境が必要となるし、そもそも今はWSL2でCUDAが利用可能になっている。
昔はLinux (Ubuntu) 環境一択だったけれども、今はWindows環境も便利になったものだと感動する。がっつり動かす場合はUbuntuだけれども、個人的にはWindowsユーザとして終わるかもしれない。
それでは今回は、この辺で。