せいさくちゅう

cryoSPARC/Master-Worker

GPUを搭載したwindows10マシンがある. これをWSL2で中にUbuntuを飼いつつ、外にあるcryoSPARCサーバのworkerとしても使ってみたい.

っで試してみた. イメージとしてはこんな感じ. いつものようにRHEL8系/Ubuntuにジョブを投げるけど、同時にwindows内WSL ubuntuにも投げれると.
2022y11m15d_233002338.png

課題

  • WSL2内のubuntuはwindowsが再起動すると与えられていた内部IPが変更してしまう. 172.18.240.255/20 とか 192.168.170.47/20 とかまちまち. 法則性がない
    netshのポートフォワーディングを使い内部IPの可変を吸収させます
  • nfsサーバにアクセス.
    cryoSPARCのMaster-Worker/cluster方式は共にmaster/worker/clusterとも同じnfsストレージにアクセスできるようにする必要がある. autofsで対応
  • cryosparcアカウントは全て同じuidを持つ
    共通のnfsサーバに書き込みをするのである意味当然. gidも同じにしたほうがいいのかも. wsl内ではldapが使えなかった. /etc/passwdに登録させて、ログインは公開鍵方式で行う

当初、参照先https://scratchpad.jp/ubuntu-on-windows11-13/様を参考にして進めたのだが、
windows 22H2ではどうもうまく動かない.
参照先 https://github.com/microsoft/WSL/issues/8835によれば難しいご様子.

なので、微妙ですが、windowsマシンにログインしたユーザが手動で bat ファイルを実行して上記2課題を達成する方向にしました。

いずれは windowsマシンが起動すれば、そのバックグラウンドでWSL内ubuntuが立ち上げるようにしたいと思います

windows内WSL ubuntuの調整

cmdプロンプトで「wsl --install -d ubuntu」としてubuntuを作ります.
そのubuntuの中で微調整を加えます

  • openssh-serverのインストールとsshdの修正
  • autofsのインストールとnfsサーバへのアクセス修正

openssh-serverのインストールとsshdの修正

ubuntuの中で

supervisor@DESKTOP-7JVQ69N:~$ sudo su -
 
root@DESKTOP-7JVQ69N:~# apt update
root@DESKTOP-7JVQ69N:~# apt install openssh-server
root@DESKTOP-7JVQ69N:~# vi /etc/ssh/sshd_config
 :
PasswordAuthentication yes       <---公開鍵方式で運用するので不要かもだが、動作確認のため
 :
root@DESKTOP-7JVQ69N:~#

autofsのインストールとnfsサーバへのアクセス修正

ubuntuの中で

supervisor@DESKTOP-7JVQ69N:~$ sudo su -
 
root@DESKTOP-7JVQ69N:~# apt update
root@DESKTOP-7JVQ69N:~# apt install autofs
root@DESKTOP-7JVQ69N:~# echo "/- /etc/auto.nfs --timeout=60"   >   /etc/auto.master
 
root@DESKTOP-7JVQ69N:~# vi /etc/auto.nfs
/home/cryosparc nfs:/home/cryosparc
/data nfs:/data
 
root@DESKTOP-7JVQ69N:~#

ubuntuの中でcryosparcアカウントの作成

ここで重要なのが、/homeを共有しているので ubuntu ないでホームディレクトリは作らず、/etc/passwdのみにそのcryosparcの行があればいい
*外部のnis/ldapは使いません

cryosparcのuid/gidが 2000/1001 なら

ubuntuの中で

supervisor@DESKTOP-7JVQ69N:~$ sudo su -
 
root@DESKTOP-7JVQ69N:~# groupadd -g 1001 cryosparc
root@DESKTOP-7JVQ69N:~# useradd -M -g 1001 -u 2000 cryosparc

と作成しておきます. 「-M」はアカウント作成時にホームディレクトリを作りません。

batファイルの作成

windowsマシンに於いて適当な場所に「start-wsl.bat」なるファイルを作ります。内容は下記のように

wsl -d ubuntu -u root service ssh    start
wsl -d ubuntu -u root service autofs start
 
FOR /F "usebackq" %%i in (`wsl -d ubuntu -e hostname -I`) do set IP=%%i
 
netsh interface portproxy delete v4tov4 listenport=22
netsh interface portproxy add v4tov4 listenport=22 connectaddress=%IP% connectport=22
netsh interface portproxy delete v4tov4 listenport=39000
netsh interface portproxy add v4tov4 listenport=39000 connectaddress=%IP% connectport=39000

「FOR」の箇所がwslに与えられたipアドレスの取得で、変数IPに渡してます。
「netsh」の箇所は変数IPを使ってポートフォワーディングを行ってます

windows firewallの設定

ssh向けの22番ポートを開けておきます
cryosparc向けには..とりあえず 39000-39010/tcp を開けておきます

実行

冒頭に記したように本来ならタスクマネージャーの「システム起動時」に上記batファイルを稼働させればいいのですが、現状うまく動かない
なのでこのbatファイルを手動で動かします。windows起動時1回のみです. windowsを再起動したら、再度1回です

ただし、そのままダブルクリックでは動きません。
ファイルを選択して、右クリックから「管理者として実行」を選んでください
2022y11m19d_022541019.png

これで外部から、このwindowsマシンの22番をsshで叩けば、wsl内ubuntuに直接つながります

cuda関係

WSL2-CUDA-windows10を参照してください


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-11-19 (土) 02:46:17 (9d)