windows10のままでWSL2によるGPGPUを試してみる

windows10は「21H2」までアップグレードされている前提です
物理マシンのスペックは i7-4771(3.5GHz),16GB, NVIDIA A2000, windows10Pro です.
2021y11m20d_213520504.png

参照先: https://docs.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl https://docs.nvidia.com/cuda/wsl-user-guide/index.html

wslコマンドでwindows10の中にLinuxをインストールします

「コントロールパネル」->「プログラムと機能」にある「windowsの機能の有効化または無効化」に関しては
特段操作はしていない。「Linux用Windowsサブシステム」「仮想マシンプラットホーム」は無効のままです。
その状態でコマンドプロンプトを起動させ、インストール可能なLinuxOSを調べてみる

C:\Users\supervisor>wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
既定の分布は ' * ' で表されます。
 'wsl --install -d <Distro>'を使用してインストールします。
 
  NAME            FRIENDLY NAME
* Ubuntu          Ubuntu
  Debian          Debian GNU/Linux
  kali-linux      Kali Linux Rolling
  openSUSE-42     openSUSE Leap 42
  SLES-12         SUSE Linux Enterprise Server v12
  Ubuntu-16.04    Ubuntu 16.04 LTS
  Ubuntu-18.04    Ubuntu 18.04 LTS
  Ubuntu-20.04    Ubuntu 20.04 LTS
 
C:\Users\supervisor>

とある。ここではUbuntu-20.04を入れてみる.

C:\Users\supervisor>wsl --install -d Ubuntu-20.04
要求された操作には管理者特権が必要です。
 
C:\Users\supervisor>

っとそのままのコマンドプロンプトからでは無理そうで、「スタート」->「Windowsシステムツール」->「コマンドプロンプト」を右クリックで選択して、そのサブツリーから「その他」->「管理者として実行」を選ぶ。すると下記のようなコマンドプロンプトが現れる
2021y11m20d_215731308.png
そのうえで再度コマンドを実行します

C:\WINDOWS\system32>wsl --install -d Ubuntu-20.04
インストール中: 仮想マシン プラットフォーム               <--「windowsの機能の有効化または無効化」の1つ
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム             <--「windowsの機能の有効化または無効化」の1つ
Linux 用 Windows サブシステム はインストールされました。
ダウンロード中: WSL カーネル
インストール中: WSL カーネル
WSL カーネル はインストールされました。
ダウンロード中: Ubuntu 20.04 LTS
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
 
C:\WINDOWS\system32>

っで再起動を行う. 再起動後にログインを行うとUbuntu20.04のパネルが表示され処理が進められる.
しばらくすると、Ubuntu20.04の中でのアカウントを作るように促される
2021y11m20d_220900862.png
アカウント名はなんでも構わない. ここでは露軍しているwindowsOSと同じアカウントにしてみた.
この段階で「スタート」->「Ubuntu20.04」が登録され、それを選択するとUbuntu20.04のターミナルとなっている
2021y11m20d_221355481.png

GPU

この物理マシンにはNVIDIA RTX A2000が搭載されている.

ここで nvidiaドライバーをインストールする
&ref(): File not found: "2022y09m14d_182323936.png" at page "WSL2-CUDA-windows10";

「516.94-quadro-rtx-desktop-notebook-win10-win11-64bit-international-dch-whql.ext」(638MB)を入手.

っでインストールを開始します
途中カスタムインストールを選ぶと何がインストールされるのかがわかり、規定で選ばれているすべてを選択します

インストール完了後に、「NVIDIAコントロールパネル」を開くと下記のようになる。nvidiaドライバが 516.94 である.
2022y09m14d_182523685.png

WARP

「NVIDIAコントロールパネル」が無事動くので、この段階で Warp を入れると動きます。
WarpはCUDAライブラリとか別途必要なく動くみたい

CUDA

これで一応windowsOS管理下にあるGPUがWSL側にも繋ぐようになった.
次にWSLのUbuntu20.04にCUDAライブラリをインストールします.
ただしLinuxのnvidiaドライバーはインストールしません. cuda-toolkitのみ入れます
CUDAダウンロードサイトの「WSL-Ubuntu」はnvidiaドライバーが入らない工夫が入っている. 一応いつものパッケージを入れてもいいが、nvidiaドライバーを外せばいいみたい

supervisor@DESKTOP-P44EP9D:~$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
 
supervisor@DESKTOP-P44EP9D:~$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
 
supervisor@DESKTOP-P44EP9D:~$ wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda-repo-ubuntu2004-11-7-local_11.7.1-515.65.01-1_amd64.deb
 
supervisor@DESKTOP-P44EP9D:~$ sudo dpkg -i cuda-repo-ubuntu2004-11-7-local_11.7.1-515.65.01-1_amd64.deb
 
supervisor@DESKTOP-P44EP9D:~$ sudo cp /var/cuda-repo-ubuntu2004-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
 
supervisor@DESKTOP-P44EP9D:~$ sudo apt-get update
 
supervisor@DESKTOP-P44EP9D:~$ sudo apt-get install -y cuda-toolkit-11-7

その後ターミナルにて

supervisor@DESKTOP-P44EP9D:~$ nvidia-smi
Wed Sep 14 18:28:27 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01    Driver Version: 516.94       CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| 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 RTX A2000    On   | 00000000:01:00.0 Off |                  Off |
| 30%   30C    P8     6W /  70W |      0MiB /  6138MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
supervisor@DESKTOP-P44EP9D:~$

と表示される。

cryoSPARC

nvidiaドライバが用意されてCUDAも入ったので、relionは作れる. 実際に作った. っでcryoSPARCを入れてみたいと思う
まずはパスワードなしで localhost にログインできるようにするために openssh-server のインストールとその稼働を行う

supervisor@DESKTOP-P44EP9D:~$ sudo su -
 
root@DESKTOP-P44EP9D:~# apt install openssh-server
root@DESKTOP-P44EP9D:~# /etc/init.d/ssh start

次に、/scratchも用意してみる。この辺は別のSSD(Dドライブ)を用意してmountの方がいいのかも。ここではsystemと同居させてます

root@DESKTOP-P44EP9D:~# mkdir /scratch/
root@DESKTOP-P44EP9D:~# chmod 1777 /scratch/
 
root@DESKTOP-P44EP9D:~# exit

自サイトパスワードなしログインを有効にさせるために

supervisor@DESKTOP-P44EP9D:~$ ssh-keygen
supervisor@DESKTOP-P44EP9D:~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
supervisor@DESKTOP-P44EP9D:~$ chmod 600 ~/.ssh/authorized_keys

その上で cryoSPARCを入れてみる

supervisor@DESKTOP-P44EP9D:~$ export L=XXXXX-XXXXX-XXXX-XXXX-XXXXX
supervisor@DESKTOP-P44EP9D:~$ curl -L https://get.cryosparc.com/download/master-latest/$L > master.tar.gz
supervisor@DESKTOP-P44EP9D:~$ curl -L https://get.cryosparc.com/download/worker-latest/$L > worker.tar.gz
 
supervisor@DESKTOP-P44EP9D:~$ mkdir cryoSPARC
supervisor@DESKTOP-P44EP9D:~$ cd cryoSPARC/
supervisor@DESKTOP-P44EP9D:~/cryoSPARC$ tar xf ../master.tar.gz
supervisor@DESKTOP-P44EP9D:~/cryoSPARC$ tar xf ../worker.tar.gz
 
supervisor@DESKTOP-P44EP9D:~/cryoSPARC$ mkdir /scratch/cs
supervisor@DESKTOP-P44EP9D:~/cryoSPARC$ cd cryosparc_master
 
supervisor@DESKTOP-P44EP9D:~/cryoSPARC/cryosparc_master$ ./install.sh  --standalone \
--license $L \
--worker_path /home/supervisor/cryoSPARC/cryosparc_worker \
--cudapath /usr/local/cuda-11.7 \
--ssdpath /scratch/cs \
--initial_email saber@fgo \
--initial_password saber \
--initial_username saber \
--initial_firstname Artoria \
--initial_lastname Pendragon
 
supervisor@DESKTOP-P44EP9D:~/cryoSPARC/cryosparc_master$

っで母機のwindowsPCのブラウザで「localhost:39000」を叩くと
2022y09m14d_215829866.png 2022y09m14d_220134113.png
リソースを見るとGPUも認識されて、ssdなscratchも見えている模様

nfsクラアントになってファイルを参照したい

nfsクラアントになるパッケージをインストールして、mountポイント(/Public)を作って、mount操作を行う

supervisor@DESKTOP-P44EP9D:~$ sudo apt install nfs-kernel-server
supervisor@DESKTOP-P44EP9D:~$ sudo mkdir /Public
supervisor@DESKTOP-P44EP9D:~$ sudo mount qnap:/Public /Public

これでnfs mountは完了. ってもautofsの方が現実的かな

supervisor@DESKTOP-P44EP9D:~$ sudo apt install autofs
supervisor@DESKTOP-P44EP9D:~$ sudo echo "/- /etc/auto.home" > /etc/auto.master
supervisor@DESKTOP-P44EP9D:~$ sudo echo "/Public qnap:/Public" > /etc/auto.home
supervisor@DESKTOP-P44EP9D:~$ sudo /etc/init.d/autofs status
 * automount is not running
 
supervisor@DESKTOP-P44EP9D:~$ sudo /etc/init.d/autofs start
 * Starting automount...                                                                                         [ OK ]
supervisor@DESKTOP-P44EP9D:~$ sudo update-rc.d autofs enable   <-- init系でautofsを有効化

ただ、、、UID/GIDの統合とかの問題があります。でもwindowsPC内のWSL2にldap/NISを這わせる?ディスクトップなwindowsなら恒久的なので構わないと思うが、、、あー/etc/nsswitch.confを駆使して優先順序を

WSL2のcryoSPARCを母機windows以外からアクセスしたい

まずはWSL2上のマシンのIPアドレスを調べる

supervisor@DESKTOP-P44EP9D:~$ ip -4 address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 172.30.224.248/20 brd 172.30.239.255 scope global eth0
       valid_lft forever preferred_lft forever
supervisor@DESKTOP-P44EP9D:~$

なので「172.30.224.248」と分かる. 母機のwindowsPCのipアドレスは「192.168.0.6」とします

方策としては、「外部から 192.168.0.6 の39000に届いたアクセスを内部の 172.30.224.1:39000 へ回せばいい」
いわゆるポートフォワーディングです。

以前windowsPCをルーターに仕立てて、ポートフォワードを試したことがある。これを使います。router/windows#pe178b02

(設定)
netsh interface portproxy add v4tov4 listenport=39000 listenaddr=0.0.0.0 connectport=39000 connectaddress=172.30.224.248
 
(確認)
netsh interface portproxy show v4tov4
 
(解除)
netsh interface portproxy delete v4tov4 listenport=39000 listenaddr=0.0.0.0

っでこのように設定して外部からアクセスしてみます。0.0.0.0は本来 192.168.0.6なのでしょうけど

2022y09m14d_225523757.png
このように全くの外部からWSL2のサービスに繋げました。

上記はwindowsのファイアウォールをすべて解除してます。ファイアウォールを設けるなら下記をwindowsPCに付与します
2022y09m14d_230310227.png

メモ

...メモリーは潤沢にあったほうがいい. 16GBではwindowsOSは問題ないけどWSLなOS達を考慮すればもっとあっていい.


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-09-14 (水) 23:04:40 (10d)