WSL2 setup - eiichiromomma/CVMLAB GitHub Wiki
(WSL2)のインストール (DockerとXの導入まで)
- GPU周りはWindows用のCUDA Driverが入っていれば良い(SDKが必要な場合にのみCUDA Toolkitを入れれば良い)
- DockerはDocker Desktop for Windowsを入れる。nvidia docker toolkitのインストールは不要でそのまま
--gpus all
オプションでGPUが使える
Microsoftのサイトの説明だと古いバージョンのWSLが入るのでMicrosoft StoreのUbuntuを入れる(バージョン無しの方)。
起動すると勝手にインストールが始まり
Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
のようにWSL2上でのユーザー名を聞いてくるのでスペース無しの半角英字でユーザー名を入れる(下記はmommaの例)。 その後パスワードも聞かれるので2回パスワードを入れる(何も応答が無いがパスワード[Enter]パスワード[Enter] と入れる)。あとでしょっちゅう使うので忘れないように。
Enter new UNIX username: momma
New password:
Retype new password:
passwd: password updated successfully
この操作を正しく終了しました。
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This message is shown once a day. To disable it please create the
/home/momma/.hushlogin file.
momma@ASUS2022-0:~$
みたいな感じでUbuntuが使える状態になる。
次回以降はWindowsのメニューからUbuntu
を選択すれば使える。
コントロールパネルの「プログラム」で「プログラムと機能」(またはWindowsメニューから)の中にWindowsの機能の有効化または無効化があるのでそれを選んでから「仮想マシンプラットフォーム」にチェックを入れる(要再起動)。その後WSL2を再度インストールする。
PowerShellを開いて
wsl --update
として更新し,Ubuntuを開きなおす。
sudo apt update
でパスワードを聞かれるので入力する。sudoコマンドは一度パスワードを入れると以後の作業では暫く聞かれなくなる。
sudo apt install -y x11-apps mesa-utils
xeyes
でマウスカーソルを目玉が追うxeyesのウィンドウが開いたらGUIアプリケーションの実行は成功。右角の×を押して閉じる。
glxgears
で、ギアが回るアプリケーションが起動したらOpenGL関係のアプリケーションも使える。右角の×を押して閉じる。
WLS2上のファイルはWindowsのエクスプローラでLinux
というペンギンアイコンのネットワークドライブが見えるようになっているのでそこから\\wsl.localhost\Ubuntu\home\momma
のように辿るとそのまま開ける(mommaは各自のユーザー名に置き換える)。セットアップ直後は当然カラ。
配布サイトからインストーラーを持ってきて起動する。
デフォルトでオンになっている筈だが
- Use WSL 2 instead of Hyper-V (recommended)
- Add shortcut to desktop
がオンになっていることを確認してからOKを押す。 インストールが完了したらcloseを押す。
デスクトップにあるクジラのアイコンからDocker Desktopを起動すと,ライセンスの承諾画面が出るのでAcceptを押す(学術利用はフリー)。
起動するとSign up, Sign inを求められるが,とりあえず Continue without signing inを選ぶ。アンケート画面になるが下のSkip surveyを選ぶ。
右上の歯車アイコンを選び,Generalを選ぶ。
Start Docker Desktop when you sign in to your computer
の欄については,研究でしょっちゅう使う場合にはチェックを入れ,そうでない場合はチェックを外しておく。
Ubuntuを開いて
docker
と打ってみて
docker
The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.
For details about using Docker Desktop with WSL 2, visit:
https://docs.docker.com/go/wsl2/
と出た場合はUbuntuを一旦閉じて開くなり、Windowsを再起動するなりして、またDocker Desktopを起動してから試す。
上手くいっている場合は
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
みたいな表示のあとに起動オプションの説明がズラズラ続く。
管理者権限無しにDockerを使うにはUbuntuのdockerグループに自分のidを入れておく必要があるので
sudo gpasswd -a $(whoami) docker
sudo chgrp docker /var/run/docker.sock
の後でPowerShellから
wsl --shutdown
としたあとでUbuntuを開き直す。
docker run hello-world
を実行して
Hello from Docker!
This message shows that your installation appears to be working correctly.
みたいにメッセージが出たら成功。
docker run --rm --gpus all ubuntu nvidia-smi
で
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.40.06 Driver Version: 551.23 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3050 ... On | 00000000:01:00.0 Off | N/A |
| N/A 53C P8 3W / 35W | 184MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
みたいな表が出てきたら成功。
後々使うのでxhostを含むx11-xserver-utilsを入れておく
sudo apt install -y x11-xserver-utils
WSL2上でGUIアプリケーションをそのまま実行するだけならWSLgがいい感じにWindowsで表示できるよう扱ってくれているが、Dockerコンテナ上のGUIアプリケーションを起動するには、Dockerのホスト(WSL2)に別ホスト(ここではコンテナ)のアプリケーションを表示させる細工が必要で、具体的には設定ファイルと環境変数の共有が必要となる。具体的なやりかたはあちこちで紹介されているがDockerやWSLのアップデートによって変わることが多々あるので、極力新しい情報を参考にする。(英語だが公式サイトを見るのが正解)
一旦Ubuntuを閉じて再度開いてから
docker run -it --rm \
--mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix \
--mount type=bind,source=/mnt/wslg,target=/mnt/wslg \
--env DISPLAY=${DISPLAY} --env WAYLAND_DISPLAY=${WAYLAND_DISPLAY} \
--env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} \
ubuntu:22.04
とすると
Status: Downloaded newer image for ubuntu:22.04
root@f4e906a0f041:/#
のような感じでコンテナが起動する。--it
でインタラクティブな状態(コマンドを実行する場合)、--rm
で使い終えたコンテナを削除することを意味するので、残したければ--rm
は外して実行する。
デフォルトだとユーザーはrootで動くのでsudoコマンドの付与は不要だが、ホストのアプリケーションのインストールは無関係な素の状態なのでアプリケーションは入れ直すか、諸々インストール済みのディスクイメージを探して使うか、環境構築のためのDockerFilesを書くかになる。
apt update
apt install -y mesa-utils
glxgears
で歯車が動いたら成功。×を押して閉じる。
exit
で終了。