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-utilsWSL2上で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
で終了。