TORQUE/180401 をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[TORQUE]]
本家様 [[http://www.adaptivecomputing.com/products/open-s...
ジョブコントローラ。SGEと役目は同じなのだが、正直SGEは愚...
slurmと共にTORQUEも検討した次第。slurmよりもネットに転が...
こちらTORQUEを使ってみる。
キュー作成[[TORQUE/queue]]
[[TORQUE/Preemption]]
[[TORQUE/BLCR]]
[[TORQUE/memo]]
[[TORQUE/job script]]
[[TORQUE/macOS]] [[TORQUE/windows10]]
&size(10){以前掲載した[[torque-2.5.x>TORQUE151107]]は、EO...
&color(red){*}; &size(10){6.1.xより昔のバージョンは全てEO...
&size(10){GPUs対応 [[TORQUE/GPUs]]};
マニュアル[[http://docs.adaptivecomputing.com/torque/4-2-...
その他のジョブコントローラ [[https://en.wikipedia.org/wik...
***全体像 [#c173a3d2]
同一のネットワーク上に管理ノード、計算ノード、ジョブ発行...
そして、アカウント管理にはsamba ADを採用して、ユーザのホ...
&size(10){各ノードのsamba ADへの参加は、[[samba/Linux参加...
&ref(2015y11m07d_110530467.png,nolink,noborder);
管理ノードから計算ノードへのジョブ投入にはsshか、rshを利...
sshなら[[SSHホストベース認証>ssh/ホストベース認証]]か、au...
rshを利用するなら &color(orangered){/etc/hosts.equiv}; の...
IPとか役目は下記参照
|BGCOLOR(yellow):役目|BGCOLOR(yellow):ホスト名|BGCOLOR(ye...
|管理ノード|pbs.sybyl.local|192.168.0.57|1||
|計算ノード|n1.sybyl.local|192.168.0.52|1|pbs_momが稼働&b...
|~|n2.sybyl.local|192.168.0.53|2|~|
|~|n3.sybyl.local|192.168.0.54|3|~|
|ジョブ発行ノード|client.sybyl.local|192.168.0.20|1|qsub,...
&color(red){*};&size(10){各マシンは最小構成で構築されて、...
このようにフラットなネットワーク上に各ノードを繋げる方法...
計算ノードを別のネットワーク下に置く方法もある。
&ref(2016y03m05d_231440168.png,nolink,noborder);
計算ノードだけのネットワークになるので、より効率的なのか...
***TORQUEパッケージの再構築 [#s15b7bfa]
gpuマシンがあるのでこれを有効にしてみた。
&color(red){*};&size(10){gpu対応のためにライブラリインス...
&color(red){*};&size(10){c.sybyl.localにはnvidiaカードは...
&color(red){*};&size(10){既定であるmungeとcpusetはそのま...
#code(nonumber){{
[root@c ~]# yum install yum-utils
[root@c ~]# yumdownloader --enablerepo=epel --source torque
}}
にてtorqueのSPRMパッケージ torque-4.2.10-10.el7.src.rpm ...
#code(nonumber){{
[root@c ~]# rpm -Uvh torque-4.2.10-10.el7.src.rpm
[root@c ~]# vi rpmbuild/SPECS/torque.spec
}}
torque.specファイルの修正箇所[[TORQUE/torque.spec]]
その後、パッケージを作ります
#code(nonumber){{
[root@c ~]# rpmbuild -bb rpmbuild/SPECS/torque.spec
}}
完成したrpmパッケージは下記となる。これらのファイルを必要...
#code(nonumber){{
[root@c ~]#
[root@c ~]# ls rpmbuild/RPMS/x86_64/
torque-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-client-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-debuginfo-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-devel-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-drmaa-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-drmaa-devel-4.2.10-10.el7.centos.x86_64.rpm torqu...
[root@c ~]#
}}
各rpmパッケージに何が入っているかは rpm -qpl とかで見れます
#code(nonumber){{
[root@c ~]# rpm -qpl ./rpmbuild/RPMS/x86_64/torque-4.2.10...
/etc/torque/pbs_environment
/etc/torque/server_name
/usr/lib/systemd/system/trqauthd.service
/usr/sbin/trqauthd
:
[root@c ~]#
}}
***管理ノードの構築 [#j55196bb]
&color(red){*};使用する torqueパッケージ(&size(10){これら...
#code(nonumber){{
torque-4.2.10-10.el7.centos.x86_64.rpm
torque-libs-4.2.10-10.el7.centos.x86_64.rpm
torque-client-4.2.10-10.el7.centos.x86_64.rpm
torque-server-4.2.10-10.el7.centos.x86_64.rpm
}}
この作ったrpmファイルをインストールします。
#code(nonumber){{
[root@pbs ~]# yum -y localinstall \
torque-4.2.10-10.el7.centos.x86_64.rpm \
torque-libs-4.2.10-10.el7.centos.x86_64.rpm \
torque-client-4.2.10-10.el7.centos.x86_64.rpm \
torque-server-4.2.10-10.el7.centos.x86_64.rpm
}}
次に、管理ノードのサイトをserver_nameに定義して、pbs_serv...
#code(nonumber){{
[root@pbs ~]# hostname > /var/lib/torque/server_name
[root@pbs ~]# pbs_server -d /var/lib/torque -t create -f -D
pbs_server is up (version - 4.2.10, port - 15001)
}}
これでデータベースファイルは作成されますが、pbs_serverデ...
なのでここで &color(red){Ctrl-C}; によりpbs_serverデーモ...
&color(red){*};&size(10){「pbs_server -t create」でデータ...
計算ノードのリストを用意します。npはノードあたりのcpuコア...
#code(nonumber){{
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1.sybyl.local np=1
n2.sybyl.local np=2
n3.sybyl.local np=3
[root@pbs ~]#
}}
NUMAをサポートするなら、NUMAの数を定義に加える
#code(nonumber){{
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1.sybyl.local np=1 num_node_boards=1
n2.sybyl.local np=2 num_node_boards=1
n3.sybyl.local np=3 num_node_boards=1
[root@pbs ~]#
}}
&color(red){*};&size(10){計算ノードはFQDNにしないとエラー...
&color(red){*};&size(10){「&color(red){num_node_boards};...
&color(red){*};&size(10){このNUMAを取り扱いたくないなら、...
mungeのキーを作成します
#code(nonumber){{
[root@pbs ~]# /usr/sbin/create-munge-key
Generating a pseudo-random key using /dev/urandom complet...
[root@pbs ~]#
}}
キーファイルは「/etc/munge/munge.key」に置かれます。
その後にtrqauthd、pbs_server、mungeを起動させます。
#code(nonumber){{
[root@pbs ~]# systemctl start trqauthd.service pbs_server...
[root@pbs ~]# systemctl enable trqauthd.service pbs_serve...
}}
これでスケジューラを除いて管理ノードの基本はできた。
試しに現在の状況を確認すると
#code(nonumber){{
[root@pbs torque]# qmgr -c "p s"
#
# Set server attributes.
#
set server acl_hosts = pbs.sybyl.local
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 300
set server job_stat_rate = 45
set server poll_jobs = True
set server mom_job_sync = True
set server next_job_number = 0
set server moab_array_compatible = True
set server nppcu = 1
[root@pbs torque]#
}}
となる。管理ノードから直接ジョブ発行はできるのだが、あと...
そのサイトを登録する
#code(nonumber){{
[root@pbs ~]# qmgr -c 'set server submit_hosts = client'
}}
***管理ノードの構築その2、ジョブスケジューラ [#s0512ad7]
ジョブを割り振るスケジューラは、TORQUEで提供されている to...
なので、[[http://www.adaptivecomputing.com/products/open-...
開発環境とTorque-develをインストールして、このmauiをコン...
#code(nonumber){{
[root@pbs ~]# yum -y groupinstall "Development Tools"
[root@pbs ~]# yum -y localinstall ./torque-devel-4.2.10-9...
[root@pbs ~]# gzip -cd maui-3.3.1.tar.gz | tar xf - && cd...
[root@pbs maui-3.3.1]# ./configure --with-pbs=/usr
[root@pbs maui-3.3.1]# make && make install
[root@pbs maui-3.3.1]# cp etc/maui.d /etc/init.d
[root@pbs maui-3.3.1]# vi /etc/init.d/maui.d
- MAUI_PREFIX=/opt/maui
+ MAUI_PREFIX=/usr/local/maui
[root@pbs maui-3.3.1]#
}}
起動スクリプトは init.d しか提供されてなく、CentOS7の sys...
っで、作ってみた
#code(nonumber){{
[root@pbs ~]# vi /etc/systemd/system/maui.service
[Unit]
Description=maui job scheduler
After=syslog.target network.target
[Service]
Type=oneshot
ExecStart=/etc/init.d/maui.d start
ExecStop=/etc/init.d/maui.d start
ExecReload=/etc/init.d/maui.d restart
RemainAfterExit=yes
LimitNOFILE=32768
[Install]
WantedBy=multi-user.target
[root@pbs ~]#
[root@pbs ~]# systemctl --system daemon-reload
[root@pbs ~]# systemctl enable maui.service
[root@pbs ~]# systemctl start maui.service
}}
&color(red){*};&size(10){journalctlコマンドで起動を確認す...
&color(white,blue){留意};
mauiスケジューラは「gpu」に対応してません。なのでTorqueで...
&size(10){たとえTorqueそのものをGPU対応で作ったとしても};
「#PBS -l nodes=1:ppn=1:gpus=1」とかの「gpus=1」があると...
mauiスケジューラの変わりにtorque-schedulerの「pbs_sched」...
[[TORQUE/scheduler]]
***計算ノード [#be26641c]
&color(red){*};使用する torqueパッケージ(&size(10){計算ノ...
#code(nonumber){{
torque-4.2.10-10.el7.centos.x86_64.rpm
torque-libs-4.2.10-10.el7.centos.x86_64.rpm
torque-mom-4.2.10-10.el7.centos.x86_64.rpm
}}
そしてインストール
#code(nonumber){{
[root@n1 ~]# yum -y localinstall ./torque-4.2.10-10.el7.c...
torque-libs-4.2.10-10.el7.centos.x86_64.rpm torque...
}}
&color(red){*};&size(10){同時にhwloc-lib、libtool-ltdl、m...
次に、設定ファイル /var/lib/torque/mom_priv/config を修正...
#code(nonumber){{
[root@n1 ~]# vi /var/lib/torque/mom_priv/config
$pbsserver pbs
$usecp *:/home /home
$log_file_suffix %h
$log_keep_days 10
[root@n1 ~]#
}}
&color(red){*};&size(10){「$log_file_suffix」が効かない。...
起動させる
#code(nonumber){{
[root@n1 ~]# systemctl enable pbs_mom.service
[root@n1 ~]# systemctl start pbs_mom.service
}}
管理ノードで確認をとる。
#code(nonumber){{
[root@pbs ~]# pbsnodes -l all
n1.sybyl.local free
n2.sybyl.local down
n3.sybyl.local down
[root@pbs ~]#
}}
とn1が認識された。これを計算ノードの数だけ行う
&color(red){*};NUMAを有効にしていると下記のようになる
#code(nonumber){{
[root@pbs ~]# pbsnodes -l all
n1.sybyl.local-0 free
n2.sybyl.local down
n3.sybyl.local down
[root@pbs ~]#
}}
***ジョブ発行ノード [#h6416803]
&color(red){*};使用する torqueパッケージ(&size(10){ジョブ...
#code(nonumber){{
torque-4.2.10-10.el7.centos.x86_64.rpm
torque-libs-4.2.10-10.el7.centos.x86_64.rpm
torque-client-4.2.10-10.el7.centos.x86_64.rpm
}}
そしてインストール。
#code(nonumber){{
[root@client ~]# yum -y localinstall ./torque-4.2.10-10.e...
torque-libs-4.2.10-10.el7.centos.x86_64.rpm torque...
}}
またmungeを使っているので管理ノードのmungeキーを貰い受け...
#code(nonumber){{
[root@pbs ~]# scp /etc/munge/munge.key root@client:/etc/m...
[root@client ~]# chown munge:munge /etc/munge/munge.key
}}
ジョブ発行ノードのサイトを定義して、trqauthd.serviceとmun...
#code(nonumber){{
[root@client ~]# echo pbs > /var/lib/torque/server_name
[root@client ~]# systemctl enable trqauthd.service munge....
[root@client ~]# systemctl start trqauthd.service munge....
}}
qmgr コマンドを使って通信テストを行います。
#code(nonumber){{
[root@client ~]# qmgr -c "p s"
#
# Set server attributes.
#
set server acl_hosts = pbs.sybyl.local
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 300
set server job_stat_rate = 45
set server poll_jobs = True
set server mom_job_sync = True
set server next_job_number = 0
set server moab_array_compatible = True
set server nppcu = 1
[root@client ~]#
}}
これでジョブ発行ノードの構築は完了
***キュー作成 [#ocf3deaf]
次の段階に進む前に、キューを作成します。
参照[[TORQUE/queue]]
***ジョブ発行 [#f4918b4b]
単純なスクリプトで確認してみる
#code(nonumber){{
[illya@client ~]$ echo "sleep 30" | qsub
3.pbs.sybyl.local
[illya@client ~]$ qstat -n
pbs.sybyl.local:
...
Job ID Username Queue Jobname ...
----------------------- ----------- -------- ------------...
3.pbs.sybyl.local illya batch STDIN ...
n3
[illya@client ~]$
}}
#code(nonumber){{
[illya@client ~]$ cat a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=1:ppn=1
cd $PBS_O_WORKDIR
#--------------------------#
# write your job
sleep 30
echo `hostname`
[illya@client ~]$ qsub a.sh
4.pbs.sybyl.local
[illya@client ~]$ qstat -n
pbs.sybyl.local:
...
Job ID Username Queue Jobname ...
----------------------- ----------- -------- ------------...
4.pbs.sybyl.local illya bio a.sh ...
n1
[illya@client ~]$
[illya@client ~]$ cat a.sh.o4
n1.sybyl.local
[illya@client ~]$
}}
qsubは指定されたリソースの予約確保を行い、その確保された...
nodes、ppnで指定された数だけジョブを投げるのではない。&co...
だが、その後、投げられたジョブが起点となって確保したリソ...
mpirunであれば、最初にqsubから投げられたジョブがマスター...
***計算ホストのcore数と nodes ファイルの記載 [#da9e5fcb]
server_priv/nodes に記載した「np」の値はそのマシンのコア...
例として、n3.sybyl.localは、1cpu/1coreで動いているが、
#code(nonumber){{
[root@n3 ~]# LANG=C lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 yes
[root@n3 ~]#
}}
server_priv/nodesで「np=3」としていると
#code(nonumber){{
[root@pbs ~]# pbsnodes n3.sybyl.local
n3.sybyl.local
state = free
np = 3
(略
[root@pbs ~]#
}}
と認識される
これはconfigureの際、「cpuset」を有効にすれば回避され、ハ...
&size(10){関連擁護としては cgroup とか hwloc かな};
ここではわざと「cpuset」を無効にしてます。
***ジョブスクリプトで使用可能なTORQUE由来の環境変数 [#s42...
下記のスクリプトを流して環境変数を得た見た
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=3:ppn=2
#PBS -j oe
env
[illya@pbs ~]$ qsub a.sh
}}
「env」コマンドで得られた結果から先頭文字PBSの値を書きに...
|BGCOLOR(YELLOW):変数名|BGCOLOR(YELLOW):値|BGCOLOR(YELLOW...
|PBS_VERSION|TORQUE-4.2.10||
|PBS_JOBNAME|a.sh|実行したスクリプトファイル名|
|PBS_ENVIRONMENT|PBS_BATCH||
|PBS_O_WORKDIR|/home/illya|スクリプトを実行した場所|
|PBS_TASKNUM|1||
|PBS_O_HOME|/home/illya|実行者のホームディレクトリ|
|PBS_WALLTIME|864000||
|PBS_MOMPORT|15003||
|PBS_GPUFILE|/var/lib/torque/aux//8.pbs.sybyl.localgpu||
|PBS_O_QUEUE|bio|使用したキューの名称|
|PBS_O_LOGNAME|illya|実行者(ログイン名)|
|PBS_O_LANG|en_US.UTF-8||
|PBS_JOBCOOKIE|B3825133EF21DE765747CC0B926951E0||
|PBS_NODENUM|0||
|PBS_NUM_NODES|3|nodesの値|
|PBS_O_SHELL|/bin/bash|使用したシェル|
|PBS_JOBID|8.pbs.sybyl.local||
|PBS_O_HOST|pbs.sybyl.local|ジョブを発行したホスト|
|PBS_VNODENUM|0||
|PBS_QUEUE|bio|使用したキューの名称(PBS_O_QUEUEと同じ?)|
|PBS_O_MAIL|/var/spool/mail/illya||
|PBS_MICFILE|/var/lib/torque/aux//8.pbs.sybyl.localmic||
|PBS_NP|6|確保したCPUリソース|
|PBS_O_SERVER|pbs.sybyl.local||
|PBS_NUM_PPN|2|ppnの値|
|PBS_NODEFILE|/var/lib/torque/aux//8.pbs.sybyl.local||
|PBS_O_PATH|(PATH)||
***ジョブスクリプトでの環境変数を組み込んで、それがmpirun...
簡単なスクリプトで検証する
まずジョブスクリプト
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=2:ppn=1
#PBS -j oe
#
cd $PBS_O_WORKDIR
#
export PATH=/Appl/Linux/NAMD_2.11_Linux-x86_64-multicore:...
#
mpirun -np 2 /home/illya/b.sh
[illya@pbs ~]$
}}
mpirunで実行される b.sh は
#code(nonumber){{
[illya@pbs ~]$ vi b.sh
#!/bin/bash
echo $PATH
[illya@pbs ~]$
}}
と単純にPATH環境変数のみを返す。
そして、これを実際にqsub経由で流してみる
#code(nonumber){{
[illya@pbs ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/i...
[illya@pbs ~]$ qsub a.sh
}}
すぐさま完了して、そのログを見てみると
#code(nonumber){{
[illya@pbs ~]$ cat a.sh.o9
/Appl/Linux/NAMD_2.11_Linux-x86_64-multicore:/usr/local/b...
/Appl/Linux/NAMD_2.11_Linux-x86_64-multicore:/usr/local/b...
[illya@pbs ~]$
}}
と指定したPATHが含まれて各計算ノードに渡っていた
***特定のノードで計算したい [#b781d9a3]
利用可能なリソースから空いている計算機にジョブを投げるの...
nodesを使用するノードの数ではなく、ホスト名を入れれば計算...
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=n1.sybyl.local:ppn=1
#PBS -j oe
#
(略
[illya@pbs ~]$
}}
複数指定をするなら
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q chem
#PBS -l nodes=n2.sybyl.local:ppn=2+n3.sybyl.local:ppn=2
#PBS -j oe
#
(略
[illya@pbs ~]$
}}
として「+」で繋げる
終了行:
[[TORQUE]]
本家様 [[http://www.adaptivecomputing.com/products/open-s...
ジョブコントローラ。SGEと役目は同じなのだが、正直SGEは愚...
slurmと共にTORQUEも検討した次第。slurmよりもネットに転が...
こちらTORQUEを使ってみる。
キュー作成[[TORQUE/queue]]
[[TORQUE/Preemption]]
[[TORQUE/BLCR]]
[[TORQUE/memo]]
[[TORQUE/job script]]
[[TORQUE/macOS]] [[TORQUE/windows10]]
&size(10){以前掲載した[[torque-2.5.x>TORQUE151107]]は、EO...
&color(red){*}; &size(10){6.1.xより昔のバージョンは全てEO...
&size(10){GPUs対応 [[TORQUE/GPUs]]};
マニュアル[[http://docs.adaptivecomputing.com/torque/4-2-...
その他のジョブコントローラ [[https://en.wikipedia.org/wik...
***全体像 [#c173a3d2]
同一のネットワーク上に管理ノード、計算ノード、ジョブ発行...
そして、アカウント管理にはsamba ADを採用して、ユーザのホ...
&size(10){各ノードのsamba ADへの参加は、[[samba/Linux参加...
&ref(2015y11m07d_110530467.png,nolink,noborder);
管理ノードから計算ノードへのジョブ投入にはsshか、rshを利...
sshなら[[SSHホストベース認証>ssh/ホストベース認証]]か、au...
rshを利用するなら &color(orangered){/etc/hosts.equiv}; の...
IPとか役目は下記参照
|BGCOLOR(yellow):役目|BGCOLOR(yellow):ホスト名|BGCOLOR(ye...
|管理ノード|pbs.sybyl.local|192.168.0.57|1||
|計算ノード|n1.sybyl.local|192.168.0.52|1|pbs_momが稼働&b...
|~|n2.sybyl.local|192.168.0.53|2|~|
|~|n3.sybyl.local|192.168.0.54|3|~|
|ジョブ発行ノード|client.sybyl.local|192.168.0.20|1|qsub,...
&color(red){*};&size(10){各マシンは最小構成で構築されて、...
このようにフラットなネットワーク上に各ノードを繋げる方法...
計算ノードを別のネットワーク下に置く方法もある。
&ref(2016y03m05d_231440168.png,nolink,noborder);
計算ノードだけのネットワークになるので、より効率的なのか...
***TORQUEパッケージの再構築 [#s15b7bfa]
gpuマシンがあるのでこれを有効にしてみた。
&color(red){*};&size(10){gpu対応のためにライブラリインス...
&color(red){*};&size(10){c.sybyl.localにはnvidiaカードは...
&color(red){*};&size(10){既定であるmungeとcpusetはそのま...
#code(nonumber){{
[root@c ~]# yum install yum-utils
[root@c ~]# yumdownloader --enablerepo=epel --source torque
}}
にてtorqueのSPRMパッケージ torque-4.2.10-10.el7.src.rpm ...
#code(nonumber){{
[root@c ~]# rpm -Uvh torque-4.2.10-10.el7.src.rpm
[root@c ~]# vi rpmbuild/SPECS/torque.spec
}}
torque.specファイルの修正箇所[[TORQUE/torque.spec]]
その後、パッケージを作ります
#code(nonumber){{
[root@c ~]# rpmbuild -bb rpmbuild/SPECS/torque.spec
}}
完成したrpmパッケージは下記となる。これらのファイルを必要...
#code(nonumber){{
[root@c ~]#
[root@c ~]# ls rpmbuild/RPMS/x86_64/
torque-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-client-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-debuginfo-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-devel-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-drmaa-4.2.10-10.el7.centos.x86_64.rpm torqu...
torque-drmaa-devel-4.2.10-10.el7.centos.x86_64.rpm torqu...
[root@c ~]#
}}
各rpmパッケージに何が入っているかは rpm -qpl とかで見れます
#code(nonumber){{
[root@c ~]# rpm -qpl ./rpmbuild/RPMS/x86_64/torque-4.2.10...
/etc/torque/pbs_environment
/etc/torque/server_name
/usr/lib/systemd/system/trqauthd.service
/usr/sbin/trqauthd
:
[root@c ~]#
}}
***管理ノードの構築 [#j55196bb]
&color(red){*};使用する torqueパッケージ(&size(10){これら...
#code(nonumber){{
torque-4.2.10-10.el7.centos.x86_64.rpm
torque-libs-4.2.10-10.el7.centos.x86_64.rpm
torque-client-4.2.10-10.el7.centos.x86_64.rpm
torque-server-4.2.10-10.el7.centos.x86_64.rpm
}}
この作ったrpmファイルをインストールします。
#code(nonumber){{
[root@pbs ~]# yum -y localinstall \
torque-4.2.10-10.el7.centos.x86_64.rpm \
torque-libs-4.2.10-10.el7.centos.x86_64.rpm \
torque-client-4.2.10-10.el7.centos.x86_64.rpm \
torque-server-4.2.10-10.el7.centos.x86_64.rpm
}}
次に、管理ノードのサイトをserver_nameに定義して、pbs_serv...
#code(nonumber){{
[root@pbs ~]# hostname > /var/lib/torque/server_name
[root@pbs ~]# pbs_server -d /var/lib/torque -t create -f -D
pbs_server is up (version - 4.2.10, port - 15001)
}}
これでデータベースファイルは作成されますが、pbs_serverデ...
なのでここで &color(red){Ctrl-C}; によりpbs_serverデーモ...
&color(red){*};&size(10){「pbs_server -t create」でデータ...
計算ノードのリストを用意します。npはノードあたりのcpuコア...
#code(nonumber){{
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1.sybyl.local np=1
n2.sybyl.local np=2
n3.sybyl.local np=3
[root@pbs ~]#
}}
NUMAをサポートするなら、NUMAの数を定義に加える
#code(nonumber){{
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1.sybyl.local np=1 num_node_boards=1
n2.sybyl.local np=2 num_node_boards=1
n3.sybyl.local np=3 num_node_boards=1
[root@pbs ~]#
}}
&color(red){*};&size(10){計算ノードはFQDNにしないとエラー...
&color(red){*};&size(10){「&color(red){num_node_boards};...
&color(red){*};&size(10){このNUMAを取り扱いたくないなら、...
mungeのキーを作成します
#code(nonumber){{
[root@pbs ~]# /usr/sbin/create-munge-key
Generating a pseudo-random key using /dev/urandom complet...
[root@pbs ~]#
}}
キーファイルは「/etc/munge/munge.key」に置かれます。
その後にtrqauthd、pbs_server、mungeを起動させます。
#code(nonumber){{
[root@pbs ~]# systemctl start trqauthd.service pbs_server...
[root@pbs ~]# systemctl enable trqauthd.service pbs_serve...
}}
これでスケジューラを除いて管理ノードの基本はできた。
試しに現在の状況を確認すると
#code(nonumber){{
[root@pbs torque]# qmgr -c "p s"
#
# Set server attributes.
#
set server acl_hosts = pbs.sybyl.local
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 300
set server job_stat_rate = 45
set server poll_jobs = True
set server mom_job_sync = True
set server next_job_number = 0
set server moab_array_compatible = True
set server nppcu = 1
[root@pbs torque]#
}}
となる。管理ノードから直接ジョブ発行はできるのだが、あと...
そのサイトを登録する
#code(nonumber){{
[root@pbs ~]# qmgr -c 'set server submit_hosts = client'
}}
***管理ノードの構築その2、ジョブスケジューラ [#s0512ad7]
ジョブを割り振るスケジューラは、TORQUEで提供されている to...
なので、[[http://www.adaptivecomputing.com/products/open-...
開発環境とTorque-develをインストールして、このmauiをコン...
#code(nonumber){{
[root@pbs ~]# yum -y groupinstall "Development Tools"
[root@pbs ~]# yum -y localinstall ./torque-devel-4.2.10-9...
[root@pbs ~]# gzip -cd maui-3.3.1.tar.gz | tar xf - && cd...
[root@pbs maui-3.3.1]# ./configure --with-pbs=/usr
[root@pbs maui-3.3.1]# make && make install
[root@pbs maui-3.3.1]# cp etc/maui.d /etc/init.d
[root@pbs maui-3.3.1]# vi /etc/init.d/maui.d
- MAUI_PREFIX=/opt/maui
+ MAUI_PREFIX=/usr/local/maui
[root@pbs maui-3.3.1]#
}}
起動スクリプトは init.d しか提供されてなく、CentOS7の sys...
っで、作ってみた
#code(nonumber){{
[root@pbs ~]# vi /etc/systemd/system/maui.service
[Unit]
Description=maui job scheduler
After=syslog.target network.target
[Service]
Type=oneshot
ExecStart=/etc/init.d/maui.d start
ExecStop=/etc/init.d/maui.d start
ExecReload=/etc/init.d/maui.d restart
RemainAfterExit=yes
LimitNOFILE=32768
[Install]
WantedBy=multi-user.target
[root@pbs ~]#
[root@pbs ~]# systemctl --system daemon-reload
[root@pbs ~]# systemctl enable maui.service
[root@pbs ~]# systemctl start maui.service
}}
&color(red){*};&size(10){journalctlコマンドで起動を確認す...
&color(white,blue){留意};
mauiスケジューラは「gpu」に対応してません。なのでTorqueで...
&size(10){たとえTorqueそのものをGPU対応で作ったとしても};
「#PBS -l nodes=1:ppn=1:gpus=1」とかの「gpus=1」があると...
mauiスケジューラの変わりにtorque-schedulerの「pbs_sched」...
[[TORQUE/scheduler]]
***計算ノード [#be26641c]
&color(red){*};使用する torqueパッケージ(&size(10){計算ノ...
#code(nonumber){{
torque-4.2.10-10.el7.centos.x86_64.rpm
torque-libs-4.2.10-10.el7.centos.x86_64.rpm
torque-mom-4.2.10-10.el7.centos.x86_64.rpm
}}
そしてインストール
#code(nonumber){{
[root@n1 ~]# yum -y localinstall ./torque-4.2.10-10.el7.c...
torque-libs-4.2.10-10.el7.centos.x86_64.rpm torque...
}}
&color(red){*};&size(10){同時にhwloc-lib、libtool-ltdl、m...
次に、設定ファイル /var/lib/torque/mom_priv/config を修正...
#code(nonumber){{
[root@n1 ~]# vi /var/lib/torque/mom_priv/config
$pbsserver pbs
$usecp *:/home /home
$log_file_suffix %h
$log_keep_days 10
[root@n1 ~]#
}}
&color(red){*};&size(10){「$log_file_suffix」が効かない。...
起動させる
#code(nonumber){{
[root@n1 ~]# systemctl enable pbs_mom.service
[root@n1 ~]# systemctl start pbs_mom.service
}}
管理ノードで確認をとる。
#code(nonumber){{
[root@pbs ~]# pbsnodes -l all
n1.sybyl.local free
n2.sybyl.local down
n3.sybyl.local down
[root@pbs ~]#
}}
とn1が認識された。これを計算ノードの数だけ行う
&color(red){*};NUMAを有効にしていると下記のようになる
#code(nonumber){{
[root@pbs ~]# pbsnodes -l all
n1.sybyl.local-0 free
n2.sybyl.local down
n3.sybyl.local down
[root@pbs ~]#
}}
***ジョブ発行ノード [#h6416803]
&color(red){*};使用する torqueパッケージ(&size(10){ジョブ...
#code(nonumber){{
torque-4.2.10-10.el7.centos.x86_64.rpm
torque-libs-4.2.10-10.el7.centos.x86_64.rpm
torque-client-4.2.10-10.el7.centos.x86_64.rpm
}}
そしてインストール。
#code(nonumber){{
[root@client ~]# yum -y localinstall ./torque-4.2.10-10.e...
torque-libs-4.2.10-10.el7.centos.x86_64.rpm torque...
}}
またmungeを使っているので管理ノードのmungeキーを貰い受け...
#code(nonumber){{
[root@pbs ~]# scp /etc/munge/munge.key root@client:/etc/m...
[root@client ~]# chown munge:munge /etc/munge/munge.key
}}
ジョブ発行ノードのサイトを定義して、trqauthd.serviceとmun...
#code(nonumber){{
[root@client ~]# echo pbs > /var/lib/torque/server_name
[root@client ~]# systemctl enable trqauthd.service munge....
[root@client ~]# systemctl start trqauthd.service munge....
}}
qmgr コマンドを使って通信テストを行います。
#code(nonumber){{
[root@client ~]# qmgr -c "p s"
#
# Set server attributes.
#
set server acl_hosts = pbs.sybyl.local
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 300
set server job_stat_rate = 45
set server poll_jobs = True
set server mom_job_sync = True
set server next_job_number = 0
set server moab_array_compatible = True
set server nppcu = 1
[root@client ~]#
}}
これでジョブ発行ノードの構築は完了
***キュー作成 [#ocf3deaf]
次の段階に進む前に、キューを作成します。
参照[[TORQUE/queue]]
***ジョブ発行 [#f4918b4b]
単純なスクリプトで確認してみる
#code(nonumber){{
[illya@client ~]$ echo "sleep 30" | qsub
3.pbs.sybyl.local
[illya@client ~]$ qstat -n
pbs.sybyl.local:
...
Job ID Username Queue Jobname ...
----------------------- ----------- -------- ------------...
3.pbs.sybyl.local illya batch STDIN ...
n3
[illya@client ~]$
}}
#code(nonumber){{
[illya@client ~]$ cat a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=1:ppn=1
cd $PBS_O_WORKDIR
#--------------------------#
# write your job
sleep 30
echo `hostname`
[illya@client ~]$ qsub a.sh
4.pbs.sybyl.local
[illya@client ~]$ qstat -n
pbs.sybyl.local:
...
Job ID Username Queue Jobname ...
----------------------- ----------- -------- ------------...
4.pbs.sybyl.local illya bio a.sh ...
n1
[illya@client ~]$
[illya@client ~]$ cat a.sh.o4
n1.sybyl.local
[illya@client ~]$
}}
qsubは指定されたリソースの予約確保を行い、その確保された...
nodes、ppnで指定された数だけジョブを投げるのではない。&co...
だが、その後、投げられたジョブが起点となって確保したリソ...
mpirunであれば、最初にqsubから投げられたジョブがマスター...
***計算ホストのcore数と nodes ファイルの記載 [#da9e5fcb]
server_priv/nodes に記載した「np」の値はそのマシンのコア...
例として、n3.sybyl.localは、1cpu/1coreで動いているが、
#code(nonumber){{
[root@n3 ~]# LANG=C lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 yes
[root@n3 ~]#
}}
server_priv/nodesで「np=3」としていると
#code(nonumber){{
[root@pbs ~]# pbsnodes n3.sybyl.local
n3.sybyl.local
state = free
np = 3
(略
[root@pbs ~]#
}}
と認識される
これはconfigureの際、「cpuset」を有効にすれば回避され、ハ...
&size(10){関連擁護としては cgroup とか hwloc かな};
ここではわざと「cpuset」を無効にしてます。
***ジョブスクリプトで使用可能なTORQUE由来の環境変数 [#s42...
下記のスクリプトを流して環境変数を得た見た
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=3:ppn=2
#PBS -j oe
env
[illya@pbs ~]$ qsub a.sh
}}
「env」コマンドで得られた結果から先頭文字PBSの値を書きに...
|BGCOLOR(YELLOW):変数名|BGCOLOR(YELLOW):値|BGCOLOR(YELLOW...
|PBS_VERSION|TORQUE-4.2.10||
|PBS_JOBNAME|a.sh|実行したスクリプトファイル名|
|PBS_ENVIRONMENT|PBS_BATCH||
|PBS_O_WORKDIR|/home/illya|スクリプトを実行した場所|
|PBS_TASKNUM|1||
|PBS_O_HOME|/home/illya|実行者のホームディレクトリ|
|PBS_WALLTIME|864000||
|PBS_MOMPORT|15003||
|PBS_GPUFILE|/var/lib/torque/aux//8.pbs.sybyl.localgpu||
|PBS_O_QUEUE|bio|使用したキューの名称|
|PBS_O_LOGNAME|illya|実行者(ログイン名)|
|PBS_O_LANG|en_US.UTF-8||
|PBS_JOBCOOKIE|B3825133EF21DE765747CC0B926951E0||
|PBS_NODENUM|0||
|PBS_NUM_NODES|3|nodesの値|
|PBS_O_SHELL|/bin/bash|使用したシェル|
|PBS_JOBID|8.pbs.sybyl.local||
|PBS_O_HOST|pbs.sybyl.local|ジョブを発行したホスト|
|PBS_VNODENUM|0||
|PBS_QUEUE|bio|使用したキューの名称(PBS_O_QUEUEと同じ?)|
|PBS_O_MAIL|/var/spool/mail/illya||
|PBS_MICFILE|/var/lib/torque/aux//8.pbs.sybyl.localmic||
|PBS_NP|6|確保したCPUリソース|
|PBS_O_SERVER|pbs.sybyl.local||
|PBS_NUM_PPN|2|ppnの値|
|PBS_NODEFILE|/var/lib/torque/aux//8.pbs.sybyl.local||
|PBS_O_PATH|(PATH)||
***ジョブスクリプトでの環境変数を組み込んで、それがmpirun...
簡単なスクリプトで検証する
まずジョブスクリプト
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=2:ppn=1
#PBS -j oe
#
cd $PBS_O_WORKDIR
#
export PATH=/Appl/Linux/NAMD_2.11_Linux-x86_64-multicore:...
#
mpirun -np 2 /home/illya/b.sh
[illya@pbs ~]$
}}
mpirunで実行される b.sh は
#code(nonumber){{
[illya@pbs ~]$ vi b.sh
#!/bin/bash
echo $PATH
[illya@pbs ~]$
}}
と単純にPATH環境変数のみを返す。
そして、これを実際にqsub経由で流してみる
#code(nonumber){{
[illya@pbs ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/i...
[illya@pbs ~]$ qsub a.sh
}}
すぐさま完了して、そのログを見てみると
#code(nonumber){{
[illya@pbs ~]$ cat a.sh.o9
/Appl/Linux/NAMD_2.11_Linux-x86_64-multicore:/usr/local/b...
/Appl/Linux/NAMD_2.11_Linux-x86_64-multicore:/usr/local/b...
[illya@pbs ~]$
}}
と指定したPATHが含まれて各計算ノードに渡っていた
***特定のノードで計算したい [#b781d9a3]
利用可能なリソースから空いている計算機にジョブを投げるの...
nodesを使用するノードの数ではなく、ホスト名を入れれば計算...
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q bio
#PBS -l nodes=n1.sybyl.local:ppn=1
#PBS -j oe
#
(略
[illya@pbs ~]$
}}
複数指定をするなら
#code(nonumber){{
[illya@pbs ~]$ vi a.sh
#!/bin/sh
#PBS -q chem
#PBS -l nodes=n2.sybyl.local:ppn=2+n3.sybyl.local:ppn=2
#PBS -j oe
#
(略
[illya@pbs ~]$
}}
として「+」で繋げる
ページ名:
1