私は2015年頃から深層畳み込みニューラル ネットワーク(Deep Convolutional Neural Network / DCNN)による画像復元超解像(Image Restoration and Super-Resolution)モデルの機械学習(Machine Learning / ML)を試して遊んで来ました。
最初の頃は幾つかの既成の超解像アプリを試し、次にそれを自前の自動生成画像で機械学習させるなどしていました。
その後2017年頃からはTensorFlowのラッパー ライブラリーであるTensorLayerで実装されたSRGAN(Super-Resolution Generative Adversarial Network)を試し、改造したり、敵対的学習ではない簡単な画素単位の損失関数だけの学習を試すなどしていました。
当時の自作PCでも “Palit GeForce GTX 750 KalmX” というファンレスのグラフィクス カードは搭載しておりましたが、VRAMは2,048MBのGDDR5であり、機械学習には容量が全く足りませんでした。
2019年2月頃からはAWS(Amazon Web Services)のEC2(Elastic Compute Cloud)のp2.xlargeのNVIDIA K80 GPUインスタンスを、同年4月頃からはp3.2xlargeのNVIDIA Tesla V100 GPUインスタンスを利用するようになりました。
そして2020年10月からはPyTorchに移行し、2021年9月頃からはGCP(Google Cloud Platform)のCE(Compute Engine)でNVIDIA A100 GPUインスタンスを利用するようになりました。
2023年3月現在、昨年からの円安ドル高な外国為替相場の傾向も有り、クラウド コンピューティング サーヴィスで度々高額なGPUインスタンスを利用するよりも、大容量なVRAMを搭載するようになった中級のグラフィクス カードを購入して電力制限を掛けて運用しつつCPU Offloadingと併用して機械学習をした方が安上がりになると考え、これを実行する事にいたしました。
ブログ記事: PyTorchでGPU CUDAでCPU Offloadingした。
オンライン通販サイトで購入したグラフィクス カードは “NVIDIA GeForce RTX 3060” GPUと12GBものGDDR6 VRAMを搭載した “MSI GeForce RTX 3060 VENTUS 2X 12G OC” で、デュアル ファン搭載ですが、極めて静音で良質な製品です。

GeForce RTX 3060 GPUのFP32精度の浮動小数点数演算性能は約12.74TFLOPS、TDPは170Wとなっています。
私が2023年3月現在使用している自作PCのCPUは “Intel Core i7-13700” で、DDR5 DRAM 5,200MHzを64GB搭載しております。
因みに超高価なA100 GPUの通常のFP32演算性能は約19.5TFLOPSですので、GeForce RTX 3060はA100の65%ほどのFP32演算性能です。凄い!
ところで私の自作PCはオーディオPCでもあり、省電力静音な運用なので、CPU、GPU共に最大消費電力を制限する事にしました。
OSはUbuntu 22.04 LTSという優れたLinuxディストリビューションです。
CPUについてはUEFIで以下のように設定しました。
[Intel Core i7-13700] PL1(Base Power): 65W(Default) -> 70W PL2(Max Turbo Power): 219W(Default) -> 100W
GPUについては、以下のようにシェル コマンドでハードウェア情報を確認し、
$ nvidia-smi
Thu Mar 9 23:20:12 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.89.02 Driver Version: 525.89.02 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A |
| 0% 46C P8 16W / 170W | 134MiB / 12288MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1860 G /usr/lib/xorg/Xorg 84MiB |
| 0 N/A N/A 2001 G /usr/bin/gnome-shell 48MiB |
+-----------------------------------------------------------------------------+
$ nvidia-smi -q -d POWER
==============NVSMI LOG==============
Timestamp : Thu Mar 9 23:22:46 2023
Driver Version : 525.89.02
CUDA Version : 12.0
Attached GPUs : 1
GPU 00000000:01:00.0
Power Readings
Power Management : Supported
Power Draw : 21.07 W
Power Limit : 170.00 W
Default Power Limit : 170.00 W
Enforced Power Limit : 170.00 W
Min Power Limit : 100.00 W
Max Power Limit : 170.00 W
Power Samples
Duration : 2.58 sec
Number of Samples : 119
Max : 43.64 W
Min : 16.84 W
Avg : 32.96 W
既定の最大電力制限が170W、最小電力制限が100Wである事が分かりましたので、Power Limitを100Wに設定する事にいたしました。
sudo gedit /etc/rc.local
としてroot権限で起動時自動設定用のファイルを作り、このファイルに
#!/bin/sh
sudo nvidia-smi -i 0 -pl 100
と記述して保存し、シェル コマンドで
sudo chmod 700 /etc/rc.local
として実行権限を付与し、PCを起動する度に自動的に最大100Wに電力制限を設定するように出来ました。
$ nvidia-smi
Thu Mar 9 23:24:43 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.89.02 Driver Version: 525.89.02 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A |
| 0% 48C P8 16W / 100W | 149MiB / 12288MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1860 G /usr/lib/xorg/Xorg 90MiB |
| 0 N/A N/A 2001 G /usr/bin/gnome-shell 56MiB |
+-----------------------------------------------------------------------------+
最大電力が100Wになった事が分かります。
[2023年12月25日追記]
{
その後、GeForce RTX 3060のPower Limitを110Wに微増させて運用しております。
}
[2024年1月20日追記]
{
その後、GeForce RTX 4070 SUPERに換装し、Power Limitを180Wに設定して運用しております。
CPUはPL1が70W、PL2が160Wとしました。
}
コメント