「Master」と「Worker」を別々の計算機に組み込みます
ここでは下記のような構成です.
アカウント情報はnis,ldap,FreeIPA,samba-adとかで共有されていて、/homeもnfsで全て共有されているとします
| 役目 | マシン名 | 運用ユーザ | 備考 |
| Master | cryosparc.sybyl.local | cryosparc (「/home/cryosparc」がホームディレクトリ) | 39000 portで運用 |
| Worker | s.sybyl.local | gpuカード1枚 | |
| e.sybyl.local | gpuカード1枚 |
ここでは一般ユーザ cryosparc がcryoSPARCサービスを運用するとします.
このアカウントは各ノードで共有され(uid/gidが同じ)、「/home/cryosparc」も共有されています.
「Master」は、port番号 39000 でcryoSPARCサービスを提供します. なので他の関連ポートと合わせて 39000 から連続して10個のportを開放します.
firewall-cmd --add-port=39000-39010/tcp --zone=public --permanent
firewall-cmd --reloadこの際にcryoSPARCサービスにアクセスするsourceを限定するとかできます cryoSPARC/memo#m66f6b33
「Worker」側は22番のsshが空いてsshdが動いていればいいです. 多分デフォルトで空いているかと思いますが、
firewall-cmd --list-all --zone=publicで確認してください.
firewallを設定してないなら、これらの作業は不要です
SELinuxは無効にしてます. SELinux有効下において /home にアカウントを持つユーザでのサービスは難しい.
[root@cryosparc ~]# cat /etc/redhat-release
Rocky Linux release 9.5 (Blue Onyx)
(SELinux無効化)
[root@cryosparc ~]# grubby --update-kernel ALL --args selinux=0
[root@cryosparc ~]# grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg <--- UEFIなら
[root@cryosparc ~]# grub2-mkconfig -o /boot/grub2/grub.cfg <-- BIOSなら
[root@cryosparc ~]# reboot
:
(SELinux無効化の確認)
[root@cryosparc ~]# sestatus
SELinux status: disabled
[root@cryosparc ~]#アカウント作成します. ここでは特別なアカウント cryosparc で作ってもいいですが、自分のアカウントでも構いません
[root@cryosparc ~]# useradd -d /home/cryosparc -s /bin/bash cryosparc
[root@cryosparc ~]# su - cryosparc
[cryosparc@cryosparc ~]$
(パスワードレスで Worker に入れるように公開鍵を作成します)
[cryosparc@cryosparc ~]$ ssh-keygen -t ed25519
:
Enter file in which to save the key (/home/cryosparc/.ssh/id_ed25519): <--そのままリターン
Created directory '/home/cryosparc/.ssh'.
Enter passphrase (empty for no passphrase): <--そのままリターン
Enter same passphrase again: <--そのままリターン
:
[cryosparc@cryosparc ~]$
[cryosparc@cryosparc ~]$ cat .ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
[cryosparc@cryosparc ~]$ chmod 600 ~/.ssh/authorized_keys
(Workerにログインしてホストキーを事前に取得させます)
[cryosparc@cryosparc ~]$ ssh s
:
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes <-- yes としてホストキーを保存します
:
[cryosparc@s ~]$ exit
[cryosparc@cryosparc ~]$ ssh e
:
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes <-- yes としてホストキーを保存します
:
[cryosparc@e ~]$ exit
[cryosparc@cryosparc ~]$もしホストキーの登録が面倒なら .ssh/config を下記のようにします
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/nullこれで事前に全ての「Worker」に面通ししなくてもいいかも.
[root@cryosparc ~]# su - cryosparc
[cryosparc@cryosparc ~]$ mkdir cryoSPARC <-- 別途フォルダを用意してそこにcryoSPARC関係を纏めてます.
[cryosparc@cryosparc ~]$ cd cryoSPARC/
[cryosparc@cryosparc cryoSPARC]$ tar xf /apps/src/cryosparc_master.tar.gz
[cryosparc@cryosparc cryoSPARC]$ cd cryosparc_master
[cryosparc@cryosparc cryosparc_master]$ ls -CF
bin/ cryosparc_compute/ gunicorn.conf.py patch.py version
check_install_deps.sh* cryosparc_tools/ install.py setup_client_ipython.py
cryosparc_app/ deps_bundle/ install.sh* supervisord.conf
cryosparc_command/ deps_bundle_hashes/ lib@ systemd/
[cryosparc@cryosparc cryosparc_master]$そしてMaster機能のインストールを行います
[cryosparc@cryosparc cryosparc_master]$ ./install.sh --license xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--hostname cryosparc.sybyl.local \
--dbpath /home/cryosparc/cryoSPARC/database \
--port 39000
:
:
[cryosparc@cryosparc cryosparc_master]$途中インストール内容の確認と.bashrcへのPATH登録の許諾が求められますが、共に「1」のyesを選べばokです.
その後、.bashrcに書き込まれた内容を反映するために、一度ログアウトして、再度ログインします
そして現状確認
[cryosparc@cryosparc ~]$ cryosparcm status
----------------------------------------------------------------------------
CryoSPARC System master node installed at
/home/cryosparc/cryosparc_master
Current cryoSPARC version: v4.7.1
----------------------------------------------------------------------------
CryoSPARC is not running.
----------------------------------------------------------------------------
global config variables:
export CRYOSPARC_LICENSE_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export CRYOSPARC_MASTER_HOSTNAME="cryosparc.sybyl.local"
export CRYOSPARC_DB_PATH="/home/cryosparc/database"
export CRYOSPARC_BASE_PORT=39000
export CRYOSPARC_DB_CONNECTION_TIMEOUT_MS=20000
export CRYOSPARC_INSECURE=false
export CRYOSPARC_DB_ENABLE_AUTH=true
export CRYOSPARC_CLUSTER_JOB_MONITOR_INTERVAL=10
export CRYOSPARC_CLUSTER_JOB_MONITOR_MAX_RETRIES=1000000
export CRYOSPARC_PROJECT_DIR_PREFIX='CS-'
export CRYOSPARC_DEVELOP=false
export CRYOSPARC_CLICK_WRAP=true
[cryosparc@cryosparc ~]$インストール直後は、cryoSPARCのMasterはまだ機能していない.
なので起動させます.
[cryosparc@cryosparc ~]$ cryosparcm start
Starting CryoSPARC System master process...
CryoSPARC is not already running.
configuring database...
creating cryosparc_admin
cryosparc_admin created
creating cryosparc_user
cryosparc_user created
configuration complete
database: started
database OK
command_core: started
command_core connection succeeded
command_core startup successful
command_vis: started
command_rtp: started
command_rtp connection succeeded
command_rtp startup successful
app: started
app_api: started
-----------------------------------------------------
CryoSPARC master started.
From this machine, access CryoSPARC and CryoSPARC Live at
http://localhost:39000
From other machines on the network, access CryoSPARC and CryoSPARC Live at
http://cryosparc.sybyl.local:39000
Startup can take several minutes. Point your browser to the address
and refresh until you see the CryoSPARC web interface.
[cryosparc@cryosparc ~]$まだWorkerが用意されていないので計算はできません.
次にそのWorkerをインストールします
Master と Worker達は同じ /home で共有してますので
「/home/cryosparc/cryoSPARC」にWorkerをインストールします.
MasterとWorkerで違うアカウントでもできそうだが複雑になりそうなので触れない
「cryosparc_worker.tar.gz」を展開します
[cryosparc@cryosparc ~]$ cd cryoSPARC/
[cryosparc@cryosparc cryoSPARC]$ tar xf /apps/src/cryosparc_worker.tar.gz
[cryosparc@cryosparc cryoSPARC]$ ls -l
drwxr-xr-x 14 cryosparc cryosparc 4096 Oct 23 22:39 cryosparc_master <-- masterの構築でできたもの
drwxr-xr-x 7 cryosparc cryosparc 183 Oct 23 23:07 cryosparc_worker
drwxr-xr-x 4 cryosparc cryosparc 8192 Oct 23 23:08 database <-- masterの起動でできたもの
[cryosparc@cryosparc cryoSPARC]$ cd cryosparc_worker
[cryosparc@cryosparc cryosparc_worker]$ ls -CF
bin/ cryosparc_compute/ deps_bundle/ install.sh* version
check_install_deps.sh* cryosparc_tools/ deps_bundle_hashes/ lib@
[cryosparc@cryosparc cryosparc_worker]$Worker をインストールします
[cryosparc@cryosparc cryosparc_worker]$ ./install.sh --license xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
[cryosparc@cryosparc cryosparc_worker]$これでWorkerのインストールは完了.
/homeが共有されているので他のWorkerノードでインストールとかないです.
ちょいと中身を拝見
[cryosparc@cryosparc cryosparc_worker]$ eval $(bin/cryosparcw env)
[cryosparc@cryosparc cryosparc_worker]$ conda list
:
cuda-cudart 11.8.89 0 nvidia/label/cuda-11.8.0
cuda-nvrtc 11.8.89 0 nvidia/label/cuda-11.8.0
cuda-python 11.8.3 pypi_0 pypi
cuda-version 11.8 h70ddcb2_3 conda-forge
:
keras 2.8.0 pypi_0 pypi
keras-preprocessing 1.1.2 pypi_0 pypi
:
libcufft 10.9.0.58 0 nvidia/label/cuda-11.8.0
libcurand 10.3.0.86 0 nvidia/label/cuda-11.8.0
libcurand-dev 10.3.0.86 0 nvidia/label/cuda-11.8.0
:
python 3.10.14 hd12c33a_0_cpython conda-forge
:
tensorflow 2.8.4 pypi_0 pypi
:
torch 2.1.2+cu118 pypi_0 pypi
:
[cryosparc@cryosparc cryosparc_worker]$あとはこのWorkerをMasterに登録する
まずworkerノードに「Fast Local Storage」を用意します. ここでは追加のSSDを「/scr」にして、「/scr/cs」を「Fast Local Storage」としてます
[root@cryosparc ~]# ssh s.sybyl.local
[root@s~]# parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) quit
[root@s~]# mkfs.xfs -L scr /dev/sdb1
[root@s~]# echo "LABEL=scr /scr xfs defaults 0 0" >> /etc/fstab
[root@s~]# mkdir /scr && systemctl daemon-reload && mount -a
[root@s~]# chmod 1777 /scr && mkdir /scr/cs && chown cryosparc:cryosparc /scr/cs
[root@s~]# exit
[root@cryosparc ~]#cryoSPARCを稼働させるユーザ[cryosparc]でworkerノードにログインして
「cryosparcw connect --worker worker --master master --port 39000 --ssdpath /scr/cs」
を実行します
[cryosparc@s ~]$ cd cryoSPARC/cryosparc_worker
[cryosparc@s cryosparc_worker]$ ./bin/cryosparcw connect --worker s.sybyl.local --master cryosparc.sybyl.local --port 39000 --ssdpath /scr/cs
---------------------------------------------------------------
CRYOSPARC CONNECT --------------------------------------------
:
:
You can now launch jobs on the master node and they will be scheduled
on to this worker node if resource requirements are met.
---------------------------------------------------------------
Final configuration for s.sybyl.local
cache_path : /scr/cs
cache_quota_mb : None
cache_reserve_mb : 10000
desc : None
gpus : [{'id': 0, 'mem': 6091505664, 'name': 'NVIDIA RTX A2000'}]
hostname : s.sybyl.local
lane : default
monitor_port : None
name : s.sybyl.local
resource_fixed : {'SSD': True}
resource_slots : {'CPU': [0, 1, 2, 3, 4, 5, 6, 7], 'GPU': [0, 1], 'RAM': [0, 1, 2, 3]}
ssh_str : cryosparc@s.sybyl.local
title : Worker node s.sybyl.local
type : node
worker_bin_path : /home/cryosparc/cryoSPARC/cryosparc_worker/bin/cryosparcw
---------------------------------------------------------------
[cryosparc@s cryosparc_worker]$これでworkerとして「s.sybyl.local」が登録されました.
「e.sybyl.local」も同じように登録します
値を更新する場合は「--update」を加えます。例えば「Fast Local Storage」の場所を変更したら
mkdir /scratch/cryosparc_$USER
./bin/cryosparcw connect --worker e.sybyl.local --master cryosparc.sybyl.local --port 39000 --ssdpath /scratch/cryosparc_$USER --updateとします.
現状と登録されている計算機はmasterノードにて
[cryosparc@cryosparc ~]$ cryosparcm cli "get_scheduler_targets()"で得られるが、JSONコードです.
削除方法は、
[cryosparc@cryosparc ~]$ cryosparcm cli "remove_scheduler_target_node('s.sybyl.local')"とします
参照先 https://guide.cryosparc.com/setup-configuration-and-management/management-and-monitoring/cli
cryoSPARCサービスはwebシステムでログインを要求します.
そのためのアカウントを作成します.
アカウントは「メールアドレス」の形態で作ります.
masterノードにて
[cryosparc@cryosparc ~]$ cryosparcm createuser --email saber@fgo.jp \
--password saber \
--username saber \
--firstname Artoria \
--lastname Pendragon
:
:
Creating user saber with email: saber@fgo password: saber and name: Artoria Pendragon
Successfully created user account.
[cryosparc@cryosparc ~]$と作成できます
最初に作ったアカウントがcryoSPARCサービスでの管理者権限を有します. それ以外は通常ユーザ権限です.
管理者権限なら通常ユーザが作ったプロジェクトを閲覧可能です。通常ユーザは他の通常ユーザのプロジェクトは見れません.
ここではcryoSPARCサービスを動かすのにlinuxアカウントの「cryosparc」が担当してます.
そのため「cryosparc」がアクセス可能な場所でないとimportできないし、計算した結果も書き込めません.
cryoSPARCサービスを一人で運用するならユーザ「cryosparc」を自分のアカウントとして使えばいいですが、
複数のlinuxアカウントがある場合、自分のデータを「cryosparc」に読み込ませて、書き込ませることが必要.
っで使うのがアクセスコントロールを行うACL.
cryoSPARCサービスにアクセスさせるフォルダを「/home/saber/cryo」として、このフォルダにアクセスできるようにACLを設定します
[saber@cryosparc ~]$ mkdir /home/saber/cryo
(まず cryosparc が $HOME(/home/saber) に入れるように)
[saber@cryosparc ~]$ setfacl -m user:cryosparc:rx $HOME
($HOME/cryoにアクセスできるように)
[saber@cryosparc ~]$ setfacl -m user:cryosparc:rx $HOME/cryo
($HOME/cryo への書き込み権限を付与. [d]でその配下で作られたファイル/フォルダにも権限を付与)
[saber@cryosparc ~]$ setfacl -dm user:cryosparc:rxw $HOME/cryo
($HOME/cryo に自分自身も読み書きできるように. しかも[d]で回帰的に)
[saber@cryosparc ~]$ setfacl -dm user:$USER:rxw $HOME/cryoこれでユーザ cryosparc は /home/saber/cryo に書き込めれるようになります.
あとは cryoSPARC サービスにログインして、「/home/saber/cryo」にプロジェクトフォルダを作るって流れです.
ただ、これは/homeがnfs由来だとより面倒な NFSv4_ACL を使う事になります...
頑張ればできますが、面倒ならセキュアは落ちますが、groupパーミッションを駆使します.
1. umask を「0002」にして同じグループに所属するユーザもフォルダに入れて、書き込み、削除が可能にします. 「/etc/login.defs」の「UMASK 022」から「UMASK 002」へ変更
2. ホームディレクトリにcryosparcが入れるように設定します. 「chmod 750 /home/saber」
3. プロジェクトで使用するフォルダを作成します. 「mkdir /home/saber/cryo」
4-1. 利用者ユーザのgroupに cryosparc を加える. root@「usermod -aG saber cryosparc」
4-2. cryosparcのgroupに利用者を加える. root@「usermod -aG cryosparc saber」
これでcryosparcは/home/saber/cryoにプロジェクトフォルダを作成できて、「umask 0002」なので双方修正、削除が可能になります.
「chmod 777 /home/saber」ってのもありますが、、、
複数台の計算機を登録する際、「Instance Information」ではGPUの存在が確認できるのに、いざjobを投入する際そのGPUがないと判断される時がある。
この場合は「--update」で再度認識させると上手くいくみたい