on WSL2 on Bootcamp with eGPU(GeForce) - 環境の作り方から機械学習ベンチマークまで -


はじめに

-「 MacBook Pro(Bootcamp) + eGPU(GeForce)で機械学習ベンチマーク」という記事の最後で触れていた「CUDA on WSL2」に再挑戦した結果上手く動作したので、記事にしました。

検証環境

  • MacBook Pro(2018)
    • OS:Windows 10 Pro Insider Preview(Bootcamp)
      • バージョン:2004
      • OS ビルド:20175.1000
      • macOS:Catalina 10.15.5
    • CPU:Intel Core i7-8559U
    • GPU:NVIDIA GeForce RTX 2080 Ti(MSI GAMING TRIO Z)
    • GPUエンクロージャ:Razer Core X Chroma
    • Memory:16GB
    • Storage:NVMe SSD 200GB

環境の作り方

  • 全体的な感触としては、WindowsにNVIDIA Drivers for CUDA on WSLをインストールする点以外は、おおよそ、普通のLinuxマシン(Ubuntu18.04)にCUDA環境を構築するのと同じような感じで、できました。

Windowsでの操作

WSL2(Ubuntu18.04)のインストール

グラフィックスドライバ―のインストール

WSL2での操作

Python環境の構築

CUDA + cuDNN環境の構築

  • 下記の記事を参考に作ります。(CUDA10.1)
    • https://www.nemotos.net/?p=3176
    • ただし、グラフィックスドライバーに関して、今回はWindows側で入れているため、WSL2側では入れません。
  • まず、適当な作業フォルダを作成します。
$ mkdir tmp
$ cd tmp
  • NVIDIAが提供するCUDAリポジトリを追加します。
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
$ sudo apt install ./cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
  • メッセージにCUDAのパブリックGPGキーをインストールしてくださいと出るので、インストールします。
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt update
  • NVIDIAが提供する機械学習リポジトリを追加します。
$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt update
  • ここまで来たら、Windows側のPowerShell/コマンドプロンプトで$ wsl.exe --shutdownし、WSLを再起動しておきます。
  • CUDAとcuDNNをインストールします。
    • バージョンを指定しないと、"+cuda10.2"などがついたものがインストールされることがあるので、指定する方が無難だと思います。
$ sudo apt install --no-install-recommends cuda-10-1 libcudnn7=7.6.5.32-1+cuda10.1 libcudnn7-dev=7.6.5.32-1+cuda10.1
  • TensorRTをインストールします。(お好みです。)
$ sudo apt install --no-install-recommends libnvinfer6=6.0.1-1+cuda10.1 libnvinfer-dev=6.0.1-1+cuda10.1 libnvinfer-plugin6=6.0.1-1+cuda10.1
  • 最後に、バージョン指定して入れたパッケージを$ sudo apt upgradeの対象外にしておきます。
$ apt-mark hold libcudnn7 libcudnn7-dev libnvinfer6 libnvinfer-dev libnvinfer-plugin6

機械学習ベンチマーク

検証環境

実験結果

with GPU:0.189[sec]/10[iter] (757.95[sec]/40000[iter])
only CPU:21.9[sec]/10[iter] (218.70[sec]/100[iter])

  • CUDA on Windowsに比べて、CUDA on WSL2の方が4-5倍遅い、という結果になりました。
  • これは、まだライブラリが整備しきれていないことによるものなのでしょうか…?(わかりません。)

余談

  • 今回検証したWindows OSビルドではタスクマネージャのGPUの表示項目に「CUDA」はなくなっており、「3D」の項目に統合された模様。学習をさせている間は、使用率80-100%で推移していたものの、温度はあまり上昇しませんでした。(使用率100%でもゲームを動作させているときのようなコアの使われ方はしていないということ。)
  • ベンチマークまでは回しませんでしたが、tensorflowではこのようにGPUが見えました。
$ python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
:
:
:
2020-07-24 01:01:53.460761: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1247] Created TensorFlow device (/device:GPU:0 with 9530 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:7f:00.0, compute capability: 7.5)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 4887027337662705891
, name: "/device:XLA_CPU:0"
device_type: "XLA_CPU"
memory_limit: 17179869184
locality {
}
incarnation: 16175718367223053796
physical_device_desc: "device: XLA_CPU device"
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
locality {
}
incarnation: 5717429592944183067
physical_device_desc: "device: XLA_GPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 9992943744
locality {
  bus_id: 1
  links {
  }
}
incarnation: 9217682947427494720
physical_device_desc: "device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:7f:00.0, compute capability: 7.5"
>>>
  • 以上です。参考になりましたら、幸いです。