ジョブスケジュールの対象に GPUs も加えることが可能だが、torqueパッケージをrebuildする必要がある
rpmbuildを使います。
なので、SPRMを取得して、展開、SPECファイルを調整して、rebuildな筋書き
[root@pbs ~]# yum install yum-utils
[root@pbs ~]# yumdownloader --enablerepo=epel --source torque
[root@pbs ~]# rpm -Uvh torque-4.2.10-10.el7.src.rpm
[root@pbs ~]# vi rpmbuild/SPECS/torque.spectorque.specの変更箇所は下記になる
|
*「--with-nvml-includ」「--with-nvml-lib」を付けるとGPUが認識されない....
rpmbuildに足りないパッケージをインストールして、rpmbuildします
そうして、rpmbuild を実行する
[root@pbs ~]# yum install desktop-file-utils pam-devel xauth readline-devel gperf openssl-devel hwloc-devel libxml2-devel \
munge-devel tcl-devel tk-devel graphviz "tex(latex)" tex-xtab tex-sectsty tex-tocloft tex-multirow
[root@pbs ~]# rpmbuild -bb rpmbuild/SPECS/torque.spec再構築が完了すると rpmbuild/RPMS/x86_64/ に rpm ファイルが置かれる
[root@pbs ~]# ls rpmbuild/RPMS/x86_64/
torque-4.2.10-10.el7.x86_64.rpm torque-gui-4.2.10-10.el7.x86_64.rpm
torque-client-4.2.10-10.el7.x86_64.rpm torque-libs-4.2.10-10.el7.x86_64.rpm
torque-debuginfo-4.2.10-10.el7.x86_64.rpm torque-mom-4.2.10-10.el7.x86_64.rpm
torque-devel-4.2.10-10.el7.x86_64.rpm torque-pam-4.2.10-10.el7.x86_64.rpm
torque-drmaa-4.2.10-10.el7.x86_64.rpm torque-scheduler-4.2.10-10.el7.x86_64.rpm
torque-drmaa-devel-4.2.10-10.el7.x86_64.rpm torque-server-4.2.10-10.el7.x86_64.rpm
[root@pbs ~]#この作ったパッケージで入れ替えてみる
*恐らく計算ノードのみ切り替えればいいのかなと思うのだが、全て切り替えました
特段することはなく、作ったtorque-momをインストールするだけ。
[root@pbs ~]# yum remove "torque*" -y
[root@pbs ~]# cd rpmbuild/RPMS/x86_64/
[root@pbs x86_64]# yum localinstall ./torque-server-4.2.10-10.el7.x86_64.rpm \
./torque-scheduler-4.2.10-10.el7.x86_64.rpm \
./torque-libs-4.2.10-10.el7.x86_64.rpm \
./torque-client-4.2.10-10.el7.x86_64.rpm \
./torque-4.2.10-10.el7.x86_64.rpm
[root@pbs x86_64]#とインストールを行う。
そして設定します
[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) <-- Ctrl-Cで停止
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1
[root@pbs ~]# create-munge-keyそしてデーモンを起動させます
[root@pbs ~]# systemctl start trqauthd.service pbs_server.service munge.service
[root@pbs ~]# systemctl enable trqauthd.service pbs_server.service munge.serviceGPUs対応のパッケージを計算ノードに組み込みます
GPUノードにはGPUが2枚搭載されています
[root@s ~]# nvidia-smi -L
GPU 0: GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
GPU 1: GeForce GT 710 (UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57)
[root@s ~]#まずはパッケージを転送します
[root@pbs ~]# cd rpmbuild/RPMS/x86_64/
[root@pbs x86_64]#
[root@pbs x86_64]# scp torque-4.2.10-10.el7.x86_64.rpm torque-libs-4.2.10-10.el7.x86_64.rpm torque-mom-4.2.10-10.el7.x86_64.rpm root@s:そしてインストール
[root@s ~]# yum localinstall ./torque-4.2.10-10.el7.x86_64.rpm ./torque-libs-4.2.10-10.el7.x86_64.rpm torque-mom-4.2.10-10.el7.x86_64.rpm
[root@s ~]# vi /var/lib/torque/mom_priv/config
$pbsserver pbs
[root@s ~]#[root@s ~]# systemctl enable pbs_mom.service
[root@s ~]# systemctl start pbs_mom.service[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1
s np=4 num_node_boards=1 numa_board_str=4 gpus=2
[root@pbs ~]# systemctl restart pbs_serverpbsnodeを実行すると下記になります。
[root@pbs ~]# pbsnodes
n1-0
state = free
np = 1
ntype = cluster
status = rectime=1608107709,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=1880672kb(略
mom_service_port = 15002
mom_manager_port = 15003
s-0
state = free
np = 4
ntype = cluster
status = rectime=1608107721,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=32886236kb(略
mom_service_port = 15002
mom_manager_port = 15003
gpus = 2
gpu_status = gpu[1]=gpu_id=00000000:06:00.0;gpu_product_name=GeForce GT 710;(略)gpu[0]=gpu_id=00000000:01:00.0;gpu_product_name=GeForce GT 710;(略
[root@pbs ~]#と稼働を確認できる
次にNUMAを利用してGPUノードを仮想的に2つに分けて片方はGPU数0、もう片方はGPU数2としてみる
まず管理ノード側で
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1
s np=4 num_node_boards=2 numa_board_str=1,3 gpus=2 numa_gpu_node_str=0,2
[root@pbs ~]# systemctl restart pbs_serverGPUノード側で
[root@s ~]# vi /var/lib/torque/mom_priv/mom.layout
nodes=0
nodes=1
[root@s ~]# systemctl restart pbs_momとして「pbsnode」で確認を取ると
[root@pbs ~]# pbsnodes
n1-0
state = free
np = 1
ntype = cluster
status = rectime=1608145809,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=1880672kb,(略
mom_service_port = 15002
mom_manager_port = 15003
s-0
state = free
np = 1
ntype = cluster
status = rectime=1608145819,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=32886236kb,(略
mom_service_port = 15002
mom_manager_port = 15003
gpus = 2
gpu_status = gpu[1]=gpu_id=00000000:06:00.0;gpu_product_name=GeForce GT 710;(略),gpu[0]=gpu_id=00000000:01:00.0;gpu_product_name=GeForce GT 710;(略
s-1
state = free
np = 3
ntype = cluster
status = rectime=1608145819,varattr=,jobs=,state=free,netload=? 15205,gres=,loadave=0.00,ncpus=0,physmem=? 15205, (略
mom_service_port = 15002
mom_manager_port = 15003
gpus = 2
gpu_status = gpu[1]=gpu_id=00000000:06:00.0;gpu_product_name=GeForce GT 710;(略),gpu[0]=gpu_id=00000000:01:00.0;gpu_product_name=GeForce GT 710;(略
[root@pbs ~]#と双方にGPUが2つ割り当てられてしまった
NUMAでは無理っぽいのかも...
--- rpmbuild/SPECS/torque.spec.orig 2016-04-09 22:31:54.000000000 +0900
+++ rpmbuild/SPECS/torque.spec 2020-12-17 04:34:06.454913271 +0900
@@ -381,7 +381,7 @@
--with-sendmail=%{_sbindir}/sendmail --disable-static \
--with-tcp-retry-limit=2 --without-debug \
--enable-drmaa --enable-munge-auth --with-munge \
- --enable-cpuset --enable-numa-support \
+ --enable-cpuset --enable-nvidia-gpus \
%{server_nameflags} %{guiflags} %{tclflags} %{rcpflags}
make %{?_smp_mflags}こうしてrpmbuildして、管理ノードと計算ノードにrpmを配布+インストールを行う。
設定はほぼ同じで、違いはnodesファイル
[root@pbs ~]# cat /var/lib/torque/server_priv/nodes
n1 np=1
s np=4 gpus=2
[root@pbs ~]#これで利用者設定とqueueを作成、「qmgr -c "set server scheduling = True"」を実行して
インターラクティブモードで接続すると
[illya@pbs ~]$ qsub -l nodes=1:ppn=4:gpus=2 -I
qsub: waiting for job 7.pbs to start
qsub: job 7.pbs ready
[illya@s ~]$ ls -l /var/lib/torque/aux/
total 8
-rw-r--r-- 1 root root 8 Dec 17 04:47 7.pbs
-rw-r--r-- 1 root root 14 Dec 17 04:47 7.pbsgpu
[illya@s ~]$ cat /var/lib/torque/aux/7.pbs <-- 利用可能なcoreが計算ノードsで4つ
s
s
s
s
[illya@s ~]$ cat /var/lib/torque/aux/7.pbsgpu <-- 利用可能なGPUが、計算ノードsで2つ。
s-gpu1
s-gpu0
[illya@s ~]$ここで一旦インターラクティブモードを終えて、次に2つのターミナルで「nodes=1:ppn=4:gpus=1」でリソースを占有してみる
[illya@pbs ~]$ qsub -l nodes=1:ppn=1:gpus=1 -I
qsub: waiting for job 13.pbs to start
qsub: job 13.pbs ready
[illya@s ~]$ cat /var/lib/torque/aux/13.pbsgpu
s-gpu0
[illya@s ~]$もう片方は
[illya@pbs ~]$ qsub -l nodes=1:ppn=1:gpus=1 -I
qsub: waiting for job 14.pbs to start
qsub: job 14.pbs ready
[illya@s ~]$ cat /var/lib/torque/aux/14.pbsgpu
s-gpu1
[illya@s ~]$と「s-gpu0」「s-gpu1」とGPUID毎に割り当てられる.
っが、残念なことにインターラクティブモードなのだが「nvidia-smi」と実行すると2つのデバイスが見えて
使えてしまいます。
[illya@s ~]$ nvidia-smi -L
GPU 0: GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
GPU 1: GeForce GT 710 (UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57)
[illya@s ~]$TorqueでGPUリソースの管理はできるのだが、制御として1枚しか使わせないとかは出来ないみたい.
またGPUIDのどれが割り当てられたかは確認できるので、アプリを調整すれば同一計算機内で同じGPUIDを被らないで使うことは可能っぽい.
っが、アプリの調整は大変そう..