デル アンバサダープログラムに当選したのでゲーミングPCのレビューしてみました(その3)

ようやくうまくいきました。うまく行かなかったら【ゲーミングPCでWSL2でGPUを使う設定を試してみた】とする予定でした。 設定がうまく行かず10回以上もUbuntu を入れたりDockerをいれたりとしていて、やっているうちにグダグダになり力尽きた感じになっているので割と淡白な内容になっています。

f:id:ueponx:20210224010810p:plain

今回はゲーミングPCのGPUTensorFlowからも使用できないか試してみたというものです。Linuxを入れるというのも当然ありですが、今回はWSL2環境でのUbuntuから使用しています。最近のWindows 10 Insider ProgramのバージョンからWSL2上のOSからもGPUが使用できるようになったようです。正式リリースまではまだあると思いますが、ちょっと試してみた。そして今回もハマったとなります。NVIDIAサイトにも情報があるのでこちらも参考にしてください。

docs.nvidia.com

今回使用したPC環境

  • PC : DELL ALIENWARE M15 R3ゲーミング ノートパソコン
  • OS : Windows 10 Home(64bit)
  • GPU : NVIDIA GeForce RTX 2080 SUPER 8GB GDDR6 with Max-Q Design

WSL2のUbuntuイメージへ環境設定を行う

以下を参考にさせていただきました。

www.kkaneko.jp

Windows 10 Insider Programの有効化(Windows 10 Insider Preview 20150以降)

既に行っているようであれば不要

自分が行ったときのバージョンをwinverコマンドで表示すると以下の様になっていました(2021.02.20現在)。

f:id:ueponx:20210223235357p:plain

WSL2の有効化

既に行っているようであれば作業は不要です。

過去にも同様の作業を行っているのでそちらを参考にして設定を行ってください。

uepon.hatenadiary.com

Ubuntu のインストール

Microsoft StoreアプリからUbuntuを検索してバージョン20.04LTSをインストールします。

18.04LTS(以下18.04)も表示されますが今回は20.04LTSをインストールします。バージョンによって必要になるドライバやライブラリの依存関係が異なるので注意してください。同じ手順では18.04ではTensorFlowは動作していません。

画面上部の【インストール】ボタンをクリックするとUbuntuがインストールされます。

f:id:ueponx:20210223235727p:plain

インストールが完了したらボタンが【起動】と表示が変更になるのでそれをクリックするとコンソールが開きます。 スタートメニューにもUbuntu20.04LTSは表示されているのでそれをクリックしても同様にコンソールが開きます。

f:id:ueponx:20210224000200p:plain

起動すると初期ユーザ名とパスワードを尋ねるので、入力をしておきましょう。

f:id:ueponx:20210224005024p:plain

WSL の Ubuntu の更新の確認

Powershellなどで以下のように実行します。

PS > wsl uname -r

バージョンが4.9.121以降になっていることを確認します。今回確認したところ以下のような表示になっていました。

f:id:ueponx:20210224000532p:plain

異なっていれば以下を実行して更新作業を行ってください。

PS > wsl --update

プレビュー版の NVIDIA グラフィックスドライバのインストール

一旦、Ubuntuを停止させるために以下をPowershellから実行します。

PS > wsl --shutdown

つづいて、プレビュー版の NVIDIA グラフィックスドライバは以下よりダウンロードを行います。(要ユーザ登録)

developer.nvidia.com

ドライバは2つありますが、必ずGeForce用のものを使用することに注意をしてください。

f:id:ueponx:20210224000944p:plain

Ubuntu上ではドライバは必要ありませんのでインストールする作業は不要です。

インストール後にドライババージョンは以下のようになっていました。(バージョン465.42)

f:id:ueponx:20210224004653p:plain

WSL2上のUbuntuでの初期設定

以下を行っておきます。apt関係の初期化とパッケージのアップグレードです。また、この時点でPython3のバージョンアップを行っておきます。

$ sudo apt update
$ sudo apt -yV upgrade
$ sudo apt -y install python3-dev python3-pip python3-setuptools python3-numpy

NVIDIA CUDA ツールキットのインストール

以下のサイトからCUDAツールキットのダウンロードとインストールを行います。サイト上で、OSや入れるツールキットのバージョンを尋ねられるので、

developer.nvidia.com

それに答えると以下のような作業手順が表示されるのでこれを実行していきます。 今回はUbuntu20.04LTSに入れるTensorFlowがCUDAツールキットのバージョン11.0を必要とするので以下のようになっています。

f:id:ueponx:20210224223913p:plain

作業手順

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-ubuntu2004-11-0-local/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get -y install cuda

※参考にしたサイトのそのままを行うとバージョン10.1がインストールされます。そのまま作業を行ってもTensorFlowがライブラリバージョンを確定的に行っているようなのでそのままでは以降で失敗するようです。

$ sudo apt -y install nvidia-cuda-dev nvidia-cuda-toolkit nvidia-cuda-toolkit-gcc

TensorFlow 2.4.1 のインストール手順

事前にアプリケーションパッケージのアンインストール

インストールに先立ち、トラブルになりそうな現存のパッケージを一度消去します。

$ sudo apt -y remove python3-keras
$ sudo pip3 uninstall -y tensorflow tensorflow-cpu tensorflow-gpu tensorflow_datasets tensorflow-hub keras

libcudnnをインストールする

必要となるcuDNNライブラリを、以下から環境に合わせてダウンロードを行います。

https://developer.nvidia.com/rdp/cudnn-download

認証が必要なのでwgetなどでは簡単に取得できないので、一旦Windowsにダウンロードしてから、WSL環境にコピーするほうが作業が楽です。 今回はCUDA11系に合わせて以下のものをダウンロードしていきます。

f:id:ueponx:20210224002104p:plain

WSL環境に持ってきたら以下を実行してインストールを行います。

$ sudo dpkg -i libcudnn8_8.1.0.77-1+cuda11.2_amd64.deb

パス及びライブラリパスの環境変数設定

インストール時にライブラリの格納される場所がバージョンによってまちまちになるようです。今回は以下のようにコマンドラインから設定しました。 常用するのであれば.bashrc.profileに追記しておくのが良いでしょう。

$ export PATH="/usr/local/cuda/bin:$PATH"
$ export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

GPU 版 TensorFlow をインストール

あとはGPUを使用できるTensorFlowをインストールしていきます。依存関係のあるライブラリも同じくインストールを行っています。testresourcesに関してはaptでもインストールできるようなエラーメッセージが表示されますが、20.04ではインストール出来ないようです。そのためpipを使用してインストールしています。また、absl-pyはTensorFlowが0.10を要求するのでバージョンを指定してインストールしています。

$ sudo pip3 install testresources
$ sudo pip3 install absl-py==0.10
$ sudo pip3 install tensorflow-gpu tensorflow_datasets

エラーなく終われば、インストール作業は完了します。

確認

TensorFlowの実行

$ python3 -c "import tensorflow as tf; print( tf.__version__ )"

実行結果

$ python3 -c "import tensorflow as tf; print( tf.__version__ )"
2021-02-23 02:55:04.207914: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2.4.1

メッセージが表示されますが、libcudart.soが読み込まれたと表示されているので問題はないです。

GPUの認識

以下のコマンドで実行を行います。今回はGPU対応なので、CPUとGPUのどちらもが使用できるようになっているかを調べています。

$ python3 -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"

ログ抜粋

[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 8503975052678194352
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 6889034240
locality {
  bus_id: 1
  links {
  }
}
incarnation: 7826019862202533636
physical_device_desc: "device: 0, name: GeForce RTX 2080 Super with Max-Q Design, pci bus id: 0000:01:00.0, compute capability: 7.5"
]

GPUもちゃんと表示されています。

CPU版だけを使用する場合には…

CPUのみを使用する場合には先程のインストールのコマンドを少し修正すればOKです。

$ sudo pip3 install testresources
$ sudo pip3 install absl-py==0.10
$ sudo pip3 install tensorflow-cpu tensorflow_datasets

とします。

CPUのみ対応のTensorflowの実行確認

ログ抜粋

$ python3 -c "import tensorflow as tf; print( tf.__version__ )"
2.4.1

$ python3 -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
2021-02-23 23:26:07.670924: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 17669417124090449221
]

f:id:ueponx:20210224004410p:plain

バイス情報のGPUに関しては表示されていません。あと、表示されるログが少ないです。

ベンチマーク

ではベンチマークをしてみたいと思います。今回は以下のものを使用しました。適切なのかはちょっとわからないのですが、GPUがちゃんと動作しているかを 見るのであれば問題ないと思って採用しました。

github.com

こちらも参考にしています。

direct-blog.applied-g.jp

以下のようにリポジトリを取得してベンチマークを計測しています。

$ git clone https://github.com/tensorflow/benchmarks.git
$ cd benchmarks/scripts/tf_cnn_benchmarks
$ python3 tf_cnn_benchmarks.py --num_gpus=1 --batch_size=32 --model=resnet50 --variable_update=parameter_server

実行結果抜粋

Done warm up
Step    Img/sec total_loss
1       images/sec: 170.0 +/- 0.0 (jitter = 0.0)        7.765
10      images/sec: 171.2 +/- 0.3 (jitter = 0.5)        8.049
20      images/sec: 171.5 +/- 0.2 (jitter = 0.4)        7.808
30      images/sec: 171.4 +/- 0.2 (jitter = 0.6)        7.976
40      images/sec: 171.3 +/- 0.1 (jitter = 0.6)        7.591
50      images/sec: 171.2 +/- 0.1 (jitter = 0.7)        7.549
60      images/sec: 171.2 +/- 0.1 (jitter = 0.7)        7.818
70      images/sec: 171.1 +/- 0.1 (jitter = 0.6)        7.820
80      images/sec: 171.1 +/- 0.1 (jitter = 0.7)        7.849
90      images/sec: 171.0 +/- 0.1 (jitter = 0.7)        8.027
100     images/sec: 170.9 +/- 0.1 (jitter = 0.9)        8.030
----------------------------------------------------------------
total images/sec: 170.76
----------------------------------------------------------------

比較対象がよくわからないので困った感じですが、他の値と類似しているようなのでGPUはちゃんと動いているようです。 ノートPCに入っているGeForceのMax-Q Designシリーズはデスクトップ搭載のカードよりも動作が遅いようですが、今回の計測でも遅くなっているようです。

おわりに

ゲーミングPCに搭載されているGPUを、ゲーム以外でもしようしてみようというネタでした。DELLさんのモニターなのに全くゲームをやっていないというのは問題だよなあと思うのですが、 そこまで3Dのゲームをやっているというユーザでもないので、正直スマんという感じです。

とはいうものの、購入するユーザの中にはGPUを目的に購入する方も多いのかなと思いますし、そういう方の参考になればと思います。