LoginSignup
1
2

More than 3 years have passed since last update.

CUDA on WSL導入時,Docker Desktop for Windowsとケンカしてしまった件

Posted at

CUDA on WSLの公開と,前回紹介したNeural Source Filter実装がLinux環境でしか動作しないことを受けて,本格的に環境構築を行うことにした.ところが,

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"process_linux.go:385: running prestart hook 1 caused \\\"error running hook: exit status 1, stdout: , stderr: exec command: [/usr/bin/nvidia-container-cli --load-kmods configure --ldconfig=@/sbin/ldconfig.real --device=all --compute --utility --require=cuda>=9.0 --pid=8276 /var/lib/docker/overlay2/b956d7f169cca157457e107ee8c99a050c33199ded8f4fa4d68e3ace612c6d0c/merged]\\\\nnvidia-container-cli: initialization error: driver error: failed to process request\\\\n\\\"\"": unknown.

と言った感じでWSL側からGPUの認識ができず苦労した.なので,その解決法をメモしておく.

CUDA on WSLとは

Windows Subsystem for Linux(WSL)でCUDAを利用したPGU計算ができる仕組み.今まではWSL上にCUDAをインストールして行っていたそうだが,CUDA on WSLを使えばWindows側にGPUドライバーをインストールすればOK.Gigazineの記事がわかりやすかったので詳しく知りたい方はこちらを参照

環境構築

はじめに

もしCUDA on WSLの導入のみを考えている方は,必ず公式の手順のみに従って欲しい.以下に記すのは,導入につまずいた状況の整理であるため,上記のエラーが発生している人は,以下を見て同じような構築を行ってないかチェックして欲しい.

WSL上にAnaconda導入

まず,WSL上でPythonを動かせるようにして,ついでにPyCharmから実行したいなと思いそちらの構築から開始した.以下が参考にしたサイトである.

また,WSLのUbuntuにはgcc等がインストールされていないため,そちらのインストールも行った.

Docker Desktopの導入

あと,CUDA on WSLでDockerが必要というのを見たことと,Windows10 homeでも利用可能になったので嬉しくなり,Docker Desktop for Windowsをインストール.これが元凶

CUDA on WSLの導入

CUDA on WSL構築にあたって参考にしたサイト

解決方法

公式で,WSL上のUbuntuにdockerをインストールする項目がある.

$ curl https://get.docker.com | sh

このUbuntu上のDockerと,Docker Desktop for Windowsが別に動作していることに気づき,もしかすると2つのDockerが競合しているのでは?と考えた,そこで,Docker Desktop for Windowsが自動的に起動しないように設定,念の為NVIDIA Container Toolkitのアンインストールを行ってから再起動をして,再びDocumentation通りにインストール,CUDAサンプルの実行を行うと

Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.
-fullscreen       (run n-body simulation in fullscreen mode)
-fp64             (use double precision floating point values for simulation)
-hostmem          (stores simulation data in host memory)
-benchmark        (run benchmark to measure performance)
-numbodies=<N>    (number of bodies (>= 1) to run in simulation)
-device=<d>       (where d=0,1,2.... for the CUDA device to use)
-numdevices=<i>   (where i=(number of CUDA devices > 0) to use for simulation)
compare          (compares simulation results running once on the default GPU and once on the CPU)
-cpu              (run n-body simulation on the CPU)
-tipsy=<file.bin> (load a tipsy model file for simulation)
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
MapSMtoCores for SM 7.5 is undefined.  Default to use 64 Cores/SM
GPU Device 0: "GeForce RTX 2080 Ti" with compute capability 7.5
Compute 7.5 CUDA device: [GeForce RTX 2080 Ti]
69632 bodies, total time for 10 iterations: 119.463 ms
= 405.868 billion interactions per second
= 8117.351 single-precision GFLOP/s at 20 flops per interaction 

動いた!!!
そういえば,待ってました CUDA on WSL2にも

この時、

WSL DETECTED: We recommend using Docker Desktop for Windows.

なんて言われますが、無視。

って書かれてたのを考えると,Docker Desktop for Windowsが動いてるとエラー吐くのは当然だなと納得した.

ちなみに

試しに,CUDAサンプル実行後に,Docker Desktop for Windowsを起動して同じサンプルを実行するとエラーが出る.また,Docker Desktopを終了してもエラーが出てしまい,Windowsを再起動しないとサンプルが動かせなくなった.なので,CUDA on WSLを使用する方は,Docker Desktopのアンインストールをしてしまっても良いのかもしれない(保証はしない)

Pytorchで計算をした感想

そもそもPytorchがCUDA11に非対応なのだが,面白そうなので動かしてみたところ,GPUでの計算は可能だった.しかし,どこが原因か不明であるが,1iterの計算がけっこう重く実用的ではない.試しにWindows環境で同じプログラムを実行したところCUDA10.1のときと同じ速度で計算が行えるため,Python環境で直接実行するにはまだまだ改善の余地があるのでは,と思った.そもそもDockerの仕組みすら曖昧なペーペーであり,自分の知識不足である可能性が高いので,もっと勉強したい所存.

まとめ

  • まだWSLの構築もしていない人は,CUDA on WSLのDocumentation通りに環境構築すべし
  • Docker Desktop for Windowsをインストールしている場合は,自動的に起動しないよう設定またはアンインストール
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2