#author("2025-10-23T23:32:12+00:00","default:sysosa","sysosa")
#author("2026-02-10T17:28:10+00:00","default:sysosa","sysosa")
「&color(magenta){Master};」と「&color(orangered){Worker};」を別々の計算機に組み込みます

ここでは下記のような構成です.
アカウント情報はnis,ldap,FreeIPA,samba-adとかで共有されていて、/homeもnfsで全て共有されているとします

|BGCOLOR(yellow):役目|BGCOLOR(yellow):マシン名|BGCOLOR(yellow):運用ユーザ|BGCOLOR(yellow):備考|
|&color(magenta){''Master''};|cryosparc.sybyl.local|cryosparc&br;(「/home/cryosparc」がホームディレクトリ)|39000 portで運用|
|&color(orangered){Worker};|s.sybyl.local|~|gpuカード1枚|
|~|e.sybyl.local|~|gpuカード1枚|

ここでは一般ユーザ cryosparc がcryoSPARCサービスを運用するとします.
このアカウントは各ノードで共有され(uid/gidが同じ)、「/home/cryosparc」も共有されています.

***下準備 firewall [#cb51a082]
「&color(magenta){Master};」は、port番号 39000 でcryoSPARCサービスを提供します. なので他の関連ポートと合わせて 39000 から連続して10個のportを開放します.
#code(nonumber){{
firewall-cmd --add-port=39000-39010/tcp --zone=public --permanent
firewall-cmd --reload
}}
この際にcryoSPARCサービスにアクセスするsourceを限定するとかできます [[cryoSPARC/memo#m66f6b33]]

「&color(orangered){Worker};」側は22番のsshが空いてsshdが動いていればいいです. 多分デフォルトで空いているかと思いますが、
#code(nonumber){{
firewall-cmd --list-all --zone=public
}}
で確認してください.

firewallを設定してないなら、これらの作業は不要です

***下準備 SELinux [#f7a92030]
SELinuxは無効にしてます. SELinux有効下において /home にアカウントを持つユーザでのサービスは難しい.

#code(nonumber){{
[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 ~]#
}}

***下準備 アカウント [#u00f8580]

アカウント作成します. ここでは特別なアカウント cryosparc で作ってもいいですが、自分のアカウントでも構いません

#code(nonumber){{
[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 を下記のようにします
#code(nonumber){{
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
}}
これで事前に全ての「&color(orangered){Worker};」に面通ししなくてもいいかも.

***&color(magenta){Master};の構築 [#hcfc3475]
#code(nonumber){{
[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]$
}}

そして&color(magenta){Master};機能のインストールを行います
#code(nonumber){{
[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に書き込まれた内容を反映するために、一度ログアウトして、再度ログインします
そして現状確認

#code(nonumber){{
[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の&color(magenta){Master};はまだ機能していない.
なので起動させます.

#code(nonumber){{
[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 ~]$
}}

まだ&color(orangered){Worker};が用意されていないので計算はできません.

次にその&color(orangered){Worker};をインストールします


***&color(orangered){Worker};を用意する [#t94ec8df]

&color(magenta){Master}; と &color(orangered){Worker};達は同じ /home で共有してますので
「/home/cryosparc/cryoSPARC」に&color(orangered){Worker};をインストールします.

&size(10){&color(magenta){Master};と&color(orangered){Worker};で違うアカウントでもできそうだが複雑になりそうなので触れない};

「cryosparc_worker.tar.gz」を展開します
#code(nonumber){{
[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]$
}}
&color(orangered){Worker}; をインストールします
#code(nonumber){{
[cryosparc@cryosparc cryosparc_worker]$ ./install.sh --license xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
[cryosparc@cryosparc cryosparc_worker]$
}}

これで&color(orangered){Worker};のインストールは完了.
/homeが共有されているので他の&color(orangered){Worker};ノードでインストールとかないです.

ちょいと中身を拝見
#code(nonumber){{
[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]$
}}


あとはこの&color(orangered){Worker};を&color(magenta){Master};に登録する

***&color(orangered){worker};の登録 [#ted71399]

まず&color(orangered){worker};ノードに「Fast Local Storage」を用意します. ここでは追加のSSDを「/scr」にして、「/scr/cs」を「Fast Local Storage」としてます
#code(nonumber){{
[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]で&color(orangered){worker};ノードにログインして
「cryosparcw connect --worker &color(orangered){worker}; --master &color(magenta){master}; --port 39000 --ssdpath /scr/cs」
を実行します

#code(nonumber){{
[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]$
}}
これで&color(orangered){worker};として「s.sybyl.local」が登録されました.


「e.sybyl.local」も同じように登録します

値を更新する場合は「--update」を加えます。例えば「Fast Local Storage」の場所を変更したら
#code(nonumber){{
mkdir /scratch/cryosparc_$USER
./bin/cryosparcw connect --worker e.sybyl.local --master cryosparc.sybyl.local --port 39000 --ssdpath /scratch/cryosparc_$USER --update
}}
とします.

***&color(orangered){worker};の確認と削除 [#g4b6cbf1]

現状と登録されている計算機は&color(magenta){master};ノードにて
#code(nonumber){{
[cryosparc@cryosparc ~]$ cryosparcm cli "get_scheduler_targets()"

(v5)
[cryosparc@cryosparc ~]$ cryosparcm cli "api.resources.find_lanes()"
[cryosparc@cryosparc ~]$ cryosparcm cli "api.resources.find_nodes()"
}}
で得られるが、JSONコードです. 

削除方法は、
#code(nonumber){{
[cryosparc@cryosparc ~]$ cryosparcm cli "remove_scheduler_target_node('s.sybyl.local')"
(v5)
[cryosparc@cryosparc ~]$ cryosparcm cli "api.resources.remove_node('s.sybyl.local')"
}}
とします
参照先 [[https://guide.cryosparc.com/setup-configuration-and-management/management-and-monitoring/cli>+https://guide.cryosparc.com/setup-configuration-and-management/management-and-monitoring/cli]]


***アカウント作成 [#la70ddea]

cryoSPARCサービスはwebシステムでログインを要求します.
そのためのアカウントを作成します.
アカウントは「メールアドレス」の形態で作ります. 

&color(magenta){master};ノードにて
#code(nonumber){{
[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サービスでの管理者権限を有します. それ以外は通常ユーザ権限です.
管理者権限なら通常ユーザが作ったプロジェクトを閲覧可能です。通常ユーザは他の通常ユーザのプロジェクトは見れません. 


***ACL [#ad765d30]
ここではcryoSPARCサービスを動かすのにlinuxアカウントの「cryosparc」が担当してます.

そのため「cryosparc」がアクセス可能な場所でないとimportできないし、計算した結果も書き込めません.
cryoSPARCサービスを一人で運用するならユーザ「cryosparc」を自分のアカウントとして使えばいいですが、
複数のlinuxアカウントがある場合、自分のデータを「cryosparc」に読み込ませて、書き込ませることが必要.

っで使うのがアクセスコントロールを行うACL.
cryoSPARCサービスにアクセスさせるフォルダを「/home/saber/cryo」として、このフォルダにアクセスできるようにACLを設定します
#code(nonumber){{
[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」にして同じグループに所属するユーザもフォルダに入れて、書き込み、削除が可能にします. &size(10){「/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」ってのもありますが、、、

***メモ [#qd44ad9d]
複数台の計算機を登録する際、「Instance Information」ではGPUの存在が確認できるのに、いざjobを投入する際そのGPUがないと判断される時がある。
この場合は「--update」で再度認識させると上手くいくみたい
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS