WSL2でのGPUサポート

Preview Build 20150よりWSL2でのGPUがサポートされることとなりました。

NVIDIAより手順が出ていますが、これベースで対応してみました。

https://docs.nvidia.com/cuda/wsl-user-guide/index.html

1. Windowsのアップデート

こちらはWindows Insider Programに登録し、Fast Ring(Devチャネル)に設定したうえで、 WIndows Updateを実行すると、自動更新されます。

なお、Windows Updateにあたり、詳細オプションにて 「Windowsの更新時に他のMicrosoft製品の更新プログラムを受け取る」をオンにしておく必要があります。

これがオフであると、WSL2のカーネルがアップデートされません。
GPUがサポートされるのは「kernel 4.19.121」となりますが、こちらも現在(2020/7)はPreview版なのでご注意を。

2. CUDAドライバのインストール

下記より入手できます。こちらのドライバはWindows側にインストールします。

https://developer.nvidia.com/cuda/wsl/download

インストール方法は特別なものはありません。

3. WSL2セットアップ

すでにWLS2を使っている方は省略可能です。Microsoftのサイトのとおり進めればOKです。

https://docs.microsoft.com/en-us/windows/wsl/install-win10

ちなみに、これから先はUbuntu20.04TLSで実装してます。

4. CUDA on WLS2セットアップ

まず、Python環境を整えます。以下Ubuntu20.04を入れたばかりのところから。

apt update && sudo apt upgrade
apt upgrade python3
apt install python3-pip
pip3 install tensorflow-gpu
  -> tensorflow-gpu 2.2.0

Tensorflow2.2のCUDAおよびcudnnのサポートバージョンは、CUDA:10.1、cudnn7.6になります。

CUDA:10.2でもシンボリックリンクで化かしてそこそこ動きそうでしたが、あわせておきましょう。

https://www.tensorflow.org/install/source#common_installation_problems

続いてCUDA Toolkitをインストールします。

apt-key adv –fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sh -c ‘echo “deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /” > /etc/apt/sources.list.d/cuda.list’
apt-get update
apt-get install -y cuda-toolkit-10-1

現在(2020/7)、Ubuntu20.04用のものがなさそうだったので、Ubuntu18.04用をインストールしました。特に問題なさそうです。

cudnnの取得はこちらから。ダウンロードしたファイル適切な場所に置き、WLSからインストール

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

dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb

こちらもUbuntu20.04のものはありませんが、18.04のもので代用可能なようです。

cd /usr/local/cuda-10.1/lib64
sudo ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.5 libcudnn.so.7
sudo ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.5 libcudnn.so

これでGPUが正常に認識・動作されるようになります。

5. 動作確認

下記コマンドにてGPUが認識しているか確認してみます。

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

6. 課金アイテムの購入ダイアログ呼び出し

結果は以下のとおり、認識されていますね。

2020-07-02 09:29:22.691684: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-07-02 09:29:22.698972: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 2592005000 Hz
2020-07-02 09:29:22.700842: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7f7450000b60 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-07-02 09:29:22.700879: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version
2020-07-02 09:29:22.709689: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-07-02 09:29:23.207225: E tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:967] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
2020-07-02 09:29:23.207692: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x550d290 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-07-02 09:29:23.207730: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): GeForce RTX 2060, Compute Capability 7.5
2020-07-02 09:29:23.209938: E tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:967] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
2020-07-02 09:29:23.210246: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce RTX 2060 computeCapability: 7.5
coreClock: 1.2GHz coreCount: 30 deviceMemorySize: 6.00GiB deviceMemoryBandwidth: 312.97GiB/s
2020-07-02 09:29:23.210491: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-07-02 09:29:23.211686: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-07-02 09:29:23.212786: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-07-02 09:29:23.212983: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-07-02 09:29:23.214347: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-07-02 09:29:23.215090: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-07-02 09:29:23.217850: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-07-02 09:29:23.218444: E tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:967] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
2020-07-02 09:29:23.219242: E tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:967] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
2020-07-02 09:29:23.219559: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1703] Adding visible gpu devices: 0
2020-07-02 09:29:23.219639: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-07-02 09:29:23.223518: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-07-02 09:29:23.223547: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108] 0
2020-07-02 09:29:23.223557: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1121] 0: N
2020-07-02 09:29:23.224606: E tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:967] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
2020-07-02 09:29:23.224981: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1330] Could not identify NUMA node of platform GPU id 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2020-07-02 09:29:23.225657: E tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:967] could not open file to read NUMA node: /sys/bus/pci/devices/0000:01:00.0/numa_node
Your kernel may have been built without NUMA support.
2020-07-02 09:29:23.225967: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1247] Created TensorFlow device (/device:GPU:0 with 4832 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5)
[name: “/device:CPU:0”
device_type: “CPU”
memory_limit: 268435456
locality {
}
incarnation: 16955278955790119194
, name: “/device:XLA_CPU:0”
device_type: “XLA_CPU”
memory_limit: 17179869184
locality {
}
incarnation: 11978927975430627769
physical_device_desc: “device: XLA_CPU device”
, name: “/device:XLA_GPU:0”
device_type: “XLA_GPU”
memory_limit: 17179869184
locality {
}
incarnation: 12595582206006485734
physical_device_desc: “device: XLA_GPU device”
, name: “/device:GPU:0”
device_type: “GPU”
memory_limit: 5067716704
locality {
bus_id: 1
links {
}
}
incarnation: 2624941167387881441
physical_device_desc: “device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5”

ちなみに以下がWindows上での結果(こちらはTensorflow1.14)

2020-07-01 10:54:10.661953: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-07-01 10:54:10.666350: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library nvcuda.dll
2020-07-01 10:54:11.835295: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties:
name: GeForce RTX 2060 major: 7 minor: 5 memoryClockRate(GHz): 1.2
pciBusID: 0000:01:00.0
2020-07-01 10:54:11.835504: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2020-07-01 10:54:11.838425: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0
2020-07-01 10:54:13.197369: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-07-01 10:54:13.197768: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187] 0
2020-07-01 10:54:13.198772: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0: N
2020-07-01 10:54:13.200668: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/device:GPU:0 with 4743 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5)
[name: “/device:CPU:0”
device_type: “CPU”
memory_limit: 268435456
locality {
}
incarnation: 12840931800344281974
, name: “/device:GPU:0”
device_type: “GPU”
memory_limit: 4973854720
locality {
bus_id: 1
links {
}
}
incarnation: 17510563742352624790
physical_device_desc: “device: 0, name: GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5”
]

WLS2では、「could not open file to read NUMA node」のエラーが出ているのですが、、NVIDIAのサイトでもエラー出たままなんですよね、NUMAは未サポートなんですかね。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする