このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
先日、GeForce GTX 1080 Tiを2枚積んだマシンを計算サーバとして追加導入しました。
新しいマシンで意気揚々と学習を回していたのですが、時間がたつにつれて学習速度が低下していったり、マルチGPU化しても性能が伸びなかったりかえって遅くなったりしてしまっていました。
このような症状を聞くと熱問題だろうと気づく方も多いかと思いますが、せっかくなので冷却が不十分なGPUがどういった挙動を示すか少し実験してみました。
GPUに負荷をかけるためのアプリケーションとして、ひたすらcuBLASのSGEMM (n=m=k=8192) を実行し続けるプログラムを用意しました。
また、各種メトリクスの取得にはNVMLを使用し、およそ10-20ms程度ごとにGPU温度やコアクロックなどの情報を取得しています。
ミニタワーにXeon E5とGeForce GTX 1080 Ti 2枚を詰め込んだ構成です。
およそ500秒ほどの間負荷をかけ続けた際のGPU温度とコアクロックの変動と、SGEMMのパフォーマンスは以下の図のようになっていました。
ぱっと見たところ説明のつけやすそうな遷移となっていて、おおよそ以下のような動作となっているようです。
さて、このマシンにはGPUが2台乗っています。
普通に使っていた時の感覚だとなんとなくGPU1の方が性能が安定しないように感じていたのですが、計ってみると想像以上によくわからない挙動をしていました。
以下に、GPU0と同様に測定したGPU温度や動作周波数などの変動を示します。(温度の上昇が激しかったので、400秒ほどで打ち切っています。)
GPU0のときと比べて明らかにおかしな挙動となっているように見えます。
GPU温度が93℃以上になるとHW Slowdownが効き始めるような設定となっているのですが、その温度に達するまで(おそらくは達した後も)できるだけBoostしようとしているように見えます。
その結果、93℃に到達するとHW Slowdownでクロックを半分まで落とされ、多少落ち着いたらまたクロックを定格以上まで上げようとしているようです。
パフォーマンスについてもクロックと同様にあまり安定感のない結果となっていました。
また、時間当たりのSGEMM実行回数はGPU0の場合に比べて2-3%ほど少ないものとなっていました。
(燃えない程度に)もっと温度を上げてみましょう。
2枚のGPUは隣り合って配置されているので、両方のGPUに負荷をかけるともっと温度が上がります。
おおむね単体で動かしたときと似たような挙動となっています。
120秒ぐらいまでは単体で動かしたときと似たような挙動となっていますが、そこからさらに温度が上がるため、それ以降はまた異なる挙動となっています。
94-95℃あたりでしばらく860 MHzを維持していたかと思うと、何かの拍子に諦めたかのように温度が90℃程度まで落ちるように動作周波数を下限 (139 MHz) まで落とすようです。
その後もGPU0につられて温度は上昇するのですが、基本的に139 MHzのままで、93℃付近でHW Slowdownにより一時的に動作周波数が半分になることを繰り返すようです。
これだけ性能が落ちるとなると、マルチGPU化しても遅い方のGPUに引っ張られ、かえって性能が低下してしまうのも納得ですね。
GPUのクロックはもっと滑らかに変動するものかと思っていたのですが、実際に計ってみると想像を超えるようなぶれ方をしていました。
同一ノード内でもGPUごとにばらつきがあると、マルチGPUなワークロードでは単純なクロック低下以上の性能低下につながるので、全GPUが十分な性能を維持できるような環境を用意することが大切です。
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...