#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」で再度認識させると上手くいくみたい